gobby-0.6.0/0000775000175000017500000000000014005504730007620 500000000000000gobby-0.6.0/TODO0000664000175000017500000000147414003367605010244 00000000000000Modernization: Move non-window-specific functionality from Window to Application Possibility for regex search and async search Make one gobby process handle multiple windows, then don't make -n spawn another instance but another window Some features that would be nice for a final Gobby 1.0 release. We could perhaps do pre-releases with some of these missing before: - Add base preferences class with Preferences::Option definition to util/, inherit in core/, move ClosableFrame to util/ - Show in tab and userlist when others are typing, using an icon - Typing sounds (libcanberra?) These things need to be implemented in infinote, but again would be nice to have: - Show other user's viewport position in the scrollbar, instead or in addition to cursor position - Show what tab another user currently is in gobby-0.6.0/compile0000755000175000017500000001632713616550647011144 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2018 Free Software Foundation, Inc. # Written by Tom Tromey . # # 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, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gobby-0.6.0/gobby-0.5.desktop.in0000664000175000017500000000050414003367605013147 00000000000000[Desktop Entry] _Name=Gobby _GenericName=Collaborative Editor _X-GNOME-FullName=Gobby Collaborative Editor (0.5) _Comment=Edit text files collaboratively Exec=gobby-0.5 %F Terminal=false Type=Application Icon=gobby-0.5 Categories=TextEditor;Utility;Network; StartupNotify=true MimeType=text/plain;x-scheme-handler/infinote; gobby-0.6.0/AUTHORS0000664000175000017500000000234714003367605010624 00000000000000gobby ===== Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Copyright (c) 2008-2014, Armin Burgmeier Authors: * Armin Burgmeier * Philipp Kern Contributors: * Benjamin Herr * Ben Levitt * Gabríel A. Pétursson Translations: French: * Peer Janssen * Mohammed Adnene Trojette Spanish: * Mario Palomo Swedish: * Daniel Nylander German: * Philipp Kern gobby-0.6.0/missing0000755000175000017500000001533613616550647011164 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2018 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # 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, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gobby-0.6.0/NEWS0000664000175000017500000002106514005502715010244 00000000000000Gobby ===== Version 0.6.0: * Remove support for GTK+ 2.x; at least GTK+ 3.6 is required now. * Enable TCP keepalives, so that inactive connections will drop automatically after a short time. * Gobby is now registered as a handler for infinote:// URLs. * Remember hosts previously connected to and presents them in the list next time Gobby is started until expilictly removed. * Gobby can now show connection parameters, in particular TLS parameters used for the connection. * Gobby's configuration options are stored in GSettings instead of a custam config.xml file. * The option to not set a certificate in the initial welcome dialog is no longer available. * Gobby can now use the default system CAs on Windows. * Small bug fixes and code base modernization. Version 0.5.0: * Allow to run a server within the Gobby process; infinoted is no longer required to connect to other people * Added support for user accounts and different permissions for different accounts * Added limited support for chat nodes in the document tree * Added an option to set the opacity with which user colors are shown behind the text. * Added Fullscreen option and Ctrl++ and Ctrl+- shortcuts to increase/decrease the font size. * Gobby can open infinote://XXX URIs given on the command line to directly open one or more documents at startup. Version 0.4.94: * Show cursors and selections of remote users in the own viewport and scrollbar * Add a "Disconnect from Server" option to the context menu * When double-clicking a user in the user list jump to its current cursor position * Allow gobby to be built against GTK+ 3 * Fixed a bug which prevented "Save All" from working Version 0.4.93: * Added IRC-like chat * Added functionality to export a document to HTML (#245) * Sort browser entries * Allow selecting multiple files when opening files * Allow resetting user colors in a document (Bug #211) * Added a Connect to Server option to the File menu * Undo words instead of individual characters * When starting Gobby twice then send commands to an existing Gobby (if any) unless the -n command line option is given. * Added an option to highlight spaces and tabs Version 0.4.92: * Support running Gobby on Windows 2000. * Added Icons for HCLP and HCLPI icon themes (Bug #413, Patrick Wade). * Make sure terminating newline characters are saved correctly * Added /etc/ssl/certs/ca-certificates.crt as default trust file, if available. * Don't mess up saving documents whose first line is empty. * Write config files in $XDG_CONFIG_HOME instead of $HOME (Bug #437, Cristian Klein). * Display colored pencil icons in a document's tab for each user that made a change since the document has been viewed the last time (Bug #66, Mattis Manzel). Version 0.4.91: * Keep track of a document's modified state between Undo/Redo operations * Scroll to Cursor after Cut or Paste * Added HCLPI icon of the Gobby Logo (Thanks to Thomas Glatt) * Added an Autosave Option in the preferences * Remember previous host names in "Direct Connection" entry * Added an "Open Location" dialog to open arbitrary URIs * Added a tooltip when hovering text, showing the author of that text Version 0.4.90: * Use libinfinity instead of libobby as backend * Allow connection to multiple servers * Redesigned UI to better match normal text editors, and to be more HIG-compliant * Added Undo support (via libinfinity) * Require GtkSourceView 2.x * Some features of the previous versions, especially self-hosting, are not implemented in 0.4.90. This will be added in a later version. Version 0.4.6: * Require gtksourceview 1.8 to enable indent-on-tab * Require obby 0.4.5 to support IPv6 autodiscovery * Several utility windows close on escape * Compilation fixes for gtksourceview 2.0 * New (partial) translations: - Brazilian Portuguese - Polish - Korean Version 0.4.5: * Important bugfixes: - fixed the save routine for files not encoded in UTF-8 - allow Gobby to run inside paths containing non-ASCII characters Version 0.4.4: * Fixed two crashes: one on Windows Vista related to the chat widget, and one triggered on rejoins with multiple documents opened in the editor * GtkSourceView's C API is called directly * The document list is now sorted alphabetically * New translations: - Italian - Russian Version 0.4.3: * Find and Goto dialogs are now focused when invoked * Zeroconf failures are now only printed on the console, no dialog is invoked * Preference option added to subscribe automatically to all documents in a session * Doubleclicks on documents in the user list now opens them if they are not already opened * Window highlights itself only if the chat widget is open * Toolbar style "text besides icon" is now supported * Tab bar is only shown if more than one document is opened Version 0.4.2: * Gobby now opens absolute file names passed via command line * View is now kept when remote operations affect the current position, through appropriate scrolling * Documents could be subscribed by double-clicking on them in the list * Local files are not flagged as modified anymore * Urgency hint is now configurable * Windows compilation fixes Version 0.4.1: * Release with no further important changes. Version 0.4.0: * Session encryption through GNUTLS * Reduced CPU usage and memory footprint through the removal of one supplemental document copy * Usability enhancements: - New button to close the chat window - Font types and sizes could now be set for the text editor from within Gobby - Documents could now be switched using Ctrl-Alt-Page-Down and Ctrl-Alt-Page-Up - Subscribe button is deactivated after it has been hit once for a document - Documents with the same name are suffixed with a number - Dialogs to host and join sessions are respawned if the attempt failed - Application highlights itself on new chat messages - Documents could be opened in an existing Gobby session by passing their filename as a command-line argument to the application - Sessions could be joined by passing the host and port via command-line options - User-modified colour palettes are now saved in the configuration Version 0.3.0: * This release depends on net6 1.2.0 and obby 0.3.0, it is *not* backwards- compatible protocol-wise to the 0.2.x series. * No more pending changes due to the new merging algorithm * Cursor is left-gravity now, which relieves some problems with newlines * Joins are now threaded and thus abortable * Connection status is displayed in the status bar * Lines in the chat log are now wrapped to the display width * Session serialisation and restore * Name and colour could be changed directly when they are already in use * User and document list are now separate windows, their position and state is preserved by default * Close document now just unsubscribes from the document * Scrollable document folder * Search and replace * New translations: - Swedish (complete) - Catalan (partial) - Chinese (partial) - Spanish (almost complete) Version 0.2.2: * Gobby no longer crashes when a document is closed after quitting a session, spotted and fixed by Kanru Chen. * Some new file extensions are mapped to their corresponding MIME type * Files saved are no longer converted to the charset settings of the current locale * Line endings of loaded files are now unified to result only in UNIX ones * Added Spanish translation, thanks to Mario Palomo Version 0.2.1: * This bugfix release features a recompile of the Windows version against more hardware-independent libraries. Version 0.2.0: * This version is *not* backwards-compatible to 0.1.0 due to heavy changes within obby. It depends on obby 0.2.0 and net6 1.1.0. * New features (in no particular order): - Document subscriptions - Global session passwords - Basic user authentication to protect the nickname - Preferences pane - Zeroconf support - Colour presets - Colour changes from within the session - Auto indentation - Drag'n'drop of documents into the session - Create document works without a delay - Better Win32 network handling * Changes in the build system: - It is now required to provide `gtksourceview-1.0', the depedency is no more optional. - Gobby now links against `gthread-2.0' which is included in `glibmm-2.4'. Version 0.1.1: * Bugfix release: Include contrib/gobby.desktop to fix the non-working build when configured ``--with-gnome''. Version 0.1.0: * Initial release. gobby-0.6.0/help/0000775000175000017500000000000014005504730010550 500000000000000gobby-0.6.0/help/Makefile.am0000664000175000017500000000054014005504012012514 00000000000000@YELP_HELP_RULES@ HELP_ID = gobby HELP_LINGUAS = HELP_FILES = index.docbook HELP_MEDIA = figures/main_window.png \ figures/preferences_editor.png \ figures/preferences_user.png \ figures/preferences_appearance.png \ figures/preferences_security.png \ figures/preferences_view.png gobby-0.6.0/help/Makefile.in0000664000175000017500000003211714005504016012536 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = help ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ HELP_ID = gobby HELP_LINGUAS = HELP_FILES = index.docbook HELP_MEDIA = figures/main_window.png \ figures/preferences_editor.png \ figures/preferences_user.png \ figures/preferences_appearance.png \ figures/preferences_security.png \ figures/preferences_view.png all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign help/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign help/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile @YELP_HELP_RULES@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/help/C/0000775000175000017500000000000014005504730010732 500000000000000gobby-0.6.0/help/C/figures/0000775000175000017500000000000014005504730012376 500000000000000gobby-0.6.0/help/C/figures/preferences_editor.png0000664000175000017500000006560414003367605016714 00000000000000PNG  IHDRe 0sBIT|dtEXtSoftwaregnome-screenshot> IDATxwXSoX( VTT{mk[[ϭumZ:ꬳnk{ZuWD$ $J7P l gΜgtqdZM%_A)Q {{Uf@,~?x 3޵<8~^3ܸ06½Ǹo;1Cxrq+7qO0~npxr REmS3=3[ 9ǃ}_%}LeZVC"EXE]/K͏@9KR g7~lZ_"ɬcc_帩?]c%o:ɵ)y7˕bNhOXڧ _p%̞ÇPq:ϟvxnP'w}탲o? _|F}Wyexbhqw?^/Tpvz *?Zlg-7޵>Sœ}=mNuGrausR{ 6?1_wcgwoZaGV8ZM!+_MG)^ʇ={sQJx8%ҀN$Xscdby 0L#[UEr{yJN s۷C>EP EQ翣yٱCVəCv4/յ^(ϩP(+X^,Bjg=3ڕ͒䵇emS3n| ƭ\z3Iʟ0zĄS͑/DCqlYpC9Βi|) yˋ/L27&B_2. mQ{ yh"4͓l +X08s&l8e.AR3Zm.t:ςqS?K+~[A -Y0k\sؑCR]$; 8i~%tzE,k[#Ʒ}8J6qRx_,-yCp-.UMs-Ny̎wn<,zKc%ygytg\(1:|IRl}a~ .QEQwOqk[-ᶂ Ԑ7=^nXV{`oQOȒ+?V'$8ȠJA\IdzQY65&SᱨW͗Gwv]K;oVn&6G!UBA#(T܀".IO^XU;WOr|jP]M0_߷|>g_hv;Z&W\<>+JyN=}-Y,5FNQ75ErC 6G۸~'6oHAwz|ܔURD_ X65&%go) 9lqvrCc8:ͣe ofH¢MevaBݰ}] 2ه9;xUUQ 7i p.ǿA;CͰO閝݆(" dCbՋ < !H'ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"v[$"668(_v2B%Mrtd$]:Mȓ6Ulll\lrStܹ}?M$ԭNzc\.((w8»66668Q|UԎY;Is*BmMˮ_Ne(^,6(6x/=7_V1:кco){4|o\9O*;I9qe*ųimiᄟ#:mlz"Zlj.={VSFiiR)qYSs*LN`V7:Egu1etڜ a\gNKػH*cdNE7A[{4yqq[>C[{Ok)9ޙSPt4. |0M4JV S/퓲5؃ =Vxo~{4.l_k>K6gpaNJI?U%ɭOy͕J#In%n㩺޽ԬۈhN>ӧ䮱(r U⇕k5D7cs3fͥADu|PN>nq&|\VracN 鱄Ȩ(Nb)[oޠM^zo?|h(I%1j4QQ,[NJU0i|6s(XЋ ˶FqO?SƧ49rdsjcƌ-?ƾYnt1ưt͚ǁmEJ9ˎ?I>Lj4lښ-lחԬ5>j#"%Vb͏׸U6Ё5Ac ns#88'=?~°჻q_Ϟ3G8zÇ̙;נ˗]{'i Vʊг{WVVkp\Ѱ~Ok'\X2oMZ;w߿uMZZ;~'''>199~Ayɲq+ZPJ-Ob7Wn?aTVrjл M>>,iy/4lښ2?f]@R>֬8^sszy H|y!W.g6nX<>F36_%VdJc׋_gQAS={|Ejۋ'fzU_l*߸Mk8zh/j,2ϫزq W/2E! "In۶qqqՕ)_L~߶ؙ; L0ܹ]g`p%?48g.IIԼըV.(:>s.#(:Ν@U-6oOڣ(:>Co)I/u:~߳`rsA';GJB=oLJ%mΞ8u a/Ν;i-l% 0xͩo2L2W$**h;scؘ .KiEGnrgH/Ο}BlY#IY$%wٲ3j`57 "NڍhԬ ,iXcؘ  VZY8~4}qD/bc!:*[[Z6666fNaʵ|t9ٳggԮYOha*`\9˿0)7WWў}{0oE~Feɢa*>cc&>fc,^ۥ4[-[qs¸N#I=wܥxoݾ{}R(‰gbl %?|KDep= @ө6[2et̚(|1ej6}6Eїjق/LeLr [4>SY*/_ϒ{yg|GG5Wa58^ɢV4v{n$_^=sg*^_K\}*7wG̰AQ ٲeŋHj6la:msqq! x%bՒ (TQCPQ+T|DEEV4lۊ?loSv F,Ice];u6gpS'=u2@*nőпw1y.,7fh2_j5sgMgF77~ÓPAb8hKZՊ|l%EAqú|{U|&<hUhټ1ʔN=x ԡov͝Ǥq#;FJ&&=pR>EdqWly;3, E.]V"Mx SM3/geJΟr{ӱ{?"##pVE/OZ6o0IUzUSDj9oeh_w()o|7$0pԱ׺k4]Za'ҤQ}4lѨMdUw/l@@F*uc2mر7Ұ^ >魼ЗlUFKɾЗ^7&s\ߖ ~Uj7!;3J'=+e{T*2B93}J٣lg<~\ۻmVmI4SH/їd0MT{732kOk)9/yR™2MDx!kOk){tMBFUQ;fI~<)/L3ϟw)bs)Ļ.$(;pyUI3O 2^V2BX/;[[<{r֍47?B!66Х+JRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!HNż}(a!ȇܧs ֍ol'O0y4N:Cdd$9rd'_޼sdBwU'm'&r |Zjr-_쭌-xwekQۇKZzLϟ'mwҬU[J-OY:}9sҥpt|h<*>6Ncmo_4h̒e Ξ;GvǷU{>;qIBd(:)GEEwv^:ؼNÇj9ORL1u7;3-~qؼ?~/Obu~Xh޴ ϟiF_eW8#Fs̛ͅ3'ק7k\o$ !2 {vmZpI5\XG}ϛ='44v0amؔn3[ޭ j -?'k.@ecCX[1!2 _ȧRbU,C{4IݼI? 0jUٽϔ/&윓_hOȝ;7...>NR\lC@ecCPƷ|ԁ'OA1eؤ(I&Lr&CSO>b󆸽gFsuK!!!Iql];w™yC_>rE !2 uZ-9r@0W#4,0fϝ@LYnAh41ܺ}5ȑ?m[m\FÊUk)ACx(A*P;M.ȸOL?wSg̢SO֭_.>댟C\]];z$;~flٲ1wK.gg>h׆1F ߗo_BF̀W/ Eѱ}.V^Kh. t * r;zxJqjU=q {ؿc4-s7Eqo4j!}ߧC3BdFŠd=N-JY!$e!"ŠHRB+"IY!$e!"'q66(/?$#S{#vo$LF%cCV=<򥨾 nyR~C;fA: IDAT":HRd4QO>E_֯d׏DsQ?J< F'D(XܿK6߫Pzc(:;;;WɊ󰵵`x$)g2ZV )Ke3=ZPH_+2+儷!O㷭%)tU-Df IYu JjiH0g#y8gNxhA"zgrbV7fzĔ+姡A;}*î/]"+eNzg${%Vpqt:- D ܼ~ T*Y)wNT"w[$e.V{.ǏܹsTTӧSHCN"E6cAγw9 ~ѾjժsdiDDDp9j׮͂ ؑٵN:},lȕ ghҸ&LzIHaÆ|<{p/^L ҤR MwESNj5F f$4iX\]\?܍#'Nܵu`ێ8+>3gѶM$mŦkO8{pv @ _w[fʔ)iӆyΝ;_TS~ݲwya]2mRx3gDFFR#~PFժ2y4v3XR:|/_fάI_3Ic2#i}x|7΢E(Qkz<1^B+2mR=c:f̦T|ک+*&SBy6oM: ȕ˙aC%_ڵelќ`y`Di֢ UT6(ݳ۵ko8Yx1O___Ν;ŋ؉%|Wle-lWBx'e=/5nԀƍ _ڹS}{%ugW9?_|C~}_d'wu_+V[lyi- <}Avmٲu-K3IrBdv>)G\S.>+,3mrɪeQ}ٶ %g<w V-#ǰ`,Jz- IYd@F^.Q۶`gg++dN,:EJFV'I9Qκ:*(/O2ĽTv,ΞDMw_Ms6 >!27Y)g2jGj˯;~jkᑏW, yzҨY+4QvkIRdlm锅>֖ :MT1o$L(66ȈdOY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!HI1QDY|{, MF xRgΞzzio;ۓifٺvT]&-i[N$p1wcfΞ˔iؠ~z"XIʊ勹QM֍dء4idLJJsuSVěi/X @Ŋ?kXdV{{CXLߤżٰq356x2hݎ7֗qx2ԬۀM?mїiZfUjPt9 NDDA+VZ)^ROX=CSc.͒e?PjM}|5f<=T (U{/aڌYT\*|*T\5s|Dk4=o_*W+=KcOǷ>7asn&Wn.FuNɵAr >s_6oʅ34i܈q&ˆzH@@c..S^g/sq ±#سk'O6qh^|m2xɕL_\ >$)/&,Yлgw]ˣvTBCBɗ//fL՗m3'Ýlٲ1j0;`qqɝ;E`҄¤ cپslTVZM95b(Ǐԗoݾ'᎓S&k˔םccinܥC7WW&Oorԟ4q<;v܍1#Ω"}HRNgƾڗ~"?AmS1֗>aJ4O<)Ԙ^^y%>БeS7>˟< 'Ƙ;sqs:q`9Ln>Sˠ~pp6\`:Zi"-KCQ8zcs1\ٶe3)O;&? C\\^[ٳg'""Jr77WSp$;sqMi`MbX?S'1Ǖu~SB9RN# ;Ģ(q+g3~">x@ll,ܼɠ!M䔃;wf&8$NE֭e883ndk˗SHx3Niu|iR?AL6SZhƔi3 &(8/Nus0#oZ7GViI| >pB|5o^]O(\5_=hݮ=/^H>ScTP[<"͛2l }ә6c6 ={vgמ_~h֪ 0^~͗8;a5j'G?q4Fʤ/RAZ4kʈaC,>?c`.F0}ԵoV 0_ی;6ѮK?? 5_9E7 8sj,&FGE2mP&:]b}Bya<tHu_̳RVZL7!c^^3(S,X+$l9sѤE[oS47$W)$eE<\>\($m!2& !"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!;yP'ðHFUv>)g䔚3 !@wA~Xr4jo_j˙ Z#u6d4kՖmw&KQV^K)Y<7b(bx WV׮*KZ0 ?nmu:K.n&xRAc,[NK!WKΝ?p\n߾ø ek׭gƬ9.UG8t(I?\sX<ϞBV^kx Wn\Md\tCy/L>ˢ -a.y&\>1"-_BX @֬Y_~k0fr9;ٙ1F$cMGGGu S4)}{@68|KOSo-tZMu`Ӗ,V!D˰{y0rx@^>~ @&- QK kn/^з {l?~@ܹpqq;i:dؤlJ^ygD;r\_&4h SIv&,\wZ~ٍqY{M˹+$e66ل:vݻw)^8ZmE}ʃ^6/=}O?{1qDW&.͆YKEv\=T (U{lǒe?PjM}|5f<ѱZ-}E*5(Q '"""̍mY@&h;~>ĸ $p1ooDzxT7o y67jn޴(Hx?&&i3fQruV}v #GǗjt ]S'w^ Ks!S&jܿ1cзo4y#W.IF0I_֣w?wų'9w8EaڌYϞ;=;8vOX7Fn2][pjs%%c''[7 )j!>1m< ?rYڶnI9r(׮ϋgiѼ)c[6GőErmƱ 01u,\DpHǎ`ϮmN:_^_젞LX).ͥsqv @TT>Ө(ji3'B {>uƩcGcլۀ5+h< Ev=u̢16v_njWQMPP!޻gr6Ϟ"W.g>ItLYV]֯]M…A3u֬æk4haKS:\<^yo;2՞r<ڷoϖ-[/Q̘12ptt$6^K9{׮ 22Je~PF4lXd ^ԉO7ƎtLy$^+a\cXr=LoLj’ҘۗrΝ;v,ժU[n|y[ٳg'""Ju1qqm/77Wmٌ{4Ύ(} 5...>'wnZʒ92͕~S\aś>˔{ʝ;wf̙.qDGGVVϸ ԙ6c6!!0u,ڶneNu`s& KϲVE`c&L )w38֪E3LIPp0A|9u:[S\Hvmr4 3mZ_`L37#1cڹxG}2)C\b5kUV@O o=c:f̦T|ک+*&SBy6oM: ȕ˙aCo^TX]G24t5xgNʾć|JjU {Av w𡸹RA6h;# x>^'Ncq$4x-RfP~C˗x :9Q>Zj);ś>T/}B&\1Ǐɓ)ftT$ e%V!D /RAu6n/^^;!R$YIrIf:(h4o6(a5$"$eE<\>\He"#,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$)gpż}({%ożujӰcv:i2`oo+U+WfAɓ!0rFp䏣tqk#>Hy yÏYR0_BL}Xt9u6Ǘ: drt:N[~^æ*[?Gp54dnמK.)kiи9%˔vF,]EQ b8} Ϟ=I;hԴ%>4kՖ3g[G6lB2i֪-۶|yʒ% ;}_]K9fc]vż}xTYժDŽI_sžR\EJ.Ǔ'O?~L(]"aaOl_&X?@(^k͡oJJ~Xh޴ ϟiF_eW${57 [9a߻_ōa ?\sX<ϞBV^k?>J*ϝ?p\n߾ø ek׭gƬ9.UG8t(c@Jy݆M-*)Yzbd\tCy/L> g眴iV܍Vm8;L2VRY4n;yO dIxKl-tZMu`Ӗ2x YfVc k֬ԭS<З퍣#ݺt`::ӨA׊׫lu5\rvf̨F*9)_`o#St зw/{(kGkl߱K_ǮݥSG[zmml,{H2YZTW))z/qOs ͝+W<ח>m|G&- # /Bƍ,?1w<1%Q@y=<޷D| bڌL1^)[rzE/Ë/eaOPX1V3g~oE[TZŋ=%_oZIʖpuu! \]] ^%pwCN?Oމ.sS޷\K,~< 3~UN)>n!fڵW{ʖ% 'OXbj֨NtK>smw}nc,ZNk'l!SپDqOW^FaŪ5|QTݭk'_@x3"""8z8{ Գ)tJt~֜y_/FO?{E[riȑFü&Ӡ~]Ǯݿk<~iɵ#DFFhw)[kVʃCQtl߹ג'C OkNՎ[jࠦo95no_GF. V ϾvHll,k׭FxyO}$)ufܘQ 0}?wSg̢SOϤoccCN1k<za?3KS"hԦfK IDATߧC3Ezڷ֖,HL}~zoBd,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE2g_DGJrB%RЌp1oݺauy)$eM/]L֎jҤe[? { !e2MRV8u(_]ZhntT$SIv&={_/f-[V*WDQZZoVF^ ޺u}ǡ}V/$e6lBP;fA5[oaxbú˛O9u |[Oٱ'Yzz!D /pƎ'Mش~Nbެ߰~24nފ.moԌ%Тu;yS恟=T (U{lUkV.Ep1oٰq356Џ{2F񭄏o%MFIչhZfUjPt9 NDDALǎV/\9Dk4=o_*W+L_D!2I&T(_1'qewI6o+ҶuK͑#GYv^'K)ypwC,Yݳ;׮J;va҄ʤٱkwe󖟙Q(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&R$BNFԩ(fW+"f)ߛu>}$j6.\@ɒ%R2}Q+"|ίp~ll=;vWED "9}waλڣ 7Sm۶ШaAA4h+/-bwOфv;3uS$%%Hæ-װ)Ovo)5lJæ-IHHvOWҽW?7jFmL.~ zҠqszO>LS!"\eoz]{-k{:/w{ܯtXn&OeŇԩSWlr/W};8a+>3f%,4tgjN' GXXl߱c'+? Сߙ9^7n$N>.Mq\4l2S|7[mOWriw阪ThNj0>vxWh/b<Ν;Orr27mfy!˯nOCt{ @ɒ%7vj*ZVNU92o41%$$r6!sS"Rbr odӮӋǧGٵ#/COش[Nk?ymGXXiz+2| ߗҥK]Qsb /r|7|˗䇝m/xs_煅/ >!jVˇoVrz>rg׿K>[>mĸQXǶzSU>wl%,4)))4j֊f_JJ n۾wyu9]CezKuuykt\}bM>oVureYos,__jլ pאalݼϮ[(S&]gFͮX>v#Y]jתw̽Gѣ{7*U mva3 ߮!00AnX=T|Ey:'vO8t+P=Mp3˗,vc>Bx+Sr|v{߬ڔ{Nw9mNqyz̙7_… X,/ë^Zqq7.=E}2-{YRwNǻFjǟɴͥlY-iyrt5W!ꢗxWY"J(ɴOеKg]un/^C}54oތ*U*gYs"..U_WZc}sO3c+oSf݌4};Cf>ށaq?9vrfYV ٺyWǁ};00g_X\L=CٲYW'*ht &f(>5ӯ1b0xŌ56fT\9?~sg?s_Կ9y O?w3R(TBl6m6cbyffVvFN|s7#ռٳ9{sahmZhN>psWʔ ,1iݲw3n$w̚ШY+n睴o61F2`홎P<]{ٵ'Ùx#7̪=4}=SnT05w=wѤ9s #陳=2wdXbؙӼY'NxҥKqS.;mZ|OʍnFEꍾW_^ȓs^qԔ ̜<^,\>r ׭-H.>,h)'x },5c=iivf̞K+2\tzG =5U@VZUtEJj*ݺvvJS eetN7gP6!&7DDLD,"b" eQ(BYDD""&P1(EDL|O_9i4-)}a@-@BXH!t:8p>!pdjP2 "80E eB̞BC)[#+a>oz?=+yߩQ(bAԉhJ$v\W|K,R0b2xրdQȵcW<'a˺/H>zP|eϹ3ڲγ3;'^?S(5/""y mܒP'#\F)rXRߙҠi֨MZZ Usc~g,V)bosC9޷0w8 ^ַ׬t?r>}NԺ/8|p_5ĸhڪUfOu/X:M[wp.oNJL(\.,]ΓSg\nHc z r#$e.lߙ8g#}F¸4{jGZ.ڟPްqKbؐ)M3jsiYƿ3ngyb45kEfAc:DvefԿ'I E4a؈ǓHIL|Q|BB"v 1Nyeװ)O$999cZut :Dv;`8WN}i1Zu{mv _%},]Nݩј}]|'t]o䪾ܜC9]WChjP`[(PjPcGLCeȄ2t N+3:;e7_/9~ ^xѽI1ᡱ>X>?{11bPvmb\_63g%,4z`ڰ| ߗҥK_z=69xnV,cmѝSy޽?3?޽?rWiS|rT(_iONaO왳TRg׭r5۵fQdI4͛9|/]K`=XGLr *Sxq}a֬v?4+ʘQ#eyS_:1ʕ-S={NXfxʕ+ˆHNNf3-_Z}x[Opc8wC{wwE}K.'F4bNuԨ^Fjǟq~uKʫ,|y%Kd'ڥ3vfμo?.\pߗvZԹz ᫯мy3T @l)쓩-9AXXiwxfǗ*V~=rz,e\dS9o}Oր@\NNlN|pRi[OT?(lǟi7TZս<:&AǏ#88@RRRPϞMZvr刎up4:GM7alظGŽ-x<:RD iԬ{ÇEۇ]̧UPO>\Ax OS{as[z:S%9.H:@6;hsO_|s4i)WFÆZ卷!%%SLTK*δ<3sqY wy3vD4ap?TBl6m6cb+UkK]3 'YwrUC2t]Yrd)sf`ohԬNڷԘQ#0L8 ٵ']{R)0&͙|_{ݼٳ9{sah>gf;f4[РqsMD]s9Y8s[_v ܜC9WQʕ$,,?D}QV^w(x~ӱf`>ұ}[c[H;֮\Πx*4MDI>έhݩ)oݹqJ)%r/~q]_sD 1Gmd,GZQ뿤?>K%+#ea kAӶP"[9/`v 4\)HP\)"=h@vS(H>&C +M7 e_|dP),o6 }'V4_',ɘ#&݌VwzHY PQs~ۻV2ZJH62/H!DN=P:SyHaP)4IzӬМ(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYD>F IDATD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD," /jlI\.,VDT ,XWwlx5 +W2G?@*կf""bcG)^媖}UC~kGhYD4Jh檖{UCJWH7DDLD,"b" eQ(BYDD""&P1(EDLD,"b"Wc"b>ˉhr,ր|N,R. Ğ8^)V++T]N-*ߪ"E`Q&1@){j ;nf("t'8X֧Hf.NawcXq:ݤB' mnb+[ e\.ȹ3Dat+ kу e?`5+?Ht\NбmXryᄴm!7" /'+ "PNII!u"*9Bd`bbX,rN;b8RFjr)1R;ٕMo7Ȋ 0r0RN:ұp  V+`⻇`\ 4 ŀvip?R,vS,44_P(}))r`qBa](;v93=R '^;?HxٗˁXZߍndz .\,±:/}?c*XK\Ng^z 3ݐH)pOEl{ΟNưB[ӧ*܏4h3'1ֽ|yL{;r~\# e?>}NIM`KA:Xj4OǞkލOdYסg}ШYKۀ/3́}\+ e`qi$cDa4K!PTk]M&őrVuq0wt=]{vSl0ɟkE,z:.]E Iqm]RX{=SPZz`|R6_Y /} ,4A4mҘW_y)ˑrJj*=1͉hܜ'O%%5ս~ tهFоc$˖^p8|jˍ$%%i,"%N;FRƉ}Gvq;rk"{痳:үooؓk}Ǐ`Oz{v%GW? ]ۣl̙E`h|WuW\'\ןŜلʄy^zrjʖ|rL:Vl6N:͙3T\f׭#?9+VG'=k֚rKDfi[gZh8yE@!o^~}㋣e7q-hٙvEaa9}*؞KSRuJ?~h^y %K0Gy3ֳOr-}r-)E@NF{mg2K/Z L5, z`2coצ5_|5CS{ʕ-KtL ըʖ)^ߨa"aq<1u:QBr|=+VX /DEO-u;wkك_j.e[?ng{;,#秽?)9徽{2ksק{Iq拉a\8N;N{GHspA&Lz̔s)/] i (7V"}_`Yyy=+1~K>`+u8i> \p)gt],~u?"RRWFF3,ӶO̚K>ݣ;^߭K$hj^w͙^7zp /N:M͚qFrP|,0.`}>~i`|ȕ|z]_ϲY_VM^^\muN`[03gem^=ݫGb0fpƌz3Q()[B0ŒA0E+[BÀ+7n5 eyQ 'XBKZKhi '߿g0(ZP(K)b!s߭3W^b+H,z-;AAAD}jj렎ZkۤAA e)EAFBԡ{j6fc9g tRTVb>R(mATR2aav\}cj%88Ŋa 9R(|jBhWS BYO\BY\;I)E2Kt3M/ZI*E0JU8ԬU[KJX>0"EX@@ Ė7]8sy%? ZP2-[)E0J2eң7{*˥rXl"E-bnr/"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b"V{_ZM -""~)>c'>Ʀ#- $"RS2nn \H>_ 78C?6Z ۳ݺwd}z Al!N0vc@%۷5QDD֦WdTŔ˧IENDB`gobby-0.6.0/help/C/figures/main_window.png0000664000175000017500000005500714003367605015354 00000000000000PNG  IHDR*u6fQsBIT|dtEXtSoftwaregnome-screenshot> IDATxw]e96w$^!?V]uv]-PEW]]XqQA)R,$RH/3d~i?nɝɔ;)w&5̹<>Џ\oB!B{z];Qǵd'2_+{](sR'B!8ؖN<}.~S!`) Wڷ] 3Juc&#^!B! @qQnTO=|domdĦX!BI'r?zѼXlʽO8ӲI;%HB!8詽\v߰zQ]sÿΝr1u$2&N^h_F&E&9+B!Dd[+4ҽ.14)4,X²miZXMȫ1#-\NuT/bd~ ţ2Bҙa3.meO85Hs5*d˲ӉAR{g8uh2,+XOxL+U ..9=rcB!yԮyg `$Hwc߃2?3Gm>!C- nعrP%-fzaˁ~OY,Y1zL"d;[E-ckT740 ˲mp8d9#l}J/^c !8f䡻ɊO=ᅥz ^>wK]Ϧtr}F#kzߐ0\JP׎q_Ŷ_zŲ)n+thFX<ө yGioocwS UյضOFÒMBptwup* <IoIH̽dݻ/߬o~LOos.%罏p/W4;ay\rCk|T-{1>9M-ʕǦWQM c&c>WidU57\1oVnb{}Sn@2mMp'nųOYeYD[,7kfx\Bx*ꩩũL ?~.|7tiW&;|m],wpVnGY^.X;@}t6OVcm)mD֍_v9ip`v^"+fmDE!Ni"hp"[2`뉥}?ᮧ2N;}ըЫ@ޟ^O/>ka2#=$ƶmlf$vڋ߉f!ZbY岫'.FTơX83ɾaq8ztip;YT U i9Dڰh.}gƜeq;ChNnOcv{B>{qኚ3φh箧3 ws| u@w2ݻbY>$<,>|J"#;Pµ z5C$TL;fޖWǜ=~Wz@K.pP)SQQTlr?@<s/~NJph8%Y BnwH`&*R.f/e}Ҧ 68T[:!iu.i anUZ]|Bux!n[P'`c !D+%+QrtLz}c)iFefr Xk1-;7 R{GӀ~IW\3EjO B1 UU0j>?5$p^F>)7<#{6qMCSaN4BŲ>˟*끾MJhUJ+\膍!ks1Jw"јUeNN !D_}o3|ר.w^6zh Z<ӽg㨮T!}6qˆJs\2z!2&zc_B!Ds󭉅B c4 =~Ec$)B!pٗB!|8*^h3۶B!Bh8#Mxnw(d!B!P'KB!b;PK)B!Bπ*!B!KK/!B!D_`7Fo7UvB!1@ӯT,YɮZ>}}=! c܏!BQ>FeҕL۵uvm{2Ʃ|_zi]4}tYC~oXwO?8."(}m7Fe/!BQގʮmKPMO)Ki_?'"u4cބB!D9>.Xik:''SHB2 ٛXz g;~^]@y#wcYV4:?|ڿn|{]pܵ0}]+F%ݥξ]twǜ~yXOf2̸W!B~۶Khſe6z^?\n7_7K^Hӓ淿CGg'y<<~Ӻs&vnέF%m˖.aVc#?cjsfZwZ6l| ۶9o2X۶Ya#眽v̷pmᥗo/Ovq ?#?#?#?#?@e8.;`Anܧi7|ǟ|x0hz#qg>Euu55O꺇rG?^~ӻ?mugeƗxv{dug5joݷP]]ō?بW!BL~Q)]GZ۸(elAg66꺇rSQUoOg2\I`ukxn{w.^{m_틣iq2}[g̠8S)B!'e8O^[S}9uu#^HPS]&fϚ:ʻלr7}cSzllw^s9|<ԟ5s&g?ro/MTWUB!Әt{jn2pm~?tvv|+v8V!B}_kGk9sg?: n򓏙c˫qo܋J |>li]WD"YhP7Wt 罴|] \q٥|k*Y;1ĥۣ򖓹&Op٥QNB!̔ukϰ~[ tj$E+V B!t{ iGd{;7^a@ɛt >4UJad.B!'UnrKO_垾L4 !B@Ev11&B!5_B!B1VFE!BQvFaxb!B!]*t!B!NP .~Uk!B!@"9fZJ3 !B!xQ':B!Bї*B!B#B!H"B!(;!B!ʎ*B!B#B!EgWWI.?oS3Z;:;b~Jx܃. ֶAkDT*E n:M$LqqM!!Fbx|xܚpR.^CUUl&~%{5 W-nøS~6)vmMx< ]43B ۸֨$ ,pr OOtttt:NmMx&qLM^^CcnSU>H-_ }B?7z}$f0MlFs8Bt3_WwOɧaX,UH ݩPrS7mmqd2NgaqlذS#:@3˲un(t:9t0 '\6n͘A,²}XL v ѼeYXEKK i 4vjʾL&"]]A0wq4\#Ye˘j@O%@O'ad2TU%t:qMQTU6(EQ*}ౝ'ӰŅcH҃vDN$V<9^s"gG à"{[M#äit]rXv׶ RBan[1){_;NJ0sxltb:aD42V>PUޣs(A*~24iJ&.PɎॐL$phdv+0z@wl@Q.(NG WDzаPl3P(ʍyo:T ]t-3edtˁg0sCk[t8q:J:'֕N %"62 iӝW5CNpedO 5@N<P0H$.aiA0ĶmĔLeӅ;r dLB"HI%ػh4 Ͳf͛ˡCTh}PTl0ٳh\8f .&sMC_i'~inX,V}0 t:mYTUWaµ%9x}^tۦ2Ť4 (c6a`+RM|!H x`0ib:P{H{};FMsYɾaB3ⴍ$ʗjV BӴnZ}m9Jyդ˧WU5,  oI4M,>a]7ضuX6dH8tK0r#r0z:MW{;sCi4U8o?-l [\ΊSQ*,&0~f777w^b3Xt锿&D4~{p1 v{HSI| XõiSI,B\et&_`1 ۲r /?yk)ZϱAQ˺0_ܔx-l֢6i[UUKIJ#)ٴVA @U4M;!n=]݄B!55r8N6"jSg6J"GuVz _yj:&8o8Ȕۙ~s؊|{<LӤxEUe%MMM̚5Rh.lwq"@ݻwB]!Xmep 0t۶Q_J:DMTU䆩-\r>/=s}TtH,ߎ JnO  e`[B0tNtt: BwcaaP}*Ɠ/ ycfTU% N èBeUd@0;0M`0x&(`yUVհ{׎^R>K19-aP_퇺{7B0v' T*dT*IL:D`:x O%\nP,_h:}RW} ѿ6!Q)jvN>h8ZP3iSHB:{fN$ٱ(ׇ=jV4 K8TI$!vO7Wm}{w" e_fۤR) f6( g6ky=++Q]D9{vM 5qj*u\Q4U%/0#O3)~gLɶm2μ`^E Ù&].xbDroV_@( +*m۶q{={Y^9V+vݾuɽ. ψA'lԉ3rM!N~ӑ0~ i=d2H`yݞBd?@gggaeyޗbjr_i6V?#2 >;}N@Bsmmm3yvSM =/NO*(QSf,kR**BQyEFPٍO h;ӛ۷t v2'h`oRu8W˕{aEM^NpQ[WKMmM!0WcgKz\V-AJ~H}Nl8+.4/X]rQe)b*@@ӲsKUjɮ)8DQ6 8c8*_r|Y l rhd$Ge`|&{KQ1dɦ !B!NxQf~N˜Bo㝯ڎSu&e(\0ISS=BLEQP-s2kc9?1i:Vrfsr&{"]*h9@hS6> Cg7h=L:BshTT0c\յ 1;R5A0\ɂ+N)wVz:1Mƹ ^9. D/?ϜE8p8]4/3/ھ%<>?kι` 4hkib7ig&:bw2q@3:;)giLxms]֜#-1}Y$ۉNXju*hiX}y=>b=qvovlˢ+߂쓜vE8Fu{SϺtLfCW˶عemGqhfYekfZa: BouӦs+Dw)a7=oVJ:#݅,]u*.=I{~Ziÿ,ȗ`Me964֙N&yuӜz83BQ51|gOǑ~k.VvxT"aּEL1{8}-{mH㙯chHCc/˲طs+Gb%4ΙL@L1/ 8].,YWף f{wpow~/}PpMtMsNf4-{jP5?hc%q2D5 4}K" +ߋ 4 a[c}1̘o6N7lyu= 'eSzxu=3.«% 5سMm :{}No~rLf;gҜwsW][ɤS{;`mc:$@s8<'[WwG3/!N%m lЉG ;\P(,]}חE{RT~8s"ݍ3WؿMf^@U݌?,+y{Z>,XKAι䝤I\@+>&Vn*_CCbý^k7#m\t߁ n?زPe5,[}:`xhiޏ#8.ZDUU::ZQjf1Kg+it3iΣ7Nř`1 dcI"M#Չ ,;t<^/;m?=gg70t0ϩk/`4h73fΡ ?ȌYػs Nwv[ٶp%t6`HKW#1{^m=|eş/\BKӾ^xxwt1q=Y7Zt]ǽriRJJُ]P5V Ԭ"^&:t=SY] ~]P5 ˆHW'TpRK9\&xkchW^arpzN^?"2sB\31ƭmּżsT6בIxG!\]7*MxZFD:YpFfE&Ʋ^tU8|l5!Jt{Hƣ1I$VlBQUl*A_zND,mxs+X}&m `Glo%~*BU5z:K6FQ~ PmThӄjG- O>Oz&Exyq5^m8&KF$`g߆rRJJُ]gYȮ-rm̚G}\o9TVqҚuzfp^|e4W3o2]\&xkchW^at8ʤӄGz 2&y &޸*pl{u=oY{~\n7x|ci<^-4gf:z^]1KwEU-~Zc`Ty'b J&p]6dvypl"]h.X3O>?&MY$^4t'j39e4˲Ub:emʉ%yx,=f@vJ{7>wyH%bϓ$Np\SEO™]>供L Z禮~Nz(%OuؿMFg?)ŅW۶12i!k0˪hkai1}gZWJHmi<514?O/M2d;@9FgH>Ѽo/‰VY]ǖW^dڬMM <5uӱLsLof/fM9|1 MiڷN(jv0M3|-4LYnc)VShٴYڎ4ɤmt*m VT:ۦ/Ӵ6g﵌ʚZt84Fl9fMokB<փe[XEoʌ9 z=aL]C#oO06 hNpG>sn2x̞][_p3c.0O bMؖE&b׶Mp:E.z”R`G9 ٽu,]&n6`g RrGi=έ1 MUMo9B?E–WדGqy<֖̚^˙>{[_]+tƅ6i܅>vlD<6xf̚IJ{5wRv‹8w!G YDZmچF>}T@ٿk+} vopM`՚8g;e̚M.?]^gx=w1mѲ {><1 ,F*%OmNdeMP׵z2Xէo~׺ϛ{(5_yGs})z Ckܻ{ ˶=o1^dnymfa΂D5o]7<4 h@q2\&ӏ26^*614x٥\T"^hIC؎4t*' .Q!zh6-h>s.}F&E B#I>P!0<0kFs8HD%HB%()BQ>s 4`!d"Q$PER]*(N!ʃ܌B!BQ TB!eG!B!Dّ@E!BQv$PB!B TB!ewm}m!B!8A-Xv1 T5!D9gO?8D!8qrƹc!(JL't>. !goc(!('௨,i^. !ctBlBUr(BrgB!B TB!eG!B!Dّ@E!BQv$PB!BA'HSS3?$دϙ=sYw B!BF<|t۶ww'zUTVx>D"ɝ?)|Cysp!B!5@%T*Ś5kH&(²ex<(=Ý?1|U\!9wRE3kf#瞳_{ UUǓܲ6wR65dzϽP-ZO?={:+ַ]ÿ??EKK˰_M/oWk>|sO|s7d˖<Ѓ9n7{-xWdkI6db|{?O5}Ӧ<ЃٱumnYl--G-6r9g^_yXy&!y>1*IDATi`?w? z?w(~X LcS)BQN!i~y ömR_|1k׮{D Co 5pMG-|oozB 7}3Zߗoix<\{ǹ577}z~?ǟ[p3ux^ȵlZzPup)~w={sgWչf桇<ǀlrlikmӧ/:MM޷܏^I},NB!FjDai(@4Ŷˆ`]]]$I4TT*i> wtt0k߳f6kY3GC,fG9E^^"֜^ +~.{wn㵗s5nRyZ0ضZ{<|__W^{gm~9.{%d2ip8ضDuz}sYg`Ssf&p`'RT!i-O~syEE7ض|̚9G=^;o{dYak'@Ns0If(ƌ;?|1|?/̞_&n{6}f߽ܪo{nܸ1swg5q՗M89""&rR̽ױgƳ>ve٣st{~T?#Xq笈;gEi{†@A_|wϏ۶E㎋ؾ}{l۶-o7o^{1`6mW׽>9bxwѧw\4˜{ٕW?_0uJu1 S|ؼYώѿ8ohtIQ߉3T?{n?yS?oFoozU8!]g5rıqƟWϻ6F*cnjsL߯y! 8(ʵ{P[6ǖUEշOUwsjѰT;lhÒ /*֒ cБѵ{f+Ư<~9|*lk׮'ƺubݺuѭ[غuk{T-Z}D>nT4YoحG[c vy5gW4oأG8ĦMsΉٳglܸ1:uQWW彑Ԧ!c"n^ -=VTZ}fb#^ #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHsl*S-Q*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG >-:*c&Qu42#Tt P*@:BHGT4T?JMU4T>ɳ f2BICe+jLȢ2|6ʀbAq!a^w};=n3OUjɻ\CkZ:;Z >rh >=gJklϟ)rկgUO_=$Ki8SŵkaY3ϊÆC'~lq4n'nkDDĻ_sI|+_Z㱦; 9vT|ȡm۶uG?ig믿KĐ{7ݝNspcIq'Έ^zF{'kgύ >2.tnn3zx?Xx_cӏۺvhvcҤIO7onӹG=bq»c+#"v<ʸwcGuuu̻Ͽxg{~K?nݺ1Zzqq-Ǻ? z?NK:c%m|X;]CeٲeqM7_]tiӹJ/dVg9c}G׮]͈ŋx$8wѽ1gok=/ozj1 s/8}sfE+.ӟ^={6{_~;}~'w^={/}m1q4~~GmٳG]t[x{J.;*;~pW 1~|߾}b_67׼b9昡qOh1{^=ּbdק5%JF͛ɕOW͋;Q̘>'Έ/̞_&n{6}fNP\~UnxՍquwmJ|[7mw 6lx%oW<=ǜ<~\\qռx6^˯:N9kl@K**72E.={Vɓ#ęg}*=}1Ř1_0uJwƸ'Ĉ_?5ࠃ5,]#G]qUf^}Qƨccs3͟F1-:vІ%?^Z%Ɛ#k+ۿb^[^q]ƈ&x/>\X7ӷ5RZ{GxwPl  P#Tt P*@:BHG4*{':ёkHE8ޙ~mѵGTUՑHE8͆u"t]ʈ&t:R{hgW%ߕfwTFHkڿPC h #Tt P*@[xaխ{Dž >o>^mC42tBq/_@a2q/_@a2t֌{:TkƽZ5UJ Mf-G>Zvhoԙb#˫G&`7VeNwx%UȇcBjׯW73>>*"|`DCD5ώgTWw)bndYQ*o:vІZ[;a4v5IENDB`gobby-0.6.0/help/C/figures/preferences_user.png0000664000175000017500000003711114003367605016374 00000000000000PNG  IHDRe 0sBIT|dtEXtSoftwaregnome-screenshot> IDATxw|б wE*\DE HQD((X+"H^.BYXR 9I}uwΜs;n6Щe ;""?_qᶀ<ܮ}:bb[)x'l+3vX~\ gN-kc{!`3'9s"'8qsߌۻj@~c`xct7`{sFԗvm،m]elKa[ICyÞl؝||ھZjPlT}8y&1>etZ6;yDD@IXmۄV]v*$}5JhH@IrCJ /JAO{:k.o@b]z 䳥ǸAK[RXV+ṯ60c5n\~MdXn˲}rc])'? m7ΓVc+b,[ObYɫ`UOTV@GItõ7KDR6 xi=pB{FT+8lؑu$p$IphL,HzOc:z wO^ʼ;T$#{=N^x[)QnBW}}5ߝm|BjSyoBK\ %f4N_" ,J>q} }Ien+eg}yN>FD :)YP/:צfnW}/[}K|JL\,#w#˱p IO^Iñ͑ ܳUz}pco.5^{\}M<ͮûHa f}8S wĿq3 m~)%SY3m;I5c=à Cퟝ2oZ_8҉HlssK,oM? mkyq8pW \1kTr+RjU5{N>'4znr9ۖLHp'.;cwrQn?Ql؀˙8;-Ya}R`z_یsnqd,] (U4aG3뺄yV;f3~LILE 5ʄ*%Or .:#c*fp:ϭj/tud[Wus)Z,~udX}?iy(rMkO3dCB p((JՊgnY]vQ+>E("@'[жza_K~e@ʁl $.c%!.vnߴg̛V )m b{l %ppr{ViP.9 qP#Ohh&2,_ hS#k>㦷RNo pSihc~?0 (`s&0qI;OEdXUYۯL[F?2oZ}ږ6e|oe宿Chٖq5XSnߎe~e`̵9fk6NTR7]f`@\ĚM)1~_)ۖmy:_i|]lٰeL)1~el=Jivɨߵ~n2Nu*\r(cz%ws(ۮ@4dz+JRR^nZ2ΎiJ*5e/;R߹s]9 Jɓ'ҭ;~O]CzcOx zqT lc/_zuk7˯fPFu *:<=7_~5 bx+ 48'du̜1UVy&M_Ŝc3}Yf5s~vJj|qc[ZUk5nK?ٱ4lڜM3z$$$ϹͭT0? }9g{bb"=ŧ.۶qݼdnhކ: o'q*.۶iNm߶}m;ܙc.\;u$< -iZ1nnKF>jLcQ{Fömvˣ ~zzyñ6kZr;55ᮎٴy=))^itC >,כ1]OOR8N 6?mR B9x GR*^mW<3DEEV>ɏ?gԈ+<Π4cg}Ҕ9r(sɌit >)ׯ^ KYzos;ٳ1-ת%Wr%ʖ.ܟl9Ԩ^ʤ?dMLc#AضMUضŁC=F"7#=O>o7Ԑ,^P{ ۲q#V ۲nO-?WiFYiϞlذm[c[6ڴbÆMݳϧ_ʱ(^dsܞ-MD ۇ%Kgxg'(Q8!tҙ͛xۿGoM \of ㉎bԳִnw_zNdyKk WF{ƍ ǟϟ;wpRcH>e%::[RJe7mTRkլᅢm2++,Q}3H1Ο+\Rm^TR=Kd>8rQ%=rgҬ+1ԬXt) a)\*]f-1qݝ|p8WϿ8wRgF }ڲf:F {".6u =J&4 cU2ñ>ceԞX^6[lL||vH}ҧ@Xq DGOeV.HޏЯ#ضͮ{䋯 }M*Uذq##F=C.{ <֗aY<֥} }jώIҥؾo&Oyo'ξ]/ -}+aȃ/hP6|>ޟzGDS(YxАʔ.yLx-SLYbbϜJ(}kGy%uؿ_"+F3>\߸ qnhuk:;}޽(_l]271*+˓qc۲|L2rOHp0ǎH]Gf^.h&LyLz]֭C3?%^VzwCNuQ.O WGi݊^Qzm^<ֻW4}]rZ06[\E;y/Һ%_‘#G=r^ 䟝|iu3/:#G2[dyڛ]ߘ\=FFnc̸ٻͶ1&oҾmlצ%&NF_JL^*:UyR#GdڵeԞHHH$((OLku)}v[6$bɓL|mrсPZ,ϑQ}?3}z>_](VEKrkt~gΜ^| nOZhΣ=Nzlw@xfK<;rhl{K'`?Ρñ/Wݺxۛ4ϛ~@ͱiӪ9MO5s}ztKs{?PfuN>M7~gM~{vǶC]\oF]6ҫĝ#XMgQY#F>8Ͼ0>%ӭ}Y~iNreС}LmIYEK8v%6WHN4m}oNqQV-MTVle&~kБm݂nNwUKmϯbGA^)CrN&֜ݚ2gsRrs,Yb}\|r? }3֔Y?땒˟{ɸgt8rI~e#!fe9]E3fk17˜.9N#JPncCB6C`:~^;%Hrp {vla?37/LF!"WET2ܶɯ;ED _Q,"bA""Q(D,"bA""Q(D,"bA""Q(D,"bA鸶J R#|?tnjee9sB R*:oqQMeiHN0> 7hn[{UHHN0ŲeQATV)o泏m|'lӞ5rcּ_Ho{Fgoo@uhwl Z>sjK՚uiwM5PN׮=zǢŗzD$0>fL5>b܋_./枻d+Gm>No{FVXɬ_ؾ}F}"UƇ_J8z3ňQм-̘wϿHsIHH gO{=GXX-n ={z>3=5bERhQ=5$qqqAz*"ܴIcfc3/BRR_>w #ʹU[J 5j {=% ^"9RmKJ5Ơp8yϽԬӀӉEV}QwEjS޶H,{bۦزa1%n۷څ1c Пo!O]:E\Ƈ]?q86$m 7.LxUN8I\\ X=zy)T{!su;vǎ @6oJʕiܨ!!<~ƿ%@L*vS4<|»σ]gOI n<}=ڛ)oMs/=;v˶Ohz͔-S_ryxLxUVYN<=l+"yYEK8v%6o֗@N?vM\Us~.?;qſD;:]X1{wң /_6 b$%%w>{D$70Ens[[9YlFpp0ժVIӺU.MDrm݊[t i _IDAT"K򅈈A""Q(D,"bA""[;x<ON"rY9t 夢P<7/sٷgY4EpgG qs$ e!1!Bū]p誖]a[֋3NtI>ʂq{ߴ?.[!K١q[W\q G+d7\9]J*W("bAʒmKDAD(WJDDL'BYD$W?h6*U [Wӽm'BFSzm8qqqV~Lf͹R4ǯxm:R՚zlܴ۾{zjQZ-|cc}ŗxskV6oϕ1Zns֭Y;e(]4o&jka$&&uWqQfMjéS|~_>eʔnOiԨ˗M6lذ![V*?1Aך?XfͷeÆ̞5̸&_vgӝc|=m*kW.m 1H><V-_̊ x /fvrt{'?usk[xj1RXt)gҥ:t &K. tI&n:̙ڵk j*̙޽{/^̬Yشiڵ's U(s!9JRь9o۴3=r8QQ(P' fܟ}6b2c3,Ihh(=?̆m~M& PB< .\EHHw{8{v϶ϭR?6]cƌx/^1c7G<|'mֻ}ԩ;h ,Ȱa}>3DDDl7nQQQѻwo֯_Er%K̴"!!!UW3ʼnlظ3gΤ9GѢ>vYR-[C|}]:vHڵ}8po1ú"##S~7oJhZ5k;ob6/!O gŒ?(Q8LFdd]f,X8jipIc^C ػw/ŋi믹{(R}n/Y$}QQQ.*O\r_'>=5k֒HBb"Wa>~>;HJrc6yQN<5|$vveV_LHH $8`˰/y̬})o |g%66ѣGswGGG3sLNʤIۻvʐ!Cصkn͛7-O{NhX(O Ν;Pﻗ]׶uKzϮ{Xw8x̘1;x8p cʔ)tؑp50`%W95ml/Xc\`f}ɝ~(Mxs+}|ʔn/]4D.zK.)Nc?N\Oޝ;(o\+""Q(KtBS(D,8ײW%xgRRQ( W+^xtynxIXAEp`.&;jVbYzk]Ng KWV؎@OeBYLeg.Ar5xٶٗ/~iN Yк-9]BP/۶-sW)Z$w槙T eCT l۔E6^?y} e9Gymy"3Ze%l,cymy"O,t-PBQ嫏}i-6Ë_~\6 |8o{k?I\Uj'%%1kؔZ?%&&QԨӀu0l('}ӫU}l lܛ9})_'2h@Z'_}k֬lذٳfr"Dk׮cucm~޶Ɓ~'~#˯8Y7Zö-o{ϧ|!:xGRT4_x6m FNTT$ !;g# %Xtǟ1z")\#?m4#"(Q8Fgw'+U$s%Oy⚲r|{<swޚk&S`!Fx-n & ڶp8|,:treˤKe˕-CllY-ayq'%}\te_(nFʕ}o޲RǵjwĶm~_CΊ%PDq>]ٽg/WU-""={R|yvKtV_}':/O\r_'>=5k֒HBb"Wa>~>;HJrc6sn;ڽ͖[ylUw>7b8q$=?vۭ3vcc9˳=ڧ9{K~oz#ϕ|>剕r عs'*T}ҵڶnIٵ{+V_8x+Vߣ/2ʼnlۦGmCĨgy˶<0q.f_J~UܓUrGhִ`>ޙ7K|Cir}ʍLܩ.']jOKkt)Z@Z_W⯾+cĝ8_.;wPX)D:K,^|!(eew$<2BY1O&GS(mjU$ L?LPsl d\6 e9Ƕ7Ջ e8<|w\β<882 S( VP8K_e flSLe<sTBRjԩǺKsXVRN$r8.[ZuTqke`(ULC%yO`!TQ8:WBY *X:bL[!)"W(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED~ e,˟ÊŶ6EfD*aEDpDD~ *a2vnۤղiNKRN#P nRD$_ }""Q(D,"bA""Q(D,"bA""Q(įf-"-[G=p8\.NeN,ٖYwbݟJN%JҤ鍄꼐BY$x,[re+pwnOb%&ijrBV,_L +$ٶſr=q8x.)qzVOYJbbBYD. e R g[+es]D$6mtޕ8 e|+)r"E=;[#=T[{rӝ\dyBY$b(Ǔ0k2%q+\8Nl, ,7x!);'NrtdhԎaB,R>u$EbVa] NWN $lـv''۝|ߑ@X*H$?I')RIJO{W - uW`_'[5ss_XGvv(EYt0 q I8Qfr[i(y-ru$a}(?Yo]6iε}zK:zǝGkYޮH`_씕;{j?yGs4 e@Z8on};{gWi?бSgn)͟(noJQ(T3\SEc͛‘8ogh96tO=ǫA=|'ËHZ5ykipլKuyj;ڶѴYs~v3mИJUjﱁ:uJ+e)ٸ~I>uߍ;WXu;7Ù|;G4O=Kpk,_S8Ub9O//}O2x@֯]zo۔7f |?V-_Lpp0O5eR>ux'ֿnlϟ5ǎQ4<Ιx*_W=oAei6ڵiz[hN{*/τqcm=|CTPG{u7rPl{mSsN:PB[{Ɛ}f QeL#0PNc+0 ְAA3cFo[6i?ݻѳ{4MP.#4D qSy(Fj#4IuMJֱiݟY7Q(s]"<#KsoZ" u"@!WSQWVɟ֙INH0&R(iЖ@TiKٔv_ҟ,GLD*H,\J9,4ڳBM?֔.)L2e S(gBY$_5@ʔ*EpIPP ̷׈/BY$s:ZdN,O\IM,\O:S(e';$m.CHp8.?Bū(Ug6x"y@F׳dfl"?s9~^"yHѢhwbe律.A!_"y"8$.E@r/"bA""Q(D,"bA""Q(D,"bA""Q(D,"bA""Q(D,"b'@b霮CDD::ڎs|)6f:/II9YH 0c;#718q,d/ ׳Zpɉ:ED2\)5ml_DD?/M2IENDB`gobby-0.6.0/help/C/figures/preferences_security.png0000664000175000017500000004565714003367605017303 00000000000000PNG  IHDRe 0sBIT|dtEXtSoftwaregnome-screenshot> IDATxw|W.vFd ˍnA2T(ˁ q,AD@B)+64i~[O]7K:ŵ}Zڹ3 ~QkX1PLgND a[i$&e\~bDBˇI:|OґWDTs }ۘNYsK/œt}x⋷bCöS2m}C.H?kGT&%1N,"sр+i{N"wns{)Xnmٯu)H=W)lˢEgqۢq_,< x<S^=m࡫3sm>Ya9ƺ=,]q~FgDnxy-~΁ XVYrpp0[4#z֫$ t9LUܬe.0sss{P:>]Oz ΚgTx5T:iG8[INͻkݨXEعWhlaSz#Aj߽@εޚsSj}gٻĬ25TۆZLpptzˑ.S-y)3y9yl9L9ƈz8Á4kޒѣG9}+-uڴoY%Ϲd:+0{;@kw1w7)wRh^%?0]=n˿{Qn'8nt|ppʹ11ám<7ÃJ@_?ƭ#ư-] FN&T*/<<\B-ٸt DʻKeyEm¹g@#| c{4yrܵ2~L9 $_}11*aضM@@ {H|A")+%VAio ?.]o22Qέ_T7o5'{ ۓJԊpXw5x!`c Lo"Δ8K?s^6.O`h{QҎ8<%s_`W\**h}| .KZZ*#w <J2Nכ/&217 c% g'\ҀVs\ ?gI)n>Jh&}~;S9OXx<,į^G0ks)2/+ؖE},ӦH dÇhڠ4sy1#1*~>Ӣ߹eNH9sY6p1iQ;T_V/%88ʕ+sojB:dսQ7@Fi[vQtZ<ڱՋgߡ$u,[ݽr'k"Ҏ"7d.<'@ٻ3C;[e=O>4lUc*A3ڬmFOU?CO^c]YeʑB;p9"!0߸3ydZP{7u%O);RHNt9QEʁk;XW!ό]q$Z rвv8hZ\w_/=>FNMjr}L Nή^;_)]vu8zgʹyaacBYʇ!ᢊ2j;ILLdر)TDz HbJyҼթ $26T qpv}s_nnc] 7 "26)`[18 P7вJh*8hY+KyhsikXlпeג}L9Sl.=kAWO"+C @ e9@%;.Je01_Wbo70mlnɻ^֮D6]Yڈ엍}/_CA^fU,+N"4pynuTmw|q"Rе:/NwsQ""gQ#T|._IIUyWw""T 3Vp8f_q""rrA""Q(D,"bA""Q(D,"bA""Q(D,"b.@Lr >}])tۂ!?,z&+PNIJ+;(-Ia)r ĚMs:U~8e[l?>Bۛfw9*Pgjji@trfY"=;2ۍk6β<,Uh31LIV d?UAai(G8_ZD:l^ʸ1fk*<8Y+.RNHCٲΟe,2.LĚJ4g Ǽ]O튻}&?L-/&lbM%3P]d , v Bܳ(kˋ5XS >s)љ jҼ n\WĚJ,g ec[$_kb݅Hg~}(|j˜眖ؼ"3mS]q ƶ|;Svwݻѹsgn~3=w/RQ6vGD emP۶s,lڊrɭsZu)u㘹=}3?-iX\`[ٖwAZj !j.W is-%qpu¯S'vk;"Hludb?Y^m׆O>[k9Ъe *T(_,OF͜yx_>-kI_pb`ٶϲl x~jשr*\z,?'执E붜հ1wMѣT&?[I޶fu5j7ߢ]ԬSϧFԨ]׻AW/|z)wZΔZm t B 0ϽmnϠ{؝GZwfs~KhަcjWmۤCҮS}!;gLhֺw]}]{ѱk/&?ϙ|al<TfϙÆԕqҁl_y .XcTX믽J,]§Y3_@N=xr ;wE3j]rm:t㈉{ 2fO{ZۅAWzxf4Gy \x lҾ{ϽYIrc{xٰa֮&88'| /ݢ}{|<3:`ݺ,Kwli߽swnK0n(^6 ˓ci:&*/)eԙNfjO?uڰ;ϦM̟>K~ZDppO{g6ld_]m+ws?`>c2{J^׮8U8_竅ٳw/xknzNcԪw?Ei٢1q֥۶طO>=Gm{>f͝u\m[\s`fϙcOeƫo=z5ӷ,ׯ˳S=j>|MV,>{23^{[`,S_z)aX~5jժNYtܝyÇ}>3}ʖ-ˢo{,^BE&?<ۖ~?.Y<~L{%n7S_;Fs;|Wc$%9 tzL}1ޜ9Wxsτ1׽+dk};Uնv/yzxvUs̓qqqDT3>6.P5mbJ:ۖ+WQb6ik-۹m[Sq7Ȥx X/~\k˾ ;ts]?o>ὝXFT #&6g.7ld-$%'hǺ cʕ pގF<^Y./ ţEvC3}ر 1_@@IIIp!m]}z3e <<~_E՝ իu67:gH"Wi޴ /Ny۶Yr<,?|)U˜+T Y;v?cªTaϞ=ԩ] ݻfT3>:z7U*[{|Dvm5{.7>g[jתwDHH0=v͙˯KSe=fi|ͷ|Ԭ]{^:Q '((IXٳ*}מkHuDre9v,}/{OfLuaaaDG^:9 SL\7CST\oӶMko!7\}QVM"nc+1i <y)>Eٲe MoɈop|<>dFy^Su+V$rk$g7h>f7gy\Й卾㯿!%%oȣONA&>[GmYx,.㱧+z7n-ۘc~_N aꋯwظ86gL֟+/>= 6..} /sAޅٶmzt1|;:LNqҩϿ*_۶"]:u(PMΡFDu5kDЬIcGcw)gpQ>ko?RRR "00{yyWue^fIH`׻8)g]ƍ_~M~\1Kbӽ}q:uCn{;~;n_F}Y'g?мU;]y ]t>}[t 5htrV xEޏm_E#m֮k,ϾŃ\r *=mjn>$#n_bUC׻n^qMC'ч˵OA[y͙ }{KѥsX]ɰ?:FOw_ĚOƙ+6t 7vZxN~ǥsZ3ɵĚOƙ3pH푛?/Δ gb'SӪ%˯rIJQ(P65XSJ?S>>ʆ3fk*ij3qO)ĚMI(PkE=e1X5dǎw w t: E)y<8)*NҒq1ٵ_66 gLDNLiɇZڲ)'ȿBDLtv`߬T(D,"bA""Q(D,"bA""Q(D,"bA""Q(D,"biԨiK5mYeNɗl˦ |ۧryIIIg͢lAZZaaa4iܐowևygxx ^C9k gHN 6ȭLz`"\|AA[3ߛ׶mf4apa^)ї/2/|G׻Y[LVU ehӞ᷍e˽}g63ߛEӬU;ݏ7z;_x~jE]gQ}ziƫi3u^MŊ s ˖`(>}g۶,_ҧPδ%2oZ]℻cݺL,k~_3e9߲igN}vj9Wp6O=-7cْ᧟ /^o?J7{"s]ASDS*Byq-[g $""I仭7 쏽}{C&{7CC{.оVoݻ/ҸQ#:vhOhܸ?+{-~H(\94Ls W^Ctյ,["qШiK={}]gV  66oò,9yu'"R7gʡC9t0Ny@3&3ŗ3oG%%%aĨ+ IDAT|7:|n]ðeuBܡC|ĝ|ɏ=FDFμLy~k׭pжM1^wo :>1]z$((vmpaޱÆހfևֳ7ujbmb ,;Sv TM`׵tEWeWG3ѣkg{ɲ)k_87h"(MDlGowktP:/_T e(ED P1BYD e(ED P1BYD ׬m˃"<9prp8]]M%>m"!>e~e=]tR5]Gh0|VCqeԭSބ+B)ɬYիӫw?B?4* f{D3p8x.ID rЮS7־Tr,\.cY`yJ~(gmrEiLLRvO_? Mrrrmt8Z5΢Z]ai۵I~]{m8$zx8z<Rʶm8S^ыʡ92tjZ*?SF7ltJmrYb? z`.=LPNLų#'Ԅ2\2s{҈܆mpATǁ={xJ̿))\S)>bZ=r߇37 =J?1nݺ!!ſ)1>gY+Np{,֭Czuӗ[קaóP nǓqǒcO;֭EI8'@Bz{pϸ?gU<&JM([4ܩ)2DŎ;ҿ,cxSS|` 5uyi3IIzw8޾ݲq]\.|UB+\Yտ0ۼ?cT^y-43i=j)Y߇+#p{73+s +z7SӒROBhKcԄrr3F.W 5r Is9&j;wEsVz9Ny=Q\9Ѯsw\x^5y͢zj]Ϻ%}mo٢9Ϙm,Y'=_ȱj+>Kɔ`(ov&մ )GFIؖE3 (1RsMܮOY8 bǎ]ҧ| k]W ǟzO>;ۖBppA슎f#g̙3]wUL;v"-Ϳma}>_ غm{fyz0vܺ4,cy|7nѶ@8h)9tS!a'س%n+Hݵ}pl%-vhRvL9Ng1M):Se8EFp8~p並le|Tζ}=g=6<"_mیqwO>O?[Pܥ},ZF ]I -6s%"%|eKѝkoYe NdV&=0K.@֭*BZ$_Ulќ@Z4o+/Mc63ߛEӬU;ݏ7z >yvtՇ?:|GfNhٽ4Uٴwkb йSG|meY[{M[g[XYrwfm~~^JӖm+}ScvQHib|(W +s;8Sh߾ZΕ2>g|~{?yGjɷ_-*sp%~;r: v8&GٲrvAXª Fa̙qc([, STDz zDJ)wҙ~޽eo0Egӹr@g9s޽ޟ@5 ]S匳L~nV c}Qz<8p*U;,,,}9O`` @P9DzK40L9S\wUCETx_2oٴ7g=ynxg y)sӿo_VM8 UTDz N~ƇCoEKjj["#ޭMÆ0i9@bb"K~[Fx FxYbbc9|8mS6? III4XfܘQ4iܘi/̜y 8z()))c #Fbf7Ty}X߱P%ӹ_"%/ʕ+ǔ8rh(^{6t!|8cIPP0ڶaü}p=!!!#zGʕ7f'ccO0v3o'DA+`lf7gO=&R%6=oܘض_|fQZ8Ǎam0XQ1^w? w:Kp^lcza#9J1[,[]~mm'BDLP1BYD e(ED P1BYD e(ED bYmyxQjB9# 9Uΐw et,R)RʶmaHiuLfMypض5W_u+:&!kEu\Acۙkƌn:̙=5kpp<+V䥗gЭk|J@WKq1wyv }LV- ~+66\ue1TYxErn/Q|_~ӰIss r'{ܵsw}rJ sc{вe lۦez̙7iJO(wd|2αlXyfu޶W^}W ?cͪ3S `:zm׎ğ%99X۶푛9ϾZ͢o_L}i۷\O?|˞={y:Fڲs~5d{]KZld7k泾yf|2A4&3>~s!ڂ9x bY#g|6w&? իQlY.m?ԪUDv#˸#,«1YTVwl/G])8c{h AAAB+E/rntWCn_uyG=ȭ[IKKòl00dQFl 3|(<zM)C֛oLHy;_.^5믽;o^7v~z<޶[wa-#8x cͭOrFq?ǟ"11U޵ Ӧ>w[ۦ cǸ_ƍ;f<Գd te_ YK>`\p5<-[D_1>N=v,[}sxH* &-%ٳaq;zm$jں=Qe-ڇ{vOC0 41kvҵ%9򟿥מGGq Lٶ/OHJ*A_Fm[NPD1*n:KԄ2'?RHJ3[zB?."tJ|(\tԍ~eú?X%3"rjN#jо}GCw99Pv8T\/mYʲ8\.C .rr( p)KpH.EDPJϷĉ e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BO )IDATYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(EDNmQi(;NòVD( d.NgўdajsDԬSӊž; ^H.Pnں=-t,"rj4o۩H-P)CrJ31BYD e(ED P1BYD e(ED P1BYD Ek"bx}4'˅:S(beϲe.Dr:T FZ% GUgv eRqeԭSބ+@O̚KYj9z#()ݞ!R̶-f7p8]RrЮS7־T e R Wsuʷ "϶m(NT(l>-"P9!ϰ~ݿ8OH %#94P() ɤ,An2w Wq8XXnBZ ;Ra$?9;(G8ptreOdBY `ф*+z53Np:i؞v'۝#-$>!eʜ},-"g.o%$r@mW(oy|X8\stg:șΔ-OǾ,76x&CzPQ:AϦs: Mԧ??]Q[Ox\I/$9ؤ_S.IKp023 JT]Ҡp/~Y3'uآ^N EAAׅIIMHKQ5ZRAF8K(ٵk_۷u[[rѴl۞47|S. e3}BؙgT]ky(i [9һb2/ %{pT9aw[ @Ih;"a(ZH:ZEK[D rPb TӉEf:p)Z)[$ &KbE6aL> 3{Mó/Hhvʱj|p?w9{vQS}e%iɟPqkuNQ4swc{_d-) sre:4R.Qc׮' %%n bvM-Yʨ1c5f,?}șWb|uSt- Rr~n9|:e)]Z.:spof\}IÌm~|9f53uJ^3{v/;3^&`b-`ݶu$N¡ @K\n׺P~!ƫm[eፄO-SR9>s?mN^>z~j*^už/YLoP_@ΤvkF?Pqt{׺ȞqKn)+0'΁ԡbdڽ:߸}}HNN⦡Cy} 8)E!bhz:))w7 >˱3R(8@gGixxOS"a3ґBYΤ"G\|OIuivP,ҋ!}}YE'N KfvBYKHpB]#qi.6ybbv=h@gGݛM gKr$>EDpa@4BiO""up ԔH;$IENDB`gobby-0.6.0/help/C/figures/preferences_view.png0000664000175000017500000007014614003367605016375 00000000000000PNG  IHDRe 0sBIT|dtEXtSoftwaregnome-screenshot> IDATxy|W#=Zؘ2YJ9~1Lgfne cfP1s sVOT$?Ѵi)iGy|& PMkhBY"6}aж8;ڣP= ! BI&.> @dguYwK@5-q):x@SتPکP:s65BjB|x;H:>X!7{I~-*h z1UQڽԨ5Z$! !NUE㞾te67<)1wqW8I m_~ԎhEYc!ϴ R ,J-UANMj)o$a@u͓ \AVB6Jj "6* )YҢ_~]aw@E{HBjIQILJh\Z `g)?OBѐh1FFIM +b^l"=D~G{k5j'>@̎tңV _(cBV!9pR>[{n\Vl[T-[efjF$Q5Mw }"lmrs1s:qWH ]ul!rCH(?򿆥t$To+Nڦh4Z<9RN}FgtnF=u8z(hRU*U_B芥D<|@ESdOOM*R޴6G-u؃^gw/Y~oQE_G#DR  i}VčfކT1ӵ#r4~ebʥz(YQQ& JX7$F7Mcr"99WoSU6$8*)^H.X3͓ܘՅj[;?Զmjϲ] #G)<|lq1Œr'9DVj+?# Z{ .½-$%6& (v,Qӡ T.nK5`^ƹ70/D!VP8YéIsmjuJnp]E#5EmRʷw7h?;p1(Vj%hxeG j㒠!1Y/)+߰'<_ C4'yK|jhZC0<;a`?@ JL1 ׵Q;)!!ТQz ʹfO0mnMOe7m )O(Y (^'[xYs 9߯#KԬۀA>fש\:@7̓VEߌ7{od x܍N/+!uR] @LcӰ#~.Rpuu%|߯h˿ʫM!{KI4X Ql!^PQTȼ9ؤ9Ak^Tۯ4~0Ɇm~3r[Z j>9;b)«mtcN?5ϥ]coJ£[gHHLdxbs,77۾ %o`1 liaFwnVr3%s͈$kݪwQƽmqDЪyk8~#^P'} wȽxzw̲}N_C#k9v=wa;I~^`V?wOLCia Be(Pp. 7oM m4ZD`5we{nd6c^RV*h9']W9Lb\")7xxv<6JqDt`B]nMY=)HB;%PՎw~iEMEۙ5|3!QI'ipWP#x7c~I"qꅜB6ZEk*R6=՟ Ej'Ip6w$_c>t# )\R*o"..Cܼy /jO!leg+ZVyƞҬ) -+q5Ҏ$-jMbOjoNkmmBWiǣDhS$*ܜ~ꕵɖ'@a)[1K--NjtEbf&ͻ>-96T>xgO|ܢG^icH5?U~X<߅39R^>r3Vfi]zƓ'u-=h5ZӕukfVzu}3Slv-VTKZ[/!hPӢc(2GXW'aa899SN-rOYOI[VMYfHlu[vˣ8]yqO4kٖ55cj$&&2vdj7ů||^*5Rn[ZQ?3it36vPʕ.Ɏ]{nתٲ}{rRie/s/{; *{] Z5q)Ъ{ѣU|$͚׋VB_a)»]ť(WQofqdZ c妞[! u}Y1 #"2Zf݆Mxݸx_]yrr2, 4g|*YR l~evƗ~?5z{׏_]/ޝw xfȚU)7!q>~+>wNWw˹p"ȁ};Q왷s8;φ5?rTYc06.V/"*:];6qJ;&?#s|ђgǶ lߺ;w/3J{ZtԾ ם_._Ð|޴cUg'G{jo\jlܶ ʞA|4?nJ{kzV;o֮ϴ'NfUڱH,]fvȰ;7^* 9m?ɪ&7eҔ%_.cc3VL23g&!!`;S}׃2ۛ_}ewpvvԏȚrig,S?hcteQ'G̞}4 ע.fZ 3ʷQ#S7WWF'i;~3ԏeL>ukT(8t4Gqu)J׼ &{k׍U})Y՗M "2VK9qZ-΂icXhZN=ObiN_dkHH(_M@-[֛kZsqeԈlu妞-VSnqvr!>fti3nxRѻ{7.]WW헝1r.'}hxM ̢'O/o0<0c`l6ɉFr-:»m5_KIN̴MTjRk3w~K}CB4& OukP(su)lcc;},EFE{\=SDEEU]}dTycytoҎ2߭Ƨ^Ma Cvt~ZWqLN*ʖ.{qtPܷ E2%qtR7 .x׬HTt4u|h :P8Zzw#"2R/rSsY+ !ZI{lk)jqDd%< >e`Ё}:/ZBXz=W3c3gmMc{^X2}Yt{tI]3#I忺9#5*U|YoW,kSU͙VБc|:m6{vl͍~Aq _?S iVwܡLRܾ}xbsukzb.Yi |x [6nEdd M}fHUoIs2J[,v_̞zLtEбM/佮t1IJJ_c5,~]z?`ozԟ~-ܹ[1WXM=GѸax8&-]뜴I͍۔+[&SWs ॲe$h(~^c㳱!!! aiX9ϔ L&E&B[: $&&s<}oAWo)wh5og̹&%%+W1zoͽb]QQDFEق%zm/\ok߲E3>[Ȩ*y+)?vNNI1F z~wR =%"*jhߪ)#kT'],q=V2%<,EW+eTT4s.uz3VnOLL;;[BoeꬹY>Wi~[-=1aHʕ-goScݨym'`P6{>m삳3=}CG ٣t3x]!2{tx;ܿycEQ!ڶSn٣T*ҧ+Ct5X/s.cbz!w2_of]vmZPkս/?E@Sfhg?q|)#Nnok~k6ۓKNj=ެbק6nag {[17|eִfal|F`9||%=ݣ+{i Je˔]&_0o`u~O࿬vlڽv}'+/Ն8= [=}acHi(-%gЗ@9so׊^̜<B<ɑRڡPˈ Mr2Jg[u ~V;h;S]~OC |q/={?qR5y&>NhZa-Pzmt?>fD*zWcպ6?XEEj?I(zIΞtۏOiWZ_@*Ui+S{g8>Vi3f59'ٺy= ;~lL> ʕ9^~Z~m2"gmRiuOzKB|x!NN #~ 9d՗/\Ǐs8~?&Es[V\q*T(^prr6?^yeFgG1..0j22>l(NNN4oP]+RǎI1WW2vH19c Ezܽ_T)y3_=CR%sԟO5#::|4FPIQаAL]]\8yy qҿ<~Xw%&66S^^߽w/2,ݓO׳dmJl ۤIw77u._+VԣjJa~_ IDATi NS&T*6aI]Ns. KhҸjKi޻GRtA?g^v,Q[!!ܻ;)Z=}ѻWw[_o|0|666,Y8 T*1.\T*9qo$0 @Wآ9; ꙌQucHJJbY֝\cbayzI:ÌYsrS|{ɓ8">Mi߂W{z0i4]ΔIx啗X~:k׮3i4H"i' \\]Uj54o+oꇽW+UHT+нWtD^ʲnsۃM3j$=zѣ;gȯ]A`*"3o0}є[ҩ F[`h?n1\qQKgҧ(A F]r+,#e 0_ 99۷:m!e }i߮-&MWPTTŋt1#Iي{:"O[ lAyڇ"B+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!H3̮PsQW_*+s\.(x NRNJSsɺ66Ӫ]G<щIsIIZ-,Ǖo}c1M 6Yq&~eZqUM_rV-_*Tb:mt)OsȈOF]}|oy@&jܸqѣG3p@u16[ٓGi2'D=9u0Ǐ 6c^cOsVc#"Xh~~5_`͜'[s1ގ%/9=w>s.` 3+vS&=vnAIӤ<~(܊=:`9۶}n|nŊ1~(/siBCCܹ36l`ɨT*f̘X)wpp %SO3s\_H||< B}ҥGDHNVmeet؁ϗ,eOpw7;v#_ ߺm;sf`ety-N9g/^\%uYDD$J=.]T֓"#=z0sLn߾ΝK.+We٣Gɵ8w8ZCBCuCoͭX0xxsSׯ\Խ7/]bM|b[7n4;e˔a;qttS45\ٲ8::fd:;wb , Os>`Qn|*k3,c}Щx?i2zv~4oFo0aҔ,eϗ(ڵM=EҮm"""ig<)[b]GSF}|Ѫu{jתayu!,Aۨ`b":ksb-0{×2aTO*g:ϴAL蹌Udsk׮ӻoߝ'E #.z~C ΅>|66H!4kgBd0uL BrrSg̢w$BXZIE]iն?jIJJA|tR4|DZ4!r$eFˣBS>u^׫Ec a{O!#IBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBX-qɉ $%&]_HOFS9xK/|^d}򧂓8sg->~jבGu `1(0IYtT*ubbbزe ]1A&? Δ-S~b9dKx/ 2: VdoݺEnݸv*UB6Qivx]M?Ӧ}'6_MR,6v!B_ll,]vL0Fe;#Ux3iXy[HWĘqVjc$%%e|EoVYG*UNpYҎMeTR&]Az ]GbMߟ~ZqUM_rVfW|G||P II5j˲o3{eLL,u7"6^X5lBlj5ΧnT~&Æ ..سZϴZ7c?g?SsZ+I90}tnܸѣ8p`wy- =;!ؿ7ɝ;w!GcӺ5=yV-;~YҎܯ_h-G"8wW̙ʏ?[=܏`FkN9v1i4sqq_gf\| ?'2*Î_~pl7wq)믷duz׮[Om)ZK/}fN=Jbgs:Zrel35쬵ȾW\I@@!!!zj:tEp'66Vx/;8~ nnx3q8h)Nӳ8/~۸$NNN-SсfMh޳rel~mMT}zb+Ý#ԝ~~ّ昝W2>LW־mkLIDd$L:/S)׮\)hZ4j^"2*gѱC{2_?&L1o{C;&Nߓϐ7ڷӍ9"2)fꕛozṃGX' 9;SӋdqy))){2Æ0: c^[NcvZd_Lʐg͚EÆ )[l㔯MJUӠ1#GEgǶz9"wwZ /OO>hx4}ЩO_ `Z63?y׭StI\]]Ɋ96%22vmSEm䒓!E_sZ} gk=?׭CQzm}L``ѱgdhjr"j &&^޺N=(6C˞1|x!f.@_bB<1i2MDˈ{F\ A!AG g ȯY !)0Iٹ+v4:Z-IIy;(!Ȧ-ȗ CN]a >!ȏ$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBX|+zWw=gE/ O֔j˄"7>)r9\rV}} !^ >)gluTQ-q*rs6V3>Szc^ʴYӚի}+/ @ǣ8s, C П+2k>B+Iy899ѼYSBBCuei쏃{KhƸ3mʧq#'&ȶ$mK~91ah;'c,Wh4J%aa9'+wݣtRs3^=e= 1r4Gi !2)/ݫ;s-q௃7 [qL_L|diCtt -sȰ\2ޕ+ӰA}T*A/) pN? ׫GwT*Vߦ۫]&Xjd`ezgN¤)`Jxy1xPoܔf?]AHm3j$=+ +zsJfָ֠ M NRNJSsɺ66Ӫ]GXxB|:g *:111lٲ]a Zd4f@R;;;SLiҷOo܊OI.?UQIjuJ ֭[t֍k׮QR%b%x]M?Ӧ}'6_}7n0zh]~ }(>sgN~*Μ[ܱ.Zl0Nӻ'\f`,\FW%KyW .9zMpQZ d_}ؾu3'BR19gnJΞCБ[w~2Kݏ4ӼեUצ|Eo"*4ϗ,EV`Ӎqq)@JsaahՆ)_ћ>S(9gWק624̡xzM=BuGԣ1c@޽)WX~M,Q.[V1r8+ 'c }7b `8ƌϗB GZt-3o̙ӧ0wL/;?oXgqӕ`kkKBB.FG`|Ms2Sϡy@)у3&:fBB/\dʴ۰3X#z?Sjhji3fEdTSϢc$&&RaR C`71t@r=njۅ&p-RRRe xޕ_o'!!pO"49PTӤ1oٲe8N( )W,Mcf o!pV˿y׭StQ\mۼer=c:f,NKO\P_91Ct)_%ҙӧ2j8%Կ+49PmP{P01rlֵt9GѦ+[X܃\ 3rpmt01!ic4{3!th׆Z,|qb87Xa77$)+ϴA&/.ȯYCu6qMڶi#ҪmG:Ւ#/ZҥJx|yY@VIZG,s5?Xԅ|f !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$)3Qѻ"_NLLd+u.߸Irr2nnnZfIiIs+(x>)?|p;mZcooǙ+9IBlV%Kp?]ަH888аA}r=^j5~TZXA@6T^,;Zml%vxWE9z츮+9eտBXOʻvC&* b^z߶o򅿍n9{uԱt~s/4x~In^ysz?Ǝ3ݑ핋H7;!eI9""7b&*M'h0LniZ쏃{`Ok2>l(NNN4oPb)<ϗ՟Svww{DFFY"1]]\@VGw6mlvvvԀ3!eIer6ZWVhP*o/OOBo&:RP!ċO_ :W+UbŬ]G'eP IDAT0]2Kow̙ǁҧ߀l)\0Oi<yꏔ)u?+X͘EJJ .E]YWo)L2gMWTi >MWQVM+[q_~E@>^N/ZjBmP{P01rlֵt9GBX1otud/E"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+R`rrbqb̾=~BioYR޹*tHBgV}JNJSsɺ66Ӫ]G~b|q^&TR:qTT%mjsSAc*VaG'06FckojlB< 2)g|!M>7n0zh}[qϽܱ'Oes16[ٓGi2'iY_\z~{w/{?vlߺk/dmW_soɣPTlEa7glBW\I@@!!!zj:theee; bp+VcGe3Ӊxzё &⦷y&M'Ef¸1j6>cmȤ ٙOF~<1ۜ 94tܙ 60ydT*3fQ,c TɒǥKTť))oUߏlj^Mn E6z &vm؄k.)1c@޽)W3͍wPLBo߶yxs+$ _TfkkKBBRsQBw~ްO y汉G;}y̙ xf}wh׆3gMTt4f̶Ek׍_L:{x!S?]Cʯߓۻ︦$@ ZޢWiQTܶκԶ֪WZöںgmgq^G"D Iy$oX{Nr"#4Lo`S+ڙܶ}G}+ -kbL Y;wRk=a֔@Ycr* eﮝ6Ѯrc8k{中Ȉk h?{ 4hˬ)rrrafI3g0v( V[ծB=&UN~tLQ0se,KϿ5qhǪ]!zM(+&sB0__k3 !nO !-PBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPU*^^lS[Y?$ S>AS&QXї:KO[\ř~ّboGҼUC !ͬ/?͙ ߏdSS)}9z,EYZoW^oVK@N|tuU;qQs۱af *:izjxբZ4h܌iT}Z&~Tᝥy8y !M2taU2sv(^իoϯYLѣFΟ2%h:r!+|7(&# M~\~a+OeBX6l١]|۷qܩly !M7+W&uu~Zoʤw)I!OOLz7ǎfM+[mZf gͺ t֕ŋY!T\ :w{R ?wwwE֞"gT/oK,ɤw'dX[,Q"ғ|Bx"ωÆǟFY_m;Tu==ΟfLFZܾ5){6z}{fJ^o4e"'hؤ= ?t:]=r8 ? W>1n(*UwЙ [ZkS4({$&v۹m=V]-QByy=\(">w"#1dTb@Μ=GBB7n0sV0t=qy lh߮-SKzjŋo텣SG`סʿ[0rSG`Bak$BE$BE$BE$BE$BE$BE$BE$BE$BEc q,@(&iB/^:HEO( -Ӻ: Ҫ]'?q߶Z8fkpy a7(pp^>5:111lݺ=3sr uΰ Uh4˗eJӴIc OBl/5lKAg+nBhLL7իW\jժɓ'\z[MlٸҥJYmBrٓW2uT6l6ܨYËSн_\سwZiO4mRlٗ˧^ޤ7/uIگRfm b'ac޼y ѣTmUW+Ac_*VjLxo^PAc>[er6ȷ9UkxӶCgΝ_v*TJǰfz4ZMoZiϱ'w۽pE ye6Oo^B gϞ͵kט4iÇq=ueiDǍظv5q*Em܍bi3hˉ#8zh*VdVp(Fg⥘L&s|€~}7y}QX)o+ϥ*`=fߞ_m;~"UCe:ŽUKMz|[`U?B?h(we:qmZ3ie\,yByժU4oޜׯpA֮]/GJEƒ,ӻ{.ݧdLQ>-h2.+ 3-h2[Oz;N>z{o6n?3^ƞg@>9h~… 4eb:~0bŊ9{.{3?D⸺2?bcc9czΜ9k1Ho^š."""ҥ ̘1^Oppڿ{7 4>]1{MN4kɯJQ^tGEE'Nk^K*^xժýnH;j0>^ F0|`\]O(ZheQQє*Y8r]]]ILlOyώYX_|v3;z^y֘dwܧOBBBq 4уrY7iŗ1=(q#nܠpW#njo^޿+qQ5- 8yzv.\7odv Ңֹa) exɆ 68{< aæ-=~lƌ(峂}1sv(:Ox\z\zGD0%hzrFè=j8..ٞ[vm2{s}f ϟWfdv Ғӹ2!)CCClٲnB/*Vλ׻ߦsCu <>^K6hԴ9 CMݏW_NBٹS0!p4l܌V[6ΖйKW_d%E9yMӸwAbn縱ӹ?ye+}ç25dzW7wIYS>gK?d1d(:kCvm&+W?h({wjy"'a vcq!# 4hˬ)qrrafIA& ph&*mΜѣHH0038ͭn^c7'vf%դtR,^ZuvJ.ki/m[`OsnBY1)<~/MںȍoЯ/zy"ݞB[$,*",*",*",*",*",*",*",*b3&&Bi4pֻsR7|(D߽î~p f!L%3NK%hׂaTfl> q*U=hdGFGerF %9~p/%SW<~:eŘH+tJ2z8B(()z$}uo]F|d:q FY! EA1~DRǜh^FLa NX,]U e!SPVONѥ[7^Jn ;<% e!S[) {;a׮\ ޣalbl{BVCz ={&t1;8k -b++WгgO*WLʕٳ'W\1+ٳF-"}IA1PL&V}ݻ+&=wc+R|Ȓ%Kh޼ŋx{{{{{s…"HsuяZ퉾?;2o<J.o.%_|#66SaOz@8P?~<]taذa|g7B8@Bcbm~so09d|aV\ ƍzUr)^uN:EjdBQbtvOjժ,^C>ܵkW̙Cdd$̙3nݺህ# 4OZm(/YCQNԩѣGYdwԯ____|}}gϞy8b!Dv=ol]6m!GˉTJ6mڔnF!((8*!Dnx[7FKΝw|,4INm6SU>[€#o ,ȊePë-qxr X ʖy:e!xi8yU*ۿۄ&V$6OQHsiU*N͇F:Ib-JvPGyz>)ktNPG`4VB%1)&2ʔz>uޕ;Ӷ-̘8QVB8K,i)Z41ĩ6: o(:j;BMLF#8z0|($&&X}W!žH( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H([W-xa)K'!rNwy/3EOLKѢEhdY۱af *:ihcmnW:#Gm3qFXz -ZQû.;e+D8, 'OzzjNU~evls=rQ&eæ-̜j._f-ߟFٳk'?l… ;Or̙ׄKzu9q]̼IznaILLdoXÆY?f4KѣFΟ2%hzs5VePWgߞ_Yr;~iѱL('g8;3y⻩{Bʕpqqsڽ\|ERpM+ ɩ^nM~%Jij\(F+`u9weiۦ5kmp֬@n])^X3kz,=ǎfMi땫2] yzRӓ)R (T/Y`0nFfafp(׮JQ#cO0"y;!sۑ*Y21Ν(N +WJQy-ZM[,bFOAFF f=KKA Ggggs}M)Y =r2uygfRñ'X0ogÎsc@`(^,iy Z\]]yIo)ʒ8oyk\8fQREZ֭ٝ"EYϒc`ma|v=!B`0qs ʕ*eRLF#`00 Ys&&!s榪Z}}V˘oe`<|XCϟ->^8KOe7K<~L ߯je3\||6aG2}TTҦCg*/N^oYȼ!#Py Za }!*",*",*",*",*",*",*",*",*",*b7G~FyP+G~<^vg&n"'OoohėV:ALPŋ縝ծ-c"݄}{`z4İuVzɁj963 r+$n^@N"s_vFcbN^r UVhL|ɣB͞rFCZ RjLo\>sFMYJF#s}D^?'q.C9?dgڵkL4Çj,ѣ+?cOeDIDATslXGôjϔi,w֮":uhGACٽ{/kVԉ#mӚI?#ؿ/'}TXY\|w)oEQ]Kً=?nnT -NQv۾sߒk7 e/|gϱ}۷?^Oȿex\}{>ayWS.]ʦM(S k׮4mڔ5k֘O;f8V!!iԔVSLZNQCxx ..ZuťS[f4GanëVT=hԴ9O}Yk*V(r|21K]ArzowCѢE=/?~8}*K>e.6m7˿R ܍m9{U|q>SNA.]شi3f@2 hJ,i~\TTuCՕs%ori=|'N$d<Ξ;ϓ'Oh2(ʖ)nyVQ]Kًʔ./rfl_.7""#ТUev\}>}7hРOG{m ͛7nݜ9f<}=\x'(J)R¯Gزs̮G<Wč.\(?nXUyC(^:o2BsaÆ;k9ܻ{3+x*-P ?^j>WL iovČ};1sv!;lV#=fSl͵xblXMg~ޟ_$&&rEƎ`.ϭ?O2!)CCClٲ/ pwwaf hO:qvvvD]~~Nlfϡw]zǫɴqcFQb%w_ J>`M9f^K6hԴ9=~l3%s-Z(׬dm,^)Ç~Ww526_["ՉO/djnܹj0> 2}΢\+W?h({wv3amr/ 4hˬ)rrrafI3g0v( s+5k [c7'vf+c)]~EsLuL5vʊIÜ5 ![hמ1nO !-PBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBlPYUCYr?6&ɚ !( $th]ZvP ϋ/Yƚ !h4}#JZmWz=qkjYa״Z-f׬ڮUCYF݆lR!BPBPBPBPBPBPBPBPBPBǬ꣘F>рFEӡr; e!b2C䭛y=jyHQ4lGhU/PŽ>ef|V8~hGW\Ocb:tFŘC9:u_{Ka0$9dBI9ۜtNM&0s\AEQz6eA e!(/%RDNI( R6ӏ|0l^!khõigtܿH( (, 常8-h!6t.sFѢh4`2)HGI(I{G߶^ { B8% +ǏQ0 Z'hA4<={Jr0'tĤ5 GG텄@AAQ,D_\|:PLh(IʉI6S+FFԦ;: e!AV&˾L(~/4|BPD4`JDS7$NE ~2ј?ʔkfuLHGl1!i+*xt7iCuHڪ0$kA6ʮVdǑZ%P$m_XEOE}$)]M)2P u^cŴv$tTR iu?:bԣRؙ?bq",CPN4\?rl5O(SJFtyQ¾ؤ~RN+WҭG/ސݿ™|4a{q䟗EBYJ5UabU8 y(v%(D?I}巏?u }̈CV<< ӥRg]u4%xs{hѪ դac_֭h.KLL$/zb<~XVBSqʭs(׎3I6)Ӫ!IivѮm{- v$7o1Bsp&8֭˖~gΜmqz=!seOY7R~Vu ӭsp/ܼӾG߷A)\.̴)ls^Ν܋G =\afO}bŊ{~٩ʕ\'0IL0XTטU_OYsFg;~ZӒvi (;w(R ǓhJ/f~\xQ/Y8.cKG4=|yڤhWX|L^& e!@VV{ESe҃v/@; ww.GUB8|O抛[)r:9 e!I( ^7Pži#=+De:C e!Fx\'+T`Φ׮RTY4l^B1Ή{8 ټ‘Z/AzѻzB1VKAOOZhG1t_iN'}',hu]ѻPKBE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BEzB!iڵ z,Bᐢ#o0fD~?pHc޾HLH1 !CJKX 󷽚n]QL4ObDGaL4~@ݳ(35/)ā@B9Y>KB8J , _IENDB`gobby-0.6.0/help/C/figures/preferences_appearance.png0000664000175000017500000004244014003367605017516 00000000000000PNG  IHDRe 0sBIT|dtEXtSoftwaregnome-screenshot> IDATxw|Se_ini d"D|-  PTTG@EPF6  ]y( %B#g\IS>ߢkd6.\pnjYL};BDD ˝̩3IVh gσ[԰FlMтǝpי91^<\eW{|;.tRzUM{ǹZam'S ),MwDyf0(_X'A Gf-Q. G|2_qh@'8wOKM( U7+n %?BP$e8ggLkNč)^G9Cb;[z~ 5͞ $:8wѫU} p[nR2SNI9q#gna7WymQ]坻i)[^qc ,Gl8jt'Ovmݢ^ ےZ'nO>_{{8v㟡t^l^2/ ݽx>x;fUPť;r.^,fKr% }E0pn65溈 n/Zcd7'X4 d/O;T8 Ï~Rtq,J]%2 v#zx1sG>w6l (X.F{˕Į>T^&j{!ܿY7:xKs*YmEY>2o_$" 9u %99-S!"?:i%Q8NdAb2l荾5w{&}Y~W} N_dr|&1}W+Z!в,5n9z lN_a;{M+Xn7gb4u /I9vU*$,Q̘W{Q%Kn_7DPhn_&Y7nhn ft{SP8Sl0mT ŝĝtT8/xk[Ͽvsd_ln mSчd)ns2!Mp3I)a/:uk8}3g:aYesO&]8_}# 6lpBɂ DAm6*@;$;DHkز1q^l+?ͿY|ý%kdkr@ųwt*Oz x~`$oApG/F]mEҭ.z(O3mL{lc+.GϜf!7?o:#eN'Ŋc][ʷ -w9_ B4 u''[#ޥxZ-jF޶|4T,ęd7J ໷,`xfhTgO'СIJ{p4!珱[&[yey- s:|` .fgkfwnK8y'9Q&]qT#yC.ؿ|:waiEJ1K _Nݬݿbva|OaW?|MֽiL-mѯ`ƦhZ h/KӳeyZ(yO" t`b 9ۮt%v2YW]_Rx'""*W"..J|mą~L;cV*DrJG36OFwgk?ݴ_0QL?@OV %.Q68&BD$\:!""@@𒌝rz,""V],DD$(ED P1BYD e(ED P1BYD e(ED P1BYD e$H<֯^&~׆J`;(Z:U~ gЦʉgΰy c,)Ѹ؜_Ln(_I;nYY/fHĭ9=+nS4q,;ͲהWfL ;KvPvv^KƲ5Vs{nm2cܘ4!n58_ai9!e}&_&-#FBshquB <5fG $9:Βt|*W[ghcb-,+GNYΓlXv-jMk͋u)ظ`YXn;0敱0x|2ϫF_7i.W7,JP+nQo;[7vEfHLLx;vk\ٺ8rcX\>6_δO>J#0ַSv}Ɛٸ,"11L7sK|4:Ukj<{y7~f 1NRX.|g\.III|6c&vyk\om:Ŷ;<~3[mwЦ]qn\閏>GtEGyoXE g߈9̄.7ٴi uq:=Sޥޕװa**VK/ju,~v˘lܼvmZ򉯽߲roWg5Jb)V(m[5hҬ 6Ï?Mw׹|B<--rĉtd̨;/=Xg>T6n){sVf~IoxqfMMk5eYn|k*G໯'XګNVy 6[)}Dỹv,<S޹1We)ŸynjTJl5iԀ?֬Ų>WsI,?дqC؃,-vaMN, :ё 7{^6/JxxqË|˧Ϙȗ_D`OҸqcN' b BXX%=rQQQгl|%"#yi`OW_eЀg,Ahp}{?O?΀~OSHQPNtKZ/`s} +ZbԿW;=N[0]/Ҙ?~׺}FGY/֤aVm1p:̟#5hܰx쁩m_p'unt \Wg^wGKe/Rӭ$&n{Lxeoo> d@Ҵ1чc~6ͫbE ?[Ky^2xv2z O^4:5aXM7aيU)\*+Kf:5Rxi@>І62;~A,J.Yw^:Չ3(={R|(Vf|lJDEy'͐s[[)X Nj^_9]dDwBkmszq;!~;eY޳iفDDl\,%gx~Zs3{xwif.];Ow?/?EEFcǿo۾QժTy7 |iF)+΂X|gY~wƁ_֦wc-tCd誼w]yi86nDٰi /=wwl7hvErr2ۍ>w0 ݷmACGx3;i۪^#3n:?.T ;wߺm4IVͳ4f˲IC9rF eXbQ۴o˲h׺LxF ҿd)->?szi|SҺ4E_gƜY={pM7ÏpCZy[;Pz-{anN*+u_L^\w]ڴTɒ~zǞ˂GJCчy}ʻԨVc{GּڛD>'0y38@F%v_;- 0גG'#N`-s svS-M?x{\26S/9bb(W4u}ث?_}_llu7OnͲE;?t/u{3gxٝW'A{Ufxyi苼4KƁunb77SON;j0yʻ1, {\A'DFki=73;e˔C=7͍Z-]CYn93I]wcǖƼ/}(I/n7k_]-t"u[ݗJVi YwZyU]O}a:}tz֫dq n9}iy-}& ǖll;oʹ7rd(^yE6[=9Iwʆ3j@l6 %no e5泿',)Kќr8Y׬&cˈicN8}2'v!dnhx6mf{(D^wؑBk&wfٺj7Ⱦ' tъ\ ]/SAkJklm7HD$`pgWT(D,"bA""Q(D,"bA""Q(D,"bA""Q(D,"b|WUjd\Dj"_r].۶nJ#:C7-" wߧY6TQ[[f{{̥Zڢ5im>)WAjhtm 'OâiS!|94oE5ŋHkCߠ}6cm[b7x.i,Z?%L5U>l6 g?6[sY_2rtmm۾?n <-׆/fЭ#8N?f_6|-JbE89>mx+^GPPwſ~}&44R_CF)g :%m%J{|!Ϻ?֬eߜ>}˲8zX-.)/^FEE^69?Ok2i«lٰȵhIII|w/i7#GrQ^?]]. *DRR^ JD\;}t',7̝>Fdd}M/i4o֌})^<=Ǐe䘱<ܥQQ|m\ ߖ.h졋o}?Ι]vrzl`q8쎜M:>-ǎtD<vGDҨ- f7k ׇ˕K)[<# ׿$Xb W-YV(r}YaqD`Gu4a[+HJJR(g;+: dvەCI'Y!mc u 9)1611L(M\);E;{; IDATr}P,7)U;t o(̉בh wE`<XV~ɉDfױw׎lˏyYfƎ}sGL(g'N0q,':DhP&vyMW?wrk+g,g|VΌ䜌3g1dpV‹CaYV<{NOSlf|6RJr1XoNI㆞rb*}_.Uf%k~1k6c_өY7nKǰ(ά_΂; +V0xJNXX1noߎϦfT\vd˖?= "j֥Zͺ za X-yW[nks\L}ojD5`\JPr*:.\ίĈQcS5j?k,id_~eT\77ci=tѓ*kSJuڝXJHH\&7f=?|~_1%%&PTROɓX C1slv9 ˰=-Y[]1c&>5cY5jTgG0cLs4vMwB;ƺu8xk׮#!!!ÃbJ9 kWѦUK8S>a$f8p'cY77mU,1쥑 xUrs \j5."&&I_ϝ`ع/_1=l۶~C?>y=ӇM0sg[>1uѓn]vrVXJ 2r+~ڤoX|<h?T6o·sfͪe8NƌeY "fżoDz,_~/f؞+A|9kժVZ_jU5@5M HL}M_B:71r ǎÇIHp0?֍-nϙ-Æ xX s֛rj,fN',+WqM} Y<,aCy~VW_ۧ=o>EJDERP!0ƒYN1T=218[7l3(B sXd}}3wXyd?~1kg_ ϲp`Y0I?WOdט$2>.Zx+Ԯa̜ەLJr_ gz3,v>`g=6RRR<(U"TIIN~: y$)ɉ|3wcG#k׭ca>P2*SV2*8L^/ie11*s[ƒYS&OwgS(X Cy[}g :a2n3g`+66k*Ὰp>L6֝?bE qgۙ ,Ŋq/5)[Xn+ -W!5֓ػw=+V mBҥ8zsS.?e =js߾է?clٳvYKj՘:e2+~a/ š#2SxXx!oZK,_cpݻ}pyg{ZO֭3˯y|ڵǯ5~ĄDy6okrW3ekᮏƒԪY|7=n߮5ǎ#668F2۵7m҈WM,ѯдI#cJk̸ WspBwgcltc^h?W'=۷ Arr2npL 8Aw>4ҫա}[~cq_{a޳g}²,N>MA/21l~/}g{~dm9w{ NwѭSlܼ˲ظi3z>="Ps9=؉76އp&MޯO/iu{GZޑyS޴q#hߦ5eѾmkbh8Pvm:uEt'[t!*רȬדStt-AQ~blތ^}S~cƿ6qcFf8/q] =NڵںX_~" Ѭu{^׫>օ֡KԾ>?͛aY/Gu,fLy웑Ӓs(4>ҍ{tߧ~k͍Z-]CYn93'9yH6 ?ɉ |6|'_~Eطku 94r / }Nӯvg|BE/{lehuF}ѫ_y/~оH^}wPNmʖ-s 2fH""YsLy"L(c]H_ʘpɢ|r}P6Uɚr}PHU,vma\5?m`9~,[NEDr pFfFeN_[ȝ,"fٹk')顤C~&,_+֯ݟQ+aQ$I'ׇnHb4oݎD,,HFl L@3Ne݁38gphNED$K e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD ȰlMOv)"r4 KrfӬeԨí-Z3qWRoЪmԨC;U=n+"r}(0qoۆmVLAmW^Üf2yxo Cw۶n]\iw/ӿ@t:hf̚O&44 }ED ,, p6**@,qdESH!oZ&>ӱ#hIII|w/B k/2t',7̝>Fdd}M/O=[Lyv>'"9PX8پ%qn][G.o""$O_% e(ED P1BYD e(ED P1BYD F?, ˅uۋd͎fwhlݜ8vK%nS<"FohX86Y>]VXJ2tW%KXj͚"(84%'e9x`6WJJNID pPAֽ$rRx#@8\n7]9=tr(eYN"riLL<X>}!lY:[p&b<ʖeNY$u-2 eH׭<X F׭<z/"WO c<-ˢEl߱=;%/-{mE 5˲;n<}>C{Q e4}qEӢi٢g݂?Z UC@ קϧb*~Z8Ob3y{`~0 Zo٣;L}k;S;S%$&0p TYj50IHL𔗫p=~9oҮCGlwſB6X*o3jrM \DB¹w[ǩRT㑮݈'%%2bhԫO7)KIIfԽTp?6ya9wf#28пgy&;e-ٷmӚx֬YeY,_GѦu~v &qP4-~L8٫+WlX6Z2š~{6aX~W+WfsE0in=zҭk֮^KPZFzS>7ٶm;yz{*7o9_f2N'cƎcϵgvjTy^ZUٶ7M e,&dm6(>XSGǺaO;y2l`ΰ!/0g}А:u7LSv$sROvL~MfnxͳTTy⽎I`O47PPA @fz.ٶddqoՉs_9 6SKOtaZiu ѣ,X'OR 44<`$eYҥ "}"00 c+[={V}ר^SR3~[C^bٯ?y9 o<-77`:u z#g>-_."3iDEFd*^w7oQlڼ&M_Y^[Rwkݺejzt과}֌;8bc8no綗SoAl߱dn Θq'..ѯyq: d} yiWx#ǼC;~ѯN=p= >{loA9~lrҽs1mc&ч}0x7MS0b4_1fn@֭I.|rl~+g޽/WqcFzwcZtN>M-yWOO藇ʸ98w?,z'NNaYO|SXGCҽ'111/_'s-e/oYr]ٷ/ӉNwuvsoKs4Pq zIN; COrbMn=p֯JغauNC.Ѿ]۩Ӹ1vH3>NOƩGYZyo=zCwʖ3K[ eF_c{y39j:<ʖea\ܢ58[_hu<hNYD6?G>Z,a>m6;%Jb;(m#we箝,6#Ne# |lZ6φdaQ$I'ׇnHb4oݎD,?."f6 g0AΜN:>lvP9=,;_H$"(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P 6[l9{۝͊Ų %)ÁݞXxdIdg""Ffwph£JekUjcڕڶUw"vZn38eg""1BYD e(ED P1BYD e(ED P1BYD k"brah. l6;qŻS(a͉cXWJv4j| E±eWu^H,\)\e8t_֬XUhּAW?!<̲<}͎+%%8mЄuo ))I,"Y`[|np|_WyeY9=\jAH>`U*H~p w._ݻ_2?f oIwp\ ePNHH q"!O` t#lv, np+ R 4VN`%yGL(ze +"u w'OHZVC@ fqC҂9u6SؖHhZ8AhH}yBY$,~/!1)\hYle)]^Km~P.N:/w `RCutPv;[(lwZn0:2uY(S:qr3}!H~`:JNX Iư@ݻS*-[A=w|n}S:[v%'h">LDDLǓV/..R%zt0bI,E6, p+ߴa:IENDB`gobby-0.6.0/help/C/index.docbook0000664000175000017500000004041214003367605013332 00000000000000 ]>
&appname; Manual &appname; is a text editor that allows multiple persons to edit documents collaboratively over the network. 2009 Philipp Kern Philipp Kern 0x539 dev group
phil@0x539.de
&appname; Manual &manrevision; 2009-05-10 This manual explains how to use Gobby &appversion;, a collaborative editor. Feedback To report a bug or make a suggestion regarding this manual, please file an issue on https://github.com/gobby/gobby/issues. The application &appname; and this manual are both licensed under the ISC license. They are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warrenty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Please see the full license text for more details.
Introduction &appname; is a text editor that allows multiple persons to edit documents collaboratively over the network. Changes to the documents are instantly synced to other interested parties. It uses an algorithm which does not require locking or a central coordinator but instead merges the changes on all participating peers. That said, &appname; is currently relying on a central server that relays the editing actions to other users. A public server can be found on gobby.0x539.de. If you want to host such a server yourself, please look at the infinoted daemon. As it is not needed algorithmically future versions might be able to do real peer-to-peer communication. Support for editing over the instant messaging protocol Jabber/XMPP is planed. Depending on the setup of the server, connections can be encrypted through Transport Layer Security (TLS). There is no support for user authentication yet. &appname; is cross-platform and supports so far Microsoft Windows, Linux, Mac OS X and other Unix-like platforms. It is developed on Linux and regularly tested on Windows. As it is developed using the Gtk+ toolkit it integrates nicely into the GNOME desktop environment. In contrast to the older Gobby 0.4 this version also supports local undo and redo, which means that you can undo your own changes regardless if someone else changed the document in the meantime. Getting Started Starting Gobby Choose Applications Internet Gobby Collaborative Editor (0.5) to start the application. You may also start &appname; from the command line: gobby-0.5 Main Window The Gobby main window is split into two parts: a document and server browser on the left and an editor part on the right. Main Window Setting Preferences Choose Edit Preferences to open Gobby's Preferences window. The window has five tabs: User - personal settings like user name and user color (see ) Editor - text editor settings like indentation and auto saving (see ) View - control how the text files being edited should be presented on the screen (see ) Appearance - font and window layout settings (see ) Security - controls security parameters like trusted certificates and encryption enforcing (see ) Personalization Preferences: User tab Text Editing Preferences Preferences: Editor tab Tab Stops - The Tab width setting controls the display of tab characters. In conjunction with Insert spaces instead of tabs it also determins the amount of white space characters inserted into the text when the tab key is pressed. Indentation - Home/End Behavior - Smart home/end controls if the Home and End keys should move to the first/last non-space character before moving to the beginning/end of the line. File Saving - Text View Preferences TODO General Appearance TODO Security Settings TODO Shortcuts This section documents both the set of shortcuts denoted in the menus and those which do not have a corresponding menu entry. Gobby's Shortcuts Shortcut Action Ctrl-N New document Ctrl-O Open document Ctrl-S Save current document Ctrl-Shift-S Save current document under a different filename Ctrl-Shift-L Save all open documents Ctrl-Shift-H Export as HTML (since 0.4.93) Ctrl-T Connect to Server (since 0.4.93) Ctrl-W Close current document Ctrl-Q Exit Gobby Ctrl-M Switch to chat (since 0.4.93) Ctrl-Shift-M Switch to text document (since 0.4.93) Ctrl-Shift-C Reset user colors in the current document (since 0.4.93) F9 Toggle document browser visibility Shift-F9 Toggle chat visibility (since 0.4.93) Ctrl-F9 Toggle document user list visibility Ctrl-Shift-F9 Toggle chat user list visibility (since 0.4.93) Ctrl-Z Undo Ctrl-Shift-Z Redo Ctrl-F Find Ctrl-G Find next Ctrl-Shift-G Find previous Ctrl-H Find and replace Ctrl-I Go to line
GtkTextView's Shortcuts Shortcut Action Ctrl-Up Go to the beginning of the line Ctrl-Down Go to the end of the line Ctrl-Home Go to the beginning of the document Ctrl-End Go to the end of the document Ctrl-A Select all Shift-Ctrl-A Deselect all Insert Toggle overwrite mode F7 Toggle caret visibility
GtkSourceView's Shortcuts Shortcut Action Alt-Shift-Up Move viewport one line up Alt-Shift-Down Move viewport one line down Alt-Shift-PageUp Move viewport one page up Alt-Shift-PageDown Move viewport one page down Alt-Shift-Home Move viewport to the beginning of the document Alt-Shift-End Move viewport to the end of document
About Gobby Gobby was written by Armin Burgmeier and others. To report a bug or make a suggestion regarding this application or this manual, please file an issue on https://github.com/gobby/gobby/issues. Please include a reachable email address in your bug report as we often need to contact the reporters for further clarifications. Mailinglists There are also two mailing lists which should provide a means of contact to other Gobby users and to the developers. obby-announce: A moderated list used to announce new releases of Gobby and its foundation libraries. obby-users: Discussions about Gobby's usage and installation problems. The announcements are also posted there. More information about how to subscribe can be found on https://github.com/gobby/gobby/wiki/Mailing%20Lists . IRC channel Questions can also be taken to the IRC channel #infinote on Freenode (irc.freenode.net). However, you might need to be patient due to you and the developers living in different time zones.
gobby-0.6.0/gobby-0.5.metainfo.xml0000664000175000017500000000156714003367605013504 00000000000000 de.0x539.gobby CC0-1.0 gobby-0.5 Gobby Collaborative text editor

Gobby is a free collaborative editor supporting multiple documents in one session and a multi-user chat. It runs on Microsoft Windows, Mac OS X, Linux and other Unix-like platforms.

It uses GTK+ as its windowing toolkit and thus integrates nicely into the GNOME desktop environment.

https://gobby.github.io/img/screenshots/Screenshot_ui.png https://gobby.github.io/
gobby-0.6.0/depcomp0000755000175000017500000005602013616550647011135 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2018 Free Software Foundation, Inc. # 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, 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 . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gobby-0.6.0/config.sub0000755000175000017500000010645013244306071011531 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-22' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo "$1" | sed 's/-[^-]*$//'` if [ "$basic_machine" != "$1" ] then os=`echo "$1" | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-pc os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2*) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsv-tandem) basic_machine=nsv-tandem ;; nsx-tandem) basic_machine=nsx-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh5el) basic_machine=sh5le-unknown ;; simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; x64) basic_machine=x86_64-pc ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases that might get confused # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) -es1800*) os=-ose ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ | -midnightbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -xray | -os68k* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4*) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac echo "$basic_machine$os" exit # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gobby-0.6.0/code/0000775000175000017500000000000014005504730010532 500000000000000gobby-0.6.0/code/window.hpp0000664000175000017500000001226314003367605012504 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_WINDOW_HPP_ #define _GOBBY_WINDOW_HPP_ #include "features.hpp" #include "commands/file-tasks/task-open.hpp" #include "commands/file-tasks/task-open-multiple.hpp" #include "commands/autosave-commands.hpp" #include "commands/browser-commands.hpp" #include "commands/subscription-commands.hpp" #include "commands/synchronization-commands.hpp" #include "commands/user-join-commands.hpp" #include "commands/browser-context-commands.hpp" #include "commands/auth-commands.hpp" #include "commands/folder-commands.hpp" #include "commands/file-commands.hpp" #include "commands/edit-commands.hpp" #include "commands/view-commands.hpp" #include "operations/operations.hpp" #include "dialogs/initial-dialog.hpp" #include "core/selfhoster.hpp" #include "core/toolbar.hpp" #include "core/folder.hpp" #include "core/browser.hpp" #include "core/statusbar.hpp" #include "core/preferences.hpp" #include "core/filechooser.hpp" #include "core/closableframe.hpp" #include "core/titlebar.hpp" #include "core/windowactions.hpp" #include "core/knownhoststorage.hpp" #include "util/config.hpp" #include #include #include #include namespace Gobby { class Window : public Gtk::ApplicationWindow { public: Window(Config& config, GtkSourceLanguageManager* language_manager, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager); void subscribe(const Glib::ustring& uri); void open_files(const Operations::file_list& files); protected: // Gtk::Window overrides virtual bool on_key_press_event(GdkEventKey* event); virtual void on_realize(); virtual void on_show(); void on_initial_dialog_hide(); static gboolean on_switch_to_chat_static(GtkAccelGroup* group, GObject* acceleratable, guint keyval, GdkModifierType modifier, gpointer user_data) { return static_cast(user_data)->on_switch_to_chat(); } static gboolean on_switch_to_text_static(GtkAccelGroup* group, GObject* acceleratable, guint keyval, GdkModifierType modifier, gpointer user_data) { return static_cast(user_data)->on_switch_to_text(); } bool on_switch_to_chat(); bool on_switch_to_text(); void on_chat_hide(); void on_chat_show(); // Config Config& m_config; GtkSourceLanguageManager* m_lang_manager; FileChooser& m_file_chooser; Preferences& m_preferences; CertificateManager& m_cert_manager; ConnectionManager m_connection_manager; // GUI Gtk::Grid m_grid; Gtk::HPaned m_paned; Gtk::VPaned m_chat_paned; Folder m_text_folder; Folder m_chat_folder; StatusBar m_statusbar; Toolbar m_toolbar; Browser m_browser; ClosableFrame m_chat_frame; // Functionality WindowActions m_actions; DocumentInfoStorage m_info_storage; KnownHostStorage m_host_storage; FolderManager m_folder_manager; Operations m_operations; BrowserCommands m_browser_commands; BrowserContextCommands m_browser_context_commands; // TODO: This setup is a bit awkward. We need the auth commands to // provide a SASL context to the self hoster. // A better solution would be to have a new class, say AuthManager, // which creates the SASL context, and the auth manager is passed to // both connection manager and self hoster. The new class would not // do any UI, but it would do password checking from remote. For the // UI it would provide a hook which allows m_auth_commands to hook in. // This would also get rid of the ugly // connection_manager.set_sasl_context() call, since the connection // manager would then set the SASL context by itself. AuthCommands m_auth_commands; SelfHoster m_self_hoster; AutosaveCommands m_autosave_commands; SubscriptionCommands m_subscription_commands; SynchronizationCommands m_synchronization_commands; UserJoinCommands m_user_join_commands; FolderCommands m_text_folder_commands; FolderCommands m_chat_folder_commands; FileCommands m_file_commands; EditCommands m_edit_commands; ViewCommands m_view_commands; TitleBar m_title_bar; // Dialogs std::unique_ptr m_initial_dlg; }; } #endif // _GOBBY_WINDOW_HPP_ gobby-0.6.0/code/application.cpp0000664000175000017500000001676514003367605013506 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/menumanager.hpp" #include "core/applicationactions.hpp" #include "application.hpp" #include "features.hpp" // Needed to register Gobby resource explicitly: extern "C" { #include "gobby-resources.h" } #include "commands/application-commands.hpp" #include "commands/help-commands.hpp" #include "util/i18n.hpp" #include "util/file.hpp" #include #include #include #include #include #include namespace { std::string gobby_localedir() { #ifdef G_OS_WIN32 gchar* root = g_win32_get_package_installation_directory_of_module( NULL); gchar* temp = g_build_filename(root, "share", "locale", NULL); g_free(root); gchar* result = g_win32_locale_filename_from_utf8(temp); g_free(temp); std::string cpp_result(result); g_free(result); return cpp_result; #else return GOBBY_LOCALEDIR; #endif } } class Gobby::Application::Data { public: Data(Gobby::Application& application); // TODO: Does the config object really need to stay around, or can // it be thrown away after we have loaded the preferences? Config config; FileChooser file_chooser; Preferences preferences; CertificateManager certificate_manager; GtkSourceLanguageManager* language_manager; ApplicationActions application_actions; MenuManager menu_manager; ApplicationCommands m_application_commands; HelpCommands m_help_commands; }; Gobby::Application::Data::Data(Gobby::Application& application): config(config_filename("config.xml")), preferences(config), certificate_manager(preferences), language_manager(gtk_source_language_manager_get_default()), application_actions(application), menu_manager(language_manager), m_application_commands(application, application_actions, file_chooser, preferences, certificate_manager), m_help_commands(application, application_actions) { // Remove configuration file, since we have transferred the options // now to GSettings. g_unlink(config_filename("config.xml").c_str()); } Gobby::Application::Application(): Gtk::Application("de._0x539.gobby", Gio::APPLICATION_HANDLES_OPEN) { setlocale(LC_ALL, ""); bindtextdomain(GETTEXT_PACKAGE, gobby_localedir().c_str()); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); // There is no on_handle_local_options default handler in // Gio::Application: signal_handle_local_options().connect( sigc::mem_fun(*this, &Application::on_handle_local_options), false); // TODO: Here, probably N_(...) should be used for the translatable // strings, so that the option entry array can be static. However, // in this case the gettext translation domain cannot be set. // c.f. bugzilla.gnome.org #736637. // TODO: The only purpose of the G_OPTION_REMAINING option is to show // the arg_description in the --help output. However, in that case // the "open" signal is not emitted, since Glib assumes this is just // another option that we are handling ourselves. We could work around // it by handling the "command-line" signal instead of the "open" // signal. const GOptionEntry entries[] = { { "version", 'v', 0, G_OPTION_ARG_NONE, NULL, _("Display version information and exit"), NULL }, { "new-instance", 'n', 0, G_OPTION_ARG_NONE, NULL, _("Start a new gobby instance also if there is one " "already running"), NULL /*}, { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, NULL, NULL, N_("[FILE1 or URI1] [FILE2 or URI2] [...]") */}, { NULL } }; g_application_add_main_option_entries(G_APPLICATION(gobj()), entries); } Glib::RefPtr Gobby::Application::create() { return Glib::RefPtr( new Application); } int Gobby::Application::on_handle_local_options( const Glib::RefPtr& options_dict) { bool display_version; if(options_dict->lookup_value("version", display_version)) { std::cout << "Gobby " << PACKAGE_VERSION << std::endl; return 0; } bool new_instance; if(options_dict->lookup_value("new-instance", new_instance)) { set_flags(get_flags() | Gio::APPLICATION_NON_UNIQUE); options_dict->remove("new-instance"); } // Continue normal processing return -1; } void Gobby::Application::on_startup() { Gtk::Application::on_startup(); // Register Gobby resource explicitly -- GCC constructors do not // work for executables? _gobby_get_resource(); try { Gtk::Window::set_default_icon_name("gobby-0.5"); GError* error = NULL; if(inf_init(&error) != TRUE) throw Glib::Error(error); Gtk::IconTheme::get_default()->append_search_path( PUBLIC_ICONS_DIR); Gtk::IconTheme::get_default()->append_search_path( PRIVATE_ICONS_DIR); // Allocate the per-application data. This cannot be // done earlier, such as in the contrutor, since we only // need to do it if we are the primary instance. m_data.reset(new Data(*this)); set_app_menu(m_data->menu_manager.get_app_menu()); set_menubar(m_data->menu_manager.get_menu()); m_gobby_window = new Gobby::Window( m_data->config, m_data->language_manager, m_data->file_chooser, m_data->preferences, m_data->certificate_manager); m_window.reset(m_gobby_window); add_window(*m_gobby_window); m_window->show(); } catch(const Glib::Exception& ex) { handle_error(ex.what()); } catch(const std::exception& ex) { handle_error(ex.what()); } } void Gobby::Application::on_activate() { Gtk::Application::on_activate(); if(m_window.get()) m_window->present(); } void Gobby::Application::on_open(const type_vec_files& files, const Glib::ustring& hint) { Gtk::Application::on_open(files, hint); // If we don't have a window we ignore the file open request. This can // for example happen when Gobby was launched with command line // arguments, but the Gobby initialization failed. if(!m_gobby_window) return; Operations::file_list non_infinote_files; for(type_vec_files::const_iterator iter = files.begin(); iter != files.end(); ++iter) { Glib::RefPtr file = *iter; if(file->get_uri_scheme() == "infinote") m_gobby_window->subscribe(file->get_uri()); else non_infinote_files.push_back(file); } if(!files.empty()) m_gobby_window->open_files(non_infinote_files); } void Gobby::Application::handle_error(const std::string& message) { std::unique_ptr dialog( new Gtk::MessageDialog( "Failed to startup Gobby", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, false)); dialog->signal_response().connect( sigc::hide(sigc::mem_fun(*dialog, &Gtk::Window::hide))); dialog->set_title("Gobby"); dialog->set_secondary_text(message); m_window = std::move(dialog); add_window(*m_window); m_window->show(); } gobby-0.6.0/code/commands/0000775000175000017500000000000014005504730012333 500000000000000gobby-0.6.0/code/commands/auth-commands.hpp0000664000175000017500000001022314003367605015530 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_AUTH_COMMANDS_HPP_ #define _GOBBY_AUTH_COMMANDS_HPP_ #include "dialogs/password-dialog.hpp" #include "core/browser.hpp" #include "core/statusbar.hpp" #include "core/preferences.hpp" #include #include namespace Gobby { class AuthCommands: public sigc::trackable { public: AuthCommands(Gtk::Window& parent, Browser& browser, StatusBar& statusbar, ConnectionManager& connection_manager, const Preferences& preferences); ~AuthCommands(); InfSaslContext* get_sasl_context() { return m_sasl_context; } protected: static void sasl_callback_static(InfSaslContextSession* session, Gsasl_property prop, gpointer session_data, gpointer user_data) { AuthCommands* auth = static_cast(user_data); auth->sasl_callback( session, INF_XMPP_CONNECTION(session_data), prop); } static void set_browser_callback_static(InfGtkBrowserModel*, GtkTreePath*, GtkTreeIter*, InfBrowser* old_browser, InfBrowser* new_browser, gpointer user_data) { AuthCommands* auth = static_cast(user_data); auth->set_browser_callback(old_browser, new_browser); } static void on_notify_status_static(GObject* connection_obj, GParamSpec*, gpointer user_data) { AuthCommands* auth = static_cast(user_data); auth->on_notify_status(INF_XMPP_CONNECTION(connection_obj)); } static void browser_error_callback_static(InfcBrowser* browser, gpointer error_ptr, gpointer user_data) { AuthCommands* auth = static_cast(user_data); GError* error = static_cast(error_ptr); auth->browser_error_callback(browser, error); } void set_sasl_error(InfXmppConnection* connection, const gchar* message); void sasl_callback(InfSaslContextSession* session, InfXmppConnection* xmpp, Gsasl_property prop); void set_browser_callback(InfBrowser* old_browser, InfBrowser* new_browser); void browser_error_callback(InfcBrowser* browser, GError* error); void handle_error_detail(InfXmppConnection* xmpp, const GError* detail_error, Glib::ustring& old_password, Glib::ustring& last_password); struct RetryInfo { unsigned int retries; Glib::ustring last_password; gulong handle; PasswordDialog* password_dialog; }; typedef std::map RetryMap; RetryMap::iterator insert_retry_info(InfXmppConnection* xmpp); void on_notify_status(InfXmppConnection* connection); void on_response(int response_id, InfSaslContextSession* session, InfXmppConnection* xmpp); Gtk::Window& m_parent; Browser& m_browser; StatusBar& m_statusbar; ConnectionManager& m_connection_manager; const Preferences& m_preferences; InfSaslContext* m_sasl_context; RetryMap m_retries; }; } #endif // _GOBBY_AUTH_COMMANDS_HPP_ gobby-0.6.0/code/commands/subscription-commands.cpp0000664000175000017500000001173214003367605017314 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/subscription-commands.hpp" #include "util/i18n.hpp" class Gobby::SubscriptionCommands::SessionInfo { public: SessionInfo(SubscriptionCommands& commands, const Folder& folder, InfSession* session): m_folder(folder), m_session(session) { g_object_ref(session); m_notify_subscription_group_handler = g_signal_connect( G_OBJECT(session), "notify::subscription-group", G_CALLBACK(on_notify_subscription_group_static), &commands); } ~SessionInfo() { g_signal_handler_disconnect( G_OBJECT(m_session), m_notify_subscription_group_handler); g_object_unref(m_session); } const Folder& get_folder() { return m_folder; } InfSession* get_session() { return m_session; } private: static void on_notify_subscription_group_static(InfSession* session, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_subscription_group(session); } const Folder& m_folder; InfSession* m_session; gulong m_notify_subscription_group_handler; }; Gobby::SubscriptionCommands::SubscriptionCommands(const Folder& text_folder, const Folder& chat_folder): m_text_folder(text_folder), m_chat_folder(chat_folder) { m_text_folder.signal_document_added().connect( sigc::mem_fun( *this, &SubscriptionCommands::on_text_document_added)); m_chat_folder.signal_document_added().connect( sigc::mem_fun( *this, &SubscriptionCommands::on_chat_document_added)); m_text_folder.signal_document_removed().connect( sigc::mem_fun( *this, &SubscriptionCommands::on_document_removed)); m_chat_folder.signal_document_removed().connect( sigc::mem_fun( *this, &SubscriptionCommands::on_document_removed)); } Gobby::SubscriptionCommands::~SubscriptionCommands() { for(SessionMap::iterator iter = m_session_map.begin(); iter != m_session_map.end(); ++iter) { delete iter->second; } } void Gobby::SubscriptionCommands::on_text_document_added(SessionView& view) { InfSession* session = view.get_session(); g_assert(m_session_map.find(session) == m_session_map.end()); m_session_map[session] = new SessionInfo(*this, m_text_folder, session); } void Gobby::SubscriptionCommands::on_chat_document_added(SessionView& view) { InfSession* session = view.get_session(); g_assert(m_session_map.find(session) == m_session_map.end()); m_session_map[session] = new SessionInfo(*this, m_chat_folder, session); } void Gobby::SubscriptionCommands::on_document_removed(SessionView& view) { InfSession* session = view.get_session(); SessionMap::iterator iter = m_session_map.find(session); g_assert(iter != m_session_map.end()); delete iter->second; m_session_map.erase(iter); } void Gobby::SubscriptionCommands:: on_notify_subscription_group(InfSession* session) { SessionMap::iterator iter = m_session_map.find(session); g_assert(iter != m_session_map.end()); if(inf_session_get_subscription_group(session) == NULL) { const Folder& folder = iter->second->get_folder(); SessionView* view = folder.lookup_document(session); g_assert(view != NULL); TextSessionView* text_view = dynamic_cast(view); ChatSessionView* chat_view = dynamic_cast(view); if(text_view) { /* If the session is in SYNCHRONIZING state then the * session is closed due to a synchronization error. * In that case synchronization-commands.cpp will set * a more meaningful error message. */ if(inf_session_get_status(session) == INF_SESSION_RUNNING) { view->set_info(_( "The connection to the publisher of " "this document has been lost. " "Further changes to the document " "could not be synchronized to others " "anymore, therefore the document " "cannot be edited anymore.\n\n" "Please note also that it is " "possible that not all of your " "latest changes have reached the " "publisher before the connection was " "lost."), true); } text_view->set_active_user(NULL); } else if(chat_view) { chat_view->set_active_user(NULL); } } } gobby-0.6.0/code/commands/edit-commands.hpp0000664000175000017500000000754314003367605015527 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_EDIT_COMMANDS_HPP_ #define _GOBBY_EDIT_COMMANDS_HPP_ #include "dialogs/find-dialog.hpp" #include "dialogs/goto-dialog.hpp" #include "dialogs/preferences-dialog.hpp" #include "core/folder.hpp" #include "core/statusbar.hpp" #include "core/windowactions.hpp" #include #include #include namespace Gobby { class EditCommands: public sigc::trackable { public: EditCommands(Gtk::Window& parent, WindowActions& actions, const Folder& folder, StatusBar& status_bar); ~EditCommands(); protected: void on_document_removed(SessionView& view); void on_document_changed(SessionView* view); static void on_can_undo_changed_static(InfAdoptedAlgorithm* algorithm, InfAdoptedUser* user, gboolean can_undo, gpointer user_data) { static_cast(user_data)->on_can_undo_changed( user, can_undo); } static void on_can_redo_changed_static(InfAdoptedAlgorithm* algorithm, InfAdoptedUser* user, gboolean can_redo, gpointer user_data) { static_cast(user_data)->on_can_redo_changed( user, can_redo); } static void on_sync_complete_static(InfSession* session, InfXmlConnection* connection, gpointer user_data) { static_cast(user_data)->on_sync_complete(); } static void on_mark_set_static(GtkTextBuffer* buffer, GtkTextIter* iter, GtkTextMark* mark, gpointer user_data) { static_cast(user_data)->on_mark_set(); } static void on_changed_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)->on_changed(); } void on_sync_complete(); void on_active_user_changed(InfUser* active_user); void on_mark_set(); void on_changed(); void on_can_undo_changed(InfAdoptedUser* user, bool can_undo); void on_can_redo_changed(InfAdoptedUser* user, bool can_redo); void on_find_text_changed(); void on_undo(); void on_redo(); void on_cut(); void on_copy(); void on_paste(); void on_find(); void on_find_next(); void on_find_prev(); void on_find_replace(); void on_goto_line(); Gtk::Window& m_parent; WindowActions& m_actions; const Folder& m_folder; StatusBar& m_status_bar; std::unique_ptr m_find_dialog; std::unique_ptr m_goto_dialog; TextSessionView* m_current_view; // Only valid when m_current_document is nonzero: sigc::connection m_active_user_changed_connection; gulong m_can_undo_changed_handler; gulong m_can_redo_changed_handler; gulong m_synchronization_complete_handler; gulong m_mark_set_handler; gulong m_changed_handler; private: void ensure_find_dialog(); }; } #endif // _GOBBY_EDIT_COMMANDS_HPP_ gobby-0.6.0/code/commands/application-commands.hpp0000664000175000017500000000344114003367605017076 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_APPLICATION_COMMANDS_HPP_ #define _GOBBY_APPLICATION_COMMANDS_HPP_ #include "dialogs/preferences-dialog.hpp" #include "core/applicationactions.hpp" #include "core/filechooser.hpp" #include "core/preferences.hpp" #include "core/certificatemanager.hpp" #include #include #include namespace Gobby { class ApplicationCommands: public sigc::trackable { public: ApplicationCommands(Gtk::Application& application, const ApplicationActions& actions, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager); protected: void on_preferences(); void on_quit(); Gtk::Application& m_application; FileChooser& m_file_chooser; Preferences& m_preferences; CertificateManager& m_cert_manager; std::unique_ptr m_preferences_dialog; }; } #endif // _GOBBY_APPLICATION_COMMANDS_HPP_ gobby-0.6.0/code/commands/synchronization-commands.hpp0000664000175000017500000000332514003367605020035 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SYNCHRONIZATION_COMMANDS_HPP_ #define _GOBBY_SYNCHRONIZATION_COMMANDS_HPP_ #include #include "core/folder.hpp" namespace Gobby { class SynchronizationCommands: public sigc::trackable { public: SynchronizationCommands(const Folder& text_folder, const Folder& chat_folder); ~SynchronizationCommands(); protected: class SyncInfo; void on_document_added(SessionView& view); void on_document_removed(SessionView& view); void on_synchronization_failed(InfSession* session, InfXmlConnection* connection, const GError* error); void on_synchronization_complete(InfSession* session, InfXmlConnection* connection); typedef std::map SyncMap; SyncMap m_sync_map; }; } #endif // _GOBBY_SYNCHRONIZATION_COMMANDS_HPP_ gobby-0.6.0/code/commands/help-commands.cpp0000664000175000017500000001105214003367605015513 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/help-commands.hpp" #include "util/i18n.hpp" #include "features.hpp" #include #include Gobby::HelpCommands::HelpCommands(Gtk::Application& application, const ApplicationActions& actions): m_application(application) { actions.help->signal_activate().connect( sigc::hide(sigc::mem_fun(*this, &HelpCommands::on_contents))); actions.about->signal_activate().connect( sigc::hide(sigc::mem_fun(*this, &HelpCommands::on_about))); } void Gobby::HelpCommands::on_contents() { GError* error = NULL; Gtk::Window* parent = m_application.get_windows()[0]; gtk_show_uri(parent->get_screen()->gobj(), "help:gobby", GDK_CURRENT_TIME, &error); if(error == NULL) return; // Help browser could not be invoked, show an error message to the user. Gtk::MessageDialog dlg(*parent, _("There was an error displaying help."), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_secondary_text(error->message); dlg.run(); g_error_free(error); } void Gobby::HelpCommands::on_about() { if(m_about_dialog.get() == NULL) { Gtk::Window* parent = m_application.get_windows()[0]; m_about_dialog.reset(new Gtk::AboutDialog); m_about_dialog->set_transient_for(*parent); std::vector artists; artists.push_back("Benjamin Herr "); artists.push_back("Thomas Glatt "); std::vector authors; authors.push_back("Armin Burgmeier "); authors.push_back("Philipp Kern "); authors.push_back(""); authors.push_back(_("Contributors:")); authors.push_back("\tBenjamin Herr "); authors.push_back("\tBen Levitt "); authors.push_back("\tGabríel A. Pétursson "); std::vector translators; translators.push_back(_("British English:")); translators.push_back("\tGabríel A. Pétursson "); translators.push_back(_("German:")); translators.push_back("\tMichael Frey "); Glib::ustring transl = ""; for(std::vector::iterator i = translators.begin(); i != translators.end(); ++i) { if(i != translators.begin()) transl += "\n"; transl += *i; } m_about_dialog->set_artists(artists); m_about_dialog->set_authors(authors); m_about_dialog->set_translator_credits(transl); m_about_dialog->set_copyright( "Copyright © 2008-2015 Armin Burgmeier"); m_about_dialog->set_license(_( "Permission to use, copy, modify, and/or distribute " "this software for any urpose with or without fee is " "hereby granted, provided that the above copyright " "notice and this permission notice appear in all " "copies.\n\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR " "DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS " "SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE " "AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, " "OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER " "RESULTING FROM LOSS OF USE, DATA OR PROFITS, " "WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR " "OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS " "SOFTWARE.")); m_about_dialog->set_logo_icon_name("gobby-0.5"); m_about_dialog->set_program_name("Gobby"); m_about_dialog->set_version(PACKAGE_VERSION); m_about_dialog->set_website("http://gobby.0x539.de/"); m_about_dialog->set_wrap_license(true); m_about_dialog->signal_response().connect( sigc::mem_fun( *this, &HelpCommands::on_about_response)); } m_about_dialog->present(); } void Gobby::HelpCommands::on_about_response(int id) { m_about_dialog.reset(NULL); } gobby-0.6.0/code/commands/browser-commands.cpp0000664000175000017500000004236714003367605016263 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/browser-commands.hpp" #include "util/i18n.hpp" #include #include namespace { void count_available_users_func(InfUser* user, gpointer user_data) { if(inf_user_get_status(user) != INF_USER_UNAVAILABLE && ~inf_user_get_flags(user) & INF_USER_LOCAL) { ++(*(unsigned int*)user_data); } } unsigned int count_available_users(InfUserTable* user_table) { // Count available remote users unsigned int n_users = 0; inf_user_table_foreach_user( user_table, count_available_users_func, &n_users); return n_users; } class ParameterProvider: public Gobby::UserJoin::ParameterProvider { public: ParameterProvider(const Gobby::Preferences& preferences): m_preferences(preferences) { } virtual std::vector get_user_join_parameters(); const Gobby::Preferences& m_preferences; }; std::vector ParameterProvider::get_user_join_parameters() { std::vector params; const GParameter name_param = { "name", { 0 } }; params.push_back(name_param); const GParameter status_param = { "status", { 0 } }; params.push_back(status_param); g_value_init(¶ms[0].value, G_TYPE_STRING); g_value_init(¶ms[1].value, INF_TYPE_USER_STATUS); const Glib::ustring& name = m_preferences.user.name; g_value_set_string(¶ms[0].value, name.c_str()); g_value_set_enum(¶ms[1].value, INF_USER_INACTIVE); return params; } } class Gobby::BrowserCommands::BrowserInfo { public: BrowserInfo(BrowserCommands& commands, InfBrowser* browser); ~BrowserInfo(); InfBrowser* get_browser() { return m_browser; } void set_pending_chat(InfSessionProxy* proxy); void clear_pending_chat(); void check_pending_chat(); private: static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_notify_status( INF_BROWSER(object)); } static void on_add_available_user_static(InfUserTable* user_table, InfUser* user, gpointer user_data) { static_cast(user_data)->check_pending_chat(); } BrowserCommands& m_commands; std::unique_ptr m_userjoin; InfBrowser* m_browser; gulong m_notify_status_handler; InfSessionProxy* m_pending_chat; gulong m_add_available_user_handler; }; class Gobby::BrowserCommands::RequestInfo { friend class BrowserCommands; public: RequestInfo(BrowserCommands& commands, InfBrowser* browser, InfBrowserIter* iter, StatusBar& status_bar); ~RequestInfo(); InfBrowser* get_browser() { return m_browser; } void set_request(InfRequest* request); private: static void on_node_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { const InfBrowserIter* iter = NULL; RequestInfo* info = static_cast(user_data); if(error == NULL) { inf_request_result_get_subscribe_session( result, NULL, &iter, NULL); g_assert(iter == NULL || iter->node == info->m_iter.node); g_assert(iter == NULL || iter->node_id == info->m_iter.node_id); } info->m_commands.on_finished( INF_REQUEST(request), info->m_browser, iter, error); } static void on_chat_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { RequestInfo* info = static_cast(user_data); info->m_commands.on_finished( INF_REQUEST(request), info->m_browser, NULL, error); } BrowserCommands& m_commands; InfBrowser* m_browser; InfBrowserIter m_iter; StatusBar& m_status_bar; StatusBar::MessageHandle m_handle; InfRequest* m_request; gulong m_finished_handler; }; Gobby::BrowserCommands::BrowserInfo::BrowserInfo(BrowserCommands& cmds, InfBrowser* browser): m_commands(cmds), m_browser(browser), m_pending_chat(NULL) { m_notify_status_handler = g_signal_connect( m_browser, "notify::status", G_CALLBACK(on_notify_status_static), &cmds); g_object_ref(browser); } Gobby::BrowserCommands::BrowserInfo::~BrowserInfo() { if(m_pending_chat != NULL) { InfSession* session; g_object_get(G_OBJECT(m_pending_chat), "session", &session, NULL); InfUserTable* table = inf_session_get_user_table(session); g_signal_handler_disconnect( table, m_add_available_user_handler); g_object_unref(session); g_object_unref(m_pending_chat); } g_signal_handler_disconnect(m_browser, m_notify_status_handler); g_object_unref(m_browser); } void Gobby::BrowserCommands::BrowserInfo::set_pending_chat(InfSessionProxy* proxy) { g_assert(m_pending_chat == NULL); m_pending_chat = proxy; g_object_ref(proxy); InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); InfUserTable* table = inf_session_get_user_table(session); m_add_available_user_handler = g_signal_connect( G_OBJECT(table), "add-available-user", G_CALLBACK(on_add_available_user_static), this); g_object_unref(session); // Attempt a user join already here before the document is added to // the folder manager so that we can correctly show the document when // enough users are available. Otherwise if no party would join a user // before other users show up, the chat would never be shown. std::unique_ptr provider( new ParameterProvider(m_commands.m_preferences)); m_userjoin.reset(new UserJoin(m_browser, NULL, proxy, std::move(provider))); check_pending_chat(); } void Gobby::BrowserCommands::BrowserInfo::clear_pending_chat() { if(m_pending_chat != NULL) { InfSession* session; g_object_get(G_OBJECT(m_pending_chat), "session", &session, NULL); InfUserTable* table = inf_session_get_user_table(session); g_signal_handler_disconnect( table, m_add_available_user_handler); m_userjoin.reset(NULL); g_object_unref(m_pending_chat); m_pending_chat = NULL; g_object_unref(session); } } void Gobby::BrowserCommands::BrowserInfo::check_pending_chat() { g_assert(m_pending_chat != NULL); InfSession* session; g_object_get(G_OBJECT(m_pending_chat), "session", &session, NULL); InfUserTable* table = inf_session_get_user_table(session); if(count_available_users(table) > 0) { g_signal_handler_disconnect( table, m_add_available_user_handler); m_commands.m_folder_manager.add_document( m_browser, NULL, m_pending_chat, &m_userjoin); g_object_unref(m_pending_chat); m_pending_chat = NULL; } g_object_unref(session); } Gobby::BrowserCommands::RequestInfo::RequestInfo(BrowserCommands& commands, InfBrowser* browser, InfBrowserIter* iter, StatusBar& status_bar): m_commands(commands), m_browser(browser), m_status_bar(status_bar), m_request(NULL), m_finished_handler(0) { if(iter) { m_iter = *iter; m_handle = m_status_bar.add_info_message( Glib::ustring::compose( _("Subscribing to %1..."), Glib::ustring( inf_browser_get_node_name( browser, iter)))); } else { InfXmlConnection* connection = infc_browser_get_connection(INFC_BROWSER(browser)); gchar* remote_hostname; g_object_get(G_OBJECT(connection), "remote-hostname", &remote_hostname, NULL); m_handle = m_status_bar.add_info_message( Glib::ustring::compose( _("Subscribing to chat on %1..."), remote_hostname)); g_free(remote_hostname); } } Gobby::BrowserCommands::RequestInfo::~RequestInfo() { m_status_bar.remove_message(m_handle); if(m_request != NULL) { g_signal_handler_disconnect(m_request, m_finished_handler); g_object_unref(m_request); } } void Gobby::BrowserCommands::RequestInfo::set_request(InfRequest* request) { g_assert(m_request == NULL); m_finished_handler = g_signal_handler_find( request, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, this); g_assert(m_finished_handler != 0); } Gobby::BrowserCommands::BrowserCommands(Browser& browser, FolderManager& folder_manager, StatusBar& status_bar, Operations& operations, const Preferences& preferences): m_browser(browser), m_folder_manager(folder_manager), m_operations(operations), m_status_bar(status_bar), m_preferences(preferences) { m_browser.signal_connect().connect( sigc::mem_fun(*this, &BrowserCommands::on_connect)); m_browser.signal_activate().connect( sigc::mem_fun(*this, &BrowserCommands::on_activate)); m_set_browser_handler = g_signal_connect( browser.get_store(), "set-browser", G_CALLBACK(on_set_browser_static), this); // Add already existing browsers GtkTreeIter iter; GtkTreeModel* treemodel = GTK_TREE_MODEL(browser.get_store()); for(gboolean have_entry = gtk_tree_model_get_iter_first(treemodel, &iter); have_entry == TRUE; have_entry = gtk_tree_model_iter_next(treemodel, &iter)) { InfBrowser* browser; gtk_tree_model_get( treemodel, &iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, -1); InfBrowserStatus browser_status; g_object_get( G_OBJECT(browser), "status", &browser_status, NULL); m_browser_map[browser] = new BrowserInfo(*this, browser); if(browser_status == INF_BROWSER_OPEN) if(!create_chat_document(browser)) subscribe_chat(browser); g_object_unref(browser); } } Gobby::BrowserCommands::~BrowserCommands() { for(RequestMap::iterator iter = m_request_map.begin(); iter != m_request_map.end(); ++ iter) { delete iter->second; } for(BrowserMap::iterator iter = m_browser_map.begin(); iter != m_browser_map.end(); ++iter) { delete iter->second; } g_signal_handler_disconnect(m_browser.get_store(), m_set_browser_handler); } void Gobby::BrowserCommands::on_set_browser(InfGtkBrowserModel* model, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser) { if(old_browser != NULL) { // Find by browser in case old_browser has its connection // reset. BrowserMap::iterator iter = m_browser_map.find(old_browser); g_assert(iter != m_browser_map.end()); delete iter->second; m_browser_map.erase(iter); } if(new_browser != NULL) { g_assert(m_browser_map.find(new_browser) == m_browser_map.end()); InfBrowserStatus browser_status; g_object_get( G_OBJECT(new_browser), "status", &browser_status, NULL); m_browser_map[new_browser] = new BrowserInfo(*this, new_browser); if(browser_status == INF_BROWSER_OPEN) if(!create_chat_document(new_browser)) subscribe_chat(new_browser); } } void Gobby::BrowserCommands::on_notify_status(InfBrowser* browser) { InfXmlConnection* connection; InfXmlConnectionStatus status; InfBrowserStatus browser_status; const BrowserMap::iterator iter = m_browser_map.find(browser); g_assert(iter != m_browser_map.end()); g_object_get(G_OBJECT(browser), "status", &browser_status, NULL); switch(browser_status) { case INF_BROWSER_CLOSED: iter->second->clear_pending_chat(); // Close connection if browser got disconnected. This for // example happens when the server does not send an initial // welcome message. if(INFC_IS_BROWSER(browser)) { connection = infc_browser_get_connection( INFC_BROWSER(browser)); g_object_get(G_OBJECT(connection), "status", &status, NULL); if(status != INF_XML_CONNECTION_CLOSED && status != INF_XML_CONNECTION_CLOSING) { inf_xml_connection_close(connection); } } break; case INF_BROWSER_OPENING: break; case INF_BROWSER_OPEN: if(!create_chat_document(browser)) subscribe_chat(browser); break; default: g_assert_not_reached(); break; } } void Gobby::BrowserCommands::subscribe_chat(InfBrowser* browser) { if(INFC_IS_BROWSER(browser)) { std::unique_ptr info(new RequestInfo( *this, INF_BROWSER(browser), NULL, m_status_bar)); InfRequest* request = INF_REQUEST( infc_browser_subscribe_chat( INFC_BROWSER(browser), RequestInfo::on_chat_finished_static, info.get())); if(request != NULL) { info->set_request(request); g_assert(m_request_map.find(request) == m_request_map.end()); m_request_map[request] = info.release(); } } else if(INFD_IS_DIRECTORY(browser)) { infd_directory_enable_chat(INFD_DIRECTORY(browser), TRUE); create_chat_document(browser); } } bool Gobby::BrowserCommands::create_chat_document(InfBrowser* browser) { // Get the chat session from the browser InfSessionProxy* proxy = NULL; if(INFC_IS_BROWSER(browser)) { proxy = INF_SESSION_PROXY( infc_browser_get_chat_session(INFC_BROWSER(browser))); } else if(INFD_IS_DIRECTORY(browser)) { proxy = INF_SESSION_PROXY( infd_directory_get_chat_session( INFD_DIRECTORY(browser))); } // Chat session not available if(!proxy) return false; // First, check whether there is already a document for this // chat session. If there is, then don't create another one. InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); SessionView* view = m_folder_manager.get_chat_folder().lookup_document(session); g_object_unref(session); g_assert(view == NULL); // Can it happen? if(view) return true; // Document exists already if(INFC_IS_BROWSER(browser)) { // For clients, just add the document m_folder_manager.add_document( browser, NULL, proxy, NULL); return true; } else if(INFD_IS_DIRECTORY(browser)) { // For our local chat, only show it if there is at least // one remote user, otherwise wait until users show up. BrowserMap::iterator iter = m_browser_map.find(browser); g_assert(iter != m_browser_map.end()); iter->second->set_pending_chat(proxy); return true; } // This cannot actually happen, but return to silence compiler // warnings g_assert_not_reached(); return false; } void Gobby::BrowserCommands::on_connect(const Glib::ustring& hostname) { m_operations.subscribe_path(hostname); } void Gobby::BrowserCommands::on_activate(InfBrowser* browser, InfBrowserIter* iter) { InfSessionProxy* proxy = inf_browser_get_session(browser, iter); if(proxy != NULL) { InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); SessionView* view = m_folder_manager.lookup_document(session); g_object_unref(session); if(view != NULL) { m_folder_manager.switch_to_document(*view); } else { m_folder_manager.add_document(browser, iter, proxy, NULL); } } else { InfRequest* request = inf_browser_get_pending_request( browser, iter, "subscribe-session"); // If there is already a request don't re-request if(request == NULL) { std::unique_ptr info(new RequestInfo( *this, browser, iter, m_status_bar)); request = INF_REQUEST( inf_browser_subscribe( browser, iter, RequestInfo::on_node_finished_static, info.get())); if(request != NULL) { info->set_request(request); g_assert(m_request_map.find(request) == m_request_map.end()); m_request_map[request] = info.release(); } } } } void Gobby::BrowserCommands::on_finished(InfRequest* request, InfBrowser* browser, const InfBrowserIter* iter, const GError* error) { RequestMap::iterator map_iter = m_request_map.find(request); if(map_iter != m_request_map.end()) { delete map_iter->second; m_request_map.erase(map_iter); } if(error != NULL) { m_status_bar.add_error_message( _("Subscription failed"), error->message); } else if(iter != NULL) { InfSessionProxy* proxy = inf_browser_get_session(browser, iter); g_assert(proxy != NULL); m_folder_manager.add_document(browser, iter, proxy, NULL); } else { // For InfdDirectory we do not make a request for subscribing // to the chat. const bool created = create_chat_document(browser); g_assert(created); // Must work now } } gobby-0.6.0/code/commands/help-commands.hpp0000664000175000017500000000265414003367605015530 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_HELP_COMMANDS_HPP_ #define _GOBBY_HELP_COMMANDS_HPP_ #include "core/applicationactions.hpp" #include #include #include #include namespace Gobby { class HelpCommands: public sigc::trackable { public: HelpCommands(Gtk::Application& application, const ApplicationActions& actions); protected: void on_contents(); void on_about(); void on_about_response(int response_id); Gtk::Application& m_application; std::unique_ptr m_about_dialog; }; } #endif // _GOBBY_HELP_COMMANDS_HPP_ gobby-0.6.0/code/commands/user-join-commands.hpp0000664000175000017500000000425314003367605016510 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_USER_JOIN_COMMANDS_HPP_ #define _GOBBY_USER_JOIN_COMMANDS_HPP_ #include "core/foldermanager.hpp" #include "core/preferences.hpp" #include "core/userjoin.hpp" #include namespace Gobby { class UserJoinCommands: public sigc::trackable { public: UserJoinCommands(FolderManager& folder_manager, const Preferences& preferences); ~UserJoinCommands(); protected: void on_document_added(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, Folder& folder, SessionView& view, FolderManager::UserJoinRef j); void on_document_removed(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, Folder& folder, SessionView& view); void on_user_join_finished(InfSessionProxy* proxy, Folder& folder, SessionView& view, InfUser* user, const GError* error); const Preferences& m_preferences; class UserJoinInfo; typedef std::map UserJoinMap; UserJoinMap m_user_join_map; }; } #endif // _GOBBY_USER_JOIN_COMMANDS_HPP_ gobby-0.6.0/code/commands/autosave-commands.cpp0000664000175000017500000002201214003367605016410 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/autosave-commands.hpp" #include "operations/operation-save.hpp" #include "core/sessionuserview.hpp" #include #include class Gobby::AutosaveCommands::Info { public: Info(AutosaveCommands& commands, TextSessionView& view): m_commands(commands), m_view(view), m_save_op(NULL) { GtkSourceBuffer* buffer = m_view.get_text_buffer(); m_modified_changed_handler = g_signal_connect_after( G_OBJECT(buffer), "modified-changed", G_CALLBACK(on_modified_changed_static), this); // We can't get this correct, so we assume the document was // synchronized to disk at the current time. If it has been // modified, we schedule a first autosave. m_sync_time = std::time(NULL); Operations& operations = m_commands.m_operations; OperationSave* save_op = operations.get_save_operation_for_document(view); if(save_op != NULL) begin_save_operation(save_op); else if(gtk_text_buffer_get_modified(GTK_TEXT_BUFFER(buffer))) schedule(); } ~Info() { GtkSourceBuffer* buffer = m_view.get_text_buffer(); g_signal_handler_disconnect(G_OBJECT(buffer), m_modified_changed_handler); m_timeout_handler.disconnect(); } // Called by AutosaveCommands when the timeout interval has changed. // Just reschedule the timeout. void reschedule() { if(m_timeout_handler.connected()) { m_timeout_handler.disconnect(); schedule(); } } // Called by AutosaveCommands void begin_save_operation(OperationSave* save_op) { g_assert(m_save_op == NULL); // The document is already being saved, so we don't // need to autosave anymore. Reschedule autosave when save // operation finished. if(m_timeout_handler.connected()) m_timeout_handler.disconnect(); m_save_op = save_op; m_save_op->signal_finished().connect( sigc::mem_fun( *this, &Info::on_save_operation_finished)); } protected: void on_modified_changed() { if(m_save_op == NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER(m_view.get_text_buffer()); if(!gtk_text_buffer_get_modified(buffer)) m_timeout_handler.disconnect(); else { // Until now the document on disk is in sync // with the in-memory buffer. Now the document // has changed, so schedule an autosave. m_sync_time = std::time(NULL); schedule(); } } } void schedule() { g_assert(!m_timeout_handler.connected()); g_assert(m_save_op == NULL); // Don't schedule a timeout in case the document has no entry // in the document info storage. This means we don't have an // uri yet where to save the document. However, we // automatically retry when the document is assigned an URI, // since the modification flag will change with this anyway. const std::string& key = m_view.get_info_storage_key(); const DocumentInfoStorage::Info* info = m_commands.m_info_storage.get_info(key); if(!info || info->uri.empty()) return; guint elapsed_seconds = std::time(NULL) - m_sync_time; guint autosave_interval = 60 * m_commands.m_preferences.editor.autosave_interval; if(elapsed_seconds > autosave_interval) { on_timeout(); } else { m_timeout_handler = Glib::signal_timeout().connect_seconds( sigc::mem_fun( *this, &Info::on_timeout), autosave_interval - elapsed_seconds); } } void on_save_operation_finished(bool success) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER(m_view.get_text_buffer()); if(success) m_sync_time = m_save_op->get_start_time(); m_save_op = NULL; // Schedule the next save operation in case the buffer has // been modified since the save operation was started. if(gtk_text_buffer_get_modified(buffer)) schedule(); } bool on_timeout() { const std::string& key = m_view.get_info_storage_key(); const DocumentInfoStorage::Info* info = m_commands.m_info_storage.get_info(key); // Might have been removed from info in the meanwhile, so // don't assert here. if(info != NULL) { Glib::RefPtr file = Gio::File::create_for_uri(info->uri); m_commands.m_operations.save_document( m_view, file, info->encoding, info->eol_style); g_assert(m_save_op != NULL); // Set sync time to operation's start time even though // we don't know yet whether the operation will fail, // because otherwise we would try to save the // document the whole time. This way, we simply retry // when the timeout triggers again. m_sync_time = m_save_op->get_start_time(); } return false; } private: static void on_modified_changed_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)->on_modified_changed(); } AutosaveCommands& m_commands; TextSessionView& m_view; gulong m_modified_changed_handler; sigc::connection m_timeout_handler; OperationSave* m_save_op; std::time_t m_sync_time; }; Gobby::AutosaveCommands::AutosaveCommands(const Folder& folder, Operations& operations, const DocumentInfoStorage& storage, const Preferences& preferences): m_folder(folder), m_operations(operations), m_info_storage(storage), m_preferences(preferences) { m_folder.signal_document_added().connect( sigc::mem_fun(*this, &AutosaveCommands::on_document_added)); m_folder.signal_document_removed().connect( sigc::mem_fun(*this, &AutosaveCommands::on_document_removed)); m_operations.signal_begin_save_operation().connect( sigc::mem_fun( *this, &AutosaveCommands::on_begin_save_operation)); m_preferences.editor.autosave_enabled.signal_changed().connect( sigc::mem_fun( *this, &AutosaveCommands::on_autosave_enabled_changed)); m_preferences.editor.autosave_interval.signal_changed().connect( sigc::mem_fun( *this, &AutosaveCommands::on_autosave_interval_changed)); // Create autosave infos for initial documents on_autosave_enabled_changed(); } Gobby::AutosaveCommands::~AutosaveCommands() { for(InfoMap::iterator iter = m_info_map.begin(); iter != m_info_map.end(); ++ iter) { delete iter->second; } } void Gobby::AutosaveCommands::on_document_added(SessionView& view) { if(m_preferences.editor.autosave_enabled) { // We can only save text views: TextSessionView* text_view = dynamic_cast(&view); if(text_view) { g_assert(m_info_map.find(text_view) == m_info_map.end()); m_info_map[text_view] = new Info(*this, *text_view); } } } void Gobby::AutosaveCommands::on_document_removed(SessionView& view) { if(m_preferences.editor.autosave_enabled) { TextSessionView* text_view = dynamic_cast(&view); if(text_view) { InfoMap::iterator iter = m_info_map.find(text_view); g_assert(iter != m_info_map.end()); delete iter->second; m_info_map.erase(iter); } } } void Gobby::AutosaveCommands::on_begin_save_operation( OperationSave* operation) { TextSessionView* view = operation->get_view(); // Save operation just started, document must be present g_assert(view != NULL); if(m_preferences.editor.autosave_enabled) { InfoMap::iterator iter = m_info_map.find(view); g_assert(iter != m_info_map.end()); iter->second->begin_save_operation(operation); } } void Gobby::AutosaveCommands::on_autosave_enabled_changed() { if(m_preferences.editor.autosave_enabled) { for(unsigned int i = 0; i < static_cast(m_folder.get_n_pages()); ++i) { // TODO: Add convenience API to folder, so that we // don't need to know here that it actually contains // SessionUserViews. const SessionUserView* userview = static_cast( m_folder.get_nth_page(i)); SessionView& view = userview->get_session_view(); TextSessionView* text_view = dynamic_cast(&view); if(text_view) { m_info_map[text_view] = new Info(*this, *text_view); } } } else { for(InfoMap::iterator iter = m_info_map.begin(); iter != m_info_map.end(); ++ iter) { delete iter->second; } m_info_map.clear(); } } void Gobby::AutosaveCommands::on_autosave_interval_changed() { // Propagate to infos for(InfoMap::iterator iter = m_info_map.begin(); iter != m_info_map.end(); ++ iter) { return iter->second->reschedule(); } } gobby-0.6.0/code/commands/file-commands.cpp0000664000175000017500000002132214003367605015503 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-commands.hpp" #include "commands/file-tasks/task-new.hpp" #include "commands/file-tasks/task-open-file.hpp" #include "commands/file-tasks/task-open-location.hpp" #include "commands/file-tasks/task-save.hpp" #include "commands/file-tasks/task-save-all.hpp" #include "commands/file-tasks/task-export-html.hpp" #include "util/i18n.hpp" Gobby::FileCommands::Task::Task(FileCommands& file_commands): m_file_commands(file_commands) { } Gobby::FileCommands::Task::~Task() { } void Gobby::FileCommands::Task::finish() { // Note this could delete this: m_signal_finished.emit(); } Gtk::Window& Gobby::FileCommands::Task::get_parent() { return m_file_commands.m_parent; } const Gobby::Folder& Gobby::FileCommands::Task::get_folder() { return m_file_commands.m_folder_manager.get_text_folder(); } Gobby::StatusBar& Gobby::FileCommands::Task::get_status_bar() { return m_file_commands.m_status_bar; } Gobby::FileChooser& Gobby::FileCommands::Task::get_file_chooser() { return m_file_commands.m_file_chooser; } Gobby::Operations& Gobby::FileCommands::Task::get_operations() { return m_file_commands.m_operations; } const Gobby::DocumentInfoStorage& Gobby::FileCommands::Task::get_document_info_storage() { return m_file_commands.m_document_info_storage; } Gobby::Preferences& Gobby::FileCommands::Task::get_preferences() { return m_file_commands.m_preferences; } Gobby::DocumentLocationDialog& Gobby::FileCommands::Task::get_document_location_dialog() { if(m_file_commands.m_location_dialog.get() == NULL) { m_file_commands.m_location_dialog = DocumentLocationDialog::create( m_file_commands.m_parent, INF_GTK_BROWSER_MODEL( m_file_commands.m_browser. get_store())); } return *m_file_commands.m_location_dialog; } Gobby::FileCommands::FileCommands(Gtk::Window& parent, WindowActions& actions, Browser& browser, FolderManager& folder_manager, StatusBar& status_bar, FileChooser& file_chooser, Operations& operations, const DocumentInfoStorage& info_storage, Preferences& preferences): m_parent(parent), m_actions(actions), m_browser(browser), m_folder_manager(folder_manager), m_status_bar(status_bar), m_file_chooser(file_chooser), m_operations(operations), m_document_info_storage(info_storage), m_preferences(preferences) { actions.new_document->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &FileCommands::on_new))); actions.open->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &FileCommands::on_open))); actions.open_location->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &FileCommands::on_open_location))); actions.save->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &FileCommands::on_save))); actions.save_as->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &FileCommands::on_save_as))); actions.save_all->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &FileCommands::on_save_all))); actions.export_html->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &FileCommands::on_export_html))); actions.connect->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &FileCommands::on_connect))); actions.close->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &FileCommands::on_close))); folder_manager.get_text_folder().signal_document_changed().connect( sigc::mem_fun(*this, &FileCommands::on_document_changed)); InfGtkBrowserModelSort* store = browser.get_store(); m_row_inserted_handler = g_signal_connect(G_OBJECT(store), "row-inserted", G_CALLBACK(on_row_inserted_static), this); m_row_deleted_handler = g_signal_connect(G_OBJECT(store), "row-deleted", G_CALLBACK(on_row_deleted_static), this); update_sensitivity(); } Gobby::FileCommands::~FileCommands() { InfGtkBrowserModelSort* store = m_browser.get_store(); g_signal_handler_disconnect(G_OBJECT(store), m_row_inserted_handler); g_signal_handler_disconnect(G_OBJECT(store), m_row_deleted_handler); } void Gobby::FileCommands::set_task(Task* task) { task->signal_finished().connect(sigc::mem_fun( *this, &FileCommands::on_task_finished)); m_task.reset(task); task->run(); } void Gobby::FileCommands::on_document_changed(SessionView* view) { update_sensitivity(); } void Gobby::FileCommands::on_row_inserted() { update_sensitivity(); } void Gobby::FileCommands::on_row_deleted() { update_sensitivity(); } void Gobby::FileCommands::on_task_finished() { m_task.reset(NULL); } void Gobby::FileCommands::on_new() { set_task(new TaskNew(*this)); } void Gobby::FileCommands::on_open() { set_task(new TaskOpenFile(*this)); } void Gobby::FileCommands::on_open_location() { set_task(new TaskOpenLocation(*this)); } void Gobby::FileCommands::on_save() { SessionView* view = m_folder_manager.get_text_folder().get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); const DocumentInfoStorage::Info* info = m_document_info_storage.get_info( text_view->get_info_storage_key()); if(info != NULL && !info->uri.empty()) { Glib::RefPtr file = Gio::File::create_for_uri(info->uri); m_operations.save_document( *text_view, file, info->encoding, info->eol_style); } else { on_save_as(); } } void Gobby::FileCommands::on_save_as() { SessionView* view = m_folder_manager.get_text_folder().get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); set_task(new TaskSave(*this, *text_view)); } void Gobby::FileCommands::on_save_all() { set_task(new TaskSaveAll(*this)); } void Gobby::FileCommands::on_export_html() { SessionView* view = m_folder_manager.get_text_folder().get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); set_task(new TaskExportHtml(*this, *text_view)); } void Gobby::FileCommands::on_connect() { if(m_connection_dialog.get() == NULL) { m_connection_dialog = ConnectionDialog::create(m_parent); m_connection_dialog->signal_response().connect( sigc::mem_fun(*this, &FileCommands::on_connect_response)); m_connection_dialog->add_button(_("Cancel"), Gtk::RESPONSE_CANCEL); m_connection_dialog->add_button(_("Connect"), Gtk::RESPONSE_ACCEPT); } m_connection_dialog->present(); } void Gobby::FileCommands::on_close() { SessionView* view = m_folder_manager.get_text_folder().get_current_document(); g_assert(view != NULL); m_folder_manager.remove_document(*view); } void Gobby::FileCommands::on_connect_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { const Glib::ustring& host = m_connection_dialog->get_host_name(); if(!host.empty()) { m_operations.subscribe_path(host); } } m_connection_dialog->hide(); } void Gobby::FileCommands::update_sensitivity() { GtkTreeIter dummy_iter; const bool create_sensitivity = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(m_browser.get_store()), &dummy_iter); SessionView* view = m_folder_manager.get_text_folder().get_current_document(); const bool view_sensitivity = view != NULL; // We can only save text documents currently const bool text_sensitivity = dynamic_cast(view) != NULL; m_actions.new_document->set_enabled(create_sensitivity); m_actions.open->set_enabled(create_sensitivity); m_actions.open_location->set_enabled(create_sensitivity); m_actions.save->set_enabled(text_sensitivity); m_actions.save_as->set_enabled(text_sensitivity); m_actions.save_all->set_enabled(text_sensitivity); m_actions.export_html->set_enabled(text_sensitivity); m_actions.close->set_enabled(view_sensitivity); } gobby-0.6.0/code/commands/browser-context-commands.hpp0000664000175000017500000001077114003367605017744 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_BROWSER_CONTEXT_COMMANDS_HPP_ #define _GOBBY_BROWSER_CONTEXT_COMMANDS_HPP_ #include "operations/operations.hpp" #include "dialogs/entry-dialog.hpp" #include "core/nodewatch.hpp" #include "core/browser.hpp" #include "core/filechooser.hpp" #include #include #include #include namespace Gobby { class BrowserContextCommands: public sigc::trackable { public: BrowserContextCommands(Gtk::Window& parent, InfIo* io, Browser& browser, FileChooser& chooser, Operations& operations, const CertificateManager& cert_manager, Preferences& prf); ~BrowserContextCommands(); protected: static void on_populate_popup_static(InfGtkBrowserView* view, GtkMenu* menu, gpointer user_data) { static_cast(user_data)-> on_populate_popup(Glib::wrap(menu)); } static void on_account_created_static( InfGtkAccountCreationDialog* dlg, gnutls_x509_privkey_t key, InfCertificateChain* certificate, const InfAclAccount* account, gpointer user_data) { static_cast(user_data)-> on_account_created(key, certificate, account); } void on_menu_node_removed(); void on_menu_deactivate(); void on_populate_popup(Gtk::Menu* menu); void on_popdown(); // Context commands void on_remove(const Glib::VariantBase& param); void on_connection_info(const Glib::VariantBase& param); void on_disconnect(const Glib::VariantBase& param); void on_create_account(const Glib::VariantBase& param); void on_new(const Glib::VariantBase& param, bool directory); void on_open(const Glib::VariantBase& param); void on_permissions(const Glib::VariantBase& param); void on_delete(const Glib::VariantBase& param); void on_dialog_node_removed(); void on_create_account_response(int response_id); void on_account_created(gnutls_x509_privkey_t key, InfCertificateChain* certificate, const InfAclAccount* account); void on_connection_info_response(int response_id); void on_account_created_response(int response_id); void on_new_response(int response_id, InfBrowser* browser, InfBrowserIter iter, bool directory); void on_open_response(int response_id, InfBrowser* browser, InfBrowserIter iter); void on_permissions_response(int response_id); Gtk::Window& m_parent; InfIo* m_io; Browser& m_browser; FileChooser& m_file_chooser; Operations& m_operations; const CertificateManager& m_cert_manager; Preferences& m_preferences; // Popup menu Gtk::Menu* m_popup_menu; std::unique_ptr m_popup_watch; gulong m_populate_popup_handler; // Dialog std::unique_ptr m_dialog; std::unique_ptr m_dialog_watch; // Allowed Actions (TODO: move them to browsercontextactions.cpp) const Glib::RefPtr m_action_group; const Glib::RefPtr m_action_remove; const Glib::RefPtr m_action_connection_info; const Glib::RefPtr m_action_disconnect; const Glib::RefPtr m_action_create_account; const Glib::RefPtr m_action_create_document; const Glib::RefPtr m_action_create_directory; const Glib::RefPtr m_action_open_document; const Glib::RefPtr m_action_permissions; const Glib::RefPtr m_action_delete; }; } #endif // _GOBBY_BROWSER_CONTEXT_COMMANDS_HPP_ gobby-0.6.0/code/commands/file-commands.hpp0000664000175000017500000000753114003367605015516 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ // TODO: Someone else should do task management #ifndef _GOBBY_FILE_COMMANDS_HPP_ #define _GOBBY_FILE_COMMANDS_HPP_ #include "operations/operations.hpp" #include "dialogs/document-location-dialog.hpp" #include "dialogs/connection-dialog.hpp" #include "core/browser.hpp" #include "core/statusbar.hpp" #include "core/filechooser.hpp" #include "core/windowactions.hpp" #include #include namespace Gobby { class FileCommands: public sigc::trackable { public: FileCommands(Gtk::Window& parent, WindowActions& actions, Browser& browser, FolderManager& folder_manager, StatusBar& status_bar, FileChooser& file_chooser, Operations& operations, const DocumentInfoStorage& info_storage, Preferences& preferences); ~FileCommands(); class Task: public sigc::trackable { public: typedef sigc::signal SignalFinished; Task(FileCommands& file_commands); virtual ~Task() = 0; virtual void run() = 0; void finish(); Gtk::Window& get_parent(); const Folder& get_folder(); StatusBar& get_status_bar(); FileChooser& get_file_chooser(); Operations& get_operations(); const DocumentInfoStorage& get_document_info_storage(); Preferences& get_preferences(); DocumentLocationDialog& get_document_location_dialog(); SignalFinished signal_finished() const { return m_signal_finished; } protected: FileCommands& m_file_commands; SignalFinished m_signal_finished; }; void set_task(Task* task); protected: static void on_row_inserted_static(GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, gpointer user_data) { static_cast(user_data)->on_row_inserted(); } static void on_row_deleted_static(GtkTreeModel* model, GtkTreePath* path, gpointer user_data) { static_cast(user_data)->on_row_deleted(); } void on_document_changed(SessionView* view); void on_row_inserted(); void on_row_deleted(); void on_task_finished(); void on_new(); void on_open(); void on_open_location(); void on_save(); void on_save_as(); void on_save_all(); void on_export_html(); void on_connect(); void on_close(); void on_connect_response(int response_id); void update_sensitivity(); Gtk::Window& m_parent; WindowActions& m_actions; Browser& m_browser; FolderManager& m_folder_manager; StatusBar& m_status_bar; FileChooser& m_file_chooser; Operations& m_operations; const DocumentInfoStorage& m_document_info_storage; Preferences& m_preferences; // Note: Order is important to get deinitialization right: Task may // access the location dialog in its destructor, so make sure the task // is freed before the location dialog. std::unique_ptr m_location_dialog; std::unique_ptr m_task; std::unique_ptr m_connection_dialog; gulong m_row_inserted_handler; gulong m_row_deleted_handler; }; } #endif // _GOBBY_FILE_COMMANDS_HPP_ gobby-0.6.0/code/commands/file-tasks/0000775000175000017500000000000014005504730014375 500000000000000gobby-0.6.0/code/commands/file-tasks/task-save.cpp0000664000175000017500000000511614003367605016730 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-save.hpp" #include "util/i18n.hpp" Gobby::TaskSave::TaskSave(FileCommands& file_commands, TextSessionView& view): Task(file_commands), m_file_dialog(get_file_chooser(), get_parent(), Glib::ustring::compose( _("Choose a location to save document \"%1\" to"), view.get_title()), Gtk::FILE_CHOOSER_ACTION_SAVE), m_view(&view), m_running(false) { get_folder().signal_document_removed().connect( sigc::mem_fun( *this, &TaskSave::on_document_removed)); } void Gobby::TaskSave::run() { // m_view will be set to NULL if it has been removed before run // was called. if(!m_view) { finish(); return; } m_running = true; m_file_dialog.signal_response().connect(sigc::mem_fun( *this, &TaskSave::on_response)); const DocumentInfoStorage::Info* info = get_document_info_storage().get_info( m_view->get_info_storage_key()); if(info != NULL && !info->uri.empty()) m_file_dialog.set_uri(info->uri); else m_file_dialog.set_current_name(m_view->get_title()); m_file_dialog.present(); } void Gobby::TaskSave::on_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { const std::string& info_storage_key = m_view->get_info_storage_key(); const DocumentInfoStorage::Info* info = get_document_info_storage().get_info( info_storage_key); // TODO: Get encoding from file dialog // TODO: Default to CRLF on Windows get_operations().save_document( *m_view, m_file_dialog.get_file(), info ? info->encoding : "UTF-8", info ? info->eol_style : DocumentInfoStorage::EOL_LF); } finish(); } void Gobby::TaskSave::on_document_removed(SessionView& view) { // The document we are about to save was removed. if(m_view == &view) { if(m_running) finish(); else m_view = NULL; } } gobby-0.6.0/code/commands/file-tasks/task-save.hpp0000664000175000017500000000250114003367605016730 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_SAVE_HPP_ #define _GOBBY_FILE_TASK_SAVE_HPP_ #include "commands/file-commands.hpp" namespace Gobby { class TaskSave: public FileCommands::Task { private: FileChooser::Dialog m_file_dialog; TextSessionView* m_view; bool m_running; public: TaskSave(FileCommands& file_commands, TextSessionView& view); virtual void run(); void on_response(int response_id); void on_document_removed(SessionView& view); }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_SAVE_HPP_ gobby-0.6.0/code/commands/file-tasks/task-open-location.hpp0000664000175000017500000000262214003367605020545 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_OPEN_LOCATION_HPP_ #define _GOBBY_FILE_TASK_OPEN_LOCATION_HPP_ #include "commands/file-commands.hpp" #include "commands/file-tasks/task-open.hpp" #include "dialogs/open-location-dialog.hpp" namespace Gobby { class TaskOpenLocation: public FileCommands::Task { public: TaskOpenLocation(FileCommands& file_commands); virtual void run(); private: void on_response(int response_id); std::unique_ptr m_location_dialog; std::unique_ptr m_open_task; }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_OPEN_LOCATION_HPP_ gobby-0.6.0/code/commands/file-tasks/task-open-multiple.hpp0000664000175000017500000000270614003367605020573 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_OPEN_MULTIPLE_HPP_ #define _GOBBY_FILE_TASK_OPEN_MULTIPLE_HPP_ #include "commands/file-commands.hpp" #include "operations/operation-open-multiple.hpp" #include #include namespace Gobby { class TaskOpenMultiple: public FileCommands::Task { public: typedef OperationOpenMultiple::file_list file_list; TaskOpenMultiple(FileCommands& file_commands, const file_list& files); virtual ~TaskOpenMultiple(); virtual void run(); private: void on_location_response(int response_id); const file_list m_files; }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_OPEN_MULTIPLE_HPP_ gobby-0.6.0/code/commands/file-tasks/task-save-all.hpp0000664000175000017500000000265014003367605017503 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_SAVE_ALL_HPP_ #define _GOBBY_FILE_TASK_SAVE_ALL_HPP_ #include "commands/file-commands.hpp" #include "commands/file-tasks/task-save.hpp" namespace Gobby { class TaskSaveAll: public Gobby::FileCommands::Task { public: TaskSaveAll(FileCommands& file_commands); virtual void run(); private: void on_document_removed(SessionView& view); void on_finished(); void process_current(); std::list m_views; std::list::iterator m_current; std::unique_ptr m_task; }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_SAVE_ALL_HPP_ gobby-0.6.0/code/commands/file-tasks/task-new.hpp0000664000175000017500000000227614003367605016574 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_NEW_HPP_ #define _GOBBY_FILE_TASK_NEW_HPP_ #include "commands/file-commands.hpp" namespace Gobby { class TaskNew: public FileCommands::Task { public: TaskNew(FileCommands& file_commands); virtual ~TaskNew(); virtual void run(); protected: void on_response(int response_id); }; } // namespcae Gobby #endif // _GOBBY_FILE_TASK_NEW_HPP_ gobby-0.6.0/code/commands/file-tasks/task-new.cpp0000664000175000017500000000334714003367605016567 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-new.hpp" #include "util/i18n.hpp" Gobby::TaskNew::TaskNew(FileCommands& file_commands): Task(file_commands) { } Gobby::TaskNew::~TaskNew() { get_document_location_dialog().hide(); } void Gobby::TaskNew::run() { DocumentLocationDialog& dialog = get_document_location_dialog(); dialog.signal_response().connect( sigc::mem_fun(*this, &TaskNew::on_response)); dialog.set_document_name(_("New Document")); dialog.set_single_document_mode(); dialog.present(); } void Gobby::TaskNew::on_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { DocumentLocationDialog& dialog = get_document_location_dialog(); InfBrowserIter iter; InfBrowser* browser = dialog.get_selected_directory(&iter); g_assert(browser != NULL); get_operations().create_document(browser, &iter, dialog.get_document_name()); } finish(); } gobby-0.6.0/code/commands/file-tasks/task-open.cpp0000664000175000017500000000556714003367605016745 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-open.hpp" #include "util/i18n.hpp" Gobby::TaskOpen::TaskOpen(FileCommands& file_commands, const Glib::RefPtr& file): Task(file_commands), m_file(file) { } Gobby::TaskOpen::~TaskOpen() { if(m_handle != get_status_bar().invalid_handle()) get_status_bar().remove_message(m_handle); get_document_location_dialog().hide(); } void Gobby::TaskOpen::run() { try { // TODO: Show DocumentLocationDialog with a // default name as long as the query is // running. m_file->query_info_async( sigc::mem_fun(*this, &TaskOpen::on_query_info), G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); m_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Querying \"%1\"..."), m_file->get_uri())); } catch(const Gio::Error& ex) { error(ex.what()); } } void Gobby::TaskOpen::on_query_info( const Glib::RefPtr& result) { get_status_bar().remove_message(m_handle); m_handle = get_status_bar().invalid_handle(); DocumentLocationDialog& dialog = get_document_location_dialog(); dialog.signal_response().connect(sigc::mem_fun( *this, &TaskOpen::on_location_response)); try { Glib::RefPtr info = m_file->query_info_finish(result); dialog.set_document_name(info->get_display_name()); dialog.set_single_document_mode(); dialog.present(); } catch(const Gio::Error& ex) { error(ex.what()); } } void Gobby::TaskOpen::on_location_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { DocumentLocationDialog& dialog = get_document_location_dialog(); InfBrowserIter iter; InfBrowser* browser = dialog.get_selected_directory(&iter); g_assert(browser != NULL); get_operations().create_document( browser, &iter, dialog.get_document_name(), get_preferences(), m_file, NULL); } finish(); } void Gobby::TaskOpen::error(const Glib::ustring& message) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to open document \"%1\""), m_file->get_uri()), message); finish(); } gobby-0.6.0/code/commands/file-tasks/task-open-location.cpp0000664000175000017500000000352014003367605020536 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-open-location.hpp" #include "util/i18n.hpp" Gobby::TaskOpenLocation::TaskOpenLocation(FileCommands& file_commands): Task(file_commands) { } void Gobby::TaskOpenLocation::run() { m_location_dialog = OpenLocationDialog::create(get_parent()); m_location_dialog->signal_response().connect( sigc::mem_fun( *this, &TaskOpenLocation::on_response)); m_location_dialog->add_button(_("_Close"), Gtk::RESPONSE_CLOSE); m_location_dialog->add_button(_("_Open"), Gtk::RESPONSE_ACCEPT); m_location_dialog->present(); } void Gobby::TaskOpenLocation::on_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { std::string uri = m_location_dialog->get_uri(); Glib::RefPtr file = Gio::File::create_for_uri(uri); m_location_dialog.reset(NULL); m_open_task.reset(new TaskOpen(m_file_commands, file)); m_open_task->signal_finished().connect( sigc::mem_fun(*this, &TaskOpenLocation::finish)); m_open_task->run(); } else { finish(); // deletes this } } gobby-0.6.0/code/commands/file-tasks/task-open.hpp0000664000175000017500000000271014003367605016735 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_OPEN_HPP_ #define _GOBBY_FILE_TASK_OPEN_HPP_ #include "commands/file-commands.hpp" #include namespace Gobby { class TaskOpen: public FileCommands::Task { public: TaskOpen(FileCommands& file_commands, const Glib::RefPtr& file); virtual ~TaskOpen(); virtual void run(); private: void on_query_info(const Glib::RefPtr& result); void on_location_response(int response_id); void error(const Glib::ustring& message); StatusBar::MessageHandle m_handle; Glib::RefPtr m_file; }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_OPEN_HPP_ gobby-0.6.0/code/commands/file-tasks/task-open-multiple.cpp0000664000175000017500000000361314003367605020564 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-open-multiple.hpp" #include "operations/operation-open-multiple.hpp" Gobby::TaskOpenMultiple::TaskOpenMultiple(FileCommands& file_commands, const file_list& files): Task(file_commands), m_files(files) { } Gobby::TaskOpenMultiple::~TaskOpenMultiple() { get_document_location_dialog().hide(); } void Gobby::TaskOpenMultiple::run() { DocumentLocationDialog& dialog = get_document_location_dialog(); dialog.signal_response().connect(sigc::mem_fun( *this, &TaskOpenMultiple::on_location_response)); dialog.set_multiple_document_mode(); dialog.present(); } void Gobby::TaskOpenMultiple::on_location_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { DocumentLocationDialog& dialog = get_document_location_dialog(); InfBrowserIter iter; InfBrowser* browser = dialog.get_selected_directory(&iter); g_assert(browser != NULL); OperationOpenMultiple* operation = get_operations().create_documents( browser, &iter, get_preferences(), m_files); } finish(); } gobby-0.6.0/code/commands/file-tasks/task-open-file.cpp0000664000175000017500000000401514003367605017645 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-open-file.hpp" #include "util/i18n.hpp" Gobby::TaskOpenFile::TaskOpenFile(FileCommands& file_commands): Task(file_commands), m_file_dialog(get_file_chooser(), get_parent(), _("Choose a text file to open"), Gtk::FILE_CHOOSER_ACTION_OPEN) { m_file_dialog.set_select_multiple(true); } void Gobby::TaskOpenFile::run() { m_file_dialog.signal_response().connect(sigc::mem_fun( *this, &TaskOpenFile::on_file_response)); m_file_dialog.present(); } void Gobby::TaskOpenFile::on_file_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { m_file_dialog.hide(); std::vector > files = m_file_dialog.get_files(); g_assert(!files.empty()); if(files.size() == 1) { m_open_task.reset( new TaskOpen(m_file_commands, files[0])); m_open_task->signal_finished().connect( sigc::mem_fun(*this, &TaskOpenFile::finish)); m_open_task->run(); } else { TaskOpenMultiple *task = new TaskOpenMultiple(m_file_commands, files); m_open_taskm.reset(task); m_open_taskm->signal_finished().connect( sigc::mem_fun(*this, &TaskOpenFile::finish)); m_open_taskm->run(); } } else { finish(); } } gobby-0.6.0/code/commands/file-tasks/Makefile.am0000664000175000017500000000141214003367605016355 00000000000000gobby_0_5_SOURCES += \ code/commands/file-tasks/task-export-html.cpp \ code/commands/file-tasks/task-new.cpp \ code/commands/file-tasks/task-open.cpp \ code/commands/file-tasks/task-open-file.cpp \ code/commands/file-tasks/task-open-location.cpp \ code/commands/file-tasks/task-open-multiple.cpp \ code/commands/file-tasks/task-save.cpp \ code/commands/file-tasks/task-save-all.cpp noinst_HEADERS += \ code/commands/file-tasks/task-export-html.hpp \ code/commands/file-tasks/task-new.hpp \ code/commands/file-tasks/task-open.hpp \ code/commands/file-tasks/task-open-file.hpp \ code/commands/file-tasks/task-open-location.hpp \ code/commands/file-tasks/task-open-multiple.hpp \ code/commands/file-tasks/task-save.hpp \ code/commands/file-tasks/task-save-all.hpp gobby-0.6.0/code/commands/file-tasks/task-open-file.hpp0000664000175000017500000000265214003367605017657 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_OPEN_FILE_HPP_ #define _GOBBY_FILE_TASK_OPEN_FILE_HPP_ #include "commands/file-commands.hpp" #include "commands/file-tasks/task-open.hpp" #include "commands/file-tasks/task-open-multiple.hpp" namespace Gobby { class TaskOpenFile: public FileCommands::Task { public: TaskOpenFile(FileCommands& file_commands); virtual void run(); private: void on_file_response(int response_id); FileChooser::Dialog m_file_dialog; std::unique_ptr m_open_task; std::unique_ptr m_open_taskm; }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_OPEN_FILE_HPP_ gobby-0.6.0/code/commands/file-tasks/task-save-all.cpp0000664000175000017500000000541114003367605017474 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ // TODO: This should not be a task because the asynchronous IO operations // should not be interrupted by tasks like "save as". // The should-not-abort part should be an operation. #include "commands/file-tasks/task-save-all.hpp" Gobby::TaskSaveAll::TaskSaveAll(FileCommands& file_commands): Task(file_commands) { } void Gobby::TaskSaveAll::run() { const unsigned int n_pages = get_folder().get_n_pages(); for(unsigned int i = 0; i < n_pages; ++i) { SessionView& view = get_folder().get_document(i); TextSessionView* text_view = dynamic_cast(&view); if(text_view) m_views.push_back(text_view); } get_folder().signal_document_removed().connect( sigc::mem_fun(*this, &TaskSaveAll::on_document_removed)); m_current = m_views.begin(); process_current(); } void Gobby::TaskSaveAll::on_document_removed(SessionView& view) { std::list::iterator iter = std::find( m_views.begin(), m_views.end(), &view); if(iter == m_current) { m_current = m_views.erase(m_current); // Go on with next process_current(); } if(iter != m_views.end()) m_views.erase(iter); } void Gobby::TaskSaveAll::on_finished() { m_current = m_views.erase(m_current); process_current(); } void Gobby::TaskSaveAll::process_current() { m_task.reset(NULL); if(m_current == m_views.end()) { finish(); } else { TextSessionView& view = **m_current; const DocumentInfoStorage::Info* info = get_document_info_storage().get_info( view.get_info_storage_key()); if(info != NULL && !info->uri.empty()) { Glib::RefPtr file = Gio::File::create_for_uri(info->uri); get_operations().save_document( view, file, info->encoding, info->eol_style); m_current = m_views.erase(m_current); process_current(); } else { m_task.reset(new TaskSave(m_file_commands, view)); m_task->signal_finished().connect(sigc::mem_fun( *this, &TaskSaveAll::on_finished)); m_task->run(); } } } gobby-0.6.0/code/commands/file-tasks/task-export-html.hpp0000664000175000017500000000254214003367605020262 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_EXPORT_HTML_HPP_ #define _GOBBY_FILE_TASK_EXPORT_HTML_HPP_ #include "commands/file-commands.hpp" namespace Gobby { class TaskExportHtml: public FileCommands::Task { private: FileChooser::Dialog m_file_dialog; TextSessionView* m_view; bool m_running; public: TaskExportHtml(FileCommands& file_commands, TextSessionView& view); virtual void run(); void on_response(int response_id); void on_document_removed(SessionView& view); }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_EXPORT_HTML_HPP_ gobby-0.6.0/code/commands/file-tasks/task-export-html.cpp0000664000175000017500000000431114003367605020251 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ // TODO: Merge with TaskSave, or share code in a common base class #include "commands/file-tasks/task-export-html.hpp" #include "util/i18n.hpp" Gobby::TaskExportHtml::TaskExportHtml(FileCommands& file_commands, TextSessionView& view): Task(file_commands), m_file_dialog(get_file_chooser(), get_parent(), Glib::ustring::compose( _("Choose a location to export document \"%1\" to"), view.get_title()), Gtk::FILE_CHOOSER_ACTION_SAVE), m_view(&view), m_running(false) { get_folder().signal_document_removed().connect( sigc::mem_fun(*this, &TaskExportHtml::on_document_removed)); } void Gobby::TaskExportHtml::run() { // m_document will be set to NULL if it has been removed before run // was called. if(!m_view) { finish(); return; } m_running = true; m_file_dialog.signal_response().connect(sigc::mem_fun( *this, &TaskExportHtml::on_response)); m_file_dialog.set_current_name(m_view->get_title() + ".xhtml"); m_file_dialog.present(); } void Gobby::TaskExportHtml::on_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { get_operations().export_html( *m_view, m_file_dialog.get_file()); } finish(); } void Gobby::TaskExportHtml::on_document_removed(SessionView& view) { // The document we are about to save was removed. if(m_view == &view) { if(m_running) finish(); else m_view = NULL; } } gobby-0.6.0/code/commands/synchronization-commands.cpp0000664000175000017500000001743514003367605020037 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/synchronization-commands.hpp" #include "util/i18n.hpp" namespace { inline const gchar* _(const gchar* msgid) { return Gobby::_(msgid); } void set_progress_text(Gobby::SessionView& view, gdouble percentage) { view.set_info( Glib::ustring::compose( _("Synchronization in progress... %1%%"), static_cast(percentage * 100)), false); } void set_error_text(Gobby::SessionView& view, const Glib::ustring& initial_text) { Glib::ustring type_text; // Document cannot be used if an error happened // during synchronization. type_text = _("This document cannot be used."); const Glib::ustring info_text = _("If you have an idea what could have caused the " "problem, then you may attempt to solve it and " "try again (after having closed this document). " "Otherwise it is most likely a bug in the " "software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and " "provide as much information as you can, including " "what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we " "can fix the problem in a later version. " "Thank you."); view.set_info( Glib::ustring::compose( _("Synchronization failed: %1"), initial_text) + "\n\n" + type_text + "\n\n" + info_text, true); } } class Gobby::SynchronizationCommands::SyncInfo { public: SyncInfo(SynchronizationCommands& sync_commands, SessionView& view); ~SyncInfo(); SessionView& get_session_view() { return m_view; } private: static void on_synchronization_failed_static(InfSession* session, InfXmlConnection* conn, const GError* error, gpointer user_data) { static_cast(user_data)-> on_synchronization_failed(session, conn, error); } static void on_synchronization_complete_static(InfSession* session, InfXmlConnection* conn, gpointer user_data) { static_cast(user_data)-> on_synchronization_complete(session, conn); } static void on_synchronization_progress_static(InfSession* session, InfXmlConnection* conn, gdouble percentage, gpointer user_data) { static_cast(user_data)-> on_synchronization_progress(conn, percentage); } void on_synchronization_progress(InfXmlConnection* conn, gdouble percentage); SessionView& m_view; gulong m_synchronization_complete_handler; gulong m_synchronization_failed_handler; gulong m_synchronization_progress_handler; }; Gobby::SynchronizationCommands::SyncInfo:: SyncInfo(SynchronizationCommands& commands, SessionView& view): m_view(view) { InfSession* session = m_view.get_session(); m_synchronization_complete_handler = g_signal_connect( G_OBJECT(session), "synchronization-complete", G_CALLBACK(on_synchronization_complete_static), &commands); m_synchronization_failed_handler = g_signal_connect( G_OBJECT(session), "synchronization-failed", G_CALLBACK(on_synchronization_failed_static), &commands); m_synchronization_progress_handler = g_signal_connect( G_OBJECT(session), "synchronization-progress", G_CALLBACK(on_synchronization_progress_static), this); } Gobby::SynchronizationCommands::SyncInfo::~SyncInfo() { InfSession* session = m_view.get_session(); g_signal_handler_disconnect(G_OBJECT(session), m_synchronization_complete_handler); g_signal_handler_disconnect(G_OBJECT(session), m_synchronization_failed_handler); g_signal_handler_disconnect(G_OBJECT(session), m_synchronization_progress_handler); } void Gobby::SynchronizationCommands::SyncInfo:: on_synchronization_progress(InfXmlConnection* conn, gdouble percentage) { set_progress_text(m_view, percentage); } Gobby::SynchronizationCommands:: SynchronizationCommands(const Folder& text_folder, const Folder& chat_folder) { text_folder.signal_document_added().connect( sigc::mem_fun( *this, &SynchronizationCommands::on_document_added)); chat_folder.signal_document_added().connect( sigc::mem_fun( *this, &SynchronizationCommands::on_document_added)); text_folder.signal_document_removed().connect( sigc::mem_fun( *this, &SynchronizationCommands::on_document_removed)); text_folder.signal_document_removed().connect( sigc::mem_fun( *this, &SynchronizationCommands::on_document_removed)); } Gobby::SynchronizationCommands::~SynchronizationCommands() { for(SyncMap::iterator iter = m_sync_map.begin(); iter != m_sync_map.end(); ++iter) { delete iter->second; } } void Gobby::SynchronizationCommands::on_document_added(SessionView& view) { InfSession* session = view.get_session(); if(inf_session_get_status(session) == INF_SESSION_SYNCHRONIZING) { InfXmlConnection* connection; g_object_get(G_OBJECT(session), "sync-connection", &connection, NULL); gdouble percentage = inf_session_get_synchronization_progress( session, connection); g_object_unref(connection); g_assert(m_sync_map.find(session) == m_sync_map.end()); m_sync_map[session] = new SyncInfo(*this, view); set_progress_text(view, percentage); } } void Gobby::SynchronizationCommands::on_document_removed(SessionView& view) { InfSession* session = view.get_session(); SyncMap::iterator iter = m_sync_map.find(session); if(iter != m_sync_map.end()) { delete iter->second; m_sync_map.erase(iter); } } void Gobby::SynchronizationCommands:: on_synchronization_failed(InfSession* session, InfXmlConnection* c, const GError* error) { SyncMap::iterator iter = m_sync_map.find(session); g_assert(iter != m_sync_map.end()); set_error_text(iter->second->get_session_view(), error->message); // The document will be of no use anyway, so consider it as not // being modified. InfBuffer* buffer = inf_session_get_buffer(session); inf_buffer_set_modified(buffer, FALSE); delete iter->second; m_sync_map.erase(iter); } void Gobby::SynchronizationCommands:: on_synchronization_complete(InfSession* session, InfXmlConnection* c) { SyncMap::iterator iter = m_sync_map.find(session); g_assert(iter != m_sync_map.end()); // TODO: Actually we should always set the modified flag, except the // document is either empty, or known in the document info storage // and the version on disk is the same as the one we got // synchronized. We could store a hash and modification time in the // documentinfo storage for this. InfBuffer* buffer = inf_session_get_buffer(session); inf_buffer_set_modified(buffer, FALSE); delete iter->second; m_sync_map.erase(iter); } gobby-0.6.0/code/commands/browser-commands.hpp0000664000175000017500000000523414003367605016260 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_BROWSER_COMMANDS_HPP_ #define _GOBBY_BROWSER_COMMANDS_HPP_ #include "operations/operations.hpp" #include "core/browser.hpp" #include "core/statusbar.hpp" #include namespace Gobby { class BrowserCommands: public sigc::trackable { public: BrowserCommands(Browser& browser, FolderManager& folder_manager, StatusBar& status_bar, Operations& operations, const Preferences& preferences); ~BrowserCommands(); protected: static void on_set_browser_static(InfGtkBrowserModel* model, GtkTreePath* path, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser, gpointer user_data) { static_cast(user_data)-> on_set_browser(model, iter, old_browser, new_browser); } void on_set_browser(InfGtkBrowserModel* model, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser); void on_notify_status(InfBrowser* browser); void subscribe_chat(InfBrowser* browser); bool create_chat_document(InfBrowser* browser); void on_connect(const Glib::ustring& hostname); void on_activate(InfBrowser* browser, InfBrowserIter* iter); void on_finished(InfRequest* request, InfBrowser* browser, const InfBrowserIter* iter, const GError* error); Browser& m_browser; FolderManager& m_folder_manager; StatusBar& m_status_bar; Operations& m_operations; const Preferences& m_preferences; gulong m_set_browser_handler; class BrowserInfo; typedef std::map BrowserMap; BrowserMap m_browser_map; class RequestInfo; typedef std::map RequestMap; RequestMap m_request_map; }; } #endif // _GOBBY_BROWSER_COMMANDS_HPP_ gobby-0.6.0/code/commands/folder-commands.cpp0000664000175000017500000002050614003367605016042 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/folder-commands.hpp" #include "core/sessionuserview.hpp" #include #include // TODO: Make this work with non-text documents also... maybe split & // share a base class... or better: Move active user stuff to SessionView // base. All SessionView's should be modifyable by the user, and if there are // document types gobby only supports in a read-only kind of way the active // user can just be NULL all the time. class Gobby::FolderCommands::DocInfo: public sigc::trackable { public: static const unsigned int ACTIVATION_DELAY = 1000; DocInfo(SessionView& view): m_view(view), m_active_user(NULL), m_active(false) { m_view.signal_active_user_changed().connect( sigc::mem_fun( *this, &DocInfo::on_active_user_changed)); on_active_user_changed(view.get_active_user()); } virtual ~DocInfo() { if(m_active_user != NULL) { g_signal_handler_disconnect(G_OBJECT(m_active_user), m_notify_status_handle); } } virtual void deactivate() { m_active = false; if(m_active_user) deactivate_user(); } virtual void activate() { m_active = true; if(m_active_user) activate_user(); } virtual void flush() {} protected: void activate_user() { g_assert(!m_timeout_connection.connected()); g_assert(m_active_user != NULL); g_assert(inf_user_get_status(m_active_user) == INF_USER_INACTIVE); m_timeout_connection = Glib::signal_timeout().connect( sigc::mem_fun(*this, &DocInfo::on_activation_timeout), ACTIVATION_DELAY); } void deactivate_user() { g_assert(m_active_user != NULL); switch(inf_user_get_status(m_active_user)) { case INF_USER_INACTIVE: g_assert(m_timeout_connection.connected()); m_timeout_connection.disconnect(); break; case INF_USER_ACTIVE: /* Flush pending requests, so user is not set active * again later. TODO: Maybe this should become a * virtual function in InfSession actually. */ flush(); inf_session_set_user_status( INF_SESSION(m_view.get_session()), m_active_user, INF_USER_INACTIVE); break; case INF_USER_UNAVAILABLE: // It can happen that the user is already unavailable // here, for example when we have lost the connection // to the server, so this is not an error. // If the user was active before we lost the // connection then cancel the activation timeout if(m_timeout_connection.connected()) m_timeout_connection.disconnect(); // TODO: Shouldn't local users stay available on // connection loss? We probably need to fix this // in infinote. break; } } static void on_user_notify_status_static(InfUser* user, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_user_notify_status(user); } void on_active_user_changed(InfUser* user) { if(m_active_user != NULL) { if(m_active) deactivate_user(); g_signal_handler_disconnect(G_OBJECT(m_active_user), m_notify_status_handle); } m_active_user = user; if(user != NULL) { InfUserStatus user_status = inf_user_get_status(INF_USER(user)); g_assert(user_status != INF_USER_UNAVAILABLE); m_notify_status_handle = g_signal_connect( G_OBJECT(user), "notify::status", G_CALLBACK(&on_user_notify_status_static), this ); if( (user_status == INF_USER_ACTIVE && !m_active)) { deactivate_user(); } else if(user_status == INF_USER_INACTIVE && m_active) { activate_user(); } } } void on_user_notify_status(InfUser* user) { // User cannot be activated when we are not active g_assert(m_active || inf_user_get_status(user) != INF_USER_ACTIVE); if(inf_user_get_status(user) == INF_USER_ACTIVE && m_active) { // The user did something (therefore becoming active), // so we do not need to explictely activate the user. g_assert(m_timeout_connection.connected()); m_timeout_connection.disconnect(); } } bool on_activation_timeout() { // The user activated this document, but did not something for // a while, so explicitely set the user active g_assert(m_active); g_assert(m_active_user != NULL); g_assert(inf_user_get_status(m_active_user) == INF_USER_INACTIVE); inf_session_set_user_status( INF_SESSION(m_view.get_session()), m_active_user, INF_USER_ACTIVE); return false; } SessionView& m_view; InfUser* m_active_user; bool m_active; sigc::connection m_timeout_connection; gulong m_notify_status_handle; }; class Gobby::FolderCommands::TextDocInfo: public Gobby::FolderCommands::DocInfo { public: TextDocInfo(TextSessionView& view): DocInfo(view) {} virtual void activate() { DocInfo::activate(); InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(m_view.get_session())); inf_text_gtk_buffer_set_wake_on_cursor_movement( buffer, TRUE); } virtual void deactivate() { DocInfo::deactivate(); InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(m_view.get_session())); inf_text_gtk_buffer_set_wake_on_cursor_movement( buffer, FALSE); } virtual void flush() { DocInfo::flush(); g_assert(m_active_user != NULL); inf_text_session_flush_requests_for_user( INF_TEXT_SESSION(m_view.get_session()), INF_TEXT_USER(m_active_user)); } }; Gobby::FolderCommands::FolderCommands(const Folder& folder): m_folder(folder), m_current_view(NULL) { m_folder.signal_document_added().connect( sigc::mem_fun(*this, &FolderCommands::on_document_added)); m_folder.signal_document_removed().connect( sigc::mem_fun(*this, &FolderCommands::on_document_removed)); m_folder.signal_document_changed().connect( sigc::mem_fun(*this, &FolderCommands::on_document_changed)); const unsigned int n_pages = static_cast(m_folder.get_n_pages()); for(unsigned int i = 0; i < n_pages; ++i) { // TODO: Convenience API in Folder to retrieve SessionView, // so that we don't need to know about SessionUserView here. const SessionUserView* user_view = static_cast( m_folder.get_nth_page(i)); SessionView& view = user_view->get_session_view(); on_document_added(view); } on_document_changed(m_folder.get_current_document()); } Gobby::FolderCommands::~FolderCommands() { for(DocumentMap::iterator iter = m_doc_map.begin(); iter != m_doc_map.end(); ++ iter) { delete iter->second; } } void Gobby::FolderCommands::on_document_added(SessionView& view) { DocInfo* info; { TextSessionView* text_view = dynamic_cast(&view); if(text_view) info = new TextDocInfo(*text_view); else info = new DocInfo(view); } m_doc_map[&view] = info; } void Gobby::FolderCommands::on_document_removed(SessionView& view) { DocumentMap::iterator iter = m_doc_map.find(&view); g_assert(iter != m_doc_map.end()); delete iter->second; m_doc_map.erase(iter); // TODO: Isn't this called by Folder already? Would need to // call changed first and then removed of course. We could // then assert here. if(&view == m_current_view) m_current_view = NULL; } void Gobby::FolderCommands::on_document_changed(SessionView* view) { if(m_current_view != NULL) { DocumentMap::iterator iter = m_doc_map.find(m_current_view); g_assert(iter != m_doc_map.end()); iter->second->deactivate(); } m_current_view = view; if(m_current_view != NULL) { DocumentMap::iterator iter = m_doc_map.find(m_current_view); g_assert(iter != m_doc_map.end()); iter->second->activate(); } } gobby-0.6.0/code/commands/subscription-commands.hpp0000664000175000017500000000344314003367605017321 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SUBSCRIPTION_COMMANDS_HPP_ #define _GOBBY_SUBSCRIPTION_COMMANDS_HPP_ #include "core/folder.hpp" namespace Gobby { // This class does not do much anymore. All it does is showing an error // message when a session loses the connection to its publisher, and resets // the active user to NULL. // TODO: The name of this class is a bit misleading now. class SubscriptionCommands: public sigc::trackable { public: SubscriptionCommands(const Folder& text_folder, const Folder& chat_folder); ~SubscriptionCommands(); protected: void on_text_document_added(SessionView& view); void on_chat_document_added(SessionView& view); void on_document_removed(SessionView& view); void on_notify_subscription_group(InfSession* session); const Folder& m_text_folder; const Folder& m_chat_folder; class SessionInfo; typedef std::map SessionMap; SessionMap m_session_map; }; } #endif // _GOBBY_SUBSCRIPTION_COMMANDS_HPP_ gobby-0.6.0/code/commands/Makefile.am0000664000175000017500000000211214003367605014311 00000000000000include code/commands/file-tasks/Makefile.am gobby_0_5_SOURCES += \ code/commands/application-commands.cpp \ code/commands/auth-commands.cpp \ code/commands/autosave-commands.cpp \ code/commands/browser-commands.cpp \ code/commands/browser-context-commands.cpp \ code/commands/edit-commands.cpp \ code/commands/file-commands.cpp \ code/commands/folder-commands.cpp \ code/commands/help-commands.cpp \ code/commands/subscription-commands.cpp \ code/commands/synchronization-commands.cpp \ code/commands/user-join-commands.cpp \ code/commands/view-commands.cpp noinst_HEADERS += \ code/commands/application-commands.hpp \ code/commands/auth-commands.hpp \ code/commands/autosave-commands.hpp \ code/commands/browser-commands.hpp \ code/commands/browser-context-commands.hpp \ code/commands/edit-commands.hpp \ code/commands/file-commands.hpp \ code/commands/folder-commands.hpp \ code/commands/help-commands.hpp \ code/commands/subscription-commands.hpp \ code/commands/synchronization-commands.hpp \ code/commands/user-join-commands.hpp \ code/commands/view-commands.hpp gobby-0.6.0/code/commands/user-join-commands.cpp0000664000175000017500000002703014003367605016501 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/user-join-commands.hpp" #include "core/nodewatch.hpp" #include "util/i18n.hpp" #include #include #include #include namespace { inline const gchar* _(const gchar* msgid) { return Gobby::_(msgid); } void set_error_text(Gobby::SessionView& view, const Glib::ustring& initial_text) { using namespace Gobby; Glib::ustring type_text; // TODO: Adjust this for chat sessions type_text = _("You can still watch others editing " "the document, but you cannot edit " "it yourself."); const Glib::ustring info_text = _("If you have an idea what could have caused the " "problem, then you may attempt to solve it and " "try again (after having closed this document). " "Otherwise it is most likely a bug in the " "software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and " "provide as much information as you can, including " "what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we " "can fix the problem in a later version. " "Thank you."); view.set_info( Glib::ustring::compose( _("User Join failed: %1"), initial_text) + "\n\n" + type_text + "\n\n" + info_text, true); } void set_permission_denied_text(Gobby::SessionView& view) { view.set_info( _("Permissions are not granted to modify the document.") , true); } class ParameterProvider: public Gobby::UserJoin::ParameterProvider { public: ParameterProvider(Gobby::SessionView& view, Gobby::Folder& folder, const Gobby::Preferences& preferences): m_view(view), m_folder(folder), m_preferences(preferences) { } virtual std::vector get_user_join_parameters(); protected: void add_text_parameters(std::vector& parameters, Gobby::TextSessionView& view); Gobby::SessionView& m_view; Gobby::Folder& m_folder; const Gobby::Preferences& m_preferences; }; std::vector ParameterProvider::get_user_join_parameters() { // Otherwise join a new user. std::vector params; const GParameter name_param = { "name", { 0 } }; params.push_back(name_param); const GParameter status_param = { "status", { 0 } }; params.push_back(status_param); g_value_init(¶ms[0].value, G_TYPE_STRING); g_value_init(¶ms[1].value, INF_TYPE_USER_STATUS); const Glib::ustring& pref_name = m_preferences.user.name; g_value_set_string(¶ms[0].value, pref_name.c_str()); if(m_folder.get_current_document() == &m_view) g_value_set_enum(¶ms[1].value, INF_USER_ACTIVE); else g_value_set_enum(¶ms[1].value, INF_USER_INACTIVE); Gobby::TextSessionView* text_view = dynamic_cast(&m_view); if(text_view) add_text_parameters(params, *text_view); return params; } void ParameterProvider::add_text_parameters( std::vector& params, Gobby::TextSessionView& view) { InfTextSession* session = view.get_session(); GParameter hue_param = { "hue", { 0 } }; g_value_init(&hue_param.value, G_TYPE_DOUBLE); g_value_set_double(&hue_param.value, m_preferences.user.hue); params.push_back(hue_param); GParameter vector_param = { "vector", { 0 } }; g_value_init(&vector_param.value, INF_ADOPTED_TYPE_STATE_VECTOR); g_value_take_boxed(&vector_param.value, inf_adopted_state_vector_copy( inf_adopted_algorithm_get_current( inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION( session))))); params.push_back(vector_param); GParameter caret_param = { "caret-position", { 0 } }; g_value_init(&caret_param.value, G_TYPE_UINT); GtkTextBuffer* buffer = GTK_TEXT_BUFFER(view.get_text_buffer()); GtkTextMark* mark = gtk_text_buffer_get_insert(buffer); GtkTextIter caret_iter; gtk_text_buffer_get_iter_at_mark(buffer, &caret_iter, mark); g_value_set_uint(&caret_param.value, gtk_text_iter_get_offset(&caret_iter)); params.push_back(caret_param); } } class Gobby::UserJoinCommands::UserJoinInfo { public: UserJoinInfo(UserJoinCommands& commands, std::unique_ptr userjoin, Folder& folder, SessionView& view); private: void on_user_join_finished(InfUser* user, const GError* error); UserJoinCommands& m_commands; std::unique_ptr m_userjoin; Folder& m_folder; SessionView& m_view; }; Gobby::UserJoinCommands::UserJoinInfo::UserJoinInfo(UserJoinCommands& cmds, std::unique_ptr j, Folder& folder, SessionView& view): m_commands(cmds), m_userjoin(std::move(j)), m_folder(folder), m_view(view) { // Only if userjoin is still running: g_assert(m_userjoin->get_user() == NULL); g_assert(m_userjoin->get_error() == NULL); // Wait for userjoin to finish m_userjoin->signal_finished().connect( sigc::mem_fun( *this, &UserJoinInfo::on_user_join_finished)); } void Gobby::UserJoinCommands::UserJoinInfo:: on_user_join_finished(InfUser* user, const GError* error) { m_commands.on_user_join_finished( m_userjoin->get_proxy(), m_folder, m_view, user, error); // Note that the above call deletes this object! } Gobby::UserJoinCommands::UserJoinCommands(FolderManager& folder_manager, const Preferences& preferences): m_preferences(preferences) { folder_manager.signal_document_added().connect( sigc::mem_fun( *this, &UserJoinCommands::on_document_added)); folder_manager.signal_document_removed().connect( sigc::mem_fun( *this, &UserJoinCommands::on_document_removed)); } Gobby::UserJoinCommands::~UserJoinCommands() { for(UserJoinMap::iterator iter = m_user_join_map.begin(); iter != m_user_join_map.end(); ++iter) { delete iter->second; } } void Gobby::UserJoinCommands::on_document_added(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, Folder& folder, SessionView& view, FolderManager::UserJoinRef j) { g_assert(proxy != NULL); g_assert(m_user_join_map.find(proxy) == m_user_join_map.end()); std::unique_ptr userjoin; if(j && j->get()) { // If there is a user already joined for this session, // then simply use that user instead of joining another one. userjoin = std::move(*j); } else { // Otherwise join a new user. std::unique_ptr provider( new ParameterProvider(view, folder, m_preferences)); userjoin.reset(new UserJoin(browser, iter, proxy, std::move(provider))); } if(userjoin->get_user() == NULL && userjoin->get_error() == NULL) { m_user_join_map[proxy] = new UserJoinInfo(*this, std::move(userjoin), folder, view); } else { on_user_join_finished( proxy, folder, view, userjoin->get_user(), userjoin->get_error()); } } void Gobby::UserJoinCommands::on_document_removed(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, Folder& folder, SessionView& view) { g_assert(proxy != NULL); UserJoinMap::iterator user_iter = m_user_join_map.find(proxy); // If the user join was successful the session is no longer in the map if(user_iter != m_user_join_map.end()) { delete user_iter->second; m_user_join_map.erase(user_iter); } else { // The user has removed the document. What we do now depends // on whether we are hosting the document or whether we are a // client. If we are a client we reset the connection of the // session proxy, which basically leads to us being // unsubscribed from the document. If we are hosting the // document, we do not want to unsubscribe from it, since // other users might still be connected. We therefore only // remove the local user from the session. If there are indeed // no other clients, then InfdDirectory will take care of // unsubscribing the session 60s after it became idle. if(INFD_IS_SESSION_PROXY(proxy)) { InfUser* user = view.get_active_user(); if(user != NULL) { InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); inf_session_set_user_status( session, user, INF_USER_UNAVAILABLE); g_object_unref(session); // TODO: set_active_user should go to // SessionView base: // TODO: The libinftextgtk objects should // reset the active user automatically when it // becomes unavailable. TextSessionView* text_view = dynamic_cast(&view); if(text_view) text_view->set_active_user(NULL); ChatSessionView* chat_view = dynamic_cast(&view); if(chat_view) chat_view->set_active_user(NULL); } } else if(INFC_IS_SESSION_PROXY(proxy)) { infc_session_proxy_set_connection( INFC_SESSION_PROXY(proxy), NULL, NULL, 0); } } } void Gobby::UserJoinCommands::on_user_join_finished(InfSessionProxy* proxy, Folder& folder, SessionView& view, InfUser* user, const GError* error) { g_assert(user != NULL || error != NULL); // Remove userjoin object. It might not exist if // on_document_added() was passed a user immediately. UserJoinMap::iterator user_iter = m_user_join_map.find(proxy); if(user_iter != m_user_join_map.end()) { delete user_iter->second; m_user_join_map.erase(user_iter); } if(error == NULL) { // TODO: Notify the user about alternative user name if s/he uses any view.unset_info(); // TODO: set_active_user should maybe go to SessionView base: TextSessionView* text_view = dynamic_cast(&view); if(text_view) text_view->set_active_user(INF_TEXT_USER(user)); ChatSessionView* chat_view = dynamic_cast(&view); if(chat_view) chat_view->set_active_user(user); } else if(error->domain == inf_request_error_quark() && error->code == INF_REQUEST_ERROR_NOT_AUTHORIZED) { set_permission_denied_text(view); } else { set_error_text(view, error->message); } } gobby-0.6.0/code/commands/view-commands.cpp0000664000175000017500000003570014003367605015543 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/view-commands.hpp" #include "util/i18n.hpp" #include #include class Gobby::ViewCommands::Fullscreen { public: class Preserve: public sigc::trackable { public: Preserve(const Glib::RefPtr& action); ~Preserve(); private: void on_toggled(); Glib::RefPtr m_action; bool m_value; }; Fullscreen(ViewCommands& commands); ~Fullscreen(); private: ViewCommands& m_commands; Preserve m_preserve_toolbar; Preserve m_preserve_browser; Preserve m_preserve_chat; Preserve m_preserve_document_userlist; Preserve m_preserve_chat_userlist; }; Gobby::ViewCommands::Fullscreen::Preserve::Preserve( const Glib::RefPtr& action) : m_action(action) { g_assert(action->get_state_type().equal( Glib::VariantType(G_VARIANT_TYPE_BOOLEAN))); // De-activate all the clutter, but remember their state before // we went fullscreen, so that we can restore when we leave // fullscreen again. action->get_state(m_value); action->change_state(false); action->property_state().signal_changed().connect( sigc::mem_fun(*this, &Preserve::on_toggled)); } Gobby::ViewCommands::Fullscreen::Preserve::~Preserve() { m_action->change_state(m_value); } void Gobby::ViewCommands::Fullscreen::Preserve::on_toggled() { // Update value; if one of the options is toggled we keep the // toggled version when fullscreen is left. m_action->get_state(m_value); } Gobby::ViewCommands::Fullscreen::Fullscreen(ViewCommands& commands): m_commands(commands), m_preserve_toolbar(commands.m_actions.view_toolbar), m_preserve_browser(commands.m_actions.view_browser), m_preserve_chat(commands.m_actions.view_chat), m_preserve_document_userlist( commands.m_actions.view_document_userlist), m_preserve_chat_userlist( commands.m_actions.view_chat_userlist) { m_commands.m_parent.fullscreen(); } Gobby::ViewCommands::Fullscreen::~Fullscreen() { m_commands.m_parent.unfullscreen(); } Gobby::ViewCommands::ViewCommands(Gtk::Window& parent, WindowActions& actions, GtkSourceLanguageManager* language_manager, const Folder& text_folder, ClosableFrame& chat_frame, const Folder& chat_folder, Preferences& preferences): m_parent(parent), m_actions(actions), m_language_manager(language_manager), m_text_folder(text_folder), m_chat_frame(chat_frame), m_chat_folder(chat_folder), m_preferences(preferences), m_current_view(NULL) { actions.hide_user_colors->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &ViewCommands::on_hide_user_colors))); actions.fullscreen->property_state().signal_changed().connect( sigc::mem_fun(*this, &ViewCommands::on_fullscreen_toggled)); actions.zoom_in->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &ViewCommands::on_zoom_in))); actions.zoom_out->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &ViewCommands::on_zoom_out))); m_menu_view_toolbar_connection = actions.view_toolbar-> property_state().signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_menu_toolbar_toggled)); m_menu_view_statusbar_connection = actions.view_statusbar-> property_state().signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_menu_statusbar_toggled)); m_menu_view_browser_connection = actions.view_browser-> property_state().signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_menu_browser_toggled)); m_menu_view_chat_connection = actions.view_chat-> property_state().signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_menu_chat_toggled)); m_menu_view_document_userlist_connection = actions.view_document_userlist-> property_state().signal_changed().connect(sigc::mem_fun( *this, &ViewCommands:: on_menu_document_userlist_toggled)); m_menu_view_chat_userlist_connection = actions.view_chat_userlist-> property_state().signal_changed().connect( sigc::mem_fun( *this, &ViewCommands:: on_menu_chat_userlist_toggled)); // Shortcut: Preferences::Appearance& appearance = preferences.appearance; m_pref_view_toolbar_connection = appearance.show_toolbar.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_pref_toolbar_changed)); m_pref_view_statusbar_connection = appearance.show_statusbar.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_pref_statusbar_changed)); m_pref_view_browser_connection = appearance.show_browser.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_pref_browser_changed)); m_pref_view_chat_connection = appearance.show_chat.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_pref_chat_changed)); m_pref_view_document_userlist_connection = appearance.show_document_userlist.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands:: on_pref_document_userlist_changed)); m_pref_view_chat_userlist_connection = appearance.show_chat_userlist.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands:: on_pref_chat_userlist_changed)); m_text_folder.signal_document_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_text_document_changed)); m_chat_folder.signal_document_added().connect( sigc::mem_fun( *this, &ViewCommands::on_chat_document_added)); m_chat_folder.signal_document_removed().connect( sigc::mem_fun( *this, &ViewCommands::on_chat_document_removed)); m_chat_folder.signal_document_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_chat_document_changed)); m_menu_language_changed_connection = actions.highlight_mode-> property_state().signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_menu_language_changed)); m_chat_frame.signal_show().connect( sigc::mem_fun(*this, &ViewCommands::on_chat_show)); m_chat_frame.signal_hide().connect( sigc::mem_fun(*this, &ViewCommands::on_chat_hide)); // Chat View by default not sensitive, becomes sensitive if a server // connection is made. actions.view_chat->set_enabled(false); m_chat_frame.set_allow_visible(false); // Setup initial sensitivity: on_text_document_changed(m_text_folder.get_current_document()); on_chat_document_changed(m_chat_folder.get_current_document()); } Gobby::ViewCommands::~ViewCommands() { // Disconnect handlers from current document: on_text_document_changed(NULL); on_chat_document_changed(NULL); } void Gobby::ViewCommands::on_text_document_changed(SessionView* view) { if(m_current_view != NULL) m_document_language_changed_connection.disconnect(); m_current_view = dynamic_cast(view); if(m_current_view != NULL) { m_actions.hide_user_colors->set_enabled(true); m_actions.zoom_in->set_enabled(true); m_actions.zoom_out->set_enabled(true); m_actions.highlight_mode->set_enabled(true); m_actions.view_document_userlist->set_enabled(true); m_document_language_changed_connection = m_current_view->signal_language_changed().connect( sigc::mem_fun( *this, &ViewCommands:: on_doc_language_changed)); } else { m_actions.hide_user_colors->set_enabled(false); m_actions.zoom_in->set_enabled(false); m_actions.zoom_out->set_enabled(false); m_menu_language_changed_connection.block(); m_actions.highlight_mode->set_enabled(false); m_actions.highlight_mode->change_state( Glib::Variant::create("")); m_menu_language_changed_connection.unblock(); m_actions.view_document_userlist->set_enabled(false); } on_doc_language_changed( m_current_view ? m_current_view->get_language() : NULL); } void Gobby::ViewCommands::on_chat_document_added(SessionView& view) { // Allow the chat frame to be visible if the option allows it m_chat_frame.set_allow_visible(true); m_actions.view_chat->set_enabled(true); } void Gobby::ViewCommands::on_chat_document_removed(SessionView& view) { if(m_chat_folder.get_n_pages() == 1) { // This is the last document, and it is about to be removed. m_actions.view_chat->set_enabled(false); // Hide the chat frame independent of the option m_chat_frame.set_allow_visible(false); } } void Gobby::ViewCommands::on_chat_document_changed(SessionView* view) { if(view != NULL) { if(m_chat_frame.get_visible()) { m_actions.view_chat_userlist->set_enabled(true); } } else { m_actions.view_chat_userlist->set_enabled(false); } } void Gobby::ViewCommands::on_chat_show() { SessionView* view = m_chat_folder.get_current_document(); if(view != NULL) m_actions.view_chat_userlist->set_enabled(true); } void Gobby::ViewCommands::on_chat_hide() { m_actions.view_chat_userlist->set_enabled(false); } void Gobby::ViewCommands::on_zoom_in() { Pango::FontDescription desc = m_preferences.appearance.font; desc.set_size(desc.get_size() * PANGO_SCALE_LARGE); m_preferences.appearance.font = desc; } void Gobby::ViewCommands::on_zoom_out() { Pango::FontDescription desc = m_preferences.appearance.font; desc.set_size(desc.get_size() / PANGO_SCALE_LARGE); m_preferences.appearance.font = desc; } void Gobby::ViewCommands::on_hide_user_colors() { SessionView* view = m_text_folder.get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); InfSession* session = INF_SESSION(text_view->get_session()); GtkTextBuffer* textbuffer = GTK_TEXT_BUFFER(text_view->get_text_buffer()); InfBuffer* buffer = inf_session_get_buffer(session); InfTextGtkBuffer* infbuffer = INF_TEXT_GTK_BUFFER(buffer); GtkTextIter start, end; gtk_text_buffer_get_start_iter(textbuffer, &start); gtk_text_buffer_get_end_iter(textbuffer, &end); inf_text_gtk_buffer_show_user_colors(infbuffer, FALSE, &start, &end); } void Gobby::ViewCommands::on_fullscreen_toggled() { bool is_fullscreen; m_actions.fullscreen->get_state(is_fullscreen); if(is_fullscreen) { if(!m_fullscreen.get()) m_fullscreen.reset(new Fullscreen(*this)); } else { m_fullscreen.reset(NULL); } } void Gobby::ViewCommands::on_menu_toolbar_toggled() { bool value; m_actions.view_toolbar->get_state(value); m_pref_view_toolbar_connection.block(); m_preferences.appearance.show_toolbar = value; m_pref_view_toolbar_connection.unblock(); } void Gobby::ViewCommands::on_menu_statusbar_toggled() { bool value; m_actions.view_statusbar->get_state(value); m_pref_view_statusbar_connection.block(); m_preferences.appearance.show_statusbar = value; m_pref_view_statusbar_connection.unblock(); } void Gobby::ViewCommands::on_menu_browser_toggled() { bool value; m_actions.view_browser->get_state(value); m_pref_view_browser_connection.block(); m_preferences.appearance.show_browser = value; m_pref_view_browser_connection.unblock(); } void Gobby::ViewCommands::on_menu_chat_toggled() { bool value; m_actions.view_chat->get_state(value); m_pref_view_chat_connection.block(); m_preferences.appearance.show_chat = value; m_pref_view_chat_connection.unblock(); } void Gobby::ViewCommands::on_menu_document_userlist_toggled() { bool value; m_actions.view_document_userlist->get_state(value); m_pref_view_document_userlist_connection.block(); m_preferences.appearance.show_document_userlist = value; m_pref_view_document_userlist_connection.unblock(); } void Gobby::ViewCommands::on_menu_chat_userlist_toggled() { bool value; m_actions.view_chat_userlist->get_state(value); m_pref_view_chat_userlist_connection.block(); m_preferences.appearance.show_chat_userlist = value; m_pref_view_chat_userlist_connection.unblock(); } void Gobby::ViewCommands::on_pref_toolbar_changed() { m_menu_view_toolbar_connection.block(); m_actions.view_toolbar->change_state( static_cast(m_preferences.appearance.show_toolbar)); m_menu_view_toolbar_connection.unblock(); } void Gobby::ViewCommands::on_pref_statusbar_changed() { m_menu_view_statusbar_connection.block(); m_actions.view_statusbar->change_state( static_cast(m_preferences.appearance.show_statusbar)); m_menu_view_statusbar_connection.unblock(); } void Gobby::ViewCommands::on_pref_browser_changed() { m_menu_view_browser_connection.block(); m_actions.view_browser->change_state( static_cast(m_preferences.appearance.show_browser)); m_menu_view_browser_connection.unblock(); } void Gobby::ViewCommands::on_pref_chat_changed() { m_menu_view_chat_connection.block(); m_actions.view_chat->change_state( static_cast(m_preferences.appearance.show_chat)); m_menu_view_chat_connection.unblock(); } void Gobby::ViewCommands::on_pref_document_userlist_changed() { m_menu_view_document_userlist_connection.block(); m_actions.view_document_userlist->change_state( static_cast( m_preferences.appearance.show_document_userlist)); m_menu_view_document_userlist_connection.unblock(); } void Gobby::ViewCommands::on_pref_chat_userlist_changed() { m_menu_view_chat_userlist_connection.block(); m_actions.view_chat_userlist->change_state( static_cast( m_preferences.appearance.show_chat_userlist)); m_menu_view_chat_userlist_connection.unblock(); } void Gobby::ViewCommands::on_menu_language_changed() { // TODO: Get ID, lookup language, set language. Glib::ustring language_id; m_actions.highlight_mode->get_state(language_id); GtkSourceLanguage* language = NULL; if(!language_id.empty()) { language = gtk_source_language_manager_get_language( m_language_manager, language_id.c_str()); // The language should exist by construction, if the languages // available in the language manager don't change at runtime g_assert(language != NULL); } if (!m_current_view) { g_warning("No current view exists."); return; } m_document_language_changed_connection.block(); m_current_view->set_language(language); m_document_language_changed_connection.unblock(); } void Gobby::ViewCommands::on_doc_language_changed(GtkSourceLanguage* language) { m_menu_language_changed_connection.block(); const gchar* language_id = ""; if(language != NULL) language_id = gtk_source_language_get_id(language); m_actions.highlight_mode->change_state( Glib::Variant::create(language_id)); m_menu_language_changed_connection.unblock(); } gobby-0.6.0/code/commands/folder-commands.hpp0000664000175000017500000000270514003367605016050 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FOLDER_COMMANDS_HPP_ #define _GOBBY_FOLDER_COMMANDS_HPP_ #include "core/folder.hpp" #include namespace Gobby { class FolderCommands: public sigc::trackable { public: FolderCommands(const Folder& folder); ~FolderCommands(); protected: void on_document_added(SessionView& view); void on_document_removed(SessionView& view); void on_document_changed(SessionView* view); const Folder& m_folder; SessionView* m_current_view; class DocInfo; typedef std::map DocumentMap; DocumentMap m_doc_map; class TextDocInfo; }; } #endif // _GOBBY_FOLDER_COMMANDS_HPP_ gobby-0.6.0/code/commands/autosave-commands.hpp0000664000175000017500000000350414003367605016422 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_AUTOSAVE_COMMANDS_HPP_ #define _GOBBY_AUTOSAVE_COMMANDS_HPP_ #include #include "operations/operations.hpp" #include "core/folder.hpp" #include "core/documentinfostorage.hpp" #include "core/preferences.hpp" namespace Gobby { class AutosaveCommands: public sigc::trackable { public: AutosaveCommands(const Folder& folder, Operations& operations, const DocumentInfoStorage& storage, const Preferences& preferences); ~AutosaveCommands(); protected: void on_document_added(SessionView& view); void on_document_removed(SessionView& view); void on_begin_save_operation(OperationSave* operation); void on_autosave_enabled_changed(); void on_autosave_interval_changed(); const Folder& m_folder; Operations& m_operations; const DocumentInfoStorage& m_info_storage; const Preferences& m_preferences; class Info; typedef std::map InfoMap; InfoMap m_info_map; }; } #endif // _GOBBY_AUTOSAVE_COMMANDS_HPP_ gobby-0.6.0/code/commands/application-commands.cpp0000664000175000017500000000435114003367605017072 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/application-commands.hpp" Gobby::ApplicationCommands::ApplicationCommands( Gtk::Application& application, const ApplicationActions& actions, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager) : m_application(application), m_file_chooser(file_chooser), m_preferences(preferences), m_cert_manager(cert_manager) { actions.preferences->signal_activate().connect( sigc::hide(sigc::mem_fun( *this, &ApplicationCommands::on_preferences))); actions.quit->signal_activate().connect( sigc::hide(sigc::mem_fun( *this, &ApplicationCommands::on_quit))); } void Gobby::ApplicationCommands::on_preferences() { Gtk::Window* parent = m_application.get_windows()[0]; if(!m_preferences_dialog.get()) { m_preferences_dialog = PreferencesDialog::create( *parent, m_file_chooser, m_preferences, m_cert_manager); } m_preferences_dialog->present(); } void Gobby::ApplicationCommands::on_quit() { // TODO: m_application.quit() produces a memory leak // since it results in the Gtk::Application destructor not running, // which will cause the settings not to be saved. //m_application.quit(); // Instead, hide all windows, which will cause a clean exit. std::vector windows = m_application.get_windows(); for(std::vector::iterator iter = windows.begin(); iter != windows.end(); ++iter) { (*iter)->hide(); } } gobby-0.6.0/code/commands/edit-commands.cpp0000664000175000017500000003477714003367605015533 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/edit-commands.hpp" #include "util/i18n.hpp" namespace { } // anonymous namespace Gobby::EditCommands::EditCommands(Gtk::Window& parent, WindowActions& actions, const Folder& folder, StatusBar& status_bar): m_parent(parent), m_actions(actions), m_folder(folder), m_status_bar(status_bar), m_current_view(NULL) { actions.undo->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &EditCommands::on_undo))); actions.redo->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &EditCommands::on_redo))); actions.cut->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &EditCommands::on_cut))); actions.copy->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &EditCommands::on_copy))); actions.paste->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &EditCommands::on_paste))); actions.find->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &EditCommands::on_find))); actions.find_next->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &EditCommands::on_find_next))); actions.find_prev->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &EditCommands::on_find_prev))); actions.find_replace->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &EditCommands::on_find_replace))); actions.goto_line->signal_activate().connect(sigc::hide( sigc::mem_fun(*this, &EditCommands::on_goto_line))); m_folder.signal_document_removed().connect( sigc::mem_fun(*this, &EditCommands::on_document_removed)); m_folder.signal_document_changed().connect( sigc::mem_fun(*this, &EditCommands::on_document_changed)); // Setup initial sensitivity: on_document_changed(m_folder.get_current_document()); } Gobby::EditCommands::~EditCommands() { // Disconnect handlers from current document: on_document_changed(NULL); } void Gobby::EditCommands::on_document_removed(SessionView& view) { // TODO: Isn't this emitted by Folder already? if(&view == m_current_view) on_document_changed(NULL); } void Gobby::EditCommands::on_document_changed(SessionView* view) { if(m_current_view != NULL) { InfTextSession* session = m_current_view->get_session(); InfAdoptedAlgorithm* algorithm = inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION(session)); GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); if(m_synchronization_complete_handler != 0) { g_signal_handler_disconnect( G_OBJECT(session), m_synchronization_complete_handler); } else { g_signal_handler_disconnect( G_OBJECT(algorithm), m_can_undo_changed_handler); g_signal_handler_disconnect( G_OBJECT(algorithm), m_can_redo_changed_handler); } g_signal_handler_disconnect(G_OBJECT(buffer), m_mark_set_handler); g_signal_handler_disconnect(G_OBJECT(buffer), m_changed_handler); m_active_user_changed_connection.disconnect(); } m_current_view = dynamic_cast(view); if(m_current_view != NULL) { InfTextSession* session = m_current_view->get_session(); InfUser* active_user = m_current_view->get_active_user(); GtkTextBuffer* buffer = GTK_TEXT_BUFFER(m_current_view->get_text_buffer()); m_active_user_changed_connection = m_current_view->signal_active_user_changed().connect( sigc::mem_fun( *this, &EditCommands:: on_active_user_changed)); m_mark_set_handler = g_signal_connect_after( G_OBJECT(buffer), "mark-set", G_CALLBACK(&on_mark_set_static), this); // The selection might change without mark-set being emitted // when the document changes, for example when all // currently selected text is deleted. m_changed_handler = g_signal_connect_after( G_OBJECT(buffer), "changed", G_CALLBACK(&on_changed_static), this); if(inf_session_get_status(INF_SESSION(session)) == INF_SESSION_RUNNING) { // This connects to can-undo-changed and // can-redo-changed of the algorithm. Set // m_synchronization_complete_handler to zero so that // the function does not try to disconnect from it. m_synchronization_complete_handler = 0; on_sync_complete(); } else { // The InfAdoptedSession is created after // synchronization, so we wait until that finished. m_synchronization_complete_handler = g_signal_connect_after( G_OBJECT(session), "synchronization_complete", G_CALLBACK(&on_sync_complete_static), this); m_can_undo_changed_handler = 0; m_can_redo_changed_handler = 0; } // Set initial sensitivity for active user: on_active_user_changed(active_user); // Set initial sensitivity for cut/copy/paste: on_mark_set(); // Set initial sensitivity for find/replace/goto: m_actions.find->set_enabled(true); if(m_find_dialog.get()) { on_find_text_changed(); } else { m_actions.find_next->set_enabled(false); m_actions.find_prev->set_enabled(false); } m_actions.find_replace->set_enabled(true); m_actions.goto_line->set_enabled(true); } else { m_actions.undo->set_enabled(false); m_actions.redo->set_enabled(false); m_actions.cut->set_enabled(false); m_actions.copy->set_enabled(false); m_actions.paste->set_enabled(false); m_actions.find->set_enabled(false); m_actions.find_next->set_enabled(false); m_actions.find_prev->set_enabled(false); m_actions.find_replace->set_enabled(false); m_actions.goto_line->set_enabled(false); } } void Gobby::EditCommands::on_sync_complete() { if (!m_current_view) { g_warning("No current view exists."); return; } InfTextSession* session = m_current_view->get_session(); InfAdoptedAlgorithm* algorithm = inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION(session)); m_can_undo_changed_handler = g_signal_connect( G_OBJECT(algorithm), "can-undo-changed", G_CALLBACK(&on_can_undo_changed_static), this); m_can_redo_changed_handler = g_signal_connect( G_OBJECT(algorithm), "can-redo-changed", G_CALLBACK(&on_can_redo_changed_static), this); if(m_synchronization_complete_handler != 0) { g_signal_handler_disconnect( G_OBJECT(session), m_synchronization_complete_handler); m_synchronization_complete_handler = 0; } } void Gobby::EditCommands::on_active_user_changed(InfUser* active_user) { if (!m_current_view) { g_warning("No current view exists."); return; } if(active_user != NULL) { InfTextSession* session = m_current_view->get_session(); InfAdoptedAlgorithm* algorithm = inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION(session)); GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); m_actions.undo->set_enabled( inf_adopted_algorithm_can_undo( algorithm, INF_ADOPTED_USER(active_user))); m_actions.redo->set_enabled( inf_adopted_algorithm_can_redo( algorithm, INF_ADOPTED_USER(active_user))); m_actions.cut->set_enabled( gtk_text_buffer_get_has_selection(buffer)); m_actions.paste->set_enabled(true); } else { m_actions.undo->set_enabled(false); m_actions.redo->set_enabled(false); m_actions.cut->set_enabled(false); m_actions.paste->set_enabled(false); } } void Gobby::EditCommands::on_mark_set() { if (!m_current_view) { g_warning("No current view exists."); return; } GtkTextBuffer* buffer = GTK_TEXT_BUFFER(m_current_view->get_text_buffer()); m_actions.copy->set_enabled( gtk_text_buffer_get_has_selection(buffer)); if(m_current_view->get_active_user() != NULL) { m_actions.cut->set_enabled( gtk_text_buffer_get_has_selection(buffer)); } } void Gobby::EditCommands::on_changed() { on_mark_set(); } void Gobby::EditCommands::on_can_undo_changed(InfAdoptedUser* user, bool can_undo) { if (!m_current_view) { g_warning("No current view exists."); return; } if(INF_ADOPTED_USER(m_current_view->get_active_user()) == user) m_actions.undo->set_enabled(can_undo); } void Gobby::EditCommands::on_can_redo_changed(InfAdoptedUser* user, bool can_redo) { if (!m_current_view) { g_warning("No current view exists."); return; } if(INF_ADOPTED_USER(m_current_view->get_active_user()) == user) m_actions.redo->set_enabled(can_redo); } void Gobby::EditCommands::on_find_text_changed() { m_actions.find_next->set_enabled( !m_find_dialog->get_find_text().empty()); m_actions.find_prev->set_enabled( !m_find_dialog->get_find_text().empty()); } // TODO: The following is basically a hack to set the cursor to the position // where a Undo/Redo has happened. This can be properly fixed as soon as // libinfinity supports caret-aware requests, by generating undo-caret and // redo-caret requests. namespace { GtkTextMark* check = NULL; void recaret_i(GtkTextBuffer* buffer, GtkTextIter* location, gchar* text, gint len, gpointer user_data) { if(!check) { check = gtk_text_buffer_create_mark(buffer, NULL, location, FALSE); } else { GtkTextIter iter; gtk_text_buffer_get_iter_at_mark(buffer, &iter, check); if(gtk_text_iter_get_offset(&iter) < gtk_text_iter_get_offset(location)) gtk_text_buffer_move_mark(buffer, check, location); } } void recaret_e(GtkTextBuffer* buffer, GtkTextIter* start, GtkTextIter* end, gpointer user_data) { if(!check) { check = gtk_text_buffer_create_mark(buffer, NULL, start, FALSE); } else { GtkTextIter iter; gtk_text_buffer_get_iter_at_mark(buffer, &iter, check); if(gtk_text_iter_get_offset(&iter) < gtk_text_iter_get_offset(start)) gtk_text_buffer_move_mark(buffer, check, start); } } } void Gobby::EditCommands::on_undo() { if (!m_current_view) { g_warning("No current view exists."); return; } gulong i_ = g_signal_connect_after(m_current_view->get_text_buffer(), "insert-text", G_CALLBACK(recaret_i), NULL); gulong e_ = g_signal_connect_after(m_current_view->get_text_buffer(), "delete-range", G_CALLBACK(recaret_e), NULL); inf_adopted_session_undo( INF_ADOPTED_SESSION(m_current_view->get_session()), INF_ADOPTED_USER(m_current_view->get_active_user()), m_current_view->get_undo_grouping().get_undo_size() ); g_signal_handler_disconnect(m_current_view->get_text_buffer(), i_); g_signal_handler_disconnect(m_current_view->get_text_buffer(), e_); if(check) { GtkTextIter check_iter; gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), &check_iter, check); gtk_text_buffer_select_range(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), &check_iter, &check_iter); gtk_text_buffer_delete_mark(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), check); check = NULL; } m_current_view->scroll_to_cursor_position(0.0); } void Gobby::EditCommands::on_redo() { if (!m_current_view) { g_warning("No current view exists."); return; } gulong i_ = g_signal_connect_after(m_current_view->get_text_buffer(), "insert-text", G_CALLBACK(recaret_i), NULL); gulong e_ = g_signal_connect_after(m_current_view->get_text_buffer(), "delete-range", G_CALLBACK(recaret_e), NULL); inf_adopted_session_redo( INF_ADOPTED_SESSION(m_current_view->get_session()), INF_ADOPTED_USER(m_current_view->get_active_user()), m_current_view->get_undo_grouping().get_redo_size() ); g_signal_handler_disconnect(m_current_view->get_text_buffer(), i_); g_signal_handler_disconnect(m_current_view->get_text_buffer(), e_); if(check) { GtkTextIter check_iter; gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), &check_iter, check); gtk_text_buffer_select_range(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), &check_iter, &check_iter); gtk_text_buffer_delete_mark(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), check); check = NULL; } m_current_view->scroll_to_cursor_position(0.0); } void Gobby::EditCommands::on_cut() { if (!m_current_view) { g_warning("No current view exists."); return; } g_assert(m_current_view->get_active_user() != NULL); gtk_text_buffer_cut_clipboard( GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), TRUE); m_current_view->scroll_to_cursor_position(0.0); } void Gobby::EditCommands::on_copy() { if (!m_current_view) { g_warning("No current view exists."); return; } gtk_text_buffer_copy_clipboard( GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)); } void Gobby::EditCommands::on_paste() { if (!m_current_view) { g_warning("No current view exists."); return; } g_assert(m_current_view->get_active_user() != NULL); gtk_text_buffer_paste_clipboard( GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), NULL, TRUE); m_current_view->scroll_to_cursor_position(0.0); } void Gobby::EditCommands::on_find() { ensure_find_dialog(); m_find_dialog->set_search_only(true); m_find_dialog->present(); } void Gobby::EditCommands::on_find_next() { g_assert(m_find_dialog.get() != NULL); m_find_dialog->find_next(); } void Gobby::EditCommands::on_find_prev() { g_assert(m_find_dialog.get() != NULL); m_find_dialog->find_previous(); } void Gobby::EditCommands::on_find_replace() { ensure_find_dialog(); m_find_dialog->set_search_only(false); m_find_dialog->present(); } void Gobby::EditCommands::on_goto_line() { if(!m_goto_dialog.get()) m_goto_dialog = GotoDialog::create(m_parent, m_folder); m_goto_dialog->present(); } void Gobby::EditCommands::ensure_find_dialog() { if(!m_find_dialog.get()) { m_find_dialog = FindDialog::create(m_parent, m_folder, m_status_bar); m_find_dialog->signal_find_text_changed().connect( sigc::mem_fun( *this, &EditCommands::on_find_text_changed)); } } gobby-0.6.0/code/commands/auth-commands.cpp0000664000175000017500000002632214003367605015532 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/auth-commands.hpp" #include "util/i18n.hpp" #include #include namespace { void show_error(const GError* error, Gobby::StatusBar& statusbar, InfXmlConnection* connection) { gchar* remote; g_object_get(connection, "remote-hostname", &remote, NULL); Glib::ustring short_message(Glib::ustring::compose( "Authentication failed for \"%1\"", remote)); g_free(remote); if(error->domain == inf_authentication_detail_error_quark()) { statusbar.add_error_message( short_message, inf_authentication_detail_strerror( InfAuthenticationDetailError( error->code))); } else { statusbar.add_error_message( short_message, error->message); } } } Gobby::AuthCommands::AuthCommands(Gtk::Window& parent, Browser& browser, StatusBar& statusbar, ConnectionManager& connection_manager, const Preferences& preferences): m_parent(parent), m_browser(browser), m_connection_manager(connection_manager), m_statusbar(statusbar), m_preferences(preferences) { GError* error = NULL; m_sasl_context = inf_sasl_context_new(&error); if(!m_sasl_context) { std::string error_message = std::string("SASL initialization error: ") + error->message; g_error_free(error); throw std::runtime_error(error_message); } inf_sasl_context_set_callback( m_sasl_context, &AuthCommands::sasl_callback_static, this, NULL); // Set SASL context for new and existing connections: m_connection_manager.set_sasl_context(m_sasl_context, "ANONYMOUS PLAIN"); g_signal_connect( G_OBJECT(m_browser.get_store()), "set-browser", G_CALLBACK(&AuthCommands::set_browser_callback_static), this); // Setup callback for existing browsers GtkTreeIter iter; GtkTreeModel* model = GTK_TREE_MODEL(m_browser.get_store()); for(gboolean have_entry = gtk_tree_model_get_iter_first(model, &iter); have_entry == TRUE; have_entry = gtk_tree_model_iter_next(model, &iter)) { InfBrowser* browser; gtk_tree_model_get( model, &iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, -1); if(browser != NULL) { set_browser_callback(NULL, browser); g_object_unref(browser); } } } Gobby::AuthCommands::~AuthCommands() { m_connection_manager.set_sasl_context(NULL, NULL); inf_sasl_context_unref(m_sasl_context); for(RetryMap::iterator iter = m_retries.begin(); iter != m_retries.end(); ++iter) { g_signal_handler_disconnect(iter->first, iter->second.handle); } } void Gobby::AuthCommands::set_sasl_error(InfXmppConnection* connection, const gchar* message) { GError* error = g_error_new_literal( inf_authentication_detail_error_quark(), INF_AUTHENTICATION_DETAIL_ERROR_AUTHENTICATION_FAILED, message ); inf_xmpp_connection_set_sasl_error(connection, error); g_error_free(error); } void Gobby::AuthCommands::sasl_callback(InfSaslContextSession* session, InfXmppConnection* xmpp, Gsasl_property prop) { const Glib::ustring username = m_preferences.user.name; const std::string correct_password = m_preferences.user.password; const char* password; gsize password_len; gchar cmp; switch(prop) { case GSASL_ANONYMOUS_TOKEN: inf_sasl_context_session_set_property( session, GSASL_ANONYMOUS_TOKEN, username.c_str()); inf_sasl_context_session_continue(session, GSASL_OK); break; case GSASL_AUTHID: inf_sasl_context_session_set_property( session, GSASL_AUTHID, username.c_str()); inf_sasl_context_session_continue(session, GSASL_OK); break; case GSASL_PASSWORD: { RetryMap::iterator i = m_retries.find(xmpp); if(i == m_retries.end()) i = insert_retry_info(xmpp); RetryInfo& info(i->second); if(!info.last_password.empty()) { inf_sasl_context_session_set_property( session, GSASL_PASSWORD, info.last_password.c_str()); inf_sasl_context_session_continue(session, GSASL_OK); } else { // Query user for password g_assert(info.password_dialog == NULL); gchar* remote_id; g_object_get(G_OBJECT(xmpp), "remote-hostname", &remote_id, NULL); Glib::ustring remote_id_(remote_id); g_free(remote_id); std::unique_ptr dialog = PasswordDialog::create( m_parent, remote_id_, info.retries); info.password_dialog = dialog.release(); info.password_dialog->add_button( _("_Cancel"), Gtk::RESPONSE_CANCEL); info.password_dialog->add_button( _("_Ok"), Gtk::RESPONSE_ACCEPT); Gtk::Dialog& dlg = *info.password_dialog; dlg.signal_response().connect(sigc::bind( sigc::mem_fun( *this, &AuthCommands::on_response), session, xmpp)); info.password_dialog->present(); } } break; case GSASL_VALIDATE_ANONYMOUS: if(m_preferences.user.require_password) { inf_sasl_context_session_continue( session, GSASL_AUTHENTICATION_ERROR ); set_sasl_error(xmpp, _("Password required")); } else { inf_sasl_context_session_continue(session, GSASL_OK); } break; case GSASL_VALIDATE_SIMPLE: password = inf_sasl_context_session_get_property( session, GSASL_PASSWORD); /* length-independent string compare */ cmp = 0; password_len = strlen(password); for(unsigned i = 0; i < correct_password.size(); ++i) { if(i < password_len) cmp |= (password[i] ^ correct_password[i]); else cmp |= (0x00 ^ correct_password[i]); } if(password_len != correct_password.size()) cmp = 0xFF; if(cmp != 0) { inf_sasl_context_session_continue( session, GSASL_AUTHENTICATION_ERROR ); set_sasl_error(xmpp, _("Incorrect password")); } else { inf_sasl_context_session_continue(session, GSASL_OK); } break; default: inf_sasl_context_session_continue(session, GSASL_NO_CALLBACK); break; } } void Gobby::AuthCommands::on_response(int response_id, InfSaslContextSession* session, InfXmppConnection* xmpp) { RetryMap::iterator i = m_retries.find(xmpp); g_assert(i != m_retries.end()); RetryInfo& info(i->second); if(response_id == Gtk::RESPONSE_ACCEPT) info.last_password = info.password_dialog->get_password(); else info.last_password = ""; delete info.password_dialog; info.password_dialog = NULL; ++info.retries; if(info.last_password.empty()) { inf_sasl_context_session_continue(session, GSASL_NO_PASSWORD); } else { inf_sasl_context_session_set_property( session, GSASL_PASSWORD, info.last_password.c_str()); inf_sasl_context_session_continue(session, GSASL_OK); } } void Gobby::AuthCommands::set_browser_callback(InfBrowser* old_browser, InfBrowser* new_browser) { // TODO: Disconnect from the signal on destruction? if(new_browser != NULL && INFC_IS_BROWSER(new_browser)) { g_signal_connect( G_OBJECT(new_browser), "error", G_CALLBACK(browser_error_callback_static), this); } } void Gobby::AuthCommands::browser_error_callback(InfcBrowser* browser, GError* error) { // The Browser already displays errors inline, but we want // auth-related error messages to show up in the status bar. InfXmlConnection* connection = infc_browser_get_connection(browser); g_assert(INF_IS_XMPP_CONNECTION(connection)); InfXmppConnection* xmpp = INF_XMPP_CONNECTION(connection); RetryMap::iterator iter = m_retries.find(xmpp); if(iter == m_retries.end()) iter = insert_retry_info(xmpp); Glib::ustring& last_password(iter->second.last_password); Glib::ustring old_password; old_password.swap(last_password); if(error->domain == g_quark_from_static_string("INF_XMPP_CONNECTION_AUTH_ERROR")) { // Authentication failed for some reason, maybe because the // server aborted authentication. If we were querying a // password then close the dialog now. delete iter->second.password_dialog; iter->second.password_dialog = NULL; const GError* sasl_error = inf_xmpp_connection_get_sasl_error(xmpp); if(sasl_error != NULL && sasl_error->domain == inf_authentication_detail_error_quark()) { handle_error_detail(xmpp, sasl_error, old_password, last_password); } else if(sasl_error != NULL) { show_error(sasl_error, m_statusbar, connection); } else { show_error(error, m_statusbar, connection); } } else if(error->domain == inf_gsasl_error_quark()) { show_error(error, m_statusbar, connection); } } void Gobby::AuthCommands::handle_error_detail(InfXmppConnection* xmpp, const GError* detail_error, Glib::ustring& old_password, Glib::ustring& last_password) { GError* error = NULL; switch(detail_error->code) { case INF_AUTHENTICATION_DETAIL_ERROR_AUTHENTICATION_FAILED: inf_xmpp_connection_retry_sasl_authentication(xmpp, &error); break; case INF_AUTHENTICATION_DETAIL_ERROR_TRY_AGAIN: old_password.swap(last_password); inf_xmpp_connection_retry_sasl_authentication(xmpp, &error); break; default: show_error(detail_error, m_statusbar, INF_XML_CONNECTION(xmpp)); break; } if(error) { show_error(error, m_statusbar, INF_XML_CONNECTION(xmpp)); g_error_free(error); } } Gobby::AuthCommands::RetryMap::iterator Gobby::AuthCommands::insert_retry_info(InfXmppConnection* xmpp) { RetryMap::iterator iter = m_retries.insert( std::make_pair(xmpp, RetryInfo())).first; iter->second.retries = 0; iter->second.handle = g_signal_connect( G_OBJECT(xmpp), "notify::status", G_CALLBACK(on_notify_status_static), this); iter->second.password_dialog = NULL; return iter; } void Gobby::AuthCommands::on_notify_status(InfXmppConnection* connection) { InfXmlConnectionStatus status; g_object_get(G_OBJECT(connection), "status", &status, NULL); if(status != INF_XML_CONNECTION_OPENING) { RetryMap::iterator iter = m_retries.find(connection); g_signal_handler_disconnect(connection, iter->second.handle); delete iter->second.password_dialog; m_retries.erase(iter); } } gobby-0.6.0/code/commands/browser-context-commands.cpp0000664000175000017500000004376514003367605017750 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/browser-context-commands.hpp" #include "operations/operation-open-multiple.hpp" #include "dialogs/connection-info-dialog.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include #include #include #include #include #include // TODO: Use file tasks for the commands, once we made them public namespace { std::string make_safe_filename(const Glib::ustring& cn) { Glib::ustring output(cn); for(Glib::ustring::iterator iter = output.begin(); iter != output.end(); ) { if(Glib::Unicode::isspace(*iter) || *iter == '/' || *iter == '\\' || *iter == ':' || *iter == '?') { iter = output.erase(iter); } else { ++iter; } } return output; } bool check_file(const std::string& filename) { return Glib::file_test(filename, Glib::FILE_TEST_EXISTS); } std::string make_certificate_filename(const Glib::ustring& cn, const Glib::ustring& hostname) { const std::string basename = make_safe_filename(hostname) + "-" + make_safe_filename(cn); const std::string prefname = Gobby::config_filename(basename + ".pem"); if(!check_file(prefname)) return prefname; for(unsigned int i = 2; i < 10000; ++i) { const std::string altname = Gobby::config_filename( basename + "-" + Glib::ustring::compose( "%1", i) + ".pem"); if(!check_file(altname)) return altname; } throw std::runtime_error( Gobby::_("Could not find a location " "where to store the certificate")); } } Gobby::BrowserContextCommands::BrowserContextCommands( Gtk::Window& parent, InfIo* io, Browser& browser, FileChooser& chooser, Operations& operations, const CertificateManager& cert_manager, Preferences& prefs) : m_parent(parent), m_io(io), m_browser(browser), m_file_chooser(chooser), m_operations(operations), m_cert_manager(cert_manager), m_preferences(prefs), m_popup_menu(NULL), m_action_group(Gio::SimpleActionGroup::create()), m_action_remove(m_action_group->add_action("remove")), m_action_connection_info(m_action_group->add_action("connection-info")), m_action_disconnect(m_action_group->add_action("disconnect")), m_action_create_account(m_action_group->add_action("create-account")), m_action_create_document( m_action_group->add_action("create-document")), m_action_create_directory( m_action_group->add_action("create-directory")), m_action_open_document(m_action_group->add_action("open-document")), m_action_permissions(m_action_group->add_action("permissions")), m_action_delete(m_action_group->add_action("delete")) { g_object_ref(io); m_populate_popup_handler = g_signal_connect( m_browser.get_view(), "populate-popup", G_CALLBACK(on_populate_popup_static), this); gtk_widget_insert_action_group( GTK_WIDGET(m_browser.get_view()), "browser", G_ACTION_GROUP(m_action_group->gobj())); m_action_remove->signal_activate().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_remove)); m_action_connection_info->signal_activate().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_connection_info)); m_action_disconnect->signal_activate().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_disconnect)); m_action_create_account->signal_activate().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_create_account)); m_action_create_document->signal_activate().connect( sigc::bind(sigc::mem_fun(*this, &BrowserContextCommands::on_new), false)); m_action_create_directory->signal_activate().connect( sigc::bind(sigc::mem_fun(*this, &BrowserContextCommands::on_new), true)); m_action_open_document->signal_activate().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_open)); m_action_permissions->signal_activate().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_permissions)); m_action_delete->signal_activate().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_delete)); } Gobby::BrowserContextCommands::~BrowserContextCommands() { g_signal_handler_disconnect(m_browser.get_view(), m_populate_popup_handler); g_object_unref(m_io); } void Gobby::BrowserContextCommands::on_populate_popup(Gtk::Menu* menu) { // TODO: Can this happen? Should we close the old popup here? g_assert(m_popup_menu == NULL); g_assert(m_popup_watch.get() == NULL); // Cancel previous dialogs m_dialog.reset(NULL); m_dialog_watch.reset(NULL); InfBrowser* browser; InfBrowserIter iter; InfBrowserStatus status; if(!m_browser.get_selected_browser(&browser)) return; g_object_get(G_OBJECT(browser), "status", &status, NULL); const bool has_iter = m_browser.get_selected_iter(browser, &iter); // TODO: At the moment, action handlers access the browser item using // the m_popup_watch variable. We should change it such that // the selected item is passed as an action parameter, as two // strings: The browser store item name, and the path to the selected // node. This could then also easily allow browser actions to be // invoked via d-bus. Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/browser-context-menu.ui"); if(!has_iter) { InfBrowserStatus browser_status; g_object_get(G_OBJECT(browser), "status", &browser_status, NULL); Glib::RefPtr menu_model = Glib::RefPtr::cast_dynamic( builder->get_object( "browser-context-menu-inactive")); if(browser_status == INF_BROWSER_CLOSED) { menu->bind_model(menu_model, true); } else { // No popup menu return; } } else { InfBrowserIter dummy_iter = iter; const bool is_subdirectory = inf_browser_is_subdirectory(browser, &iter); const bool is_toplevel = !inf_browser_get_parent(browser, &dummy_iter); m_action_connection_info->set_enabled( is_toplevel && status == INF_BROWSER_OPEN); m_action_disconnect->set_enabled( is_toplevel && INFC_IS_BROWSER(browser)); m_action_create_account->set_enabled( is_toplevel && INFC_IS_BROWSER(browser)); m_action_create_document->set_enabled(is_subdirectory); m_action_create_directory->set_enabled(is_subdirectory); m_action_open_document->set_enabled(is_subdirectory); m_action_delete->set_enabled(!is_toplevel); Glib::RefPtr menu_model = Glib::RefPtr::cast_dynamic( builder->get_object( "browser-context-menu-active")); menu->bind_model(menu_model, true); } // Watch the node, and close the popup menu when the node // it refers to is removed. m_popup_watch.reset(new NodeWatch(browser, has_iter ? &iter : NULL)); m_popup_watch->signal_node_removed().connect(sigc::mem_fun( *this, &BrowserContextCommands::on_menu_node_removed)); m_popup_menu = menu; menu->signal_selection_done().connect( sigc::mem_fun( *this, &BrowserContextCommands::on_popdown)); } void Gobby::BrowserContextCommands::on_menu_node_removed() { g_assert(m_popup_menu != NULL); // This calls selection_done, causing the watch to be removed // and the m_popup_menu pointer to be reset. m_popup_menu->popdown(); } void Gobby::BrowserContextCommands::on_popdown() { m_popup_menu = NULL; m_popup_watch.reset(NULL); } // Action handlers void Gobby::BrowserContextCommands::on_remove(const Glib::VariantBase& param) { InfBrowser* browser = m_popup_watch->get_browser(); InfBrowserStatus status; g_object_get(G_OBJECT(browser), "status", &status, NULL); g_assert(status == INF_BROWSER_CLOSED); // Reset the watch explicitly here in case we drop the last reference // to the browser. m_popup_watch.reset(NULL); m_browser.remove_browser(browser); } void Gobby::BrowserContextCommands::on_connection_info( const Glib::VariantBase& param) { InfBrowser* browser = m_popup_watch->get_browser(); m_dialog = ConnectionInfoDialog::create(m_parent, browser); m_dialog->add_button(_("_Close"), Gtk::RESPONSE_CLOSE); m_dialog->signal_response().connect( sigc::mem_fun(*this, &BrowserContextCommands:: on_connection_info_response)); m_dialog->present(); } void Gobby::BrowserContextCommands::on_disconnect( const Glib::VariantBase& param) { InfcBrowser* browser = INFC_BROWSER(m_popup_watch->get_browser()); InfXmlConnection* connection = infc_browser_get_connection(browser); InfXmlConnectionStatus status; g_object_get(G_OBJECT(connection), "status", &status, NULL); if(status != INF_XML_CONNECTION_CLOSED && status != INF_XML_CONNECTION_CLOSING) { inf_xml_connection_close(connection); } } void Gobby::BrowserContextCommands::on_create_account( const Glib::VariantBase& param) { InfBrowser* browser = m_popup_watch->get_browser(); InfGtkAccountCreationDialog* dlg = inf_gtk_account_creation_dialog_new( m_parent.gobj(), static_cast(0), m_io, browser); std::unique_ptr account_creation_dialog( Glib::wrap(GTK_DIALOG(dlg))); account_creation_dialog->add_button(_("_Close"), Gtk::RESPONSE_CLOSE); account_creation_dialog->signal_response().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_create_account_response)); g_signal_connect( G_OBJECT(account_creation_dialog->gobj()), "account-created", G_CALLBACK(on_account_created_static), this); m_dialog = std::move(account_creation_dialog); m_dialog->present(); } void Gobby::BrowserContextCommands::on_new(const Glib::VariantBase& param, bool directory) { InfBrowser* browser = m_popup_watch->get_browser(); const InfBrowserIter iter = *m_popup_watch->get_browser_iter(); m_dialog_watch.reset(new NodeWatch(browser, &iter)); m_dialog_watch->signal_node_removed().connect(sigc::mem_fun( *this, &BrowserContextCommands::on_dialog_node_removed)); std::unique_ptr entry_dialog( EntryDialog::create( m_parent, directory ? _("Choose a name for the directory") : _("Choose a name for the document"), directory ? _("_Directory Name:") : _("_Document Name:"))); entry_dialog->add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL); entry_dialog->add_button(_("C_reate"), Gtk::RESPONSE_ACCEPT); entry_dialog->set_text(directory ? _("New Directory") : _("New Document")); entry_dialog->signal_response().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_new_response), browser, iter, directory)); m_dialog = std::move(entry_dialog); m_dialog->present(); } void Gobby::BrowserContextCommands::on_open(const Glib::VariantBase& param) { InfBrowser* browser = m_popup_watch->get_browser(); const InfBrowserIter iter = *m_popup_watch->get_browser_iter(); m_dialog_watch.reset(new NodeWatch(browser, &iter)); m_dialog_watch->signal_node_removed().connect(sigc::mem_fun( *this, &BrowserContextCommands::on_dialog_node_removed)); std::unique_ptr file_dialog( new FileChooser::Dialog( m_file_chooser, m_parent, _("Choose a text file to open"), Gtk::FILE_CHOOSER_ACTION_OPEN)); file_dialog->signal_response().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_open_response), browser, iter)); file_dialog->set_select_multiple(true); m_dialog = std::move(file_dialog); m_dialog->present(); } void Gobby::BrowserContextCommands::on_permissions( const Glib::VariantBase& param) { InfBrowser* browser = m_popup_watch->get_browser(); const InfBrowserIter iter = *m_popup_watch->get_browser_iter(); m_dialog_watch.reset(new NodeWatch(browser, &iter)); m_dialog_watch->signal_node_removed().connect(sigc::mem_fun( *this, &BrowserContextCommands::on_dialog_node_removed)); InfGtkPermissionsDialog* dlg = inf_gtk_permissions_dialog_new( m_parent.gobj(), static_cast(0), browser, &iter); std::unique_ptr permissions_dialog( Glib::wrap(GTK_DIALOG(dlg))); permissions_dialog->add_button(_("_Close"), Gtk::RESPONSE_CLOSE); permissions_dialog->signal_response().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_permissions_response)); m_dialog = std::move(permissions_dialog); m_dialog->present(); } void Gobby::BrowserContextCommands::on_delete( const Glib::VariantBase& param) { InfBrowser* browser = m_popup_watch->get_browser(); const InfBrowserIter* iter = m_popup_watch->get_browser_iter(); m_operations.delete_node(browser, iter); } // Dialogs void Gobby::BrowserContextCommands::on_dialog_node_removed() { m_dialog.reset(NULL); m_dialog_watch.reset(NULL); } void Gobby::BrowserContextCommands::on_create_account_response( int response_id) { m_dialog.reset(NULL); m_dialog_watch.reset(NULL); } void Gobby::BrowserContextCommands::on_connection_info_response( int response_id) { m_dialog.reset(NULL); m_dialog_watch.reset(NULL); } void Gobby::BrowserContextCommands::on_account_created( gnutls_x509_privkey_t key, InfCertificateChain* certificate, const InfAclAccount* account) { InfBrowser* browser; g_object_get(G_OBJECT(m_dialog->gobj()), "browser", &browser, NULL); const InfAclAccount* own_account = inf_browser_get_acl_local_account(browser); const InfAclAccountId default_id = inf_acl_account_id_from_string("default"); const bool is_default_account = (own_account->id == default_id); g_object_unref(browser); gnutls_x509_crt_t cert = inf_certificate_chain_get_own_certificate(certificate); gchar* name = inf_cert_util_get_dn_by_oid( cert, GNUTLS_OID_X520_COMMON_NAME, 0); const std::string cn = name; g_free(name); std::string host; if(INFC_IS_BROWSER(browser)) { InfXmlConnection* xml = infc_browser_get_connection(INFC_BROWSER(browser)); if(INF_IS_XMPP_CONNECTION(xml)) { gchar* hostname; g_object_get(G_OBJECT(xml), "remote-hostname", &hostname, NULL); host = hostname; g_free(hostname); } } if(host.empty()) host = "local"; gnutls_x509_crt_t* certs = inf_certificate_chain_get_raw(certificate); const unsigned int n_certs = inf_certificate_chain_get_n_certificates(certificate); std::unique_ptr dlg; try { const std::string filename = make_certificate_filename(cn, host); GError* error = NULL; inf_cert_util_write_certificate_with_key( key, certs, n_certs, filename.c_str(), &error); if(error != NULL) { const std::string message = error->message; g_error_free(error); throw std::runtime_error(message); } if(is_default_account && (m_cert_manager.get_private_key() == NULL || m_cert_manager.get_certificates() == NULL)) { m_preferences.security.key_file = filename; m_preferences.security.certificate_file = filename; dlg.reset(new Gtk::MessageDialog( m_parent, _("Account successfully created"), false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_CLOSE)); dlg->set_secondary_text( _("When re-connecting to the server, the " "new account will be used.")); } else { // TODO: Gobby should support multiple certificates dlg.reset(new Gtk::MessageDialog( m_parent, _("Account successfully created"), false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_CLOSE)); dlg->set_secondary_text(Glib::ustring::compose( _("The certificate has been stored at %1.\n\n" "To login to this account, set the " "certificate in Gobby's preferences " "and re-connect to the server."), filename)); } } catch(const std::exception& ex) { // This is actually a bit unfortunate, because the // account was actually created and we have a valid // certificate for it, but we cannot keep it... dlg.reset(new Gtk::MessageDialog( m_parent, _("Failed to create account"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE)); dlg->set_secondary_text(Glib::ustring::compose( _("Could not save the certificate for the " "account: %1"), ex.what())); } m_dialog = std::move(dlg); m_dialog->signal_response().connect( sigc::mem_fun( *this, &BrowserContextCommands:: on_account_created_response)); m_dialog->present(); } void Gobby::BrowserContextCommands::on_account_created_response( int response_id) { m_dialog.reset(NULL); } void Gobby::BrowserContextCommands::on_new_response(int response_id, InfBrowser* browser, InfBrowserIter iter, bool directory) { EntryDialog* entry_dialog = static_cast(m_dialog.get()); if(response_id == Gtk::RESPONSE_ACCEPT) { if(directory) { // TODO: Select the newly created directory in tree m_operations.create_directory( browser, &iter, entry_dialog->get_text()); } else { m_operations.create_document( browser, &iter, entry_dialog->get_text()); } } m_dialog.reset(NULL); m_dialog_watch.reset(NULL); } void Gobby::BrowserContextCommands::on_open_response(int response_id, InfBrowser* browser, InfBrowserIter iter) { FileChooser::Dialog* dialog = static_cast(m_dialog.get()); if(response_id == Gtk::RESPONSE_ACCEPT) { const std::vector > files = dialog->get_files(); m_operations.create_documents( browser, &iter, m_preferences, files); } m_dialog.reset(NULL); m_dialog_watch.reset(NULL); } void Gobby::BrowserContextCommands::on_permissions_response(int response_id) { m_dialog.reset(NULL); m_dialog_watch.reset(NULL); } gobby-0.6.0/code/commands/view-commands.hpp0000664000175000017500000000660114003367605015546 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_VIEW_COMMANDS_HPP_ #define _GOBBY_VIEW_COMMANDS_HPP_ #include "core/folder.hpp" #include "core/closableframe.hpp" #include "core/windowactions.hpp" #include #include namespace Gobby { class ViewCommands: public sigc::trackable { private: class Fullscreen; public: ViewCommands(Gtk::Window& window, WindowActions& actions, GtkSourceLanguageManager* language_manager, const Folder& text_folder, ClosableFrame& chat_frame, const Folder& chat_folder, Preferences& preferences); ~ViewCommands(); protected: void on_text_document_changed(SessionView* view); void on_chat_document_added(SessionView& view); void on_chat_document_removed(SessionView& view); void on_chat_document_changed(SessionView* view); void on_chat_show(); void on_chat_hide(); void on_hide_user_colors(); void on_fullscreen_toggled(); void on_zoom_in(); void on_zoom_out(); void on_menu_toolbar_toggled(); void on_menu_statusbar_toggled(); void on_menu_browser_toggled(); void on_menu_chat_toggled(); void on_menu_document_userlist_toggled(); void on_menu_chat_userlist_toggled(); void on_pref_toolbar_changed(); void on_pref_statusbar_changed(); void on_pref_browser_changed(); void on_pref_chat_changed(); void on_pref_document_userlist_changed(); void on_pref_chat_userlist_changed(); void on_menu_language_changed(); void on_doc_language_changed(GtkSourceLanguage* language); Gtk::Window& m_parent; WindowActions& m_actions; GtkSourceLanguageManager* m_language_manager; const Folder& m_text_folder; ClosableFrame& m_chat_frame; const Folder& m_chat_folder; Preferences& m_preferences; TextSessionView* m_current_view; std::unique_ptr m_fullscreen; sigc::connection m_menu_language_changed_connection; sigc::connection m_document_language_changed_connection; sigc::connection m_menu_view_toolbar_connection; sigc::connection m_menu_view_statusbar_connection; sigc::connection m_menu_view_browser_connection; sigc::connection m_menu_view_chat_connection; sigc::connection m_menu_view_document_userlist_connection; sigc::connection m_menu_view_chat_userlist_connection; sigc::connection m_pref_view_statusbar_connection; sigc::connection m_pref_view_toolbar_connection; sigc::connection m_pref_view_browser_connection; sigc::connection m_pref_view_chat_connection; sigc::connection m_pref_view_document_userlist_connection; sigc::connection m_pref_view_chat_userlist_connection; private: void ensure_find_dialog(); }; } #endif // _GOBBY_VIEW_COMMANDS_HPP_ gobby-0.6.0/code/core/0000775000175000017500000000000014005504730011462 500000000000000gobby-0.6.0/code/core/statusbar.hpp0000664000175000017500000000671214003367605014137 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_STATUSBAR_HPP_ #define _GOBBY_STATUSBAR_HPP_ #include "folder.hpp" #include #include #include #include /* ARGH!!! */ #ifdef G_OS_WIN32 # ifdef ERROR # undef ERROR # endif #endif namespace Gobby { class StatusBar: public Gtk::Grid { protected: class Message; typedef std::list MessageList; public: enum MessageType { INFO, ERROR }; typedef MessageList::iterator MessageHandle; StatusBar(const Folder& folder, const Preferences& preferences); ~StatusBar(); MessageHandle add_info_message(const Glib::ustring& message, unsigned int timeout = 0); // This does not return a message handle because users dispose of // messages by clicking on them. void add_error_message(const Glib::ustring& brief_desc, const Glib::ustring& detailed_desc, unsigned int timeout = 0); void remove_message(const MessageHandle& handle); void hide_message(const MessageHandle& handle); MessageHandle invalid_handle(); protected: MessageHandle add_message(MessageType type, const Glib::ustring& message, const Glib::ustring& dialog_message, unsigned int timeout = 0); static void on_mark_set_static(GtkTextBuffer* buffer, GtkTextIter* location, GtkTextMark* mark, gpointer user_data) { static_cast(user_data)->on_mark_set(mark); } static void on_changed_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)->on_changed(); } static void on_toggled_overwrite_static(GtkTextView* buffer, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_toggled_overwrite(); } void on_message_clicked(GdkEventButton* button, const MessageHandle& handle); void on_document_removed(SessionView& view); void on_document_changed(SessionView* view); void on_view_changed(); void on_mark_set(GtkTextMark* mark); void on_toggled_overwrite(); void on_changed(); void update_pos_display(); const Folder& m_folder; const Preferences& m_preferences; MessageList m_list; unsigned int m_visible_messages; Gtk::Label m_lbl_position; TextSessionView* m_current_view; gulong m_mark_set_handler; gulong m_changed_handler; gulong m_toverwrite_handler; }; } #endif // _GOBBY_STATUSBAR_HPP_ gobby-0.6.0/code/core/textundogrouping.cpp0000664000175000017500000000472514003367605015551 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/textundogrouping.hpp" Gobby::TextUndoGrouping::TextUndoGrouping(InfAdoptedAlgorithm* algorithm, InfTextUser* user, GtkTextBuffer* buffer): m_buffer(buffer), m_grouping(inf_text_undo_grouping_new()) { g_object_ref(m_buffer); inf_adopted_undo_grouping_set_algorithm( INF_ADOPTED_UNDO_GROUPING(m_grouping), algorithm, INF_ADOPTED_USER(user)); m_begin_user_action_handle = g_signal_connect( G_OBJECT(m_buffer), "begin-user-action", G_CALLBACK(on_begin_user_action_static), this); m_end_user_action_handle = g_signal_connect( G_OBJECT(m_buffer), "end-user-action", G_CALLBACK(on_end_user_action_static), this); } Gobby::TextUndoGrouping::~TextUndoGrouping() { g_signal_handler_disconnect(m_buffer, m_begin_user_action_handle); g_signal_handler_disconnect(m_buffer, m_end_user_action_handle); g_object_unref(m_grouping); g_object_unref(m_buffer); } guint Gobby::TextUndoGrouping::get_undo_size() const { return inf_adopted_undo_grouping_get_undo_size( INF_ADOPTED_UNDO_GROUPING(m_grouping)); } guint Gobby::TextUndoGrouping::get_redo_size() const { return inf_adopted_undo_grouping_get_redo_size( INF_ADOPTED_UNDO_GROUPING(m_grouping)); } void Gobby::TextUndoGrouping::on_begin_user_action() { // TODO: For paste actions we should not allow merging inf_adopted_undo_grouping_start_group( INF_ADOPTED_UNDO_GROUPING(m_grouping), TRUE); } void Gobby::TextUndoGrouping::on_end_user_action() { // TODO: For paste actions we should not allow merging inf_adopted_undo_grouping_end_group( INF_ADOPTED_UNDO_GROUPING(m_grouping), TRUE); } gobby-0.6.0/code/core/textsessionview.hpp0000664000175000017500000001077714003367605015420 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TEXTSESSIONVIEW_HPP_ #define _GOBBY_TEXTSESSIONVIEW_HPP_ #include "core/sessionview.hpp" #include "core/textundogrouping.hpp" #include "core/preferences.hpp" #include #include #include #include #include #include #include namespace Gobby { class TextSessionView: public SessionView { public: typedef sigc::signal SignalLanguageChanged; TextSessionView(InfTextSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, const std::string& info_storage_key, Preferences& preferences, GtkSourceLanguageManager* manager); ~TextSessionView(); InfTextSession* get_session() { return INF_TEXT_SESSION(m_session); } const std::string& get_info_storage_key() const { return m_info_storage_key; } void get_cursor_position(unsigned int& row, unsigned int& col) const; void set_selection(const GtkTextIter* begin, const GtkTextIter* end); Glib::ustring get_selected_text() const; void scroll_to_cursor_position(double within_margin); GtkSourceLanguage* get_language() const; void set_language(GtkSourceLanguage* language); // cannot overwrite with covariant return type InfTextUser because // C++ does not know GObject inheritance: virtual InfUser* get_active_user() const; void set_active_user(InfTextUser* user); // requires active user to be set: TextUndoGrouping& get_undo_grouping() { return *m_undo_grouping; } GtkSourceView* get_text_view() { return m_view; } GtkSourceBuffer* get_text_buffer() { return m_buffer; } SignalLanguageChanged signal_language_changed() const { return m_signal_language_changed; } protected: void on_user_color_changed(); void on_alpha_changed(); void on_show_remote_cursors_changed(); void on_show_remote_selections_changed(); void on_show_remote_current_lines_changed(); void on_show_remote_cursor_positions_changed(); void on_tab_width_changed(); void on_tab_spaces_changed(); void on_auto_indent_changed(); void on_homeend_smart_changed(); void on_wrap_mode_changed(); void on_linenum_display_changed(); void on_curline_highlight_changed(); void on_margin_display_changed(); void on_margin_pos_changed(); void on_bracket_highlight_changed(); void on_whitespace_display_changed(); void on_font_changed(); void on_scheme_changed(); void on_view_style_updated(); bool on_query_tooltip(int x, int y, bool keyboard_mode, const Glib::RefPtr& tooltip); static gboolean on_query_tooltip_static(GtkWidget* widget, int x, int y, gboolean keyboard_mode, GtkTooltip* tooltip, gpointer user_data) { return static_cast(user_data)-> on_query_tooltip(x, y, keyboard_mode, Glib::wrap(tooltip, true)); } static void on_view_style_updated_static(GtkWidget* view, gpointer user_data) { static_cast(user_data)-> on_view_style_updated(); } std::string m_info_storage_key; Preferences& m_preferences; Glib::RefPtr m_font_provider; GtkSourceView* m_view; GtkSourceBuffer* m_buffer; std::unique_ptr m_undo_grouping; InfTextGtkView* m_infview; InfTextGtkViewport* m_infviewport; SignalLanguageChanged m_signal_language_changed; }; } #endif // _GOBBY_TEXTSESSIONVIEW_HPP_ gobby-0.6.0/code/core/sessionview.cpp0000664000175000017500000000517714003367605014504 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "features.hpp" #include "core/sessionview.hpp" Gobby::SessionView::SessionView(InfSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname): m_session(session), m_title(title), m_path(path), m_hostname(hostname) { g_object_ref(m_session); m_info_label.set_halign(Gtk::ALIGN_START); m_info_label.set_hexpand(true); m_info_label.set_selectable(true); m_info_label.set_line_wrap(true); m_info_label.show(); m_info_close_button.set_halign(Gtk::ALIGN_END); m_info_close_button.set_valign(Gtk::ALIGN_START); m_info_close_button.signal_clicked().connect( sigc::mem_fun(m_info_frame, &Gtk::Frame::hide)); // Don't show info close button by default m_info_grid.set_orientation(Gtk::ORIENTATION_VERTICAL); m_info_grid.set_row_spacing(6); m_info_grid.attach(m_info_close_button, 0, 0, 1, 1); m_info_grid.attach(m_info_label, 0, 1, 1, 1); m_info_grid.set_border_width(6); m_info_grid.show(); m_info_frame.set_shadow_type(Gtk::SHADOW_IN); m_info_frame.add(m_info_grid); // Don't show infoframe by default set_orientation(Gtk::ORIENTATION_VERTICAL); attach(m_info_frame, 0, 0, 1, 1); } Gobby::SessionView::~SessionView() { g_object_unref(m_session); //m_session = NULL; // TODO: Any reason to reset this? } void Gobby::SessionView::set_info(const Glib::ustring& info, bool closable) { m_info_label.set_text(info); if(closable) m_info_close_button.show(); else m_info_close_button.hide(); m_info_frame.show(); } void Gobby::SessionView::unset_info() { m_info_frame.hide(); } InfUser* Gobby::SessionView::get_active_user() const { return NULL; } void Gobby::SessionView::active_user_changed(InfUser* new_user) { m_signal_active_user_changed.emit(new_user); } gobby-0.6.0/code/core/preferences.cpp0000664000175000017500000001122614003367605014417 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "features.hpp" #include "core/preferences.hpp" #include "util/file.hpp" #include #include #include #include Gobby::Preferences::User::User( const Glib::RefPtr& settings, Config::ParentEntry& entry) : name(settings, entry, "name"), hue(settings, entry, "hue"), alpha(settings, entry, "alpha"), show_remote_cursors(settings, entry, "show-remote-cursors"), show_remote_selections(settings, entry, "show-remote-selections"), show_remote_current_lines( settings, entry, "show-remote-current-lines"), show_remote_cursor_positions( settings, entry, "show-remote-cursor-positions"), allow_remote_access(settings, entry, "allow-remote-access"), require_password(settings, entry, "require-password"), password(settings, entry, "password"), port(settings, entry, "port"), keep_local_documents(settings, entry, "keep-local-documents"), host_directory(settings, entry, "host-directory") { if(name.is_default()) name = Glib::get_user_name(); if(hue.is_default()) hue = Glib::Rand().get_double(); if(host_directory.is_default()) host_directory = config_filename("local-documents"); } Gobby::Preferences::Editor::Editor( const Glib::RefPtr& settings, Config::ParentEntry& entry) : tab_width(settings, entry, "tab-width"), tab_spaces(settings, entry, "tab-insert-spaces"), indentation_auto(settings, entry, "auto-indentation"), homeend_smart(settings, entry, "smart-homeend"), autosave_enabled(settings, entry, "autosave-enabled"), autosave_interval(settings, entry, "autosave-interval") { } Gobby::Preferences::View::View( const Glib::RefPtr& settings, Config::ParentEntry& entry) : wrap_mode(settings, entry, "wrap-mode"), linenum_display(settings, entry, "display-line-numbers"), curline_highlight(settings, entry, "highlight-current-line"), margin_display(settings, entry, "margin-display"), margin_pos(settings, entry, "margin-position"), bracket_highlight(settings, entry, "highlight-matching-brackets"), whitespace_display(settings, entry, "display-whitespace") { } Gobby::Preferences::Appearance::Appearance( const Glib::RefPtr& settings, Config::ParentEntry& entry) : toolbar_style(settings, entry, "toolbar-style"), font(settings, entry, "font"), scheme_id(settings, entry, "scheme-id"), show_toolbar(settings, entry, "show-toolbar"), show_statusbar(settings, entry, "show-statusbar"), show_browser(settings, entry, "show-browser"), show_chat(settings, entry, "show-chat"), show_document_userlist(settings, entry, "show-document-userlist"), show_chat_userlist(settings, entry, "show-chat-userlist") { } Gobby::Preferences::Security::Security( const Glib::RefPtr& settings, Config::ParentEntry& entry) : use_system_trust(settings, entry, "use-system-trust"), trusted_cas(settings, entry, "trusted-cas"), policy(settings, entry, "policy"), authentication_enabled(settings, entry, "authentication-enabled"), certificate_file(settings, entry, "certificate-file"), key_file(settings, entry, "key-file") { } Gobby::Preferences::Network::Network( const Glib::RefPtr& settings, Config::ParentEntry& entry) : keepalive(settings, entry, "keepalive") { } Gobby::Preferences::Preferences(Config& config): m_settings(Gio::Settings::create("de.0x539.gobby.preferences")), user(m_settings->get_child("user"), config.get_root()["user"]), editor(m_settings->get_child("editor"), config.get_root()["editor"]), view(m_settings->get_child("view"), config.get_root()["view"]), appearance(m_settings->get_child("appearance"), config.get_root()["appearance"]), security(m_settings->get_child("security"), config.get_root()["security"]), network(m_settings->get_child("network"), config.get_root()["network"]) { } gobby-0.6.0/code/core/connectionmanager.hpp0000664000175000017500000001235614003367605015622 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CONNECTIONMANAGER_HPP_ #define _GOBBY_CONNECTIONMANAGER_HPP_ #include "core/preferences.hpp" #include "core/certificatemanager.hpp" #include #include #include #include #include #include namespace Gobby { // This class manages outgoing connections. It also manages an // InfDiscoveryAvahi object. Incoming connections are handled by // SelfHoster. class ConnectionManager: public sigc::trackable { public: typedef sigc::signal SignalConnectionReplaced; ConnectionManager(const CertificateManager& cert_manager, const Preferences& preferences); ~ConnectionManager(); InfIo* get_io() { return m_io; } InfCommunicationManager* get_communication_manager() { return m_communication_manager; } InfXmppManager* get_xmpp_manager() { return m_xmpp_manager; } #ifdef LIBINFINITY_HAVE_AVAHI InfDiscovery* get_discovery() { return INF_DISCOVERY(m_discovery); } InfLocalPublisher* get_publisher() { return INF_LOCAL_PUBLISHER(m_discovery); } #else InfDiscovery* get_discovery() { return NULL; } InfLocalPublisher* get_publisher() { return NULL; } #endif // Use existing connection if any, otherwise make new one. May throw. // If connect is false and a new connection would need to be made, // then don't immediately open the new connection. InfXmppConnection* make_connection(const std::string& hostname, const std::string& service, unsigned int device_index, bool connect); InfXmppConnection* make_connection(const InfIpAddress* address, guint port, unsigned int device_index, const std::string& hostname, bool connect); void remove_connection(InfXmppConnection* connection); // SASL context to be used for all new connections void set_sasl_context(InfSaslContext* sasl_context, const char* mechanisms); SignalConnectionReplaced signal_connection_replaced() const { return m_signal_connection_replaced; } private: InfXmppConnection* create_connection(InfTcpConnection* connection, unsigned int device_index, const std::string& hostname, bool connect); static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_notify_status( INF_XMPP_CONNECTION(object)); } static void on_connection_added_static(InfXmppManager* manager, InfXmppConnection* xmpp, gpointer user_data) { static_cast(user_data)-> on_connection_added(xmpp); } static void on_connection_removed_static(InfXmppManager* manager, InfXmppConnection* xmpp, InfXmppConnection* replaced, gpointer user_data) { static_cast(user_data)-> on_connection_removed(xmpp, replaced); } protected: void on_connection_added(InfXmppConnection* xmpp); void on_connection_removed(InfXmppConnection* xmpp, InfXmppConnection* replaced_by); void on_security_policy_changed(); void on_keepalive_changed(); void on_credentials_changed(); void on_notify_status(InfXmppConnection* connection); const CertificateManager& m_cert_manager; const Preferences& m_preferences; InfIo* m_io; InfCommunicationManager* m_communication_manager; InfXmppManager* m_xmpp_manager; struct ConnectionInfo { gulong notify_status_handler; }; std::map m_connections; gulong m_connection_added_handler; gulong m_connection_removed_handler; InfSaslContext* m_sasl_context; std::string m_sasl_mechanisms; #ifdef LIBINFINITY_HAVE_AVAHI InfDiscoveryAvahi* m_discovery; #endif SignalConnectionReplaced m_signal_connection_replaced; }; } #endif // _GOBBY_CONNECTIONMANAGER_HPP_ gobby-0.6.0/code/core/toolbar.cpp0000664000175000017500000000347314003367605013565 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/toolbar.hpp" #include #include Gobby::Toolbar::Toolbar(const Preferences& preferences): m_preferences(preferences) { set_orientation(Gtk::ORIENTATION_VERTICAL); Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/toolbar.ui"); builder->get_widget("toolbar", m_toolbar); // Initial settings on_toolbar_style_changed(); on_show_toolbar_changed(); preferences.appearance.toolbar_style.signal_changed().connect( sigc::mem_fun(*this, &Toolbar::on_toolbar_style_changed)); preferences.appearance.show_toolbar.signal_changed().connect( sigc::mem_fun(*this, &Toolbar::on_show_toolbar_changed)); attach(*m_toolbar, 0, 0, 1, 1); } void Gobby::Toolbar::on_toolbar_style_changed() { m_toolbar->set_toolbar_style(m_preferences.appearance.toolbar_style); } void Gobby::Toolbar::on_show_toolbar_changed() { if(m_preferences.appearance.show_toolbar) m_toolbar->show(); else m_toolbar->hide(); } gobby-0.6.0/code/core/knownhoststorage.hpp0000664000175000017500000000243514003367605015544 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_KNOWN_HOST_STORAGE_HPP_ #define _GOBBY_KNOWN_HOST_STORAGE_HPP_ #include "core/browser.hpp" // This class stores the connection parameters of all connections on // shutdown, and on startup reads them back in and creates connection items // in the browser. namespace Gobby { class KnownHostStorage { public: KnownHostStorage(Browser& browser); ~KnownHostStorage(); protected: Browser& m_browser; }; } #endif // _GOBBY_KNOWN_HOST_STORAGE_HPP_ gobby-0.6.0/code/core/credentialsgenerator.cpp0000664000175000017500000001161714003367605016326 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/credentialsgenerator.hpp" #include #include #include namespace { class Keygen: public Gobby::AsyncOperation { public: Keygen(gnutls_pk_algorithm_t algo, unsigned int bits, const Gobby::SlotKeyGeneratorDone& slot_done): m_algo(algo), m_bits(bits), m_slot_done(slot_done), m_key(NULL), m_error(NULL) { } ~Keygen() { if(m_key != NULL) gnutls_x509_privkey_deinit(m_key); if(m_error != NULL) g_error_free(m_error); } protected: virtual void run() { m_key = inf_cert_util_create_private_key( m_algo, m_bits, &m_error); } virtual void finish() { if(m_error != NULL) { m_slot_done(get_handle(), NULL, m_error); } else { gnutls_x509_privkey_t key = m_key; m_key = NULL; m_slot_done(get_handle(), key, NULL); } } private: const gnutls_pk_algorithm_t m_algo; const unsigned int m_bits; const Gobby::SlotKeyGeneratorDone m_slot_done; gnutls_x509_privkey_t m_key; GError* m_error; }; class Certgen: public Gobby::AsyncOperation { public: Certgen(gnutls_x509_privkey_t key, const Gobby::SlotCertificateGeneratorDone& slot_done): m_key(key), m_slot_done(slot_done), m_cert(NULL), m_error(NULL) { } ~Certgen() { if(m_cert != NULL) gnutls_x509_crt_deinit(m_cert); if(m_error != NULL) g_error_free(m_error); } protected: virtual void run() { InfCertUtilDescription desc; desc.validity = 365 * 24 * 3600; desc.dn_common_name = g_get_user_name(); desc.san_dnsname = g_get_host_name(); m_cert = inf_cert_util_create_self_signed_certificate( m_key, &desc, &m_error); } virtual void finish() { if(m_error != NULL) { m_slot_done(get_handle(), NULL, m_error); } else { gnutls_x509_crt_t cert = m_cert; m_cert = NULL; m_slot_done(get_handle(), cert, NULL); } } private: const gnutls_x509_privkey_t m_key; const Gobby::SlotCertificateGeneratorDone m_slot_done; gnutls_x509_crt_t m_cert; GError* m_error; }; class DHgen: public Gobby::AsyncOperation { public: DHgen(unsigned int bits, const Gobby::SlotDHParamsGeneratorDone& slot_done): m_bits(bits), m_slot_done(slot_done), m_dh_params(NULL), m_error(NULL) { } ~DHgen() { if(m_dh_params != NULL) gnutls_dh_params_deinit(m_dh_params); if(m_error != NULL) g_error_free(m_error); } protected: virtual void run() { // TODO: Actually use the bits number here m_dh_params = inf_cert_util_create_dh_params(&m_error); } virtual void finish() { if(m_error != NULL) { m_slot_done(get_handle(), NULL, m_error); } else { gnutls_dh_params_t dh_params = m_dh_params; m_dh_params = NULL; m_slot_done(get_handle(), dh_params, NULL); } } private: const unsigned int m_bits; const Gobby::SlotDHParamsGeneratorDone m_slot_done; gnutls_dh_params_t m_dh_params; GError* m_error; }; } std::unique_ptr Gobby::create_key(gnutls_pk_algorithm_t algo, unsigned int bits, const SlotKeyGeneratorDone& done_slot) { std::unique_ptr operation( new Keygen(algo, bits, done_slot)); return AsyncOperation::start(std::move(operation)); } std::unique_ptr Gobby::create_self_signed_certificate( gnutls_x509_privkey_t key, const SlotCertificateGeneratorDone& done_slot) { // TODO: Does this really need to be asynchronous? I don't think here // are any blocking calls involved... // TODO: We should make a copy of the key, so that the caller can // delete theirs. std::unique_ptr operation(new Certgen(key, done_slot)); return AsyncOperation::start(std::move(operation)); } std::unique_ptr Gobby::create_dh_params(unsigned int bits, const SlotDHParamsGeneratorDone& done_slot) { std::unique_ptr operation(new DHgen(bits, done_slot)); return AsyncOperation::start(std::move(operation)); } gobby-0.6.0/code/core/knownhoststorage.cpp0000664000175000017500000001354214005500456015533 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/knownhoststorage.hpp" #include "util/file.hpp" #include "features.hpp" #include #include #include #include namespace { struct HostInfo { std::string name; std::string hostname; std::string service; }; bool load_host(xmlpp::Element* node, HostInfo& info) { bool found_name = false; bool found_hostname = false; info.service = Glib::ustring::compose( "%1", inf_protocol_get_default_port()); xmlpp::Node::NodeList list = node->get_children(); for(xmlpp::Node::NodeList::iterator iter = list.begin(); iter != list.end(); ++ iter) { xmlpp::Element* child = dynamic_cast(*iter); if(child == NULL) continue; xmlpp::TextNode* text = child->get_child_text(); if(text == NULL) continue; if(child->get_name() == "name") { info.name = text->get_content(); found_name = true; } else if(child->get_name() == "hostname") { info.hostname = text->get_content(); found_hostname = true; } else if(child->get_name() == "service") { info.service = text->get_content(); } } return found_name && found_hostname; } // Location to store the hosts file: std::string filename() { return Gobby::config_filename("hosts.xml"); } } Gobby::KnownHostStorage::KnownHostStorage(Browser& browser): m_browser(browser) { xmlpp::DomParser parser; try { parser.parse_file(filename()); } catch(xmlpp::exception& e) { // Could not open file, or file is invalid. } try { xmlpp::Document* document = parser.get_document(); if(document) { xmlpp::Element* root = document->get_root_node(); if(root) { xmlpp::Node::NodeList list = root->get_children(); for(xmlpp::Node::NodeList::iterator iter = list.begin(); iter != list.end(); ++ iter) { xmlpp::Element* child = dynamic_cast( *iter); if(child == NULL) continue; HostInfo info; if(child->get_name() == "host" && load_host(child, info)) { // TODO: Store device name // in the file as well so // that we can recover IPv6 // link-local connections. browser.add_remote( info.hostname, info.service, 0, false); } } } } } catch(xmlpp::exception& e) { // Could not read file, ignore } } Gobby::KnownHostStorage::~KnownHostStorage() { try { create_directory_with_parents( Glib::path_get_dirname(filename()), 0700); xmlpp::Document document; xmlpp::Element* root = document.create_root_node("hosts"); GtkTreeModel* model = GTK_TREE_MODEL(m_browser.get_store()); GtkTreeIter iter; for(gboolean have_item = gtk_tree_model_get_iter_first(model, &iter); have_item == TRUE; have_item = gtk_tree_model_iter_next(model, &iter)) { InfBrowser* browser; InfDiscovery* discovery; gtk_tree_model_get( model, &iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, INF_GTK_BROWSER_MODEL_COL_DISCOVERY, &discovery, -1); // Skip items that were discovered if(discovery != NULL) { g_object_unref(discovery); if(browser != NULL) g_object_unref(browser); continue; } if(browser == NULL) continue; if(!INFC_IS_BROWSER(browser)) { g_object_unref(browser); continue; } InfXmlConnection* connection = infc_browser_get_connection( INFC_BROWSER(browser)); if(connection == NULL || !INF_IS_XMPP_CONNECTION(connection)) { g_object_unref(browser); continue; } InfTcpConnection* tcp; g_object_get( G_OBJECT(connection), "tcp-connection", &tcp, NULL); g_object_unref(browser); InfNameResolver* resolver; g_object_get( G_OBJECT(tcp), "resolver", &resolver, NULL); g_object_unref(tcp); // TODO: If resolver is NULL, should we instead // record hostname and port number? if(resolver == NULL) continue; const char* hostname = inf_name_resolver_get_hostname(resolver); const char* service = inf_name_resolver_get_service(resolver); const char* srv = inf_name_resolver_get_srv(resolver); if(strcmp(srv, "_infinote._tcp") != 0) { g_object_unref(resolver); continue; } gchar* name; gtk_tree_model_get( model, &iter, INF_GTK_BROWSER_MODEL_COL_NAME, &name, -1); xmlpp::Element* child = root->add_child("host"); xmlpp::Element* name_elem = child->add_child("name"); name_elem->set_child_text(name); xmlpp::Element* hostname_elem = child->add_child("hostname"); hostname_elem->set_child_text(hostname); xmlpp::Element* service_elem = child->add_child("service"); service_elem->set_child_text(service); g_object_unref(resolver); } document.write_to_file_formatted(filename()); } catch(Glib::Exception& e) { g_warning("Could not write hosts file: %s", e.what().c_str()); } catch(std::exception& e) { g_warning("Could not write hosts file: %s", e.what()); } } gobby-0.6.0/code/core/foldermanager.cpp0000664000175000017500000002711614003367605014731 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/foldermanager.hpp" #include "util/i18n.hpp" #include #include class Gobby::FolderManager::BrowserInfo { public: BrowserInfo(FolderManager& manager, InfBrowser* browser): m_browser(browser) { g_object_ref(m_browser); m_unsubscribe_session_handler = g_signal_connect( G_OBJECT(browser), "unsubscribe-session", G_CALLBACK(&on_unsubscribe_session_static), &manager); } ~BrowserInfo() { g_signal_handler_disconnect(G_OBJECT(m_browser), m_unsubscribe_session_handler); g_object_unref(m_browser); } private: InfBrowser* m_browser; gulong m_unsubscribe_session_handler; }; class Gobby::FolderManager::SessionInfo { public: SessionInfo(Folder& folder, InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy): m_folder(folder), m_browser(browser), m_proxy(proxy) { if(browser != NULL && iter != NULL) m_browser_iter = *iter; else m_browser = NULL; if(proxy != NULL) g_object_ref(proxy); } ~SessionInfo() { if(m_proxy != NULL) g_object_unref(m_proxy); } void reset_browser() { m_browser = NULL; } InfBrowser* get_browser() { return m_browser; } const InfBrowserIter* get_browser_iter() { return m_browser == NULL ? NULL : &m_browser_iter; } Folder& get_folder() { return m_folder; } InfSessionProxy* get_proxy() { return m_proxy; } private: Folder& m_folder; InfBrowser* m_browser; InfBrowserIter m_browser_iter; InfSessionProxy* m_proxy; }; Gobby::FolderManager::FolderManager(Browser& browser, DocumentInfoStorage& info_storage, Folder& text_folder, Folder& chat_folder): m_browser(browser), m_info_storage(info_storage), m_text_folder(text_folder), //false, preferences, m_lang_manager), m_chat_folder(chat_folder) //true, preferences, m_lang_manager) { InfGtkBrowserModel* model = INF_GTK_BROWSER_MODEL(browser.get_store()); m_set_browser_handler = g_signal_connect( G_OBJECT(model), "set-browser", G_CALLBACK(&on_set_browser_static), this); // Add already existing browsers GtkTreeIter iter; GtkTreeModel* treemodel = GTK_TREE_MODEL(model); for(gboolean have_entry = gtk_tree_model_get_iter_first(treemodel, &iter); have_entry == TRUE; have_entry = gtk_tree_model_iter_next(treemodel, &iter)) { InfBrowser* browser; gtk_tree_model_get( treemodel, &iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, -1); if(browser != NULL) { m_browser_map[browser] = new BrowserInfo(*this, browser); g_object_unref(browser); } } m_text_document_added_connection = m_text_folder.signal_document_added().connect( sigc::mem_fun( *this, &FolderManager::on_text_document_added)); m_chat_document_added_connection = m_chat_folder.signal_document_added().connect( sigc::mem_fun( *this, &FolderManager::on_chat_document_added)); m_text_folder.signal_document_removed().connect( sigc::mem_fun( *this, &FolderManager::on_document_removed)); m_chat_folder.signal_document_removed().connect( sigc::mem_fun( *this, &FolderManager::on_document_removed)); } Gobby::FolderManager::~FolderManager() { for(BrowserMap::iterator iter = m_browser_map.begin(); iter != m_browser_map.end(); ++ iter) { delete iter->second; } for(SessionMap::iterator iter = m_session_map.begin(); iter != m_session_map.end(); ++iter) { delete iter->second; } g_signal_handler_disconnect( INF_GTK_BROWSER_MODEL(m_browser.get_store()), m_set_browser_handler); } void Gobby::FolderManager::add_document(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, UserJoinRef userjoin) { gchar* hostname; if(INFC_IS_BROWSER(browser)) { InfXmlConnection* connection = infc_browser_get_connection(INFC_BROWSER(browser)); g_object_get( G_OBJECT(connection), "remote-hostname", &hostname, NULL); } else if(INFD_IS_DIRECTORY(browser)) { hostname = g_strdup(g_get_host_name()); } else { g_assert_not_reached(); hostname = NULL; } InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); TextSessionView* text_view = NULL; Folder* folder; SessionView* view; if(INF_TEXT_IS_SESSION(session)) { gchar* path = inf_browser_get_path(browser, iter); m_text_document_added_connection.block(); text_view = &m_text_folder.add_text_session( INF_TEXT_SESSION(session), inf_browser_get_node_name(browser, iter), path, hostname, m_info_storage.get_key(browser, iter)); m_text_document_added_connection.unblock(); folder = &m_text_folder; view = text_view; g_free(path); } else if(INF_IS_CHAT_SESSION(session)) { if(iter == NULL) { m_chat_document_added_connection.block(); view = &m_chat_folder.add_chat_session( INF_CHAT_SESSION(session), hostname, "", hostname); m_chat_document_added_connection.unblock(); } else { gchar* path = inf_browser_get_path(browser, iter); m_chat_document_added_connection.block(); view = &m_chat_folder.add_chat_session( INF_CHAT_SESSION(session), inf_browser_get_node_name(browser, iter), path, hostname); m_chat_document_added_connection.unblock(); g_free(path); } folder = &m_chat_folder; } else { // Cannot happen, because we don't have any other note plugins // installed in the browser. g_assert_not_reached(); } g_free(hostname); // Highlight the newly created session folder->switch_to_document(*view); if(text_view) gtk_widget_grab_focus(GTK_WIDGET(text_view->get_text_view())); if(iter) m_browser.set_selected(browser, iter); g_assert(m_session_map.find(session) == m_session_map.end()); m_session_map[session] = new SessionInfo(*folder, browser, iter, proxy); g_object_unref(session); m_signal_document_added.emit( browser, iter, proxy, *folder, *view, userjoin); } void Gobby::FolderManager::remove_document(SessionView& view) { SessionMap::const_iterator iter = m_session_map.find(view.get_session()); g_assert(iter != m_session_map.end()); iter->second->get_folder().remove_document(view); } Gobby::SessionView* Gobby::FolderManager::lookup_document(InfSession* session) const { SessionMap::const_iterator iter = m_session_map.find(session); if(iter == m_session_map.end()) return NULL; return iter->second->get_folder().lookup_document(session); } void Gobby::FolderManager::switch_to_document(SessionView& view) { SessionMap::iterator iter = m_session_map.find(view.get_session()); g_assert(iter != m_session_map.end()); iter->second->get_folder().switch_to_document(view); } void Gobby::FolderManager::on_set_browser(InfGtkBrowserModel* model, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser) { if(old_browser != NULL) { BrowserMap::iterator iter = m_browser_map.find(old_browser); g_assert(iter != m_browser_map.end()); delete iter->second; m_browser_map.erase(iter); } if(new_browser != NULL) { g_assert(m_browser_map.find(new_browser) == m_browser_map.end()); m_browser_map[new_browser] = new BrowserInfo(*this, new_browser); } } void Gobby::FolderManager::on_unsubscribe_session(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, InfRequest* request) { InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); SessionMap::iterator session_iter = m_session_map.find(session); // Note that the session might not be in the session map, for example // if we are subscribed but do not show a document for the session. if(session_iter != m_session_map.end()) { // Browser entry disappeared for the session, so invalidate // our iterator. The session is now "floating", without any // browser entry. session_iter->second->reset_browser(); // When the subscription group of the session is still // available, then close the session. This can essentially // only happen on the server side, and it closes the session // when it is removed from the document tree. In principle // the session could go on until the document is closed by // the server, but this probably causes more confusion than // anything else. So we close it. // TODO: It would be nice to keep the session itself alive, // and to only unsubscribe all clients and set the local users // to unavailable. if(inf_session_get_subscription_group(session) != NULL) { lookup_document(session)->set_info( _("The document has been removed from the server."), true); inf_session_close(session); } } g_object_unref(session); } void Gobby::FolderManager::on_text_document_added(SessionView& view) { // This should not happen, because we only hand out const folders. g_assert_not_reached(); InfSession* session = view.get_session(); // Do as if the document was added "normally", but we cannot associate // either a browser entry or a session proxy. g_assert(m_session_map.find(session) == m_session_map.end()); m_session_map[session] = new SessionInfo(m_text_folder, NULL, NULL, NULL); m_signal_document_added.emit(NULL, NULL, NULL, m_text_folder, view, NULL); } void Gobby::FolderManager::on_chat_document_added(SessionView& view) { // This should not happen, because we only hand out const folders. g_assert_not_reached(); InfSession* session = view.get_session(); // Do as if the document was added "normally", but we cannot associate // either a browser entry or a session proxy. g_assert(m_session_map.find(session) == m_session_map.end()); m_session_map[session] = new SessionInfo(m_chat_folder, NULL, NULL, NULL); m_signal_document_added.emit(NULL, NULL, NULL, m_chat_folder, view, NULL); } void Gobby::FolderManager::on_document_removed(SessionView& view) { InfSession* session = view.get_session(); SessionMap::iterator session_iter = m_session_map.find(session); g_assert(session_iter != m_session_map.end()); Folder& folder = session_iter->second->get_folder(); InfBrowser* browser = session_iter->second->get_browser(); InfSessionProxy* proxy = session_iter->second->get_proxy(); const InfBrowserIter* iter = session_iter->second->get_browser_iter(); InfBrowserIter local_iter; if(iter != NULL) local_iter = *iter; g_object_ref(proxy); delete session_iter->second; m_session_map.erase(session_iter); m_signal_document_removed.emit( browser, browser != NULL ? &local_iter : NULL, proxy, folder, view); g_object_unref(proxy); } gobby-0.6.0/code/core/menumanager.hpp0000664000175000017500000000261414003367605014423 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_MENUMANAGER_HPP_ #define _GOBBY_MENUMANAGER_HPP_ #include #include #include namespace Gobby { class MenuManager { public: MenuManager(GtkSourceLanguageManager* language_manager); Glib::RefPtr get_app_menu() { return m_app_menu; } Glib::RefPtr get_menu() { return m_menu; } protected: Glib::RefPtr m_app_menu; Glib::RefPtr m_menu; private: Glib::RefPtr get_highlight_mode_menu(); }; } #endif // _GOBBY_MENUMARAGER_HPP_ gobby-0.6.0/code/core/userlist.cpp0000664000175000017500000002603014003367605013767 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/userlist.hpp" #include "util/i18n.hpp" #include #include #include namespace { typedef sigc::slot ForeachUserFunc; void foreach_user_ctor_func(InfUser* user, gpointer user_data) { (*static_cast(user_data))(user); } Glib::RefPtr generate_user_color_pixbuf(Gtk::Widget& w, gdouble hue) { Glib::RefPtr icon_theme = Gtk::IconTheme::get_for_screen(w.get_screen()); Glib::RefPtr pixbuf; try { pixbuf = icon_theme->load_icon( "user-color-indicator", 16); } catch(const Glib::Error& ex) { // Icon not found // TODO: Check error domain and code pixbuf = icon_theme->load_icon( "image-missing", 16); } // pixbuf is shared, though we want to mess with it here pixbuf = pixbuf->copy(); for(int y = 0; y < pixbuf->get_height(); ++y) { for(int x = 0; x < pixbuf->get_width(); ++x) { guint8* pixels = pixbuf->get_pixels(); guint8* pixel = pixels + y * pixbuf->get_rowstride() + x * pixbuf->get_n_channels(); double r = pixel[0]/255.0; double g = pixel[1]/255.0; double b = pixel[2]/255.0; // Replace hue value double h, s, v; gtk_rgb_to_hsv(r, g, b, &h, &s, &v); gtk_hsv_to_rgb(hue, s, v, &r, &g, &b); pixel[0] = static_cast(r * 255.0 + 0.5); pixel[1] = static_cast(g * 255.0 + 0.5); pixel[2] = static_cast(b * 255.0 + 0.5); } } return pixbuf; } } Gobby::UserList::UserList(InfUserTable* table): m_table(table), m_store(Gtk::ListStore::create(m_columns)), m_view(m_store) { m_store->set_sort_func(m_columns.user, sigc::mem_fun(*this, &UserList::sort_func)); m_store->set_sort_column(m_columns.user, Gtk::SORT_ASCENDING); m_add_user_handle = g_signal_connect( G_OBJECT(table), "add-user", G_CALLBACK(on_add_user_static), this); ForeachUserFunc slot(sigc::mem_fun(*this, &UserList::on_add_user)); inf_user_table_foreach_user(table, foreach_user_ctor_func, &slot); Gtk::CellRendererPixbuf* icon_renderer = Gtk::manage(new Gtk::CellRendererPixbuf); Gtk::CellRendererPixbuf* color_renderer = Gtk::manage(new Gtk::CellRendererPixbuf); Gtk::CellRendererText* name_renderer = Gtk::manage(new Gtk::CellRendererText); Gtk::TreeViewColumn* column = Gtk::manage(new Gtk::TreeViewColumn(_("Users"))); column->pack_start(*icon_renderer, false); column->pack_start(*color_renderer, false); column->pack_start(*name_renderer, true); column->set_cell_data_func( *icon_renderer, sigc::mem_fun(*this, &UserList::icon_cell_data_func)); column->set_cell_data_func( *color_renderer, sigc::mem_fun(*this, &UserList::color_cell_data_func)); column->set_cell_data_func( *name_renderer, sigc::mem_fun(*this, &UserList::name_cell_data_func)); m_view.signal_row_activated().connect( sigc::mem_fun(*this, &UserList::on_row_activated)); column->set_spacing(6); m_view.append_column(*column); m_view.get_selection()->set_mode(Gtk::SELECTION_NONE); m_view.set_headers_visible(false); m_view.show(); Gtk::ScrolledWindow* scroll = Gtk::manage(new Gtk::ScrolledWindow); scroll->set_shadow_type(Gtk::SHADOW_IN); scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); scroll->set_hexpand(true); scroll->set_vexpand(true); scroll->add(m_view); scroll->show(); attach(*scroll, 0, 0, 1, 1); } Gobby::UserList::~UserList() { g_signal_handler_disconnect(G_OBJECT(m_table), m_add_user_handle); m_filter_model.reset(); const Gtk::TreeModel::Children& children = m_store->children(); for(Gtk::TreeIter iter = children.begin(); iter != children.end(); ++ iter) { InfUser* user = (*iter)[m_columns.user]; gulong notify_hue_handle = (*iter)[m_columns.notify_hue_handle]; gulong notify_status_handle = (*iter)[m_columns.notify_status_handle]; if(notify_hue_handle > 0) g_signal_handler_disconnect(G_OBJECT(user), notify_hue_handle); g_signal_handler_disconnect(G_OBJECT(user), notify_status_handle); } } void Gobby::UserList::set_show_disconnected(bool show_disconnected) { if(show_disconnected) { m_filter_model.reset(); m_view.set_model(m_store); } else { m_filter_model = Gtk::TreeModelFilter::create(m_store); m_view.set_model(m_filter_model); m_filter_model->set_visible_func( sigc::mem_fun(*this, &UserList::visible_func)); } } bool Gobby::UserList::visible_func(const Gtk::TreeIter& iter) { InfUser* user = (*iter)[m_columns.user]; // Can happen after creation of the node when the user object has // not yet been set if(user == NULL) return false; return inf_user_get_status(user) != INF_USER_UNAVAILABLE; } void Gobby::UserList::icon_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter) { Gtk::CellRendererPixbuf* pixbuf_renderer = dynamic_cast(renderer); g_assert(pixbuf_renderer); pixbuf_renderer->property_stock_size() = Gtk::ICON_SIZE_MENU; InfUser* user = (*iter)[m_columns.user]; if(user == NULL) { // Can happen after creation of the node when the user // object has not yet been set pixbuf_renderer->property_visible() = false; } else { pixbuf_renderer->property_visible() = true; switch(inf_user_get_status(user)) { case INF_USER_ACTIVE: case INF_USER_INACTIVE: pixbuf_renderer->property_icon_name() = "user-available"; break; case INF_USER_UNAVAILABLE: pixbuf_renderer->property_icon_name() = "user-offline"; break; default: g_assert_not_reached(); break; } } } void Gobby::UserList::color_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter) { Gtk::CellRendererPixbuf* pixbuf_renderer = dynamic_cast(renderer); g_assert(pixbuf_renderer); Glib::RefPtr pixbuf = (*iter)[m_columns.color]; if(pixbuf) { pixbuf_renderer->property_pixbuf() = pixbuf; pixbuf_renderer->property_visible() = true; } else { pixbuf_renderer->property_visible() = false; } } void Gobby::UserList::name_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter) { Gtk::CellRendererText* text_renderer = dynamic_cast(renderer); g_assert(text_renderer); InfUser* user = (*iter)[m_columns.user]; if(user == NULL) { // Can happen after creation of the node when the user // object has not yet been set text_renderer->property_visible() = false; } else { switch(inf_user_get_status(INF_USER(user))) { case INF_USER_ACTIVE: text_renderer->property_foreground_set() = false; break; case INF_USER_INACTIVE: text_renderer->property_foreground() = "#606060"; break; case INF_USER_UNAVAILABLE: text_renderer->property_foreground() = "#a0a0a0"; break; } text_renderer->property_visible() = true; text_renderer->property_text() = inf_user_get_name(user); } } int Gobby::UserList::sort_func(const Gtk::TreeIter& iter1, const Gtk::TreeIter& iter2) { InfUser* user1 = (*iter1)[m_columns.user]; InfUser* user2 = (*iter2)[m_columns.user]; bool available1 = inf_user_get_status(user1) != INF_USER_UNAVAILABLE; bool available2 = inf_user_get_status(user2) != INF_USER_UNAVAILABLE; if(available1 != available2) { if(!available1) return 1; return -1; } else { // We might want to cache collate keys in the ListStore if // this turns out to be a performance problem: return g_utf8_collate(inf_user_get_name(user1), inf_user_get_name(user2)); } } void Gobby::UserList::on_add_user(InfUser* user) { g_assert(find_user_iter(user) == m_store->children().end()); Gtk::TreeIter iter = m_store->append(); (*iter)[m_columns.user] = user; (*iter)[m_columns.notify_status_handle] = g_signal_connect( G_OBJECT(user), "notify::status", G_CALLBACK(on_notify_status_static), this); if(INF_TEXT_IS_USER(user)) { Glib::RefPtr color_pixbuf = generate_user_color_pixbuf( *this, inf_text_user_get_hue(INF_TEXT_USER(user))); (*iter)[m_columns.color] = color_pixbuf; (*iter)[m_columns.notify_hue_handle] = g_signal_connect( G_OBJECT(user), "notify::hue", G_CALLBACK(on_notify_hue_static), this); } else { // Should be 0 anyway, but let's be sure: (*iter)[m_columns.notify_hue_handle] = 0; } } void Gobby::UserList::on_notify_hue(InfTextUser* user) { Gtk::TreeIter iter = find_user_iter(INF_USER(user)); g_assert(iter != m_store->children().end()); (*iter)[m_columns.color] = generate_user_color_pixbuf( *this, inf_text_user_get_hue(user)); } void Gobby::UserList::on_notify_status(InfUser* user) { Gtk::TreeIter iter = find_user_iter(user); g_assert(iter != m_store->children().end()); // This does not cause a resort: //m_store->row_changed(m_store->get_path(iter), iter); // But this does: (*iter)[m_columns.user] = user; } void Gobby::UserList::on_row_activated(const Gtk::TreePath& path, Gtk::TreeViewColumn* column) { Gtk::TreePath parent_path; if(m_filter_model) parent_path = m_filter_model->convert_path_to_child_path(path); else parent_path = path; const Gtk::TreeIter& iter = m_store->get_iter(path); InfUser* user = (*iter)[m_columns.user]; if(inf_user_get_status(user) != INF_USER_UNAVAILABLE) m_signal_user_activated.emit(user); } void Gobby::UserList::on_style_updated() { // Re-render all user color pixbufs, since the icon might have changed // with the new style. const Gtk::TreeModel::Children& children = m_store->children(); for(Gtk::TreeIter iter = children.begin(); iter != children.end(); ++ iter) { InfUser* user = (*iter)[m_columns.user]; if(INF_TEXT_IS_USER(user)) { (*iter)[m_columns.color] = generate_user_color_pixbuf( *this, inf_text_user_get_hue(INF_TEXT_USER(user))); } } } Gtk::TreeIter Gobby::UserList::find_user_iter(InfUser* user) { const Gtk::TreeModel::Children& children = m_store->children(); for(Gtk::TreeIter iter = children.begin(); iter != children.end(); ++ iter) { if(user == (*iter)[m_columns.user]) return iter; } return children.end(); } gobby-0.6.0/code/core/credentialsgenerator.hpp0000664000175000017500000000403014003367605016322 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CREDENTIALS_GENERATOR_HPP_ #define _GOBBY_CREDENTIALS_GENERATOR_HPP_ #include "util/asyncoperation.hpp" #include namespace Gobby { typedef AsyncOperation::Handle KeyGeneratorHandle; typedef sigc::slot< void, const KeyGeneratorHandle*, gnutls_x509_privkey_t, const GError* > SlotKeyGeneratorDone; typedef AsyncOperation::Handle CertificateGeneratorHandle; typedef sigc::slot< void, const CertificateGeneratorHandle*, gnutls_x509_crt_t, const GError* > SlotCertificateGeneratorDone; typedef AsyncOperation::Handle DHParamsGeneratorHandle; typedef sigc::slot< void, const DHParamsGeneratorHandle*, gnutls_dh_params_t, const GError* > SlotDHParamsGeneratorDone; std::unique_ptr create_key(gnutls_pk_algorithm_t algo, unsigned int bits, const SlotKeyGeneratorDone& done_slot); std::unique_ptr create_self_signed_certificate(gnutls_x509_privkey_t key, const SlotCertificateGeneratorDone& done_slot); std::unique_ptr create_dh_params(unsigned int bits, const SlotDHParamsGeneratorDone& done_slot); } #endif // _GOBBY_CREDENTIALS_GENERATOR_HPP_ gobby-0.6.0/code/core/userjoin.hpp0000664000175000017500000000624714003367605013770 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_USER_JOIN_HPP_ #define _GOBBY_USER_JOIN_HPP_ #include "core/nodewatch.hpp" #include #include #include #include #include #include #include #include #include namespace Gobby { class UserJoin: public sigc::trackable { public: class ParameterProvider { public: ParameterProvider() {} virtual ~ParameterProvider() {} virtual std::vector get_user_join_parameters() = 0; }; typedef sigc::signal SignalFinished; UserJoin(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, std::unique_ptr param_provider); ~UserJoin(); InfSessionProxy* get_proxy() const { return m_proxy; } // If both are NULL, the user join is still in progress: InfUser* get_user() const { return m_user; } const GError* get_error() const { return m_error; } SignalFinished signal_finished() const { return m_signal_finished; } private: static void on_synchronization_complete_static(InfSession* session, InfXmlConnection* conn, gpointer user_data) { static_cast(user_data)-> on_synchronization_complete(); } static void on_user_join_finished_static(InfRequest* request, const InfRequestResult* res, const GError* error, gpointer user_data) { InfUser* user = NULL; if(error == NULL) inf_request_result_get_join_user(res, NULL, &user); static_cast(user_data)-> on_user_join_finished(user, error); } void on_synchronization_complete(); void on_user_join_finished(InfUser* user, const GError* error); void attempt_user_join(); void user_join_complete(InfUser* user, const GError* error); NodeWatch m_node; InfSessionProxy* m_proxy; std::unique_ptr m_param_provider; gulong m_synchronization_complete_handler; InfRequest* m_request; guint m_retry_index; InfUser* m_user; GError* m_error; SignalFinished m_signal_finished; }; } #endif // _GOBBY_USER_JOIN_HPP_ gobby-0.6.0/code/core/statusbar.cpp0000664000175000017500000002634414003367605014135 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/statusbar.hpp" #include "util/i18n.hpp" #include #include #include namespace { const gchar* message_type_to_icon_name(Gobby::StatusBar::MessageType type) { switch(type) { case Gobby::StatusBar::INFO: return "dialog-information"; case Gobby::StatusBar::ERROR: return "dialog-error"; default: g_assert_not_reached(); return NULL; } } void dispose_dialog(Gtk::MessageDialog* dialog) { delete dialog; } } class Gobby::StatusBar::Message { public: Message(Gtk::Widget* widget, const Glib::ustring& simple, const Glib::ustring& detail, sigc::connection timeout_conn = sigc::connection()): m_widget(widget), m_timeout_conn(timeout_conn), m_simple_desc(simple), m_detail_desc(detail) { } ~Message() { m_timeout_conn.disconnect(); } void show_dialog() const { Gtk::MessageDialog* dialog = new Gtk::MessageDialog( m_simple_desc, false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_NONE, false); Gtk::Window* parent = NULL; Gtk::Widget* toplevel_widget = m_widget->get_toplevel(); if(gtk_widget_is_toplevel(toplevel_widget->gobj())) parent = dynamic_cast(toplevel_widget); g_assert(parent != NULL); dialog->set_transient_for(*parent); dialog->add_button(_("_Close"), Gtk::RESPONSE_CLOSE); dialog->set_secondary_text(m_detail_desc, true); dialog->signal_response().connect( sigc::hide( sigc::bind( sigc::ptr_fun(dispose_dialog), dialog))); dialog->show(); } bool is_error() { return !m_detail_desc.empty(); } const Glib::ustring& get_simple_text() const { return m_simple_desc; } const Glib::ustring& get_detail_text() const { return m_detail_desc; } Gtk::Widget* widget() const { return m_widget; } protected: Gtk::Widget* m_widget; sigc::connection m_timeout_conn; Glib::ustring m_simple_desc; Glib::ustring m_detail_desc; }; Gobby::StatusBar::StatusBar(const Folder& folder, const Preferences& preferences): m_folder(folder), m_preferences(preferences), m_visible_messages(0), m_current_view(NULL) { set_column_spacing(2); m_lbl_position.set_halign(Gtk::ALIGN_END); m_lbl_position.set_hexpand(true); #if GTK_CHECK_VERSION(3,12,0) gtk_widget_set_margin_end(GTK_WIDGET(m_lbl_position.gobj()), 6); #else gtk_widget_set_margin_right(GTK_WIDGET(m_lbl_position.gobj()), 6); #endif m_lbl_position.show(); attach(m_lbl_position, 0, 0, 1, 1); m_folder.signal_document_removed().connect( sigc::mem_fun(*this, &StatusBar::on_document_removed)); m_folder.signal_document_changed().connect( sigc::mem_fun(*this, &StatusBar::on_document_changed)); m_preferences.appearance.show_statusbar.signal_changed().connect( sigc::mem_fun(*this, &StatusBar::on_view_changed)); // Initial update on_document_changed(m_folder.get_current_document()); on_view_changed(); } Gobby::StatusBar::~StatusBar() { on_document_changed(NULL); } Gobby::StatusBar::MessageHandle Gobby::StatusBar::add_message(Gobby::StatusBar::MessageType type, const Glib::ustring& message, const Glib::ustring& dialog_message, unsigned int timeout) { if(m_visible_messages >= 12) { for(MessageHandle iter = m_list.begin(); iter != m_list.end(); ++iter) { if(*iter) { if((*iter)->is_error()) remove_message(iter); else // only hide message because whoever // installed it is expecting to be // able to call remove_message on it hide_message(iter); break; } } } Gtk::Grid* grid = Gtk::manage(new Gtk::Grid()); grid->set_column_spacing(6); #if GTK_CHECK_VERSION(3,12,0) gtk_widget_set_margin_start(GTK_WIDGET(grid->gobj()), 2); gtk_widget_set_margin_end(GTK_WIDGET(grid->gobj()), 2); #else gtk_widget_set_margin_left(GTK_WIDGET(grid->gobj()), 2); gtk_widget_set_margin_right(GTK_WIDGET(grid->gobj()), 2); #endif Gtk::Image* image = Gtk::manage(new Gtk::Image); image->set_from_icon_name(message_type_to_icon_name(type), Gtk::ICON_SIZE_MENU); grid->attach(*image, 0, 0, 1, 1); image->show(); Gtk::Label* label = Gtk::manage( new Gtk::Label(message, Gtk::ALIGN_START)); label->set_ellipsize(Pango::ELLIPSIZE_END); // If we set halign instead, the label will not behave correctly // when ellipsized, because then it has always all space around it // allocated, and the alignment "jumps" around whin resizing the // window due to new characters appearing or disappearing as a result // of the ellipsization. #if GTK_CHECK_VERSION(3, 16, 0) gtk_label_set_xalign(label->gobj(), 0.0); #else label->set_alignment(0.0, 0.0); #endif label->show(); grid->attach(*label, 1, 0, 1, 1); Gtk::Frame* frame = Gtk::manage(new Gtk::Frame); m_list.push_back(0); Gobby::StatusBar::MessageHandle iter(--m_list.end()); sigc::connection timeout_conn; if(timeout) { timeout_conn = Glib::signal_timeout().connect_seconds( sigc::bind( sigc::bind_return( sigc::mem_fun( *this, &StatusBar::remove_message), false), iter), timeout); } *iter = new Message(frame, message, dialog_message, timeout_conn); ++m_visible_messages; if(dialog_message.empty()) { frame->add(*grid); } else { Gtk::EventBox *eventbox = Gtk::manage(new Gtk::EventBox); frame->add(*eventbox); eventbox->add(*grid); eventbox->signal_button_press_event().connect( sigc::bind_return(sigc::bind( sigc::mem_fun( *this, &StatusBar::on_message_clicked), iter), false)); eventbox->show(); } grid->show(); // Insert at front gtk_grid_attach_next_to( gobj(), GTK_WIDGET(frame->gobj()), NULL, GTK_POS_LEFT, 1, 1); frame->set_halign(Gtk::ALIGN_START); frame->set_hexpand(false); frame->set_shadow_type(Gtk::SHADOW_NONE); frame->show(); return iter; } Gobby::StatusBar::MessageHandle Gobby::StatusBar::add_info_message(const Glib::ustring& message, unsigned int timeout) { MessageHandle handle = Gobby::StatusBar::add_message(INFO, message, "", timeout); // Caller is not allowed to hold on to handles to messages that we are // going to delete anyway. if(timeout) return invalid_handle(); else return handle; } void Gobby::StatusBar::add_error_message(const Glib::ustring& brief_desc, const Glib::ustring& detailed_desc, unsigned int timeout) { MessageHandle next; for(MessageHandle iter = m_list.begin(); iter != m_list.end(); iter = next) { next = iter; ++next; if(*iter && (*iter)->is_error()) { if( (*iter)->get_simple_text() == brief_desc) { remove_message(iter); } } } Gobby::StatusBar::add_message(ERROR, brief_desc, detailed_desc, timeout); } void Gobby::StatusBar::remove_message(const MessageHandle& handle) { hide_message(handle); m_list.erase(handle); } void Gobby::StatusBar::hide_message(const MessageHandle& handle) { if(*handle != 0) { g_assert(m_visible_messages > 0); --m_visible_messages; remove(*(*handle)->widget()); delete *handle; *handle = 0; } } Gobby::StatusBar::MessageHandle Gobby::StatusBar::invalid_handle() { return m_list.end(); } void Gobby::StatusBar::on_message_clicked(GdkEventButton* button, const MessageHandle& handle) { if(button->button == 1) (*handle)->show_dialog(); remove_message(handle); } void Gobby::StatusBar::on_document_removed(SessionView& view) { if(m_current_view == &view) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); g_signal_handler_disconnect(buffer, m_mark_set_handler); g_signal_handler_disconnect(buffer, m_changed_handler); g_signal_handler_disconnect(m_current_view->get_text_view(), m_toverwrite_handler); m_current_view = NULL; } } void Gobby::StatusBar::on_document_changed(SessionView* view) { if(m_current_view) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); g_signal_handler_disconnect(buffer, m_mark_set_handler); g_signal_handler_disconnect(buffer, m_changed_handler); g_signal_handler_disconnect(m_current_view->get_text_view(), m_toverwrite_handler); } m_current_view = dynamic_cast(view); if(m_current_view) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); m_mark_set_handler = g_signal_connect_after( G_OBJECT(buffer), "mark-set", G_CALLBACK(on_mark_set_static), this); m_changed_handler = g_signal_connect_after( G_OBJECT(buffer), "changed", G_CALLBACK(on_changed_static), this); m_toverwrite_handler = g_signal_connect_after( G_OBJECT(m_current_view->get_text_view()), "notify::overwrite", G_CALLBACK(on_toggled_overwrite_static), this); } // Initial update update_pos_display(); } void Gobby::StatusBar::on_view_changed() { if(m_preferences.appearance.show_statusbar) show(); else hide(); } void Gobby::StatusBar::on_mark_set(GtkTextMark* mark) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); if(mark == gtk_text_buffer_get_insert(buffer)) update_pos_display(); } void Gobby::StatusBar::on_toggled_overwrite() { update_pos_display(); } void Gobby::StatusBar::on_changed() { update_pos_display(); } void Gobby::StatusBar::update_pos_display() { if(m_current_view != NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); GtkTextIter iter; // TODO: Use TextSessionView::get_cursor_position()? gtk_text_buffer_get_iter_at_mark( buffer, &iter, gtk_text_buffer_get_insert(buffer)); gint offset = gtk_text_iter_get_line_offset(&iter); unsigned int column = 0; const unsigned int tab_width = m_preferences.editor.tab_width; for(gtk_text_iter_set_line_offset(&iter, 0); gtk_text_iter_get_line_offset(&iter) < offset; gtk_text_iter_forward_char(&iter)) { if(gtk_text_iter_get_char(&iter) == '\t') column += (tab_width - column % tab_width); else ++ column; } // TODO: We might want to have a separate widget for the // OVR/INS display. m_lbl_position.set_text( Glib::ustring::compose( _("Ln %1, Col %2\t%3"), gtk_text_iter_get_line(&iter) + 1, column + 1, gtk_text_view_get_overwrite(GTK_TEXT_VIEW(m_current_view->get_text_view())) ? _("OVR") : _("INS") ) ); } else { m_lbl_position.set_text(""); } } gobby-0.6.0/code/core/chatsessionview.hpp0000664000175000017500000000322714003367605015343 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CHATSESSIONVIEW_HPP_ #define _GOBBY_CHATSESSIONVIEW_HPP_ #include "core/sessionview.hpp" #include "core/preferences.hpp" #include #include namespace Gobby { class ChatSessionView: public SessionView { public: ChatSessionView(InfChatSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, Preferences& preferences); // Override base class covariantly InfChatSession* get_session() { return INF_CHAT_SESSION(m_session); } InfGtkChat* get_chat() { return m_chat; } virtual InfUser* get_active_user() const; void set_active_user(InfUser* user); protected: Preferences& m_preferences; InfGtkChat* m_chat; }; } #endif // _GOBBY_CHATSESSIONVIEW_HPP_ gobby-0.6.0/code/core/preferences.hpp0000664000175000017500000003734614003367605014437 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_PREFERENCES_HPP_ #define _GOBBY_PREFERENCES_HPP_ #include "util/config.hpp" #include "util/i18n.hpp" #include "features.hpp" #include #include #include #include #include namespace Gobby { template struct SettingTraits { inline static Type get(const Glib::RefPtr& settings, const Glib::ustring& key) { Glib::Variant base; settings->get_value(key, base); return Type(base.get()); } inline static bool get_from_entry(const Config::ParentEntry& entry, const Glib::ustring& key, Type& value) { if(entry.has_value(key)) { value = entry.get_value(key); return true; } return false; } inline static void set(const Glib::RefPtr& settings, const Glib::ustring& key, const Type& value) { Glib::Variant var(Glib::Variant::create(value)); settings->set_value(key, var); } inline static bool equals(const Type& val1, const Type& val2) { return val1 == val2; } }; // This cannot go through the generic case defined above because // Glib::Variant would map to a byte array, not a string. template<> struct SettingTraits { inline static std::string get(const Glib::RefPtr& settings, const Glib::ustring& key) { return settings->get_string(key); } inline static bool get_from_entry(const Config::ParentEntry& entry, const Glib::ustring& key, std::string& value) { if(entry.has_value(key)) { value = entry.get_value(key); return true; } return false; } inline static void set(const Glib::RefPtr& settings, const Glib::ustring& key, const std::string& value) { settings->set_string(key, value); } inline static bool equals(const std::string& val1, const std::string& val2) { return val1 == val2; } }; template<> struct SettingTraits { inline static Pango::FontDescription get(const Glib::RefPtr& settings, const Glib::ustring& key) { return Pango::FontDescription( settings->get_string(key)); } inline static bool get_from_entry(const Config::ParentEntry& entry, const Glib::ustring& key, Pango::FontDescription& value) { if(entry.has_value(key)) { value = Pango::FontDescription( entry.get_value(key)); return true; } return false; } inline static void set(const Glib::RefPtr& settings, const Glib::ustring& key, const Pango::FontDescription& value) { settings->set_string(key, value.to_string()); } inline static bool equals(const Pango::FontDescription& val1, const Pango::FontDescription& val2) { return val1 == val2; } }; template<> struct SettingTraits { inline static InfKeepalive get(const Glib::RefPtr& settings, const Glib::ustring& key) { // Decode (asbuu) Glib::VariantBase base; settings->get_value(key, base); Glib::VariantContainerBase container = Glib::VariantBase::cast_dynamic< Glib::VariantContainerBase>(base); Glib::Variant > mask = Glib::VariantBase::cast_dynamic< Glib::Variant > >( container.get_child(0)); Glib::Variant enabled = Glib::VariantBase::cast_dynamic< Glib::Variant >( container.get_child(1)); Glib::Variant interval = Glib::VariantBase::cast_dynamic< Glib::Variant >( container.get_child(2)); Glib::Variant time = Glib::VariantBase::cast_dynamic< Glib::Variant >( container.get_child(3)); InfKeepalive keepalive; keepalive.mask = static_cast(0); std::vector mask_values = mask.get(); GFlagsClass* klass = G_FLAGS_CLASS( g_type_class_ref(INF_TYPE_KEEPALIVE_MASK)); for(std::vector::const_iterator iter = mask_values.begin(); iter != mask_values.end(); ++iter) { guint i; for(i = 0; i < klass->n_values; ++i) { const int is_all = strcmp( klass->values[i].value_nick, "all"); if(is_all == 0) continue; if(*iter == klass->values[i].value_nick) break; } if(i == klass->n_values) { g_type_class_unref(klass); throw std::runtime_error( Glib::ustring::compose( _("'%1' is not a valid " "keepalive mask value"), *iter)); } keepalive.mask = static_cast( static_cast(keepalive.mask) | klass->values[i].value); } g_type_class_unref(klass); keepalive.enabled = enabled.get(); keepalive.time = time.get(); keepalive.interval = interval.get(); return keepalive; } inline static bool get_from_entry(const Config::ParentEntry& entry, const Glib::ustring& key, InfKeepalive& value) { bool result = false; if(entry.has_value(key + "-mask")) { value.mask = static_cast( entry.get_value(key + "-mask")); result = true; } if(entry.has_value(key + "-enabled")) { value.enabled = entry.get_value( key + "-enabled"); result = true; } if(entry.has_value(key + "-time")) { value.time = entry.get_value( key + "-time"); result = true; } if(entry.has_value(key + "-interval")) { value.interval = entry.get_value( key + "-interval"); result = true; } return result; } inline static void set(const Glib::RefPtr& settings, const Glib::ustring& key, const InfKeepalive& value) { std::vector mask_values; GFlagsClass* klass = G_FLAGS_CLASS( g_type_class_ref(INF_TYPE_KEEPALIVE_MASK)); for(guint i = 0; i < klass->n_values; ++i) { if(strcmp(klass->values[i].value_nick, "all") == 0) continue; const guint mask = static_cast(value.mask); if(mask & klass->values[i].value) { mask_values.push_back( klass->values[i].value_nick); } } g_type_class_unref(klass); Glib::Variant > mask = Glib::Variant >::create( mask_values); Glib::Variant enabled = Glib::Variant::create(value.enabled); Glib::Variant time = Glib::Variant::create(value.time); Glib::Variant interval = Glib::Variant::create(value.interval); std::vector tuple_children; tuple_children.push_back(mask); tuple_children.push_back(enabled); tuple_children.push_back(time); tuple_children.push_back(interval); Glib::VariantContainerBase entry = Glib::VariantContainerBase::create_tuple( tuple_children); settings->set_value(key, entry); } inline static bool equals(const InfKeepalive& val1, const InfKeepalive& val2) { return val1.mask == val2.mask && val1.enabled == val2.enabled && val1.time == val2.time && val1.interval == val2.interval; } }; template struct SettingTraitsEnum { inline static EnumType get(const Glib::RefPtr& settings, const Glib::ustring& key) { return static_cast(settings->get_enum(key)); } inline static bool get_from_entry(const Config::ParentEntry& entry, const Glib::ustring& key, EnumType& value) { if(entry.has_value(key)) { value = static_cast( entry.get_value(key)); return true; } return false; } inline static void set(const Glib::RefPtr& settings, const Glib::ustring& key, const EnumType& value) { g_settings_set_enum( settings->gobj(), key.c_str(), static_cast(value)); } inline static bool equals(const EnumType& val1, const EnumType& val2) { return val1 == val2; } }; template struct SettingTraitsFlags { inline static FlagsType get(const Glib::RefPtr& settings, const Glib::ustring& key) { return static_cast(settings->get_flags(key)); } inline static bool get_from_entry(const Config::ParentEntry& entry, const Glib::ustring& key, FlagsType& value) { if(entry.has_value(key)) { value = static_cast( entry.get_value(key)); return true; } return false; } inline static void set(const Glib::RefPtr& settings, const Glib::ustring& key, const FlagsType& value) { g_settings_set_flags( settings->gobj(), key.c_str(), static_cast(value)); } inline static bool equals(const FlagsType& val1, const FlagsType& val2) { return val1 == val2; } }; template<> struct SettingTraits: SettingTraitsEnum {}; template<> struct SettingTraits: SettingTraitsEnum {}; template<> struct SettingTraits: SettingTraitsEnum {}; template<> struct SettingTraits: SettingTraitsFlags {}; class Preferences { public: // TODO: This class should handle writability template class Option { public: typedef sigc::signal signal_changed_type; Option(const Type& initial_value): m_value(initial_value), m_changed_handler(0) {} // TODO: Remove this constructor Option(const Glib::RefPtr& settings, const Glib::ustring& key): m_settings(settings), m_key(key), m_value(SettingTraits::get(settings, key)) { m_changed_handler = g_signal_connect( G_OBJECT(settings->gobj()), Glib::ustring::compose( "changed::%1", key).c_str(), G_CALLBACK(on_changed_static), this); } Option(const Glib::RefPtr& settings, const Config::ParentEntry& entry, const Glib::ustring& key): m_settings(settings), m_key(key), m_value(SettingTraits::get(settings, key)) { m_changed_handler = g_signal_connect( G_OBJECT(settings->gobj()), Glib::ustring::compose( "changed::%1", key).c_str(), G_CALLBACK(on_changed_static), this); if(SettingTraits::get_from_entry(entry, key, m_value)) set_settings(); } ~Option() { if(m_changed_handler != 0) { g_signal_handler_disconnect( m_settings->gobj(), m_changed_handler); } } bool is_default() const { Glib::VariantBase current_variant; Glib::VariantBase default_variant; m_settings->get_value(m_key, current_variant); m_settings->get_default_value(m_key, default_variant); return current_variant.equal(default_variant); } const Option& operator=(const Type& new_value) { m_value = new_value; notify(); return *this; } void set(const Type& new_value) { *this = new_value; } const Type& get() const { return m_value; } operator const Type&() const { return m_value; } /*operator Type&() { return m_value; }*/ signal_changed_type signal_changed() const { return m_signal_changed; } private: static void on_changed_static(GSettings* settings, const gchar* key, gpointer user_data) { static_cast(user_data)->on_changed(); } void on_changed() { const Type new_value( SettingTraits::get(m_settings, m_key)); if(!SettingTraits::equals(new_value, m_value)) { m_value = new_value; m_signal_changed.emit(); } } void notify() const { // Notify GSettings about the changed value set_settings(); // Notify other users about the changed value m_signal_changed.emit(); } void set_settings() const { if(m_settings) { g_signal_handler_block(m_settings->gobj(), m_changed_handler); SettingTraits::set( m_settings, m_key, m_value); g_signal_handler_unblock(m_settings->gobj(), m_changed_handler); } } protected: Glib::RefPtr m_settings; const Glib::ustring m_key; gulong m_changed_handler; Type m_value; signal_changed_type m_signal_changed; }; Preferences(Config& m_config); class User { public: User(const Glib::RefPtr& settings, Config::ParentEntry& entry); Option name; Option hue; Option alpha; Option show_remote_cursors; Option show_remote_selections; Option show_remote_current_lines; Option show_remote_cursor_positions; Option allow_remote_access; Option require_password; Option password; Option port; Option keep_local_documents; Option host_directory; }; class Editor { public: Editor(const Glib::RefPtr& settings, Config::ParentEntry& entry); Option tab_width; Option tab_spaces; Option indentation_auto; Option homeend_smart; Option autosave_enabled; Option autosave_interval; }; class View { public: View(const Glib::RefPtr& settings, Config::ParentEntry& entry); Option wrap_mode; Option linenum_display; Option curline_highlight; Option margin_display; Option margin_pos; Option bracket_highlight; Option whitespace_display; }; class Appearance { public: Appearance(const Glib::RefPtr& settings, Config::ParentEntry& entry); // TODO: Option use_system_default_toolbar_style // (sets toolbar_style to default). Option toolbar_style; Option font; Option scheme_id; Option show_toolbar; Option show_statusbar; Option show_browser; Option show_chat; Option show_document_userlist; Option show_chat_userlist; }; class Security { public: Security(const Glib::RefPtr& settings, Config::ParentEntry& entry); Option use_system_trust; Option trusted_cas; Option policy; Option authentication_enabled; Option certificate_file; Option key_file; }; class Network { public: Network(const Glib::RefPtr& settings, Config::ParentEntry& entry); Option keepalive; }; private: Glib::RefPtr m_settings; public: User user; Editor editor; View view; Appearance appearance; Security security; Network network; }; template std::ostream& operator<<(std::ostream& stream, const Preferences::Option& option) { stream << static_cast(option); return stream; } } #endif // _GOBBY_PREFERENCES_HPP_ gobby-0.6.0/code/core/textsessionview.cpp0000664000175000017500000004740414003367605015410 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/gobject/gobby-undo-manager.h" #include "core/textsessionview.hpp" #include "util/i18n.hpp" #include #include #include #include #include #include #include // TODO: Put all the preferences handling into an extra class namespace { GtkWrapMode wrap_mode_from_preferences(const Gobby::Preferences& pref) { return static_cast( static_cast(pref.view.wrap_mode)); } bool glob_matches(const gchar* const* globs, const std::string& str) { if(globs) { for(const gchar* const* glob = globs; *glob != NULL; ++ glob) { Glib::PatternSpec spec(*glob); if(spec.match(str)) return true; } } return false; } bool language_matches_title(GtkSourceLanguage* language, const gchar* title) { bool result = false; gchar** globs = gtk_source_language_get_globs(language); if(glob_matches(globs, title)) result = true; g_strfreev(globs); return result; } GtkSourceLanguage* get_language_for_title(GtkSourceLanguageManager* manager, const gchar* title) { const gchar* const* ids = gtk_source_language_manager_get_language_ids(manager); if(ids) { for(const gchar* const* id = ids; *id != NULL; ++ id) { GtkSourceLanguage* l; l = gtk_source_language_manager_get_language( manager, *id); if(l) if(language_matches_title(l, title)) return l; } } return NULL; } bool tags_priority_idle_func(Gobby::TextSessionView& view) { InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer( INF_SESSION(view.get_session()))); inf_text_gtk_buffer_ensure_author_tags_priority(buffer); // I don't know why it does not redraw automatically, perhaps // this is a bug. gtk_widget_queue_draw(GTK_WIDGET(view.get_text_view())); return false; } void on_tag_added(GtkTextTagTable* table, GtkTextTag* tag, gpointer user_data) { // We do the actual reordering in an idle handler because // the priority of the tag might not yet be set to its final // value. Glib::signal_idle().connect( sigc::bind( sigc::ptr_fun(tags_priority_idle_func), sigc::ref( *static_cast( user_data)))); } } Gobby::TextSessionView::TextSessionView(InfTextSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, const std::string& info_storage_key, Preferences& preferences, GtkSourceLanguageManager* manager): SessionView(INF_SESSION(session), title, path, hostname), m_info_storage_key(info_storage_key), m_preferences(preferences), m_view(GTK_SOURCE_VIEW(gtk_source_view_new())) { InfBuffer* buffer = inf_session_get_buffer(INF_SESSION(session)); InfUserTable* user_table = inf_session_get_user_table(INF_SESSION(session)); m_buffer = GTK_SOURCE_BUFFER(inf_text_gtk_buffer_get_text_buffer( INF_TEXT_GTK_BUFFER(buffer))); m_infview = inf_text_gtk_view_new( inf_adopted_session_get_io(INF_ADOPTED_SESSION(session)), GTK_TEXT_VIEW(m_view), user_table); g_signal_connect_after( G_OBJECT(m_view), "style-updated", G_CALLBACK(on_view_style_updated_static), this); // This is a hack to make sure that the author tags in the textview // have lowest priority of all tags, especially lower than // GtkSourceView's FIXME tags. We do this every time a new tag is // added to the tag table since GtkSourceView seems to create tags // that it needs on the fly. GtkTextTagTable* table = gtk_text_buffer_get_tag_table( GTK_TEXT_BUFFER(m_buffer)); g_signal_connect(G_OBJECT(table), "tag-added", G_CALLBACK(on_tag_added), this); gtk_widget_set_has_tooltip(GTK_WIDGET(m_view), TRUE); g_signal_connect(m_view, "query-tooltip", G_CALLBACK(on_query_tooltip_static), this); gtk_source_buffer_set_style_scheme( m_buffer, gtk_source_style_scheme_manager_get_scheme( gtk_source_style_scheme_manager_get_default(), static_cast( preferences.appearance.scheme_id).c_str())); gtk_text_view_set_buffer(GTK_TEXT_VIEW(m_view), GTK_TEXT_BUFFER(m_buffer)); gtk_text_view_set_editable(GTK_TEXT_VIEW(m_view), FALSE); set_language(get_language_for_title(manager, title.c_str())); m_preferences.user.hue.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_user_color_changed)); m_preferences.user.alpha.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_alpha_changed)); m_preferences.user.show_remote_cursors.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_show_remote_cursors_changed)); m_preferences.user.show_remote_selections.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_show_remote_selections_changed)); m_preferences.user.show_remote_current_lines.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_show_remote_current_lines_changed)); m_preferences.user.show_remote_cursor_positions.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_show_remote_cursor_positions_changed)); m_preferences.editor.tab_width.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_tab_width_changed)); m_preferences.editor.tab_spaces.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_tab_spaces_changed)); m_preferences.editor.indentation_auto.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_auto_indent_changed)); m_preferences.editor.homeend_smart.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_homeend_smart_changed)); m_preferences.view.wrap_mode.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_wrap_mode_changed)); m_preferences.view.linenum_display.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_linenum_display_changed)); m_preferences.view.curline_highlight.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_curline_highlight_changed)); m_preferences.view.margin_display.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_margin_display_changed)); m_preferences.view.margin_pos.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_margin_pos_changed)); m_preferences.view.bracket_highlight.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_bracket_highlight_changed)); m_preferences.view.whitespace_display.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_whitespace_display_changed)); m_preferences.appearance.font.signal_changed().connect( sigc::mem_fun(*this, &TextSessionView::on_font_changed)); m_preferences.appearance.scheme_id.signal_changed().connect( sigc::mem_fun(*this, &TextSessionView::on_scheme_changed)); inf_text_gtk_view_set_show_remote_cursors( m_infview, m_preferences.user.show_remote_cursors ); inf_text_gtk_view_set_show_remote_selections( m_infview, m_preferences.user.show_remote_selections ); inf_text_gtk_view_set_show_remote_current_lines( m_infview, m_preferences.user.show_remote_current_lines ); inf_text_gtk_buffer_set_fade( INF_TEXT_GTK_BUFFER(buffer), m_preferences.user.alpha); gtk_source_view_set_tab_width(m_view, m_preferences.editor.tab_width); gtk_source_view_set_insert_spaces_instead_of_tabs( m_view, m_preferences.editor.tab_spaces); gtk_source_view_set_auto_indent( m_view, m_preferences.editor.indentation_auto); gtk_source_view_set_smart_home_end( m_view, m_preferences.editor.homeend_smart ? GTK_SOURCE_SMART_HOME_END_AFTER : GTK_SOURCE_SMART_HOME_END_DISABLED); gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW(m_view), wrap_mode_from_preferences(m_preferences)); gtk_source_view_set_show_line_numbers( m_view, m_preferences.view.linenum_display); gtk_source_view_set_highlight_current_line( m_view, m_preferences.view.curline_highlight); gtk_source_view_set_show_right_margin( m_view, m_preferences.view.margin_display); gtk_source_view_set_right_margin_position( m_view, m_preferences.view.margin_pos); gtk_source_buffer_set_highlight_matching_brackets( m_buffer, m_preferences.view.bracket_highlight); gtk_source_view_set_draw_spaces( m_view, m_preferences.view.whitespace_display); gtk_widget_show(GTK_WIDGET(m_view)); Gtk::ScrolledWindow* scroll = Gtk::manage(new Gtk::ScrolledWindow); scroll->set_shadow_type(Gtk::SHADOW_IN); scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); scroll->set_hexpand(true); scroll->set_vexpand(true); gtk_container_add(GTK_CONTAINER(scroll->gobj()), GTK_WIDGET(m_view)); scroll->show(); m_infviewport = inf_text_gtk_viewport_new(scroll->gobj(), user_table); inf_text_gtk_viewport_set_show_user_markers( m_infviewport, m_preferences.user.show_remote_cursor_positions ); attach_next_to(*scroll, m_info_frame, Gtk::POS_BOTTOM, 1, 1); // Set initial font on_font_changed(); } Gobby::TextSessionView::~TextSessionView() { g_object_unref(m_infview); g_object_unref(m_infviewport); } void Gobby::TextSessionView::get_cursor_position(unsigned int& row, unsigned int& col) const { GtkTextMark* insert_mark = gtk_text_buffer_get_insert(GTK_TEXT_BUFFER(m_buffer)); GtkTextIter iter; gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(m_buffer), &iter, insert_mark); row = gtk_text_iter_get_line(&iter); col = 0; int chars = gtk_text_iter_get_line_offset(&iter); unsigned int tabs = m_preferences.editor.tab_width; // Tab characters expand to more than one column for(gtk_text_iter_set_line_offset(&iter, 0); gtk_text_iter_get_line_offset(&iter) < chars; gtk_text_iter_forward_char(&iter)) { unsigned int width = 1; if(gtk_text_iter_get_char(&iter) == '\t') { unsigned int offset = gtk_text_iter_get_line_offset(&iter); width = (tabs - offset % tabs) % tabs; if(width == 0) width = tabs; } col += width; } } void Gobby::TextSessionView::set_selection(const GtkTextIter* begin, const GtkTextIter* end) { gtk_text_buffer_select_range( gtk_text_view_get_buffer(GTK_TEXT_VIEW(m_view)), begin, end); scroll_to_cursor_position(0.1); } Glib::ustring Gobby::TextSessionView::get_selected_text() const { GtkTextIter start, end; gtk_text_buffer_get_selection_bounds( gtk_text_view_get_buffer(GTK_TEXT_VIEW(m_view)), &start, &end); Gtk::TextIter start_cpp(&start), end_cpp(&end); return start_cpp.get_slice(end_cpp); } void Gobby::TextSessionView::scroll_to_cursor_position(double within_margin) { gtk_text_view_scroll_to_mark( GTK_TEXT_VIEW(m_view), gtk_text_buffer_get_insert(gtk_text_view_get_buffer( GTK_TEXT_VIEW(m_view))), within_margin, FALSE, 0.0, 0.0); } InfUser* Gobby::TextSessionView::get_active_user() const { InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(INF_SESSION(m_session))); return INF_USER(inf_text_gtk_buffer_get_active_user(buffer)); } void Gobby::TextSessionView::set_active_user(InfTextUser* user) { g_assert( user == NULL || inf_user_table_lookup_user_by_id( inf_session_get_user_table(INF_SESSION(m_session)), inf_user_get_id(INF_USER(user))) == INF_USER(user)); inf_text_gtk_buffer_set_active_user( INF_TEXT_GTK_BUFFER( inf_session_get_buffer(INF_SESSION(m_session))), user); inf_text_gtk_view_set_active_user(m_infview, user); inf_text_gtk_viewport_set_active_user(m_infviewport, user); // TODO: Make sure the active user has the color specified in the // preferences, and set color if not. if(user != NULL) gtk_text_view_set_editable(GTK_TEXT_VIEW(m_view), TRUE); else gtk_text_view_set_editable(GTK_TEXT_VIEW(m_view), FALSE); active_user_changed(INF_USER(user)); if(user != NULL) { m_undo_grouping.reset( new TextUndoGrouping( inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION(m_session)), user, GTK_TEXT_BUFFER(m_buffer))); GobbyUndoManager* undo_manager = gobby_undo_manager_new( INF_TEXT_SESSION(m_session), m_undo_grouping->get_inf_grouping()); gtk_source_buffer_set_undo_manager( m_buffer, GTK_SOURCE_UNDO_MANAGER(undo_manager)); g_object_unref(undo_manager); } else { m_undo_grouping.reset(NULL); gtk_source_buffer_set_undo_manager(m_buffer, NULL); } } GtkSourceLanguage* Gobby::TextSessionView::get_language() const { return gtk_source_buffer_get_language(m_buffer); } void Gobby::TextSessionView::set_language(GtkSourceLanguage* language) { gtk_source_buffer_set_language(m_buffer, language); m_signal_language_changed.emit(language); } void Gobby::TextSessionView::on_user_color_changed() { InfTextUser* user = INF_TEXT_USER(get_active_user()); if(user) { inf_text_session_set_user_color(get_session(), user, m_preferences.user.hue); } } void Gobby::TextSessionView::on_alpha_changed() { InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(INF_SESSION(m_session))); inf_text_gtk_buffer_set_fade( buffer, m_preferences.user.alpha); } void Gobby::TextSessionView::on_show_remote_cursors_changed() { inf_text_gtk_view_set_show_remote_cursors( m_infview, m_preferences.user.show_remote_cursors ); } void Gobby::TextSessionView::on_show_remote_selections_changed() { inf_text_gtk_view_set_show_remote_selections( m_infview, m_preferences.user.show_remote_selections ); } void Gobby::TextSessionView::on_show_remote_current_lines_changed() { inf_text_gtk_view_set_show_remote_current_lines( m_infview, m_preferences.user.show_remote_current_lines ); } void Gobby::TextSessionView::on_show_remote_cursor_positions_changed() { inf_text_gtk_viewport_set_show_user_markers( m_infviewport, m_preferences.user.show_remote_cursor_positions ); } void Gobby::TextSessionView::on_tab_width_changed() { gtk_source_view_set_tab_width(m_view, m_preferences.editor.tab_width); } void Gobby::TextSessionView::on_tab_spaces_changed() { gtk_source_view_set_insert_spaces_instead_of_tabs( m_view, m_preferences.editor.tab_spaces); } void Gobby::TextSessionView::on_auto_indent_changed() { gtk_source_view_set_auto_indent( m_view, m_preferences.editor.indentation_auto); } void Gobby::TextSessionView::on_homeend_smart_changed() { gtk_source_view_set_smart_home_end( m_view, m_preferences.editor.homeend_smart ? GTK_SOURCE_SMART_HOME_END_AFTER : GTK_SOURCE_SMART_HOME_END_DISABLED); } void Gobby::TextSessionView::on_wrap_mode_changed() { gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW(m_view), wrap_mode_from_preferences(m_preferences)); } void Gobby::TextSessionView::on_linenum_display_changed() { gtk_source_view_set_show_line_numbers( m_view, m_preferences.view.linenum_display); } void Gobby::TextSessionView::on_curline_highlight_changed() { gtk_source_view_set_highlight_current_line( m_view, m_preferences.view.curline_highlight); } void Gobby::TextSessionView::on_margin_display_changed() { gtk_source_view_set_show_right_margin( m_view, m_preferences.view.margin_display); } void Gobby::TextSessionView::on_margin_pos_changed() { gtk_source_view_set_right_margin_position( m_view, m_preferences.view.margin_pos); } void Gobby::TextSessionView::on_bracket_highlight_changed() { gtk_source_buffer_set_highlight_matching_brackets( m_buffer, m_preferences.view.bracket_highlight); } void Gobby::TextSessionView::on_whitespace_display_changed() { gtk_source_view_set_draw_spaces( m_view, m_preferences.view.whitespace_display); } void Gobby::TextSessionView::on_font_changed() { const Pango::FontDescription& desc = m_preferences.appearance.font; if(!m_font_provider) { m_font_provider = Gtk::CssProvider::create(); get_style_context()->add_provider( m_font_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); } const Glib::ustring font_style = Glib::ustring::compose( "* {\n" " font-size: %1pt;\n" " font-family: \"%2\";\n" " font-weight: %3;\n" "}", desc.get_size() / PANGO_SCALE, desc.get_family(), desc.get_weight()); try { m_font_provider->load_from_data(font_style); } catch (const Glib::Error& ex) { g_warning("Failed to apply font settings: %s", ex.what().c_str()); } } void Gobby::TextSessionView::on_scheme_changed() { gtk_source_buffer_set_style_scheme( m_buffer, gtk_source_style_scheme_manager_get_scheme( gtk_source_style_scheme_manager_get_default(), static_cast( m_preferences.appearance.scheme_id).c_str())); } bool Gobby::TextSessionView:: on_query_tooltip(int x, int y, bool keyboard_mode, const Glib::RefPtr& tooltip) { if(keyboard_mode) return false; int buffer_x, buffer_y; gtk_text_view_window_to_buffer_coords( GTK_TEXT_VIEW(m_view), GTK_TEXT_WINDOW_WIDGET, x, y, &buffer_x, &buffer_y); // Pointer is in line number display if(buffer_x < 0) return false; // Get the character at the mouse position GtkTextIter iter; int trailing; gtk_text_view_get_iter_at_position( GTK_TEXT_VIEW(m_view), &iter, &trailing, buffer_x, buffer_y); // Don't show a tooltip if the character is a newline character */ //if(gtk_text_iter_is_end(&iter)) return false; if(gtk_text_iter_ends_line(&iter)) return false; // Don't show a tooltip if we are past the end of the line GdkRectangle newline_location; GtkTextIter line_end = iter; gtk_text_iter_forward_to_line_end(&line_end); gtk_text_view_get_iter_location( GTK_TEXT_VIEW(m_view), &line_end, &newline_location); if(buffer_x >= newline_location.x && buffer_y >= newline_location.y) { return false; } InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(INF_SESSION(m_session))); InfTextUser* author = inf_text_gtk_buffer_get_author(buffer, &iter); if(author != NULL) { tooltip->set_markup(Glib::ustring::compose( _("Text written by %1"), Glib::Markup::escape_text( inf_user_get_name(INF_USER(author))))); } else { tooltip->set_text(_("Unowned text")); } return true; } void Gobby::TextSessionView::on_view_style_updated() { GtkStyleContext* style = gtk_widget_get_style_context(GTK_WIDGET(m_view)); g_assert(style != NULL); // Get the view background, not the one for the side panels: gtk_style_context_save(style); gtk_style_context_add_class(style, GTK_STYLE_CLASS_VIEW); GdkRGBA rgba; gtk_style_context_get_background_color( style, GTK_STATE_FLAG_NORMAL, &rgba); gtk_style_context_restore(style); // Convert background color to HSV double h, s, v; gtk_rgb_to_hsv(rgba.red, rgba.green, rgba.blue, &h, &s, &v); // Adjust S and V for authorship colors s = s * 0.5 + 0.3; v = (std::pow(v + 1, 3) - 1) / 7 * 0.6 + 0.4; InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(INF_SESSION(m_session))); inf_text_gtk_buffer_set_saturation_value(buffer, s, v); } gobby-0.6.0/code/core/sessionuserview.hpp0000664000175000017500000000346114003367605015402 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SESSIONUSERVIEW_HPP_ #define _GOBBY_SESSIONUSERVIEW_HPP_ #include "core/sessionview.hpp" #include "core/preferences.hpp" #include "core/userlist.hpp" #include // Shows a sessionview with a userlist on the right hand side of it namespace Gobby { class SessionUserView: public Gtk::HPaned { public: SessionUserView(SessionView& view, bool show_disconnected, Preferences::Option& userlist_view, Preferences::Option& userlist_width); SessionView& get_session_view() const { return m_view; } protected: virtual void on_size_allocate(Gtk::Allocation& allocation); void on_doc_userlist_width_changed(); void on_pref_userlist_width_changed(); SessionView& m_view; Preferences::Option& m_userlist_width; UserList m_userlist; sigc::connection m_doc_userlist_width_changed_connection; sigc::connection m_pref_userlist_width_changed_connection; }; } #endif // _GOBBY_SESSIONUSERVIEW_HPP_ gobby-0.6.0/code/core/noteplugin.cpp0000664000175000017500000001327014003367605014303 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/noteplugin.hpp" #include #include #include #include #include #include #include #include #include #include namespace { InfTextBuffer* make_buffer(InfUserTable* user_table) { GtkSourceBuffer* textbuffer = gtk_source_buffer_new(NULL); InfTextGtkBuffer* buffer = inf_text_gtk_buffer_new(GTK_TEXT_BUFFER(textbuffer), user_table); g_object_unref(textbuffer); return INF_TEXT_BUFFER(buffer); } InfSession* text_session_new(InfIo* io, InfCommunicationManager* manager, InfSessionStatus status, InfCommunicationGroup* sync_group, InfXmlConnection* sync_connection, const gchar* path, gpointer user_data) { InfUserTable* user_table = inf_user_table_new(); InfTextBuffer* buffer = make_buffer(user_table); InfTextSession* session = inf_text_session_new_with_user_table( manager, INF_TEXT_BUFFER(buffer), io, user_table, status, sync_group, sync_connection); g_object_unref(buffer); g_object_unref(user_table); return INF_SESSION(session); } InfSession* text_session_read(InfdStorage* storage, InfIo* io, InfCommunicationManager* manager, const gchar* path, gpointer user_data, GError** error) { InfUserTable* user_table = inf_user_table_new(); InfTextBuffer* buffer = make_buffer(user_table); const gboolean result = inf_text_filesystem_format_read( INFD_FILESYSTEM_STORAGE(storage), path, user_table, buffer, error); InfTextSession* session = NULL; if(result) { session = inf_text_session_new_with_user_table( manager, buffer, io, user_table, INF_SESSION_RUNNING, NULL, NULL); } g_object_unref(buffer); g_object_unref(user_table); return INF_SESSION(session); } gboolean text_session_write(InfdStorage* storage, InfSession* session, const gchar* path, gpointer user_data, GError** error) { return inf_text_filesystem_format_write( INFD_FILESYSTEM_STORAGE(storage), path, inf_session_get_user_table(session), INF_TEXT_BUFFER(inf_session_get_buffer(session)), error ); } InfSession* chat_session_new(InfIo* io, InfCommunicationManager* manager, InfSessionStatus status, InfCommunicationGroup* sync_group, InfXmlConnection* sync_connection, const gchar* path, gpointer user_data) { InfChatBuffer* buffer = inf_chat_buffer_new(256); InfChatSession* session = inf_chat_session_new( manager, buffer, status, sync_group, sync_connection); g_object_unref(buffer); return INF_SESSION(session); } InfSession* chat_session_read(InfdStorage* storage, InfIo* io, InfCommunicationManager* manager, const gchar* path, gpointer user_data, GError** error) { InfChatBuffer* buffer = inf_chat_buffer_new(256); const gboolean result = infd_chat_filesystem_format_read( INFD_FILESYSTEM_STORAGE(storage), path, buffer, error); InfChatSession* session = NULL; if(result) { session = inf_chat_session_new( manager, buffer, INF_SESSION_RUNNING, NULL, NULL); } g_object_unref(buffer); return INF_SESSION(session); } gboolean chat_session_write(InfdStorage* storage, InfSession* session, const gchar* path, gpointer user_data, GError** error) { return infd_chat_filesystem_format_write( INFD_FILESYSTEM_STORAGE(storage), path, INF_CHAT_BUFFER(inf_session_get_buffer(session)), error ); } const InfcNotePlugin C_TEXT_PLUGIN = { NULL, "InfText", text_session_new }; const InfcNotePlugin C_CHAT_PLUGIN = { NULL, "InfChat", chat_session_new }; const InfdNotePlugin D_TEXT_PLUGIN = { NULL, "InfdFilesystemStorage", "InfText", text_session_new, text_session_read, text_session_write }; const InfdNotePlugin D_CHAT_PLUGIN = { NULL, "InfdFilesystemStorage", "InfChat", chat_session_new, chat_session_read, chat_session_write }; } const InfcNotePlugin* Gobby::Plugins::C_TEXT = &C_TEXT_PLUGIN; const InfcNotePlugin* Gobby::Plugins::C_CHAT = &C_CHAT_PLUGIN; const InfdNotePlugin* Gobby::Plugins::D_TEXT = &D_TEXT_PLUGIN; const InfdNotePlugin* Gobby::Plugins::D_CHAT = &D_CHAT_PLUGIN; gobby-0.6.0/code/core/tablabel.cpp0000664000175000017500000001042414003367605013663 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/tablabel.hpp" #include "core/folder.hpp" Gobby::TabLabel::TabLabel(Folder& folder, SessionView& view, const Glib::ustring& active_icon_name): m_folder(folder), m_view(view), m_title(view.get_title()), m_changed(false), m_active_icon_name(active_icon_name) { set_column_spacing(6); m_title.set_halign(Gtk::ALIGN_START); update_icon(); update_color(); m_icon.show(); m_title.show(); m_button.set_halign(Gtk::ALIGN_END); m_button.show(); view.signal_active_user_changed().connect( sigc::mem_fun(*this, &TabLabel::on_active_user_changed)); m_notify_status_handle = g_signal_connect( G_OBJECT(view.get_session()), "notify::status", G_CALLBACK(on_notify_status_static), this); m_notify_subscription_group_handle = g_signal_connect( G_OBJECT(view.get_session()), "notify::subscription-group", G_CALLBACK(on_notify_subscription_group_static), this); m_folder.signal_document_changed().connect( sigc::mem_fun(*this, &TabLabel::on_folder_document_changed)); attach(m_icon, 0, 0, 1, 1); attach(m_title, 1, 0, 1, 1); attach(m_button, 2, 0, 1, 1); } Gobby::TabLabel::~TabLabel() { g_signal_handler_disconnect(m_view.get_session(), m_notify_status_handle); g_signal_handler_disconnect(m_view.get_session(), m_notify_subscription_group_handle); } void Gobby::TabLabel::on_folder_document_changed(SessionView* view) { if(view == &m_view) on_activate(); } void Gobby::TabLabel::on_active_user_changed(InfUser* user) { update_icon(); } void Gobby::TabLabel::on_notify_status() { update_icon(); update_color(); } void Gobby::TabLabel::on_notify_subscription_group() { update_icon(); update_color(); } void Gobby::TabLabel::on_activate() { m_changed = false; update_color(); } void Gobby::TabLabel::set_changed() { if(m_folder.get_current_document() != &m_view) { m_changed = true; update_color(); } } void Gobby::TabLabel::update_icon() { InfSession* session = INF_SESSION(m_view.get_session()); if(inf_session_get_subscription_group(session) == NULL) { m_icon.set_from_icon_name("network-offline", Gtk::ICON_SIZE_MENU); } else { switch(inf_session_get_status(session)) { case INF_SESSION_PRESYNC: case INF_SESSION_SYNCHRONIZING: // TODO: Switch to process-working, if/when m_icon can // show animations. m_icon.set_from_icon_name("system-run", Gtk::ICON_SIZE_MENU); break; case INF_SESSION_RUNNING: if(m_view.get_active_user() != NULL) { m_icon.set_from_icon_name(m_active_icon_name, Gtk::ICON_SIZE_MENU); } else { m_icon.set_from_icon_name("text-x-generic", Gtk::ICON_SIZE_MENU); } break; case INF_SESSION_CLOSED: m_icon.set_from_icon_name("network-offline", Gtk::ICON_SIZE_MENU); break; } } } void Gobby::TabLabel::update_color() { InfSession* session = INF_SESSION(m_view.get_session()); if(m_changed) { // Document has changed: awareness -> red m_title.override_color(Gdk::RGBA("#c00000")); } else if(inf_session_get_subscription_group(session) == NULL || inf_session_get_status(session) != INF_SESSION_RUNNING) { // Document disconnected or not yet running // (most probably synchronizing): not (yet) available -> grey m_title.override_color(Gdk::RGBA("#606060")); } else { // Otherwise default m_title.unset_color(); } } gobby-0.6.0/code/core/closableframe.hpp0000664000175000017500000000270314003367605014722 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CLOSABLE_FRAME_HPP_ #define _GOBBY_CLOSABLE_FRAME_HPP_ #include "core/preferences.hpp" #include #include namespace Gobby { class ClosableFrame: public Gtk::Frame { public: ClosableFrame(const Glib::ustring& title, const Glib::ustring& icon_name, Preferences::Option& option); void set_allow_visible(bool allow_visible); protected: virtual void on_add(Gtk::Widget* widget); void on_clicked(); void on_option(); Preferences::Option& m_option; Gtk::Grid m_grid; bool m_allow_visible; }; } #endif // _GOBBY_CLOSABLE_FRAME_HPP_ gobby-0.6.0/code/core/sessionview.hpp0000664000175000017500000000433514003367605014504 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SESSIONVIEW_HPP_ #define _GOBBY_SESSIONVIEW_HPP_ #include "util/closebutton.hpp" #include #include #include #include namespace Gobby { class SessionView: public Gtk::Grid { public: typedef sigc::signal SignalActiveUserChanged; SessionView(InfSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname); virtual ~SessionView(); const InfSession* get_session() const { return m_session; } InfSession* get_session() { return m_session; } const Glib::ustring& get_title() const { return m_title; } const Glib::ustring& get_path() const { return m_path; } const Glib::ustring& get_hostname() const { return m_hostname; } void set_info(const Glib::ustring& info, bool closable); void unset_info(); virtual InfUser* get_active_user() const; SignalActiveUserChanged signal_active_user_changed() const { return m_signal_active_user_changed; } protected: void active_user_changed(InfUser* new_user); InfSession* m_session; const Glib::ustring m_title; const Glib::ustring m_path; const Glib::ustring m_hostname; Gtk::Frame m_info_frame; Gtk::Grid m_info_grid; CloseButton m_info_close_button; Gtk::Label m_info_label; private: SignalActiveUserChanged m_signal_active_user_changed; }; } #endif // _GOBBY_SESSIONVIEW_HPP_ gobby-0.6.0/code/core/huebutton.hpp0000664000175000017500000000336614003367605014146 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_HUE_BUTTON_HPP_ #define _GOBBY_HUE_BUTTON_HPP_ #include #include #include #include namespace Gobby { // TODO: This should go to libinftextgtk as InfTextGtkHueButton, // inheriting directly from GtkButton to provide a clean API. class HueButton: public Gtk::ColorButton { public: HueButton(GtkColorButton* cobject, const Glib::RefPtr& builder); HueButton(const Glib::ustring& title); double get_hue() const; double get_saturation() const; double get_value() const; void set_hue(double hue); void set_saturation(double saturation); void set_value(double value); protected: virtual void on_clicked(); void on_parent_hide(); void on_dialog_response(int response_id); std::unique_ptr m_dialog; GtkWidget* m_hue_chooser; double m_saturation; double m_value; }; } #endif // _GOBBY_HUE_BUTTON_HPP_ gobby-0.6.0/code/core/documentinfostorage.cpp0000664000175000017500000002136514003367605016202 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/documentinfostorage.hpp" #include "util/file.hpp" #include "features.hpp" #include #include #include #include namespace { Gobby::DocumentInfoStorage::EolStyle eol_style_from_text(const std::string& text) { if(text == "cr") return Gobby::DocumentInfoStorage::EOL_CR; if(text == "lf") return Gobby::DocumentInfoStorage::EOL_LF; if(text == "crlf") return Gobby::DocumentInfoStorage::EOL_CRLF; // Fallback: return Gobby::DocumentInfoStorage::EOL_LF; } std::string eol_style_to_text(Gobby::DocumentInfoStorage::EolStyle style) { switch(style) { case Gobby::DocumentInfoStorage::EOL_CR: return "cr"; case Gobby::DocumentInfoStorage::EOL_LF: return "lf"; case Gobby::DocumentInfoStorage::EOL_CRLF: return "crlf"; default: return "lf"; } } std::string load_document(xmlpp::Element* node, Gobby::DocumentInfoStorage::Info& info) { std::string root; xmlpp::Node::NodeList list = node->get_children(); for(xmlpp::Node::NodeList::iterator iter = list.begin(); iter != list.end(); ++ iter) { xmlpp::Element* child = dynamic_cast(*iter); if(child == NULL) continue; xmlpp::TextNode* text = child->get_child_text(); if(text == NULL) continue; if(child->get_name() == "root") root = text->get_content(); else if(child->get_name() == "uri") info.uri = text->get_content(); else if(child->get_name() == "eol-style") info.eol_style = eol_style_from_text( text->get_content()); else if(child->get_name() == "encoding") info.encoding = text->get_content(); } return root; } // Location to store the documents file: std::string filename() { return Gobby::config_filename("documents.xml"); } } class Gobby::DocumentInfoStorage::BrowserConn { public: BrowserConn(DocumentInfoStorage& storage, InfBrowser* browser): m_browser(browser) { m_begin_explore_handler = g_signal_connect(G_OBJECT(browser), "begin-request::explore-node", G_CALLBACK(on_begin_request_explore_node_static), &storage); m_node_removed_handler = g_signal_connect(G_OBJECT(browser), "node-removed", G_CALLBACK(on_node_removed_static), &storage); } ~BrowserConn() { g_signal_handler_disconnect(m_browser, m_begin_explore_handler); g_signal_handler_disconnect(m_browser, m_node_removed_handler); } private: InfBrowser* m_browser; gulong m_begin_explore_handler; gulong m_node_removed_handler; }; Gobby::DocumentInfoStorage::DocumentInfoStorage(InfGtkBrowserModel* model): m_model(model) { xmlpp::DomParser parser; try { parser.parse_file(filename()); xmlpp::Document* document = parser.get_document(); if(document) { xmlpp::Element* root = document->get_root_node(); if(root) { init(root); } } } catch(xmlpp::exception& e) { // Could not read file, ignore } g_object_ref(m_model); m_set_browser_handler = g_signal_connect( G_OBJECT(m_model), "set-browser", G_CALLBACK(&on_set_browser_static), this); } Gobby::DocumentInfoStorage::~DocumentInfoStorage() { try { create_directory_with_parents( Glib::path_get_dirname(filename()), 0700); xmlpp::Document document; xmlpp::Element* root = document.create_root_node("documents"); for(InfoMap::iterator iter = m_infos.begin(); iter != m_infos.end(); ++ iter) { xmlpp::Element* child = root->add_child("document"); xmlpp::Element* root_child = child->add_child("root"); root_child->set_child_text(iter->first); xmlpp::Element* uri_child = child->add_child("uri"); uri_child->set_child_text(iter->second.uri); xmlpp::Element* eol_style_child = child->add_child("eol-style"); eol_style_child->set_child_text( eol_style_to_text(iter->second.eol_style)); xmlpp::Element* encoding_child = child->add_child("encoding"); encoding_child->set_child_text(iter->second.encoding); } document.write_to_file_formatted(filename()); } catch(Glib::Exception& e) { g_warning("Could not write documents file: %s", e.what().c_str()); } catch(std::exception& e) { g_warning("Could not write documents file: %s", e.what()); } g_signal_handler_disconnect(m_model, m_set_browser_handler); g_object_unref(m_model); for(BrowserMap::iterator iter = m_browsers.begin(); iter != m_browsers.end(); ++ iter) { delete iter->second; } } void Gobby::DocumentInfoStorage::init(xmlpp::Element* node) { xmlpp::Node::NodeList list = node->get_children(); for(xmlpp::Node::NodeList::iterator iter = list.begin(); iter != list.end(); ++ iter) { xmlpp::Element* child = dynamic_cast(*iter); if(child == NULL) continue; if(child->get_name() == "document") { Info info; std::string root = load_document(child, info); m_infos[root] = info; } } } std::string Gobby::DocumentInfoStorage::get_key(InfBrowser* browser, const InfBrowserIter* iter) const { std::string prefix; if(INFC_IS_BROWSER(browser)) { InfXmlConnection* connection = infc_browser_get_connection(INFC_BROWSER(browser)); g_assert(connection != NULL); gchar* remote_id; g_object_get( G_OBJECT(connection), "remote-id", &remote_id, NULL); prefix = remote_id; g_free(remote_id); } else { prefix = "selfhosted"; } gchar* path = inf_browser_get_path(browser, iter); std::string result = prefix + "?" + path; g_free(path); return result; } const Gobby::DocumentInfoStorage::Info* Gobby::DocumentInfoStorage::get_info(InfBrowser* browser, const InfBrowserIter* iter) const { return get_info(get_key(browser, iter)); } const Gobby::DocumentInfoStorage::Info* Gobby::DocumentInfoStorage::get_info(const std::string& key) const { InfoMap::const_iterator map_iter = m_infos.find(key); if(map_iter != m_infos.end()) return &map_iter->second; return NULL; } void Gobby::DocumentInfoStorage::set_info(InfBrowser* browser, const InfBrowserIter* iter, const Info& info) { set_info(get_key(browser, iter), info); } void Gobby::DocumentInfoStorage::set_info(const std::string& key, const Info& info) { m_infos[key] = info; } void Gobby::DocumentInfoStorage::on_set_browser(GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser) { if(old_browser != NULL) { BrowserMap::iterator iter = m_browsers.find(old_browser); g_assert(iter != m_browsers.end()); delete iter->second; m_browsers.erase(iter); } if(new_browser != NULL) { g_assert(m_browsers.find(new_browser) == m_browsers.end()); m_browsers[new_browser] = new BrowserConn(*this, new_browser); // TODO: Remove all infos that refer to no longer existing // documents in all explored directories in browser. Also // add all existing explore requests, to check // subdirectories when the explore finishes (see // on_begin_request_explore_node). } } void Gobby::DocumentInfoStorage:: on_begin_request_explore_node(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request) { // TODO: When request has finished, remove all infos that refer to // no longer existing documents in the explored directory. } void Gobby::DocumentInfoStorage::on_node_removed(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request) { // Remove info when the corresponding document is removed. std::string key = get_key(browser, iter); InfoMap::iterator map_iter = m_infos.find(key); if(map_iter != m_infos.end()) m_infos.erase(map_iter); } gobby-0.6.0/code/core/gobject/0000775000175000017500000000000014005504730013077 500000000000000gobby-0.6.0/code/core/gobject/gobby-undo-manager.h0000664000175000017500000000465414003367605016664 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef __GOBBY_UNDO_MANAGER_H__ #define __GOBBY_UNDO_MANAGER_H__ #include #include #include G_BEGIN_DECLS #define GOBBY_TYPE_UNDO_MANAGER (gobby_undo_manager_get_type()) #define GOBBY_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GOBBY_TYPE_UNDO_MANAGER, GobbyUndoManager)) #define GOBBY_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), GOBBY_TYPE_UNDO_MANAGER, GobbyUndoManagerClass)) #define GOBBY_IS_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GOBBY_TYPE_UNDO_MANAGER)) #define GOBBY_IS_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), GOBBY_TYPE_UNDO_MANAGER)) #define GOBBY_UNDO_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), GOBBY_TYPE_UNDO_MANAGER, GobbyUndoManagerClass)) typedef struct _GobbyUndoManager GobbyUndoManager; typedef struct _GobbyUndoManagerClass GobbyUndoManagerClass; /** * GobbyUndoManagerClass: * * This structure does not contain any public fields. */ struct _GobbyUndoManagerClass { /*< private >*/ GObjectClass parent_class; }; /** * GobbyUndoManager: * * #GobbyUndoManager is an opaque data type. You should only access it via the * public API functions. */ struct _GobbyUndoManager { /*< private >*/ GObject parent; }; GType gobby_undo_manager_get_type(void) G_GNUC_CONST; GobbyUndoManager* gobby_undo_manager_new(InfTextSession* session, InfTextUndoGrouping* grouping); G_END_DECLS #endif /* __GOBBY_UNDO_MANAGER_H__ */ /* vim:set et sw=2 ts=2: */ gobby-0.6.0/code/core/gobject/gobby-undo-manager.c0000664000175000017500000002501614003367605016652 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/gobject/gobby-undo-manager.h" #include typedef struct _GobbyUndoManagerPrivate GobbyUndoManagerPrivate; struct _GobbyUndoManagerPrivate { InfTextSession* session; InfTextUndoGrouping* undo_grouping; }; enum { PROP_0, PROP_SESSION, PROP_UNDO_GROUPING }; #define GOBBY_UNDO_MANAGER_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), GOBBY_TYPE_UNDO_MANAGER, GobbyUndoManagerPrivate)) static void gobby_undo_manager_undo_manager_iface_init(GtkSourceUndoManagerIface* iface); G_DEFINE_TYPE_WITH_CODE(GobbyUndoManager, gobby_undo_manager, G_TYPE_OBJECT, G_ADD_PRIVATE(GobbyUndoManager) G_IMPLEMENT_INTERFACE(GTK_SOURCE_TYPE_UNDO_MANAGER, gobby_undo_manager_undo_manager_iface_init)) static void gobby_undo_manager_can_undo_changed_cb(InfAdoptedAlgorithm* algorithm, InfAdoptedUser* user, gboolean can_undo, gpointer user_data) { GobbyUndoManager* undo_manager; GobbyUndoManagerPrivate* priv; undo_manager = GOBBY_UNDO_MANAGER(user_data); priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); InfAdoptedUser* our_user; g_object_get(G_OBJECT(priv->undo_grouping), "user", &our_user, NULL); if(our_user == user) { gtk_source_undo_manager_can_undo_changed( GTK_SOURCE_UNDO_MANAGER(undo_manager) ); } g_object_unref(our_user); } static void gobby_undo_manager_can_redo_changed_cb(InfAdoptedAlgorithm* algorithm, InfAdoptedUser* user, gboolean can_redo, gpointer user_data) { GobbyUndoManager* undo_manager; GobbyUndoManagerPrivate* priv; undo_manager = GOBBY_UNDO_MANAGER(user_data); priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); InfAdoptedUser* our_user; g_object_get(G_OBJECT(priv->undo_grouping), "user", &our_user, NULL); if(our_user == user) { gtk_source_undo_manager_can_redo_changed( GTK_SOURCE_UNDO_MANAGER(undo_manager) ); } g_object_unref(our_user); } static void gobby_undo_manager_set_session(GobbyUndoManager* undo_manager, InfTextSession* session) { GobbyUndoManagerPrivate* priv; InfAdoptedAlgorithm* algorithm; priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); if(priv->session != NULL) { algorithm = inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION(priv->session) ); g_signal_handlers_disconnect_by_func( G_OBJECT(algorithm), G_CALLBACK(gobby_undo_manager_can_undo_changed_cb), undo_manager ); g_signal_handlers_disconnect_by_func( G_OBJECT(algorithm), G_CALLBACK(gobby_undo_manager_can_redo_changed_cb), undo_manager ); g_object_unref(priv->session); } priv->session = session; if(session != NULL) { g_object_ref(session); algorithm = inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION(session) ); g_signal_connect( G_OBJECT(algorithm), "can-undo-changed", G_CALLBACK(gobby_undo_manager_can_undo_changed_cb), undo_manager ); g_signal_connect( G_OBJECT(algorithm), "can-redo-changed", G_CALLBACK(gobby_undo_manager_can_redo_changed_cb), undo_manager ); } } static void gobby_undo_manager_init(GobbyUndoManager* undo_manager) { GobbyUndoManagerPrivate* priv; priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); priv->session = NULL; priv->undo_grouping = NULL; } static void gobby_undo_manager_dispose(GObject* object) { GobbyUndoManager* undo_manager; GobbyUndoManagerPrivate* priv; undo_manager = GOBBY_UNDO_MANAGER(object); priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); gobby_undo_manager_set_session(undo_manager, NULL); if(priv->undo_grouping != NULL) { g_object_unref(priv->undo_grouping); priv->undo_grouping = NULL; } G_OBJECT_CLASS(gobby_undo_manager_parent_class)->dispose(object); } static void gobby_undo_manager_finalize(GObject* object) { G_OBJECT_CLASS(gobby_undo_manager_parent_class)->finalize(object); } static void gobby_undo_manager_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec* pspec) { GobbyUndoManager* undo_manager; GobbyUndoManagerPrivate* priv; undo_manager = GOBBY_UNDO_MANAGER(object); priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); switch(prop_id) { case PROP_SESSION: gobby_undo_manager_set_session( undo_manager, INF_TEXT_SESSION(g_value_get_object(value)) ); break; case PROP_UNDO_GROUPING: if(priv->undo_grouping != NULL) g_object_unref(priv->undo_grouping); priv->undo_grouping = INF_TEXT_UNDO_GROUPING(g_value_dup_object(value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void gobby_undo_manager_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec) { GobbyUndoManager* undo_manager; GobbyUndoManagerPrivate* priv; undo_manager = GOBBY_UNDO_MANAGER(object); priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); switch(prop_id) { case PROP_SESSION: g_value_set_object(value, priv->session); break; case PROP_UNDO_GROUPING: g_value_set_object(value, priv->undo_grouping); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void gobby_undo_manager_class_init(GobbyUndoManagerClass* undo_manager_class) { GObjectClass* object_class; object_class = G_OBJECT_CLASS(undo_manager_class); object_class->dispose = gobby_undo_manager_dispose; object_class->finalize = gobby_undo_manager_finalize; object_class->set_property = gobby_undo_manager_set_property; object_class->get_property = gobby_undo_manager_get_property; g_object_class_install_property( object_class, PROP_SESSION, g_param_spec_object( "session", "Session", "The session on which to operate", INF_TEXT_TYPE_SESSION, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY ) ); g_object_class_install_property( object_class, PROP_UNDO_GROUPING, g_param_spec_object( "undo-grouping", "Undo Grouping", "The undo grouping to use", INF_TEXT_TYPE_UNDO_GROUPING, G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY ) ); } static gboolean gobby_undo_manager_can_undo(GtkSourceUndoManager* manager) { GobbyUndoManager* undo_manager; GobbyUndoManagerPrivate* priv; InfAdoptedAlgorithm* algorithm; InfAdoptedUser* user; gboolean can_undo; undo_manager = GOBBY_UNDO_MANAGER(manager); priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); algorithm = inf_adopted_session_get_algorithm(INF_ADOPTED_SESSION(priv->session)); g_object_get(G_OBJECT(priv->undo_grouping), "user", &user, NULL); can_undo = inf_adopted_algorithm_can_undo(algorithm, user); g_object_unref(user); return can_undo; } static gboolean gobby_undo_manager_can_redo(GtkSourceUndoManager* manager) { GobbyUndoManager* undo_manager; GobbyUndoManagerPrivate* priv; InfAdoptedAlgorithm* algorithm; InfAdoptedUser* user; gboolean can_redo; undo_manager = GOBBY_UNDO_MANAGER(manager); priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); algorithm = inf_adopted_session_get_algorithm(INF_ADOPTED_SESSION(priv->session)); g_object_get(G_OBJECT(priv->undo_grouping), "user", &user, NULL); can_redo = inf_adopted_algorithm_can_redo(algorithm, user); g_object_unref(user); return can_redo; } static void gobby_undo_manager_undo(GtkSourceUndoManager* manager) { GobbyUndoManager* undo_manager; GobbyUndoManagerPrivate* priv; InfAdoptedUser* user; guint n_undo; undo_manager = GOBBY_UNDO_MANAGER(manager); priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); g_object_get(G_OBJECT(priv->undo_grouping), "user", &user, NULL); n_undo = inf_adopted_undo_grouping_get_undo_size( INF_ADOPTED_UNDO_GROUPING(priv->undo_grouping) ); g_assert(n_undo > 0); inf_adopted_session_undo(INF_ADOPTED_SESSION(priv->session), user, n_undo); g_object_unref(user); } static void gobby_undo_manager_redo(GtkSourceUndoManager* manager) { GobbyUndoManager* undo_manager; GobbyUndoManagerPrivate* priv; InfAdoptedUser* user; guint n_redo; undo_manager = GOBBY_UNDO_MANAGER(manager); priv = GOBBY_UNDO_MANAGER_PRIVATE(undo_manager); g_object_get(G_OBJECT(priv->undo_grouping), "user", &user, NULL); n_redo = inf_adopted_undo_grouping_get_redo_size( INF_ADOPTED_UNDO_GROUPING(priv->undo_grouping) ); g_assert(n_redo > 0); inf_adopted_session_redo(INF_ADOPTED_SESSION(priv->session), user, n_redo); g_object_unref(user); } static void gobby_undo_manager_begin_not_undoable_action(GtkSourceUndoManager* manager) { /* Unused */ } static void gobby_undo_manager_end_not_undoable_action(GtkSourceUndoManager* manager) { /* Unused */ } static void gobby_undo_manager_undo_manager_iface_init(GtkSourceUndoManagerIface* iface) { iface->can_undo = gobby_undo_manager_can_undo; iface->can_redo = gobby_undo_manager_can_redo; iface->undo = gobby_undo_manager_undo; iface->redo = gobby_undo_manager_redo; iface->begin_not_undoable_action = gobby_undo_manager_begin_not_undoable_action; iface->end_not_undoable_action = gobby_undo_manager_end_not_undoable_action; } GobbyUndoManager* gobby_undo_manager_new(InfTextSession* session, InfTextUndoGrouping* undo_grouping) { GObject* object; object = g_object_new( GOBBY_TYPE_UNDO_MANAGER, "session", session, "undo-grouping", undo_grouping, NULL ); return GOBBY_UNDO_MANAGER(object); } gobby-0.6.0/code/core/gobject/Makefile.am0000664000175000017500000000017414003367605015063 00000000000000gobby_0_5_SOURCES += \ code/core/gobject/gobby-undo-manager.c noinst_HEADERS += \ code/core/gobject/gobby-undo-manager.h gobby-0.6.0/code/core/folder.cpp0000664000175000017500000002072014003367605013370 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/folder.hpp" #include "core/textsessionuserview.hpp" #include "core/sessionuserview.hpp" #include "core/chattablabel.hpp" #include "core/texttablabel.hpp" #include "util/file.hpp" #include #include #include #include // For std::cerr #include namespace { class KeyMap { public: static const unsigned int nval = ~0u; KeyMap() { m_keyvals[GDK_KEY_0] = 9; m_keyvals[GDK_KEY_1] = 0; m_keyvals[GDK_KEY_2] = 1; m_keyvals[GDK_KEY_3] = 2; m_keyvals[GDK_KEY_4] = 3; m_keyvals[GDK_KEY_5] = 4; m_keyvals[GDK_KEY_6] = 5; m_keyvals[GDK_KEY_7] = 6; m_keyvals[GDK_KEY_8] = 7; m_keyvals[GDK_KEY_9] = 8; } unsigned int lookup(guint key) const { map_type::const_iterator iter = m_keyvals.find(key); if(iter == m_keyvals.end() ) return nval; return iter->second; } private: typedef std::map map_type; map_type m_keyvals; }; void record(InfTextSession* session, const Glib::ustring& title) { std::string dirname = Glib::build_filename( Glib::get_home_dir(), ".infinote-records"); std::string filename = Glib::build_filename( dirname, title + ".record.xml"); try { Gobby::create_directory_with_parents(dirname, 0700); InfAdoptedSessionRecord* record = inf_adopted_session_record_new( INF_ADOPTED_SESSION(session)); GError* error = NULL; inf_adopted_session_record_start_recording( record, filename.c_str(), &error); if(error != NULL) { g_object_unref(record); std::string what = error->message; g_error_free(error); throw std::runtime_error(what); } g_object_set_data_full( G_OBJECT(session), "GOBBY_SESSION_RECORD", record, g_object_unref); } catch(std::exception& ex) { std::cerr << "Failed to create record '" << filename << "': " << ex.what() << std::endl; } } } Gobby::Folder::Folder(bool hide_single_tab, Preferences& preferences, GtkSourceLanguageManager* lang_manager): m_hide_single_tab(hide_single_tab), m_preferences(preferences), m_lang_manager(lang_manager), m_document_userlist_width(Gio::Settings::create( "de.0x539.gobby.state.window"), "document-userlist-width"), m_chat_userlist_width(Gio::Settings::create( "de.0x539.gobby.state.window"), "chat-userlist-width") { set_scrollable(true); set_show_border(false); if(hide_single_tab) set_show_tabs(false); } Gobby::Folder::~Folder() { // Remove all documents explicitely, so that all sessions are closed, // and records finished. while(get_n_pages()) remove_document(get_document(0)); } // TODO: Share common code of add_text_session and add_chat_session Gobby::TextSessionView& Gobby::Folder::add_text_session(InfTextSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, const std::string& info_storage_key) { TextSessionView* view = Gtk::manage( new TextSessionView(session, title, path, hostname, info_storage_key, m_preferences, m_lang_manager)); view->show(); m_signal_document_added.emit(*view); TextSessionUserView* userview = Gtk::manage( new TextSessionUserView( *view, true, m_preferences.appearance.show_document_userlist, m_document_userlist_width)); userview->show(); TabLabel* tablabel = Gtk::manage(new TextTabLabel(*this, *view)); tablabel->signal_close_request().connect( sigc::bind( sigc::mem_fun(*this, &Folder::on_tab_close_request), sigc::ref(*view))); tablabel->show(); append_page(*userview, *tablabel); set_tab_reorderable(*userview, true); // Record the session, for debugging purposes: record(session, title); if(m_hide_single_tab && get_n_pages() > 1) set_show_tabs(true); return *view; } Gobby::ChatSessionView& Gobby::Folder::add_chat_session(InfChatSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname) { ChatSessionView* view = Gtk::manage( new ChatSessionView(session, title, path, hostname, m_preferences)); view->show(); m_signal_document_added.emit(*view); SessionUserView* userview = Gtk::manage( new SessionUserView( *view, false, m_preferences.appearance.show_chat_userlist, m_chat_userlist_width)); userview->show(); TabLabel* tablabel = Gtk::manage( new ChatTabLabel(*this, *view, path != "")); tablabel->signal_close_request().connect( sigc::bind( sigc::mem_fun(*this, &Folder::on_tab_close_request), sigc::ref(*view))); tablabel->show(); append_page(*userview, *tablabel); set_tab_reorderable(*userview, true); if(m_hide_single_tab && get_n_pages() > 1) set_show_tabs(true); return *view; } void Gobby::Folder::remove_document(SessionView& view) { m_signal_document_removed.emit(view); // Finish the record InfSession* session = view.get_session(); g_object_set_data(G_OBJECT(session), "GOBBY_SESSION_RECORD", NULL); g_object_ref(session); // This relies on the sessionuserview being the direct parent of // view - maybe we should make a loop here instead which searches // the folder in the widget hierarchy, to be more robust. remove_page(*view.get_parent()); g_object_unref(session); if(get_n_pages() == 0) m_signal_document_changed.emit(NULL); if(m_hide_single_tab && get_n_pages() <= 1) set_show_tabs(false); } Gobby::SessionView& Gobby::Folder::get_document(unsigned int n) const { const SessionUserView* child = static_cast(get_nth_page(n)); if(!child) throw std::logic_error( "Gobby::Folder::get_document: out of bounds"); return child->get_session_view(); } Gobby::SessionView* Gobby::Folder::lookup_document(InfSession* session) const { const unsigned int n_pages = get_n_pages(); for(unsigned int i = 0; i < n_pages; ++i) if(get_document(i).get_session() == session) return &get_document(i); return NULL; } Gobby::SessionView* Gobby::Folder::get_current_document() const { const SessionUserView* child = static_cast( get_nth_page(get_current_page())); if(!child) return NULL; return &child->get_session_view(); } void Gobby::Folder::switch_to_document(SessionView& document) { // Again, here we rely on document being the direct child of // the SessionUserView... set_current_page(page_num(*document.get_parent())); } void Gobby::Folder::on_tab_close_request(SessionView& view) { if(m_signal_document_close_request.emit(view)) remove_document(view); } void Gobby::Folder::on_switch_page(Gtk::Widget* page, guint page_num) { Notebook::on_switch_page(page, page_num); // SessionUserView& view = // *static_cast(get_nth_page(page_num)); SessionUserView& view = *static_cast(page); m_signal_document_changed.emit(&view.get_session_view()); } bool Gobby::Folder::on_key_press_event(GdkEventKey* event) { static KeyMap keymap; if( (event->state & GDK_MOD1_MASK) == GDK_MOD1_MASK) { unsigned int page = keymap.lookup(event->keyval); if(page != KeyMap::nval) { set_current_page(page); return true; } } if( (event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) == (GDK_CONTROL_MASK | GDK_MOD1_MASK)) { int offset = 0; if(event->keyval == GDK_KEY_Page_Up) offset = -1; if(event->keyval == GDK_KEY_Page_Down) offset = 1; if(offset != 0) { int res = get_current_page() + offset + get_n_pages(); set_current_page(res % get_n_pages() ); return true; } } return false; } gobby-0.6.0/code/core/chattablabel.hpp0000664000175000017500000000315614003367605014534 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CHATTABLABEL_HPP_ #define _GOBBY_CHATTABLABEL_HPP_ #include "core/chatsessionview.hpp" #include "core/tablabel.hpp" namespace Gobby { class ChatTabLabel: public TabLabel { public: ChatTabLabel(Folder& folder, ChatSessionView& view, bool always_show_close_button); ~ChatTabLabel(); protected: static void on_add_message_static(InfChatBuffer* buffer, InfChatBufferMessage* message, gpointer user_data) { static_cast(user_data)-> on_changed(message->user); } virtual void on_notify_subscription_group(); // override void on_changed(InfUser* author); private: const bool m_always_show_close_button; gulong m_add_message_handle; }; } #endif // _GOBBY_CHATTABLABEL_HPP_ gobby-0.6.0/code/core/certificatemanager.hpp0000664000175000017500000000661314003367605015744 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CERTIFICATEMANAGER_HPP_ #define _GOBBY_CERTIFICATEMANAGER_HPP_ #include "core/preferences.hpp" namespace Gobby { class CertificateManager { public: CertificateManager(Preferences& preferences); ~CertificateManager(); gnutls_dh_params_t get_dh_params() const { return m_dh_params; } gnutls_x509_privkey_t get_private_key() const { return m_key; } InfCertificateChain* get_certificates() const { return m_certificates; } void set_dh_params(gnutls_dh_params_t dh_params); void set_private_key(gnutls_x509_privkey_t key, const GError* error); void set_private_key(gnutls_x509_privkey_t key, const char* filename, const GError* error); void set_certificates(gnutls_x509_crt_t* certs, guint n_certs, const GError* error); void set_certificates(gnutls_x509_crt_t* certs, guint n_certs, const char* filename, const GError* error); unsigned int get_n_trusted_cas() const { return m_trust.size(); } const gnutls_x509_crt_t* get_trusted_cas() const { return m_trust.empty() ? NULL : &m_trust[0]; } InfCertificateCredentials* get_credentials() const { return m_credentials; } // If an error occurs with the loading, the error can be // queried here. const GError* get_key_error() const { return m_key_error; } const GError* get_certificate_error() const { return m_certificate_error; } const GError* get_trust_error() const { return m_trust_error; } typedef sigc::signal signal_credentials_changed_type; signal_credentials_changed_type signal_credentials_changed() const { return m_signal_credentials_changed; } protected: Preferences& m_preferences; sigc::connection m_conn_key_file; sigc::connection m_conn_certificate_file; gnutls_dh_params_t m_dh_params; gnutls_x509_privkey_t m_key; InfCertificateChain* m_certificates; std::vector m_trust; InfCertificateCredentials* m_credentials; GError* m_key_error; GError* m_certificate_error; GError* m_trust_error; signal_credentials_changed_type m_signal_credentials_changed; private: void load_dh_params(); void load_key(); void load_certificate(); void load_trust(); void check_certificate_signature(); void make_credentials(); void on_key_file_changed(); void on_certificate_file_changed(); void on_trusted_cas_changed(); void on_authentication_enabled_changed(); }; } #endif // _GOBBY_CERTIFICATEMANAGER_HPP_ gobby-0.6.0/code/core/folder.hpp0000664000175000017500000000710014003367605013372 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FOLDER_HPP_ #define _GOBBY_FOLDER_HPP_ #include "core/textsessionview.hpp" #include "core/chatsessionview.hpp" #include "core/preferences.hpp" #include "util/defaultaccumulator.hpp" #include #include #include namespace Gobby { class Folder : public Gtk::Notebook { public: // TODO chat: This should be SignalSessionAdded/Removed/Changed typedef sigc::signal SignalDocumentAdded; typedef sigc::signal SignalDocumentRemoved; typedef sigc::signal SignalDocumentChanged; typedef sigc::signal:: accumulated > SignalDocumentCloseRequest; // TODO chat: Should not require langmgr Folder(bool hide_single_tab, Preferences& preferences, GtkSourceLanguageManager* lang_manager); ~Folder(); TextSessionView& add_text_session(InfTextSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, const std::string& info_storage_key); ChatSessionView& add_chat_session(InfChatSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname); void remove_document(SessionView& view); SessionView& get_document(unsigned int n) const; SessionView* lookup_document(InfSession* session) const; SessionView* get_current_document() const; void switch_to_document(SessionView& document); SignalDocumentAdded signal_document_added() const { return m_signal_document_added; } SignalDocumentRemoved signal_document_removed() const { return m_signal_document_removed; } SignalDocumentChanged signal_document_changed() const { return m_signal_document_changed; } SignalDocumentCloseRequest signal_document_close_request() const { return m_signal_document_close_request; } protected: virtual void on_switch_page(Gtk::Widget* page, guint page_num); virtual bool on_key_press_event(GdkEventKey* event); void on_tab_close_request(SessionView& window); const bool m_hide_single_tab; Preferences& m_preferences; GtkSourceLanguageManager* m_lang_manager; // Persistent state Preferences::Option m_document_userlist_width; Preferences::Option m_chat_userlist_width; SignalDocumentAdded m_signal_document_added; SignalDocumentRemoved m_signal_document_removed; SignalDocumentChanged m_signal_document_changed; SignalDocumentCloseRequest m_signal_document_close_request; }; } #endif // _GOBBY_FOLDER_HPP_ gobby-0.6.0/code/core/textsessionuserview.hpp0000664000175000017500000000342014003367605016302 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TEXTSESSIONUSERVIEW_HPP_ #define _GOBBY_TEXTSESSIONUSERVIEW_HPP_ #include "core/sessionuserview.hpp" #include "core/textsessionview.hpp" #include "core/preferences.hpp" #include "core/userlist.hpp" // Allows a user in the user list to be double-clicked at, scrolling // the text view to that user's cursor. namespace Gobby { class TextSessionUserView: public SessionUserView { public: TextSessionUserView(TextSessionView& view, bool show_disconnected, Preferences::Option& userlist_view, Preferences::Option& w); TextSessionView& get_session_view() { return static_cast( SessionUserView::get_session_view()); } const TextSessionView& get_session_view() const { return static_cast( SessionUserView::get_session_view()); } protected: void on_user_activated(InfUser* user); }; } #endif // _GOBBY_TEXTSESSIONUSERVIEW_HPP_ gobby-0.6.0/code/core/connectionmanager.cpp0000664000175000017500000002524714003367605015620 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/connectionmanager.hpp" #include Gobby::ConnectionManager::ConnectionManager(const CertificateManager& manager, const Preferences& preferences): m_cert_manager(manager), m_preferences(preferences), m_io(INF_IO(inf_gtk_io_new())), m_communication_manager(inf_communication_manager_new()), m_xmpp_manager(inf_xmpp_manager_new()), m_sasl_context(NULL) { m_connection_added_handler = g_signal_connect_after( G_OBJECT(m_xmpp_manager), "connection-added", G_CALLBACK(on_connection_added_static), this); m_connection_removed_handler = g_signal_connect_after( G_OBJECT(m_xmpp_manager), "connection-removed", G_CALLBACK(on_connection_removed_static), this); #ifdef LIBINFINITY_HAVE_AVAHI m_discovery = inf_discovery_avahi_new(m_io, m_xmpp_manager, m_cert_manager.get_credentials(), NULL, NULL); // TODO: Should be a constructor argument... inf_discovery_avahi_set_security_policy( m_discovery, m_preferences.security.policy); const InfKeepalive& keepalive = m_preferences.network.keepalive; inf_discovery_avahi_set_keepalive(m_discovery, &keepalive); #endif m_preferences.security.policy.signal_changed().connect( sigc::mem_fun( *this, &ConnectionManager::on_security_policy_changed)); m_preferences.network.keepalive.signal_changed().connect( sigc::mem_fun( *this, &ConnectionManager::on_keepalive_changed)); m_cert_manager.signal_credentials_changed().connect( sigc::mem_fun( *this, &ConnectionManager::on_credentials_changed)); } Gobby::ConnectionManager::~ConnectionManager() { #ifdef LIBINFINITY_HAVE_AVAHI g_object_unref(m_discovery); #endif if(m_sasl_context) inf_sasl_context_unref(m_sasl_context); for(std::map::const_iterator it = m_connections.begin(); it != m_connections.end(); ++it) { g_signal_handler_disconnect( G_OBJECT(it->first), it->second.notify_status_handler); } g_signal_handler_disconnect(G_OBJECT(m_xmpp_manager), m_connection_added_handler); g_signal_handler_disconnect(G_OBJECT(m_xmpp_manager), m_connection_removed_handler); g_object_unref(m_xmpp_manager); g_object_unref(m_communication_manager); g_object_unref(m_io); } InfXmppConnection* Gobby::ConnectionManager::make_connection( const std::string& hostname, const std::string& service, unsigned int device_index, bool connect) { // Check whether we do have such a connection already: InfXmppConnection* xmpp = inf_xmpp_manager_lookup_connection_by_hostname( m_xmpp_manager, hostname.c_str(), service.c_str(), "_infinote._tcp"); if(!xmpp) { InfNameResolver* resolver = inf_name_resolver_new( m_io, hostname.c_str(), service.c_str(), "_infinote._tcp"); InfTcpConnection* connection = inf_tcp_connection_new_resolve( m_io, resolver); g_object_unref(resolver); xmpp = create_connection( connection, device_index, hostname, connect); } else if(connect) { InfXmlConnectionStatus status; g_object_get(G_OBJECT(xmpp), "status", &status, NULL); if(status == INF_XML_CONNECTION_CLOSED) { GError* error = NULL; inf_xml_connection_open(INF_XML_CONNECTION(xmpp), &error); if(error != NULL) { std::string message = error->message; g_error_free(error); throw std::runtime_error(message); } } } g_assert(xmpp != NULL); return xmpp; } InfXmppConnection* Gobby::ConnectionManager::make_connection( const InfIpAddress* address, guint port, unsigned int device_index, const std::string& hostname, bool connect) { // Check whether we do have such a connection already: InfXmppConnection* xmpp = inf_xmpp_manager_lookup_connection_by_address( m_xmpp_manager, address, port); if(!xmpp) { InfTcpConnection* connection = inf_tcp_connection_new( m_io, address, port); xmpp = create_connection( connection, device_index, hostname, connect); } else if(connect) { InfXmlConnectionStatus status; g_object_get(G_OBJECT(xmpp), "status", &status, NULL); if(status == INF_XML_CONNECTION_CLOSED) { GError* error = NULL; inf_xml_connection_open(INF_XML_CONNECTION(xmpp), &error); if(error != NULL) { std::string message = error->message; g_error_free(error); throw std::runtime_error(message); } } } g_assert(xmpp != NULL); return xmpp; } InfXmppConnection* Gobby::ConnectionManager::create_connection(InfTcpConnection* connection, unsigned int device_index, const std::string& hostname, bool connect) { g_object_set(G_OBJECT(connection), "device-index", device_index, NULL); const InfKeepalive& keepalive = m_preferences.network.keepalive; GError* error = NULL; if(!inf_tcp_connection_set_keepalive(connection, &keepalive, &error)) { /* This should not happen, since set_keepalive can only fail * if the connection is open already. */ g_warning("Failed to set keepalive: %s", error->message); g_error_free(error); error = NULL; } if(connect && !inf_tcp_connection_open(connection, &error)) { std::string message = error->message; g_error_free(error); g_object_unref(connection); throw std::runtime_error(message); } else { InfXmppConnection* xmpp = inf_xmpp_connection_new( connection, INF_XMPP_CONNECTION_CLIENT, NULL, hostname.c_str(), m_preferences.security.policy, m_cert_manager.get_credentials(), m_sasl_context, m_sasl_mechanisms.empty() ? "" : m_sasl_mechanisms.c_str()); inf_xmpp_manager_add_connection(m_xmpp_manager, xmpp); g_object_unref(xmpp); g_object_unref(connection); return xmpp; } } void Gobby::ConnectionManager::remove_connection(InfXmppConnection* connection) { inf_xmpp_manager_remove_connection( m_xmpp_manager, connection); } void Gobby::ConnectionManager::set_sasl_context(InfSaslContext* sasl_context, const char* mechanisms) { if(m_sasl_context) inf_sasl_context_unref(m_sasl_context); m_sasl_context = sasl_context; if(m_sasl_context) inf_sasl_context_ref(m_sasl_context); m_sasl_mechanisms = mechanisms ? mechanisms : ""; for(std::map::const_iterator it = m_connections.begin(); it != m_connections.end(); ++it) { InfXmppConnection* conn = it->first; inf_xmpp_connection_reset_sasl_authentication( conn, m_sasl_context, m_sasl_mechanisms.empty() ? "" : m_sasl_mechanisms.c_str()); } #ifdef LIBINFINITY_HAVE_AVAHI g_object_set(G_OBJECT(m_discovery), "sasl-context", m_sasl_context, "sasl-mechanisms", mechanisms, NULL); #endif } void Gobby::ConnectionManager::on_connection_added(InfXmppConnection* xmpp) { g_assert(m_connections.find(xmpp) == m_connections.end()); ConnectionInfo info; info.notify_status_handler = g_signal_connect( G_OBJECT(xmpp), "notify::status", G_CALLBACK(on_notify_status_static), this); m_connections[xmpp] = info; } void Gobby::ConnectionManager::on_connection_removed( InfXmppConnection* xmpp, InfXmppConnection* replaced_by) { std::map::iterator iter = m_connections.find(xmpp); g_assert(iter != m_connections.end()); ConnectionInfo& info = iter->second; g_signal_handler_disconnect(G_OBJECT(xmpp), info.notify_status_handler); m_connections.erase(iter); if(replaced_by != NULL) { m_signal_connection_replaced.emit(xmpp, replaced_by); // This is not needed, since the connection will be // removed anyway, because nobody holds a reference // anymore. If it turns out that the connection stays // alive, and for example the certificate dialog shows // up, then it means we have a memory leak somewhere. //inf_xml_connection_close(INF_XML_CONNECTION(xmpp)); } } void Gobby::ConnectionManager::on_security_policy_changed() { #ifdef LIBINFINITY_HAVE_AVAHI inf_discovery_avahi_set_security_policy( m_discovery, m_preferences.security.policy); #endif } void Gobby::ConnectionManager::on_keepalive_changed() { const InfKeepalive& keepalive = m_preferences.network.keepalive; #ifdef LIBINFINITY_HAVE_AVAHI inf_discovery_avahi_set_keepalive(m_discovery, &keepalive); #endif for(std::map::const_iterator it = m_connections.begin(); it != m_connections.end(); ++it) { InfTcpConnection* tcp; g_object_get(G_OBJECT(it->first), "tcp-connection", &tcp, NULL); GError* error = NULL; inf_tcp_connection_set_keepalive(tcp, &keepalive, &error); g_object_unref(tcp); if(error != NULL) { g_warning("Failed to set keepalive: %s", error->message); g_error_free(error); } } } void Gobby::ConnectionManager::on_credentials_changed() { // Keep existing connections with current credentials but set // new credentials for all closed connections. for(std::map::const_iterator it = m_connections.begin(); it != m_connections.end(); ++it) { InfXmlConnectionStatus status; g_object_get(G_OBJECT(it->first), "status", &status, NULL); if(status == INF_XML_CONNECTION_CLOSED) { g_object_set( G_OBJECT(it->first), "credentials", m_cert_manager.get_credentials(), NULL); } } #ifdef LIBINFINITY_HAVE_AVAHI g_object_set( G_OBJECT(m_discovery), "credentials", m_cert_manager.get_credentials(), NULL); #endif } void Gobby::ConnectionManager::on_notify_status(InfXmppConnection* connection) { InfXmlConnectionStatus status; g_object_get(G_OBJECT(connection), "status", &status, NULL); // When the connection was closed, update the certificate credentials, // so that in case it is reopened the current credentials are used. if(status == INF_XML_CONNECTION_CLOSED) { g_object_set( G_OBJECT(connection), "credentials", m_cert_manager.get_credentials(), NULL); } } gobby-0.6.0/code/core/server.cpp0000664000175000017500000001532514003367605013430 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/selfhoster.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include #include #include #include Gobby::Server::Server(InfIo* io, InfLocalPublisher* publisher): m_io(io), m_publisher(publisher), m_xmpp4(NULL), m_xmpp6(NULL), m_pool(NULL) { g_object_ref(m_io); } Gobby::Server::~Server() { if(is_open()) close(); set_pool(NULL); g_object_unref(m_io); } void Gobby::Server::open(unsigned int port, const InfKeepalive* keepalive, InfXmppConnectionSecurityPolicy security_policy, InfCertificateCredentials* creds, InfSaslContext* context, const char* sasl_mechanisms) { // If we can open one of tcp4 or tcp6 that's a success. InfdTcpServer* tcp4; InfdTcpServer* tcp6; // If the server is already open and we do not need to change the // port, then just change the credentials and SASL context without // doing anything else. if(is_open() && get_port() == port) { set_keepalive(keepalive); set_credentials(security_policy, creds); set_sasl_context(context, sasl_mechanisms); return; } static const guint8 ANY6_ADDR[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; InfIpAddress* any6 = inf_ip_address_new_raw6(ANY6_ADDR); tcp4 = INFD_TCP_SERVER(g_object_new( INFD_TYPE_TCP_SERVER, "io", m_io, "local-address", NULL, "local-port", port, NULL)); tcp6 = INFD_TCP_SERVER(g_object_new( INFD_TYPE_TCP_SERVER, "io", m_io, "local-address", any6, "local-port", port, NULL)); inf_ip_address_free(any6); if(!infd_tcp_server_open(tcp6, NULL)) { g_object_unref(tcp6); tcp6 = NULL; GError* error = NULL; if(!infd_tcp_server_open(tcp4, &error)) { g_object_unref(tcp4); const std::string message = error->message; g_error_free(error); throw std::runtime_error(message); } } else { if(!infd_tcp_server_open(tcp4, NULL)) { g_object_unref(tcp4); tcp4 = NULL; } } // We have the new server open, from this point on there is nothing // that can go wrong anymore. Therefore, close the old server and // take over the new one. if(is_open()) close(); InfXmppConnectionSecurityPolicy policy = INF_XMPP_CONNECTION_SECURITY_ONLY_UNSECURED; if(creds != NULL) policy = security_policy; if(tcp4) { infd_tcp_server_set_keepalive(tcp4, keepalive); m_xmpp4 = infd_xmpp_server_new( tcp4, policy, creds, context, sasl_mechanisms); g_object_unref(tcp4); } if(tcp6) { infd_tcp_server_set_keepalive(tcp6, keepalive); m_xmpp6 = infd_xmpp_server_new( tcp6, policy, creds, context, sasl_mechanisms); g_object_unref(tcp6); } if(m_pool) { if(m_xmpp4 != NULL) { infd_server_pool_add_server( m_pool, INFD_XML_SERVER(m_xmpp4)); infd_server_pool_add_local_publisher( m_pool, m_xmpp4, m_publisher); } if(m_xmpp6 != NULL) { infd_server_pool_add_server( m_pool, INFD_XML_SERVER(m_xmpp6)); infd_server_pool_add_local_publisher( m_pool, m_xmpp6, m_publisher); } } } void Gobby::Server::close() { g_assert(is_open()); if(m_xmpp6 != NULL) { // Will be removed from server pool automatically infd_xml_server_close(INFD_XML_SERVER(m_xmpp6)); g_object_unref(m_xmpp6); m_xmpp6 = NULL; } if(m_xmpp4 != NULL) { // Will be removed from server pool automatically infd_xml_server_close(INFD_XML_SERVER(m_xmpp4)); g_object_unref(m_xmpp4); m_xmpp4 = NULL; } } bool Gobby::Server::is_open() const { return m_xmpp4 != NULL || m_xmpp6 != NULL; } unsigned int Gobby::Server::get_port() const { g_assert(is_open()); InfdXmppServer* xmpp = m_xmpp6; if(xmpp == NULL) xmpp = m_xmpp4; g_assert(xmpp != NULL); InfdTcpServer* tcp; g_object_get(G_OBJECT(xmpp), "tcp-server", &tcp, NULL); guint port; g_object_get(G_OBJECT(tcp), "local-port", &port, NULL); g_object_unref(tcp); return port; } void Gobby::Server::set_keepalive(const InfKeepalive* keepalive) { if(m_xmpp6 != NULL) { InfdTcpServer* tcp; g_object_get(G_OBJECT(m_xmpp6), "tcp-server", &tcp, NULL); infd_tcp_server_set_keepalive(tcp, keepalive); g_object_unref(tcp); } if(m_xmpp4 != NULL) { InfdTcpServer* tcp; g_object_get(G_OBJECT(m_xmpp4), "tcp-server", &tcp, NULL); infd_tcp_server_set_keepalive(tcp, keepalive); g_object_unref(tcp); } } void Gobby::Server::set_sasl_context(InfSaslContext* context, const char* sasl_mechanisms) { if(m_xmpp6 != NULL) { g_object_set( G_OBJECT(m_xmpp6), "sasl-context", context, "sasl-mechanisms", sasl_mechanisms, NULL); } if(m_xmpp4 != NULL) { g_object_set( G_OBJECT(m_xmpp4), "sasl-context", context, "sasl-mechanisms", sasl_mechanisms, NULL); } } void Gobby::Server::set_credentials(InfXmppConnectionSecurityPolicy policy, InfCertificateCredentials* credentials) { if(m_xmpp6 != NULL) { g_object_set( G_OBJECT(m_xmpp6), "security-policy", policy, "credentials", credentials, NULL); } if(m_xmpp4 != NULL) { g_object_set( G_OBJECT(m_xmpp4), "security-policy", policy, "credentials", credentials, NULL); } } void Gobby::Server::set_pool(InfdServerPool* pool) { if(m_pool != NULL) { if(m_xmpp4 != NULL) infd_server_pool_remove_server( m_pool, INFD_XML_SERVER(m_xmpp4)); if(m_xmpp6 != NULL) infd_server_pool_remove_server( m_pool, INFD_XML_SERVER(m_xmpp6)); g_object_unref(m_pool); } m_pool = pool; if(m_pool != NULL) { g_object_ref(m_pool); if(m_xmpp4 != NULL) { infd_server_pool_add_server( m_pool, INFD_XML_SERVER(m_xmpp4)); infd_server_pool_add_local_publisher( m_pool, m_xmpp4, m_publisher); } if(m_xmpp6 != NULL) { infd_server_pool_add_server( m_pool, INFD_XML_SERVER(m_xmpp6)); infd_server_pool_add_local_publisher( m_pool, m_xmpp6, m_publisher); } } } gobby-0.6.0/code/core/noteplugin.hpp0000664000175000017500000000233214003367605014305 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_NOTEPLUGIN_HPP_ #define _GOBBY_NOTEPLUGIN_HPP_ #include #include namespace Gobby { namespace Plugins { extern const InfcNotePlugin* C_TEXT; extern const InfcNotePlugin* C_CHAT; extern const InfdNotePlugin* D_TEXT; extern const InfdNotePlugin* D_CHAT; } } #endif // _GOBBY_NOTEPLUGIN_HPP_ gobby-0.6.0/code/core/huebutton.cpp0000664000175000017500000000671014003367605014135 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/huebutton.hpp" #include "util/i18n.hpp" #include Gobby::HueButton::HueButton(GtkColorButton* cobject, const Glib::RefPtr& builder): Gtk::ColorButton(cobject), m_saturation(1.0), m_value(1.0) { set_hue(1.0); } Gobby::HueButton::HueButton(const Glib::ustring& title): m_saturation(1.0), m_value(1.0) { set_title(title); set_hue(1.0); } double Gobby::HueButton::get_hue() const { const Gdk::RGBA rgba = get_rgba(); double h, s, v; gtk_rgb_to_hsv(rgba.get_red(), rgba.get_green(), rgba.get_blue(), &h, &s, &v); return h; } double Gobby::HueButton::get_saturation() const { return m_saturation; } double Gobby::HueButton::get_value() const { return m_value; } void Gobby::HueButton::set_hue(double hue) { double r, g, b; gtk_hsv_to_rgb(hue, m_saturation, m_value, &r, &g, &b); Gdk::RGBA rgba; rgba.set_rgba(r, g, b, 1.0); set_rgba(rgba); } void Gobby::HueButton::set_saturation(double saturation) { m_saturation = saturation; set_hue(get_hue()); // Update view } void Gobby::HueButton::set_value(double value) { m_value = value; set_hue(get_hue()); // Update view } void Gobby::HueButton::on_clicked() { if(!m_dialog.get()) { Gtk::Window* parent = NULL; Gtk::Widget* toplevel_widget = get_toplevel(); if(gtk_widget_is_toplevel(toplevel_widget->gobj())) parent = dynamic_cast(toplevel_widget); if(parent == NULL) { g_warning("Gobby::HueButton::on_clicked: " "No toplevel widget found"); return; } m_dialog.reset(new Gtk::Dialog(get_title(), *parent)); m_hue_chooser = inf_text_gtk_hue_chooser_new_with_hue(get_hue()); gtk_box_pack_start(GTK_BOX(m_dialog->get_vbox()->gobj()), m_hue_chooser, FALSE, FALSE, 0); gtk_widget_show(m_hue_chooser); m_dialog->add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL); m_dialog->add_button(_("_Ok"), Gtk::RESPONSE_OK); m_dialog->set_default_response(Gtk::RESPONSE_OK); m_dialog->set_resizable(false); m_dialog->signal_response().connect( sigc::mem_fun(*this, &HueButton::on_dialog_response)); } else { inf_text_gtk_hue_chooser_set_hue( INF_TEXT_GTK_HUE_CHOOSER(m_hue_chooser), get_hue()); } m_dialog->present(); } void Gobby::HueButton::on_parent_hide() { // Hide child dialog when the window containing the color button // goes away m_dialog.reset(NULL); } void Gobby::HueButton::on_dialog_response(int response_id) { if(response_id == Gtk::RESPONSE_OK) { set_hue( inf_text_gtk_hue_chooser_get_hue( INF_TEXT_GTK_HUE_CHOOSER(m_hue_chooser))); } m_dialog->hide(); } gobby-0.6.0/code/core/chattablabel.cpp0000664000175000017500000000421714003367605014526 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/chattablabel.hpp" Gobby::ChatTabLabel::ChatTabLabel(Folder& folder, ChatSessionView& view, bool always_show_close_button): TabLabel(folder, view, always_show_close_button ? "chat" : "network-idle"), m_always_show_close_button(always_show_close_button) { if(!m_always_show_close_button) m_button.hide(); // Only show when disconnected InfChatBuffer* buffer = INF_CHAT_BUFFER( inf_session_get_buffer(INF_SESSION(view.get_session()))); m_add_message_handle = g_signal_connect_after( G_OBJECT(buffer), "add-message", G_CALLBACK(on_add_message_static), this); } Gobby::ChatTabLabel::~ChatTabLabel() { InfChatBuffer* buffer = INF_CHAT_BUFFER( inf_session_get_buffer(INF_SESSION(m_view.get_session()))); g_signal_handler_disconnect(buffer, m_add_message_handle); } void Gobby::ChatTabLabel::on_notify_subscription_group() { InfSession* session = INF_SESSION(m_view.get_session()); if(inf_session_get_subscription_group(session) != NULL && !m_always_show_close_button) { m_button.hide(); } else { m_button.show(); } } void Gobby::ChatTabLabel::on_changed(InfUser* author) { if(!m_changed) { InfSession* session = INF_SESSION(m_view.get_session()); if(inf_session_get_status(session) == INF_SESSION_RUNNING) set_changed(); } } gobby-0.6.0/code/core/userlist.hpp0000664000175000017500000000712014003367605013773 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_USERLIST_HPP_ #define _GOBBY_USERLIST_HPP_ #include #include #include #include #include #include namespace Gobby { class UserList: public Gtk::Grid { public: typedef sigc::signal SignalUserActivated; UserList(InfUserTable* table); ~UserList(); void set_show_disconnected(bool show_disconnected); SignalUserActivated signal_user_activated() const { return m_signal_user_activated; } protected: InfUserTable* m_table; class Columns: public Gtk::TreeModelColumnRecord { public: Gtk::TreeModelColumn user; Gtk::TreeModelColumn > color; Gtk::TreeModelColumn notify_hue_handle; Gtk::TreeModelColumn notify_status_handle; Columns() { add(user); add(color); add(notify_hue_handle); add(notify_status_handle); } }; static void on_add_user_static(InfUserTable* user_table, InfUser* user, gpointer user_data) { static_cast(user_data)-> on_add_user(user); } static void on_notify_status_static(InfUser* user, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_status(user); } static void on_notify_hue_static(InfUser* user, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_hue(INF_TEXT_USER(user)); } bool visible_func(const Gtk::TreeIter& iter); void icon_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter); void color_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter); void name_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter); int sort_func(const Gtk::TreeIter& iter1, const Gtk::TreeIter& iter2); void on_add_user(InfUser* user); void on_notify_status(InfUser* user); void on_notify_hue(InfTextUser* user); //void on_select_func(const Gtk::TreeIter& iter); void on_row_activated(const Gtk::TreePath& path, Gtk::TreeViewColumn* column); virtual void on_style_updated(); Gtk::TreeIter find_user_iter(InfUser* user); Columns m_columns; Glib::RefPtr m_store; Glib::RefPtr m_filter_model; Gtk::TreeView m_view; gulong m_add_user_handle; SignalUserActivated m_signal_user_activated; }; } #endif // _GOBBY_ICON_HPP_ gobby-0.6.0/code/core/browser.hpp0000664000175000017500000001052114003367605013603 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_BROWSER_HPP_ #define _GOBBY_BROWSER_HPP_ #include "core/connectionmanager.hpp" #include "core/statusbar.hpp" #include "util/historyentry.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Gobby { class Browser: public Gtk::Grid { public: typedef sigc::signal SignalConnect; typedef sigc::signal SignalActivate; Browser(Gtk::Window& parent, StatusBar& status_bar, ConnectionManager& connection_manager); ~Browser(); ConnectionManager& get_connection_manager() { return m_connection_manager; } InfGtkBrowserModelSort* get_store() { return m_sort_model; } const InfGtkBrowserModelSort* get_store() const { return m_sort_model; } InfGtkBrowserView* get_view() { return m_browser_view; } bool get_selected_browser(InfBrowser** browser); bool get_selected_iter(InfBrowser* browser, InfBrowserIter* iter); void set_selected(InfBrowser* browser, const InfBrowserIter* iter); InfBrowser* add_remote(const std::string& hostname, const std::string& service, unsigned int device_index, bool connect); InfBrowser* add_remote(const InfIpAddress* address, guint port, unsigned int device_index, const std::string& hostname, bool connect); void add_browser(InfBrowser* browser, const char* name); void remove_browser(InfBrowser* browser); SignalActivate signal_activate() const { return m_signal_activate; } SignalConnect signal_connect() const { return m_signal_connect; } protected: void init_accessibility(); static void on_set_browser_static(InfGtkBrowserModel* model, GtkTreePath* path, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser, gpointer user_data) { static_cast(user_data)->on_set_browser( iter, old_browser, new_browser); } static void on_activate_static(InfGtkBrowserView* view, GtkTreeIter* iter, gpointer user_data) { static_cast(user_data)->on_activate(iter); } void on_connection_replaced(InfXmppConnection* connection, InfXmppConnection* by); void on_expanded_changed(); void on_set_browser(GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser); void on_activate(GtkTreeIter* iter); void on_hostname_activate(); Gtk::Window& m_parent; StatusBar& m_status_bar; ConnectionManager& m_connection_manager; InfGtkCertificateManager* m_cert_checker; InfGtkBrowserStore* m_browser_store; InfGtkBrowserView* m_browser_view; Gtk::ScrolledWindow m_scroll; Gtk::Expander m_expander; Gtk::Grid m_grid; Gtk::Label m_label_hostname; HistoryComboBox m_entry_hostname; InfGtkBrowserModelSort* m_sort_model; SignalConnect m_signal_connect; SignalActivate m_signal_activate; }; } #endif // _GOBBY_BROWSER_HPP_ gobby-0.6.0/code/core/browser.cpp0000664000175000017500000002645714003367605013615 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/password-dialog.hpp" #include "core/browser.hpp" #include "core/noteplugin.hpp" #include "util/file.hpp" #include "util/uri.hpp" #include "util/i18n.hpp" #include #include #include #include gint compare_func(GtkTreeModel* model, GtkTreeIter* first, GtkTreeIter* second, gpointer user_data) { gint result; InfBrowser* br_one; InfBrowser* br_two; InfBrowserIter* bri_one; InfBrowserIter* bri_two; GtkTreeIter parent; result = 0; if(gtk_tree_model_iter_parent(model, &parent, first)) { g_assert(gtk_tree_model_iter_parent(model, &parent, second)); gtk_tree_model_get( model, first, INF_GTK_BROWSER_MODEL_COL_BROWSER, &br_one, INF_GTK_BROWSER_MODEL_COL_NODE, &bri_one, -1); gtk_tree_model_get( model, second, INF_GTK_BROWSER_MODEL_COL_BROWSER, &br_two, INF_GTK_BROWSER_MODEL_COL_NODE, &bri_two, -1); if(inf_browser_is_subdirectory(br_one, bri_one) && !inf_browser_is_subdirectory(br_two, bri_two)) { result = -1; } else if(!inf_browser_is_subdirectory(br_one, bri_one) && inf_browser_is_subdirectory(br_two, bri_two)) { result = 1; } g_object_unref(br_one); g_object_unref(br_two); inf_browser_iter_free(bri_one); inf_browser_iter_free(bri_two); } if(!result) { gchar* name_one; gchar* name_two; gtk_tree_model_get( model, first, INF_GTK_BROWSER_MODEL_COL_NAME, &name_one, -1); gtk_tree_model_get( model, second, INF_GTK_BROWSER_MODEL_COL_NAME, &name_two, -1); gchar* one = g_utf8_casefold(name_one, -1); gchar* two = g_utf8_casefold(name_two, -1); result = g_utf8_collate(one, two); g_free(name_one); g_free(name_two); g_free(one); g_free(two); } return result; } Gobby::Browser::Browser(Gtk::Window& parent, StatusBar& status_bar, ConnectionManager& connection_manager): m_parent(parent), m_status_bar(status_bar), m_connection_manager(connection_manager), m_expander(_("_Direct Connection"), true), m_label_hostname(_("Host Name:")), m_entry_hostname(config_filename("recent_hosts"), 5) { m_label_hostname.show(); m_entry_hostname.set_hexpand(true); m_entry_hostname.get_entry()->signal_activate().connect( sigc::mem_fun(*this, &Browser::on_hostname_activate)); m_entry_hostname.show(); m_grid.set_column_spacing(6); m_grid.attach(m_label_hostname, 0, 0, 1, 1); m_grid.attach(m_entry_hostname, 1, 0, 1, 1); m_grid.show(); m_expander.set_spacing(6); m_expander.add(m_grid); m_expander.show(); m_expander.property_expanded().signal_changed().connect( sigc::mem_fun(*this, &Browser::on_expanded_changed)); m_browser_store = inf_gtk_browser_store_new( connection_manager.get_io(), connection_manager.get_communication_manager()); m_sort_model = inf_gtk_browser_model_sort_new( INF_GTK_BROWSER_MODEL(m_browser_store)); gtk_tree_sortable_set_default_sort_func( GTK_TREE_SORTABLE(m_sort_model), compare_func, NULL, NULL); if(m_connection_manager.get_discovery() != NULL) { inf_gtk_browser_store_add_discovery( m_browser_store, m_connection_manager.get_discovery()); } Glib::ustring known_hosts_file = config_filename("known_hosts"); m_cert_checker = inf_gtk_certificate_manager_new( parent.gobj(), m_connection_manager.get_xmpp_manager(), known_hosts_file.c_str()); m_browser_view = INF_GTK_BROWSER_VIEW( inf_gtk_browser_view_new_with_model( INF_GTK_BROWSER_MODEL(m_sort_model))); gtk_widget_show(GTK_WIDGET(m_browser_view)); gtk_container_add(GTK_CONTAINER(m_scroll.gobj()), GTK_WIDGET(m_browser_view)); m_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); m_scroll.set_shadow_type(Gtk::SHADOW_IN); m_scroll.set_vexpand(true); m_scroll.show(); connection_manager.signal_connection_replaced().connect( sigc::mem_fun(*this, &Browser::on_connection_replaced)); g_signal_connect( m_browser_store, "set-browser", G_CALLBACK(&on_set_browser_static), this ); g_signal_connect( m_browser_view, "activate", G_CALLBACK(&on_activate_static), this ); set_row_spacing(6); attach(m_scroll, 0, 0, 1, 1); attach(m_expander, 0, 1, 1, 1); init_accessibility(); set_focus_child(m_expander); } Gobby::Browser::~Browser() { g_object_unref(m_browser_store); g_object_unref(m_sort_model); g_object_unref(m_cert_checker); } void Gobby::Browser::init_accessibility() { Glib::RefPtr relation_set; Glib::RefPtr relation; std::vector > targets; // Associate the hostname label with the corresponding entry field. Glib::RefPtr entry_hostname_acc = m_entry_hostname.get_accessible(); Glib::RefPtr label_hostname_acc = m_label_hostname.get_accessible(); relation_set = entry_hostname_acc->get_relation_set(); targets.push_back(label_hostname_acc); relation = Atk::Relation::create(targets, Atk::RELATION_LABELLED_BY); relation_set->set_add(relation); } bool Gobby::Browser::get_selected_browser(InfBrowser** browser) { GtkTreeIter tree_iter; if(!inf_gtk_browser_view_get_selected(m_browser_view, &tree_iter)) return false; InfBrowser* tmp_browser; gtk_tree_model_get( GTK_TREE_MODEL(m_sort_model), &tree_iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &tmp_browser, -1); if(tmp_browser == NULL) return false; *browser = tmp_browser; g_object_unref(tmp_browser); return true; } bool Gobby::Browser::get_selected_iter(InfBrowser* browser, InfBrowserIter* iter) { GtkTreeIter tree_iter; if(!inf_gtk_browser_view_get_selected(m_browser_view, &tree_iter)) return false; InfBrowserStatus browser_status; g_object_get(G_OBJECT(browser), "status", &browser_status, NULL); if(browser_status != INF_BROWSER_OPEN) return false; InfBrowserIter *tmp_iter; gtk_tree_model_get( GTK_TREE_MODEL(m_sort_model), &tree_iter, INF_GTK_BROWSER_MODEL_COL_NODE, &tmp_iter, -1); *iter = *tmp_iter; inf_browser_iter_free(tmp_iter); return true; } void Gobby::Browser::set_selected(InfBrowser* browser, const InfBrowserIter* iter) { GtkTreeIter tree_iter; gboolean has_iter = inf_gtk_browser_model_browser_iter_to_tree_iter( INF_GTK_BROWSER_MODEL(m_sort_model), browser, iter, &tree_iter); g_assert(has_iter == TRUE); inf_gtk_browser_view_set_selected(m_browser_view, &tree_iter); } InfBrowser* Gobby::Browser::add_remote(const std::string& hostname, const std::string& service, unsigned int device_index, bool connect) { // Check whether we do have such a connection already: InfXmppConnection* xmpp = m_connection_manager.make_connection( hostname, service, device_index, connect); // Should have thrown otherwise: g_assert(xmpp != NULL); // TODO: Remove erroneous entry with same name, if any, before // adding. InfBrowser* browser = inf_gtk_browser_store_add_connection( m_browser_store, INF_XML_CONNECTION(xmpp), hostname.c_str()); return browser; } InfBrowser* Gobby::Browser::add_remote(const InfIpAddress* address, guint port, unsigned int device_index, const std::string& hostname, bool connect) { // Check whether we do have such a connection already: InfXmppConnection* xmpp = m_connection_manager.make_connection( address, port, device_index, hostname, connect); // Should have thrown otherwise: g_assert(xmpp != NULL); // TODO: Remove erroneous entry with same name, if any, before // adding. InfBrowser* browser = inf_gtk_browser_store_add_connection( m_browser_store, INF_XML_CONNECTION(xmpp), hostname.c_str()); return browser; } void Gobby::Browser::add_browser(InfBrowser* browser, const char* name) { inf_gtk_browser_store_add_browser( m_browser_store, browser, name); } void Gobby::Browser::remove_browser(InfBrowser* browser) { m_connection_manager.remove_connection( INF_XMPP_CONNECTION( infc_browser_get_connection( INFC_BROWSER(browser)))); inf_gtk_browser_store_remove_browser( m_browser_store, browser); } void Gobby::Browser::on_connection_replaced(InfXmppConnection* connection, InfXmppConnection* by) { // Remove the browser for the replaced connection, and highlight the // one it was replaced with. inf_gtk_browser_store_remove_connection( m_browser_store, INF_XML_CONNECTION(connection)); /* The connection exists already, we just use this function to obtain * the browser. * TODO: There should be a * inf_gtk_browser_store_find_browser_for_connection() function */ InfBrowser* browser = inf_gtk_browser_store_add_connection( m_browser_store, INF_XML_CONNECTION(by), ""); set_selected(browser, NULL); } void Gobby::Browser::on_expanded_changed() { if(m_expander.get_expanded()) { if(m_entry_hostname.get_realized()) { m_entry_hostname.grab_focus(); } else { m_entry_hostname.signal_realize().connect( sigc::mem_fun(m_entry_hostname, &Gtk::Entry::grab_focus)); } } } void Gobby::Browser::on_set_browser(GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser) { if(new_browser) { if(INFC_IS_BROWSER(new_browser)) { InfcBrowser* browser = INFC_BROWSER(new_browser); infc_browser_add_plugin(browser, Plugins::C_TEXT); infc_browser_add_plugin(browser, Plugins::C_CHAT); } else if(INFD_IS_DIRECTORY(new_browser)) { InfdDirectory* directory = INFD_DIRECTORY(new_browser); infd_directory_add_plugin(directory, Plugins::D_TEXT); infd_directory_add_plugin(directory, Plugins::D_CHAT); } } } void Gobby::Browser::on_activate(GtkTreeIter* iter) { InfBrowser* browser; InfBrowserIter* browser_iter; gtk_tree_model_get(GTK_TREE_MODEL(m_sort_model), iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, INF_GTK_BROWSER_MODEL_COL_NODE, &browser_iter, -1); m_signal_activate.emit(browser, browser_iter); inf_browser_iter_free(browser_iter); g_object_unref(browser); } void Gobby::Browser::on_hostname_activate() { Glib::ustring str = m_entry_hostname.get_entry()->get_text(); if(str.empty()) return; m_entry_hostname.commit(); m_entry_hostname.get_entry()->set_text(""); m_signal_connect.emit(str); } gobby-0.6.0/code/core/documentinfostorage.hpp0000664000175000017500000000722014003367605016201 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_DOCUMENTINFO_STORAGE_HPP_ #define _GOBBY_OPERATIONS_DOCUMENTINFO_STORAGE_HPP_ #include #include #include #include #include namespace Gobby { class DocumentInfoStorage: public sigc::trackable { public: enum EolStyle { EOL_CRLF, EOL_LF, EOL_CR }; struct Info { Glib::ustring uri; EolStyle eol_style; std::string encoding; }; DocumentInfoStorage(InfGtkBrowserModel* model); ~DocumentInfoStorage(); std::string get_key(InfBrowser* browser, const InfBrowserIter* iter) const; const Info* get_info(InfBrowser* browser, const InfBrowserIter* iter) const; const Info* get_info(const std::string& key) const; void set_info(InfBrowser* browser, const InfBrowserIter* iter, const Info& info); void set_info(const std::string& key, const Info& info); protected: static void on_set_browser_static(InfGtkBrowserModel* model, GtkTreePath* path, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser, gpointer user_data) { static_cast(user_data)-> on_set_browser(iter, old_browser, new_browser); } static void on_begin_request_explore_node_static(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request, gpointer user_data) { static_cast(user_data)-> on_begin_request_explore_node(browser, iter, request); } static void on_node_removed_static(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request, gpointer user_data) { static_cast(user_data)-> on_node_removed(browser, iter, request); } void on_set_browser(GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser); void on_begin_request_explore_node(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request); void on_node_removed(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request); typedef std::map InfoMap; InfoMap m_infos; class BrowserConn; typedef std::map BrowserMap; BrowserMap m_browsers; gulong m_set_browser_handler; InfGtkBrowserModel* m_model; private: void init(xmlpp::Element* node); }; } #endif // _GOBBY_OPERATIONS_DOCUMENTINFO_STORAGE_HPP_ gobby-0.6.0/code/core/certificatemanager.cpp0000664000175000017500000003045314003367605015736 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/certificatemanager.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include #include Gobby::CertificateManager::CertificateManager(Preferences& preferences): m_preferences(preferences), m_dh_params(NULL), m_key(NULL), m_certificates(NULL), m_credentials(NULL), m_key_error(NULL), m_certificate_error(NULL), m_trust_error(NULL) { m_conn_key_file = m_preferences.security.key_file. signal_changed().connect(sigc::mem_fun( *this, &CertificateManager::on_key_file_changed)); m_conn_certificate_file = m_preferences.security.certificate_file. signal_changed().connect(sigc::mem_fun( *this, &CertificateManager::on_certificate_file_changed)); m_preferences.security.use_system_trust.signal_changed().connect( sigc::mem_fun( *this, &CertificateManager::on_trusted_cas_changed)); m_preferences.security.trusted_cas.signal_changed().connect( sigc::mem_fun( *this, &CertificateManager::on_trusted_cas_changed)); m_preferences.security.authentication_enabled. signal_changed().connect( sigc::mem_fun( *this, &CertificateManager:: on_authentication_enabled_changed)); // TODO: Load these only on request, to improve the startup time load_dh_params(); load_key(); load_certificate(); load_trust(); make_credentials(); } Gobby::CertificateManager::~CertificateManager() { if(m_credentials != NULL) inf_certificate_credentials_unref(m_credentials); for(unsigned int i = 0; i < m_trust.size(); ++i) gnutls_x509_crt_deinit(m_trust[i]); if(m_certificates != NULL) inf_certificate_chain_unref(m_certificates); if(m_key != NULL) gnutls_x509_privkey_deinit(m_key); if(m_dh_params != NULL) gnutls_dh_params_deinit(m_dh_params); } void Gobby::CertificateManager::set_dh_params(gnutls_dh_params_t dh_params) { gnutls_dh_params_t old_dh_params = m_dh_params; GError* error = NULL; std::string filename = config_filename("dh_params.pem"); inf_cert_util_write_dh_params(dh_params, filename.c_str(), &error); if(error != NULL) { g_warning( _("Failed to write Diffie-Hellman parameters " "to \"%s\": %s"), filename.c_str(), error->message); g_error_free(error); } m_dh_params = dh_params; make_credentials(); // TODO: Note that the credentials do only store a pointer to the // DH params, so we cannot just delete the DH params here, since the // old credentials might still be in use. // For the moment we don't let this happen -- in principle it should // not happen; once we have valid DH params at one point we don't // need to change them again. // For the future maybe it could make sense to store the DH params // in the InfCertificateCredentials struct, so that their lifetime // is coupled. g_assert(old_dh_params == NULL); } void Gobby::CertificateManager::set_private_key(gnutls_x509_privkey_t key, const GError* error) { g_assert(key == NULL || error == NULL); gnutls_x509_privkey_t old_key = m_key; InfCertificateChain* old_certificates = m_certificates; if(old_certificates != NULL) inf_certificate_chain_ref(old_certificates); m_key = key; if(m_key_error != NULL) g_error_free(m_key_error); if(error != NULL) m_key_error = g_error_copy(error); else m_key_error = NULL; // Attempt to re-load the certificate if there was an error -- maybe // the new key fixes the problem. This makes sure that if the new key // is compatible to the certificate, the certificate is loaded. // TODO: It would be nicer to still keep the certificate in memory // when it does not match the key, so we don't need to re-load it. // Basically we just need to be able to handle the case when both // cert_error and certificate itself are non-NULL. if(m_certificate_error != NULL) { load_certificate(); } else { check_certificate_signature(); make_credentials(); } // Note that this relies on the fact that // gnutls_certificate_set_x509_key makes a copy of the key // and certificate if(old_certificates != NULL) inf_certificate_chain_unref(old_certificates); if(old_key != NULL) gnutls_x509_privkey_deinit(old_key); } void Gobby::CertificateManager::set_private_key(gnutls_x509_privkey_t key, const char* filename, const GError* error) { if(error != NULL) { g_assert(key == NULL); set_private_key(NULL, error); } else { GError* local_error = NULL; if(filename != NULL) { m_conn_key_file.block(); m_preferences.security.key_file = filename; m_conn_key_file.unblock(); if(key != NULL) { inf_cert_util_write_private_key( key, filename, &local_error); } } if(local_error != NULL) { set_private_key(NULL, local_error); if(key != NULL) gnutls_x509_privkey_deinit(key); g_error_free(local_error); } else { set_private_key(key, NULL); } } } void Gobby::CertificateManager::set_certificates(gnutls_x509_crt_t* certs, guint n_certs, const GError* error) { g_assert(n_certs == 0 || error == NULL); InfCertificateChain* old_certificates = m_certificates; m_certificates = NULL; if(n_certs > 0) m_certificates = inf_certificate_chain_new(certs, n_certs); else m_certificates = NULL; if(m_certificate_error != NULL) g_error_free(m_certificate_error); if(error != NULL) m_certificate_error = g_error_copy(error); else m_certificate_error = NULL; check_certificate_signature(); make_credentials(); // Note that this relies on the fact that // gnutls_certificate_set_x509_key makes a copy of the certificates if(old_certificates != NULL) inf_certificate_chain_unref(old_certificates); } void Gobby::CertificateManager::set_certificates(gnutls_x509_crt_t* certs, guint n_certs, const char* filename, const GError* error) { if(error != NULL) { g_assert(n_certs == 0); set_certificates(NULL, 0, error); } else { GError* local_error = NULL; if(filename != NULL) { m_conn_certificate_file.block(); m_preferences.security.certificate_file = filename; m_conn_certificate_file.unblock(); if(n_certs > 0) { inf_cert_util_write_certificate( certs, n_certs, filename, &local_error); } } if(local_error != NULL) { set_certificates(NULL, 0, local_error); for(guint i = 0; i < n_certs; ++i) gnutls_x509_crt_deinit(certs[i]); g_error_free(local_error); } else { set_certificates(certs, n_certs, NULL); } } } void Gobby::CertificateManager::load_dh_params() { const std::string filename = config_filename("dh_params.pem"); GError* error = NULL; gnutls_dh_params_t dh_params = inf_cert_util_read_dh_params(filename.c_str(), &error); if(error != NULL) { if(error->domain != G_FILE_ERROR || error->code != G_FILE_ERROR_NOENT) { g_warning(_("Failed to read Diffie-Hellman " "parameters: %s"), error->message); } g_error_free(error); } if(dh_params != NULL) set_dh_params(dh_params); } void Gobby::CertificateManager::load_key() { const std::string& filename = m_preferences.security.key_file; if(!filename.empty()) { GError* error = NULL; gnutls_x509_privkey_t key = inf_cert_util_read_private_key( filename.c_str(), &error); set_private_key(key, error); if(error != NULL) g_error_free(error); } else { set_private_key(NULL, NULL); } } void Gobby::CertificateManager::load_certificate() { const std::string& filename = m_preferences.security.certificate_file; if(!filename.empty()) { GError* error = NULL; GPtrArray* array = inf_cert_util_read_certificate( filename.c_str(), NULL, &error); if(array != NULL) { g_assert(error == NULL); guint n_certs = array->len; gnutls_x509_crt_t* certs = reinterpret_cast( g_ptr_array_free(array, FALSE)); if(n_certs > 0) { set_certificates(certs, n_certs, NULL); } else { g_set_error( &error, g_quark_from_static_string( "GOBBY_CERTIFICATE_MANAGER_" "ERROR"), 1, "%s", _("File does not contain a " "X.509 certificate") ); set_certificates(NULL, 0, error); g_error_free(error); g_free(certs); } } else { g_assert(error != NULL); set_certificates(NULL, 0, error); g_error_free(error); } } else { set_certificates(NULL, 0, NULL); } } void Gobby::CertificateManager::load_trust() { std::vector old_trust; old_trust.swap(m_trust); GError* error = NULL; const std::string& filename = m_preferences.security.trusted_cas; if(!filename.empty()) { GPtrArray* array = inf_cert_util_read_certificate( filename.c_str(), NULL, &error); if(array != NULL) { guint n_certs = array->len; gnutls_x509_crt_t* certs = reinterpret_cast( g_ptr_array_free(array, FALSE)); m_trust.assign(certs, certs + n_certs); g_free(certs); } } if(m_trust_error != NULL) g_error_free(m_trust_error); m_trust_error = error; make_credentials(); // Note that this relies on the fact that // gnutls_certificate_set_x509_trust makes a copy of the certificates for(unsigned int i = 0; i < old_trust.size(); ++i) gnutls_x509_crt_deinit(old_trust[i]); } void Gobby::CertificateManager::check_certificate_signature() { if(!m_key || !m_certificates) return; g_assert(m_key_error == NULL && m_certificate_error == NULL); gnutls_x509_crt_t crt = inf_certificate_chain_get_own_certificate(m_certificates); if(!inf_cert_util_check_certificate_key(crt, m_key)) { inf_certificate_chain_unref(m_certificates); m_certificates = NULL; g_set_error( &m_certificate_error, g_quark_from_static_string( "GOBBY_CERTIFICATE_MANAGER_ERROR"), 0, "%s", _("Certificate does not belong to the chosen key") ); } } void Gobby::CertificateManager::make_credentials() { InfCertificateCredentials* creds = inf_certificate_credentials_new(); gnutls_certificate_credentials_t gnutls_creds = inf_certificate_credentials_get(creds); if(m_preferences.security.authentication_enabled && m_key != NULL && m_certificates != NULL) { gnutls_certificate_set_x509_key( gnutls_creds, inf_certificate_chain_get_raw(m_certificates), inf_certificate_chain_get_n_certificates(m_certificates), m_key ); } if(m_preferences.security.use_system_trust) { const int n_cas = gnutls_certificate_set_x509_system_trust( gnutls_creds); if(n_cas < 0) { g_warning("Failed to add system CAs: %s\n", gnutls_strerror(n_cas)); } } if(!m_trust.empty()) { gnutls_certificate_set_x509_trust( gnutls_creds, &m_trust[0], m_trust.size() ); } if(m_dh_params != NULL) gnutls_certificate_set_dh_params(gnutls_creds, m_dh_params); gnutls_certificate_set_verify_flags( gnutls_creds, GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT); InfCertificateCredentials* old_creds = m_credentials; m_credentials = creds; m_signal_credentials_changed.emit(); if(old_creds != NULL) inf_certificate_credentials_unref(old_creds); } void Gobby::CertificateManager::on_key_file_changed() { load_key(); //make_credentials(); } void Gobby::CertificateManager::on_certificate_file_changed() { load_certificate(); //make_credentials(); } void Gobby::CertificateManager::on_trusted_cas_changed() { load_trust(); //make_credentials(); } void Gobby::CertificateManager::on_authentication_enabled_changed() { make_credentials(); } gobby-0.6.0/code/core/selfhoster.cpp0000664000175000017500000002207714003367605014302 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/selfhoster.hpp" #include "util/i18n.hpp" #include Gobby::SelfHoster::SelfHoster(InfIo* io, InfCommunicationManager* communication_manager, InfLocalPublisher* publisher, InfSaslContext* sasl_context, StatusBar& status_bar, CertificateManager& cert_manager, const Preferences& preferences): m_sasl_context(sasl_context), m_status_bar(status_bar), m_cert_manager(cert_manager), m_preferences(preferences), m_dh_params_loaded(false), m_info_handle(status_bar.invalid_handle()), m_dh_params_message_handle(status_bar.invalid_handle()), m_directory(infd_directory_new(io, NULL, communication_manager)), m_server(io, publisher) { inf_sasl_context_ref(m_sasl_context); if(m_preferences.user.keep_local_documents) { const std::string directory = m_preferences.user.host_directory; InfdFilesystemStorage* storage = infd_filesystem_storage_new(directory.c_str()); g_object_set(G_OBJECT(m_directory), "storage", storage, NULL); g_object_unref(storage); } InfdServerPool* pool = infd_server_pool_new(m_directory); m_server.set_pool(pool); g_object_unref(pool); m_preferences.user.require_password.signal_changed().connect( sigc::mem_fun( *this, &SelfHoster::on_require_password_changed)); /*m_preferences.user.password.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::on_password));*/ m_preferences.user.allow_remote_access.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.user.port.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.user.keep_local_documents.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.user.host_directory.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.security.authentication_enabled.signal_changed(). connect(sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.security.policy.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.network.keepalive.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_cert_manager.signal_credentials_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); apply_preferences(); } Gobby::SelfHoster::~SelfHoster() { g_object_unref(m_directory); inf_sasl_context_unref(m_sasl_context); } bool Gobby::SelfHoster::ensure_dh_params() { // If they are loaded already: perfect. Note this does not mean we // actually have them, this flag is also set if we attempted to // generate the parameters but the generation failed. if(m_dh_params_loaded) return true; // Load from certificate manager, if available if(m_cert_manager.get_dh_params() != NULL) { m_dh_params_loaded = true; return true; } // Otherwise go and create a new set of parameters if(m_dh_params_handle.get() == NULL) { m_dh_params_message_handle = m_status_bar.add_info_message( _("Generating 2048-bit Diffie-Hellman " "parameters...")); m_dh_params_handle = create_dh_params( 2048, sigc::mem_fun(*this, &SelfHoster::on_dh_params_done)); } return false; } void Gobby::SelfHoster::on_dh_params_done(const DHParamsGeneratorHandle* hndl, gnutls_dh_params_t dh_params, const GError* error) { g_assert(m_dh_params_message_handle != m_status_bar.invalid_handle()); m_status_bar.remove_message(m_dh_params_message_handle); // Set this flag also when an error occured, to prevent trying to // re-generate the parameters all the time. m_dh_params_loaded = true; if(dh_params != NULL) { // Set the DH parameters in the certificate manager: this // will cause a credentials_changed notification, and we'll // retry starting the server. m_cert_manager.set_dh_params(dh_params); } else { m_status_bar.add_error_message( _("Failed to generate Diffie-Hellman parameters"), Glib::ustring::compose( _("This means that Perfect Forward Secrecy " "(PFS) is not available. Restart Gobby to " "re-try generating the parameters. The " "specific error was:\n\n%1"), error->message)); } } void Gobby::SelfHoster::directory_foreach_func_close_static( InfXmlConnection* connection, gpointer user_data) { inf_xml_connection_close(connection); } void Gobby::SelfHoster::directory_foreach_func_set_sasl_context_static( InfXmlConnection* connection, gpointer user_data) { g_assert(INF_IS_XMPP_CONNECTION(connection)); SelfHoster* hoster = static_cast(user_data); inf_xmpp_connection_reset_sasl_authentication( INF_XMPP_CONNECTION(connection), hoster->m_sasl_context, hoster->get_sasl_mechanisms()); } const char* Gobby::SelfHoster::get_sasl_mechanisms() const { if(m_preferences.user.require_password) return "PLAIN"; else return "ANONYMOUS"; } void Gobby::SelfHoster::on_require_password_changed() { // Update SASL context and mechanisms for new connections: m_server.set_sasl_context(m_sasl_context, get_sasl_mechanisms()); // Also update the SASL context for all existing connections. This is // important, so that the new password requirement setting also // affects already connected but not yet authorized clients. infd_directory_foreach_connection( m_directory, directory_foreach_func_set_sasl_context_static, this); } void Gobby::SelfHoster::apply_preferences() { // Update directory storage if(m_preferences.user.keep_local_documents) { InfdStorage* storage = infd_directory_get_storage(m_directory); g_assert(storage == NULL || INFD_IS_FILESYSTEM_STORAGE(storage)); InfdFilesystemStorage* fs_storage = INFD_FILESYSTEM_STORAGE(storage); const std::string new_directory = m_preferences.user.host_directory; bool set_new_storage = true; if(fs_storage != NULL) { gchar* root_directory; g_object_get( G_OBJECT(fs_storage), "root-directory", &root_directory, NULL); if(strcmp(root_directory, new_directory.c_str()) == 0) set_new_storage = false; g_free(root_directory); } if(set_new_storage) { fs_storage = infd_filesystem_storage_new( new_directory.c_str()); g_object_set( G_OBJECT(m_directory), "storage", fs_storage, NULL); g_object_unref(fs_storage); } } else { if(infd_directory_get_storage(m_directory) != NULL) { g_object_set( G_OBJECT(m_directory), "storage", NULL, NULL); } } // Remove old statusbar message, if any if(m_info_handle != m_status_bar.invalid_handle()) { m_status_bar.remove_message(m_info_handle); m_info_handle = m_status_bar.invalid_handle(); } // Close server and all connections if no access is required if(!m_preferences.user.allow_remote_access) { infd_directory_foreach_connection( m_directory, directory_foreach_func_close_static, this); if(m_server.is_open()) m_server.close(); return; } // Okay, we want to share our documents, so let's try to start a // server for it. // Make sure TLS credentials are available. if(m_preferences.security.policy != INF_XMPP_CONNECTION_SECURITY_ONLY_UNSECURED && (m_preferences.security.authentication_enabled != true || m_cert_manager.get_private_key() == NULL || m_cert_manager.get_certificates() == NULL)) { m_info_handle = m_status_bar.add_info_message( _("In order to start sharing your documents, " "choose a private key and certificate or " "create a new pair in the preferences")); return; } // Make sure we have DH parameters if(!ensure_dh_params()) return; // Okay, go and open a server. If the server is already open the // command below will only change the port and/or security policy. try { const InfKeepalive& keepalive = m_preferences.network.keepalive; m_server.open(m_preferences.user.port, &keepalive, m_preferences.security.policy, m_cert_manager.get_credentials(), m_sasl_context, get_sasl_mechanisms()); } catch(const std::exception& ex) { m_status_bar.add_error_message(_("Failed to share documents"), ex.what()); return; } } gobby-0.6.0/code/core/nodewatch.cpp0000664000175000017500000000505314003367605014073 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/nodewatch.hpp" Gobby::NodeWatch::NodeWatch(InfBrowser* browser, const InfBrowserIter* iter): m_browser(browser), m_node_removed_handler(0), m_notify_status_handler(0) { if(iter != NULL) m_iter = *iter; else m_iter.node = NULL; // TODO: (weak-)ref browser? InfBrowserStatus status; g_object_get(G_OBJECT(m_browser), "status", &status, NULL); g_assert(iter == NULL || status == INF_BROWSER_OPEN); if(m_iter.node != NULL) { m_notify_status_handler = g_signal_connect( browser, "notify::status", G_CALLBACK(on_notify_status_static), this); m_node_removed_handler = g_signal_connect( m_browser, "node-removed", G_CALLBACK(on_node_removed_static), this); } } Gobby::NodeWatch::~NodeWatch() { if(m_browser != NULL) reset(); } void Gobby::NodeWatch::on_notify_status() { InfBrowserStatus status; g_object_get(G_OBJECT(m_browser), "status", &status, NULL); // Connection was closed: Node is no longer reachable if(status != INF_BROWSER_OPEN) { reset(); m_signal_node_removed.emit(); } } void Gobby::NodeWatch::on_node_removed(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request) { g_assert(browser == m_browser); g_assert(m_iter.node != NULL); if(inf_browser_is_ancestor(m_browser, iter, &m_iter)) { reset(); m_signal_node_removed.emit(); } } void Gobby::NodeWatch::reset() { g_assert(m_browser != NULL); if(m_notify_status_handler != 0) { g_signal_handler_disconnect( m_browser, m_notify_status_handler); } if(m_node_removed_handler != 0) { g_signal_handler_disconnect( m_browser, m_node_removed_handler); } m_iter.node = NULL; m_browser = NULL; } gobby-0.6.0/code/core/nodewatch.hpp0000664000175000017500000000474514003367605014107 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_NODE_WATCH_HPP_ #define _GOBBY_NODE_WATCH_HPP_ #include #include #include namespace Gobby { // Weak reference on a node in a browser. If iter is null, keeps a // reference to the browser itself. class NodeWatch { public: typedef sigc::signal SignalNodeRemoved; NodeWatch(InfBrowser* browser, const InfBrowserIter* iter); ~NodeWatch(); InfBrowser* get_browser() const { return m_browser; } const InfBrowserIter* get_browser_iter() const { g_assert(m_browser); if(m_iter.node != NULL) return &m_iter; else return NULL; } SignalNodeRemoved signal_node_removed() const { return m_signal_node_removed; } protected: static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_status(); } static void on_node_removed_static(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request, gpointer user_data) { static_cast(user_data)-> on_node_removed(browser, iter, request); } void on_notify_status(); void on_node_removed(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request); void reset(); InfBrowser* m_browser; InfXmlConnection* m_connection; InfBrowserIter m_iter; gulong m_node_removed_handler; gulong m_notify_status_handler; SignalNodeRemoved m_signal_node_removed; }; } #endif // _GOBBY_NODE_WATCH_HPP_ gobby-0.6.0/code/core/Makefile.am0000664000175000017500000000402314003367605013443 00000000000000include code/core/gobject/Makefile.am gobby_0_5_SOURCES += \ code/core/applicationactions.cpp \ code/core/browser.cpp \ code/core/certificatemanager.cpp \ code/core/chatsessionview.cpp \ code/core/chattablabel.cpp \ code/core/closableframe.cpp \ code/core/connectionmanager.cpp \ code/core/credentialsgenerator.cpp \ code/core/documentinfostorage.cpp \ code/core/filechooser.cpp \ code/core/folder.cpp \ code/core/foldermanager.cpp \ code/core/huebutton.cpp \ code/core/knownhoststorage.cpp \ code/core/menumanager.cpp \ code/core/nodewatch.cpp \ code/core/noteplugin.cpp \ code/core/preferences.cpp \ code/core/selfhoster.cpp \ code/core/server.cpp \ code/core/sessionuserview.cpp \ code/core/sessionview.cpp \ code/core/statusbar.cpp \ code/core/tablabel.cpp \ code/core/textsessionuserview.cpp \ code/core/textsessionview.cpp \ code/core/textundogrouping.cpp \ code/core/texttablabel.cpp \ code/core/titlebar.cpp \ code/core/toolbar.cpp \ code/core/userjoin.cpp \ code/core/userlist.cpp \ code/core/windowactions.cpp noinst_HEADERS += \ code/core/applicationactions.hpp \ code/core/browser.hpp \ code/core/certificatemanager.hpp \ code/core/chatsessionview.hpp \ code/core/chattablabel.hpp \ code/core/closableframe.hpp \ code/core/connectionmanager.hpp \ code/core/credentialsgenerator.hpp \ code/core/documentinfostorage.hpp \ code/core/filechooser.hpp \ code/core/folder.hpp \ code/core/foldermanager.hpp \ code/core/menumanager.hpp \ code/core/huebutton.hpp \ code/core/knownhoststorage.hpp \ code/core/nodewatch.hpp \ code/core/noteplugin.hpp \ code/core/preferences.hpp \ code/core/selfhoster.hpp \ code/core/server.hpp \ code/core/sessionuserview.hpp \ code/core/sessionview.hpp \ code/core/statusbar.hpp \ code/core/tablabel.hpp \ code/core/textsessionuserview.hpp \ code/core/textsessionview.hpp \ code/core/textundogrouping.hpp \ code/core/texttablabel.hpp \ code/core/titlebar.hpp \ code/core/toolbar.hpp \ code/core/userjoin.hpp \ code/core/userlist.hpp \ code/core/windowactions.hpp gobby-0.6.0/code/core/textsessionuserview.cpp0000664000175000017500000000417014003367605016300 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/textsessionuserview.hpp" Gobby::TextSessionUserView:: TextSessionUserView(TextSessionView& view, bool show_disconnected, Preferences::Option& opt_view, Preferences::Option& w): SessionUserView(view, show_disconnected, opt_view, w) { m_userlist.signal_user_activated().connect( sigc::mem_fun( *this, &TextSessionUserView::on_user_activated)); } void Gobby::TextSessionUserView::on_user_activated(InfUser* user) { g_assert(INF_TEXT_IS_USER(user)); InfTextUser* text_user = INF_TEXT_USER(user); // TODO: Instead, move this code to // TextSessionView::scroll_to_cursor_position which should take // an additional InfTextUser* argument GtkSourceBuffer* buffer = get_session_view().get_text_buffer(); GtkSourceView* view = get_session_view().get_text_view(); // Use a mark to make sure we scroll it onscreen GtkTextIter iter; gtk_text_buffer_get_iter_at_offset( GTK_TEXT_BUFFER(buffer), &iter, inf_text_user_get_caret_position(text_user)); GtkTextMark* mark = gtk_text_buffer_create_mark( GTK_TEXT_BUFFER(buffer), NULL, &iter, FALSE); gtk_text_view_scroll_to_mark( GTK_TEXT_VIEW(view), mark, 0.0, TRUE, 0.5, 0.5); gtk_text_buffer_delete_mark(GTK_TEXT_BUFFER(buffer), mark); } gobby-0.6.0/code/core/menumanager.cpp0000664000175000017500000000744314003367605014423 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "menumanager.hpp" #include #include namespace { bool language_sort_func(GtkSourceLanguage* lang1, GtkSourceLanguage* lang2) { // TODO: Speedup by using collation keys? // We should profile first. gchar* casefold1 = g_utf8_casefold( gtk_source_language_get_name(lang1), -1); gchar* casefold2 = g_utf8_casefold( gtk_source_language_get_name(lang2), -1); int ret = g_utf8_collate(casefold1, casefold2); g_free(casefold1); g_free(casefold2); return ret < 0; } } // anonymous namespace Gobby::MenuManager::MenuManager(GtkSourceLanguageManager* language_manager) { Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/menu.ui"); m_app_menu = Glib::RefPtr::cast_dynamic( builder->get_object("appmenu")); m_menu = Glib::RefPtr::cast_dynamic( builder->get_object("winmenu")); Glib::RefPtr highlight_mode_menu = get_highlight_mode_menu(); const gchar* const* language_ids = gtk_source_language_manager_get_language_ids( language_manager); if(language_ids != NULL) { typedef std::list LanguageList; typedef std::map LanguageMap; LanguageMap languages; for(const gchar* const* id = language_ids; *id != NULL; ++id) { GtkSourceLanguage* language = gtk_source_language_manager_get_language( language_manager, *id); if(gtk_source_language_get_hidden(language)) continue; const std::string section = gtk_source_language_get_section(language); languages[section].push_back(language); } for(LanguageMap::iterator iter = languages.begin(); iter != languages.end(); ++iter) { Glib::RefPtr submenu(Gio::Menu::create()); LanguageList& list = iter->second; list.sort(language_sort_func); for(LanguageList::const_iterator liter = list.begin(); liter != list.end(); ++liter) { GtkSourceLanguage* language = *liter; const std::string id = gtk_source_language_get_id(language); const std::string name = gtk_source_language_get_name(language); Glib::RefPtr item( Gio::MenuItem::create( name, Glib::ustring::compose( "win.highlight-mode" "('%1')", id))); submenu->append_item(item); } highlight_mode_menu->append_submenu( iter->first, submenu); } } } Glib::RefPtr Gobby::MenuManager::get_highlight_mode_menu() { // TODO: Is there a better way, like finding this by some // sort of ID? // TODO: This should be failsafe Glib::RefPtr view_menu = m_menu->get_item_link(2, Gio::MENU_LINK_SUBMENU); Glib::RefPtr last_section = view_menu->get_item_link( view_menu->get_n_items() - 1, Gio::MENU_LINK_SECTION); Glib::RefPtr highlight_mode = last_section->get_item_link(0, Gio::MENU_LINK_SUBMENU); return Glib::RefPtr::cast_dynamic(highlight_mode); } gobby-0.6.0/code/core/titlebar.cpp0000664000175000017500000000607614003367605013733 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/titlebar.hpp" Gobby::TitleBar::TitleBar(Gtk::Window& window, const Folder& folder): m_window(window), m_folder(folder), m_current_view(NULL) { folder.signal_document_removed().connect( sigc::mem_fun(*this, &TitleBar::on_document_removed)); folder.signal_document_changed().connect( sigc::mem_fun(*this, &TitleBar::on_document_changed)); on_document_changed(folder.get_current_document()); } Gobby::TitleBar::~TitleBar() { on_document_changed(NULL); } void Gobby::TitleBar::on_document_removed(SessionView& view) { // TODO: Isn't this called by Folder already? if(m_current_view == &view) on_document_changed(NULL); } void Gobby::TitleBar::on_document_changed(SessionView* view) { if(m_current_view != NULL) { InfSession* session = m_current_view->get_session(); InfBuffer* buffer = inf_session_get_buffer(session); g_signal_handler_disconnect(G_OBJECT(session), m_notify_status_handler); g_signal_handler_disconnect(G_OBJECT(buffer), m_modified_changed_handler); } m_current_view = view; if(view != NULL) { InfSession* session = view->get_session(); InfBuffer* buffer = inf_session_get_buffer(session); m_notify_status_handler = g_signal_connect( G_OBJECT(session), "notify::status", G_CALLBACK(on_notify_status_static), this); m_modified_changed_handler = g_signal_connect( G_OBJECT(buffer), "notify::modified", G_CALLBACK(on_notify_modified_static), this); } update_title(); } void Gobby::TitleBar::on_notify_status() { update_title(); } void Gobby::TitleBar::on_notify_modified() { update_title(); } void Gobby::TitleBar::update_title() { // TODO: Show path, as gedit does. This requires change notification // for document info storage. if(m_current_view != NULL) { InfSession* session = m_current_view->get_session(); InfBuffer* buffer = inf_session_get_buffer(session); InfSessionStatus status = inf_session_get_status(session); if(status == INF_SESSION_SYNCHRONIZING || !inf_buffer_get_modified(buffer)) { m_window.set_title( m_current_view->get_title() + " - Gobby"); } else { m_window.set_title( "*" + m_current_view->get_title() + " - Gobby"); } } else { m_window.set_title("Gobby"); } } gobby-0.6.0/code/core/server.hpp0000664000175000017500000000450614003367605013434 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SERVER_HPP_ #define _GOBBY_SERVER_HPP_ #include #include #include #include namespace Gobby { class Server { public: Server(InfIo* io, InfLocalPublisher* publisher); ~Server(); // Can throw; can be used on already open servers: void open(unsigned int port, const InfKeepalive* keepalive, InfXmppConnectionSecurityPolicy security_policy, InfCertificateCredentials* creds, InfSaslContext* sasl_context, const char* sasl_mechanisms); void close(); bool is_open() const; unsigned int get_port() const; // Set new keepalive settings on running server, for new connections: void set_keepalive(const InfKeepalive* keepalive); // Use new credentials on running server, for new connections: void set_credentials(InfXmppConnectionSecurityPolicy security_policy, InfCertificateCredentials* credentials); // Set SASL context, for new connections. void set_sasl_context(InfSaslContext* sasl_context, const char* m_sasl_mechanisms); // Set a server pool to which to add the servers, and which to // use for publishing with the publisher. void set_pool(InfdServerPool* pool); protected: InfIo* m_io; InfLocalPublisher* m_publisher; InfdXmppServer* m_xmpp4; InfdXmppServer* m_xmpp6; InfdServerPool* m_pool; }; } #endif // _GOBBY_SERVER_HPP_ gobby-0.6.0/code/core/filechooser.cpp0000664000175000017500000000426314003367605014423 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/filechooser.hpp" #include "util/i18n.hpp" #include #include Gobby::FileChooser::Dialog::Dialog(Gobby::FileChooser& chooser, Gtk::Window& parent, const Glib::ustring& title, Gtk::FileChooserAction action): Gtk::FileChooserDialog(parent, title, action), m_chooser(chooser) { // Set defaults depending on action switch(action) { case Gtk::FILE_CHOOSER_ACTION_SAVE: add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL); add_button(_("_Save"), Gtk::RESPONSE_ACCEPT); set_do_overwrite_confirmation(true); break; case Gtk::FILE_CHOOSER_ACTION_OPEN: add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL); add_button(_("_Open"), Gtk::RESPONSE_ACCEPT); break; default: g_assert_not_reached(); break; } set_local_only(false); set_current_folder_uri(m_chooser.get_current_folder_uri()); } Gobby::FileChooser::Dialog::~Dialog() { m_chooser.set_current_folder_uri(get_current_folder_uri()); } Gobby::FileChooser::FileChooser(): m_current_folder_uri(Glib::filename_to_uri(Glib::get_current_dir())) { } const std::string& Gobby::FileChooser::get_current_folder_uri() const { return m_current_folder_uri; } void Gobby::FileChooser::set_current_folder_uri(const std::string& uri) { m_current_folder_uri = uri; } gobby-0.6.0/code/core/tablabel.hpp0000664000175000017500000000500214003367605013664 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TABLABEL_HPP_ #define _GOBBY_TABLABEL_HPP_ #include "core/sessionview.hpp" #include #include namespace Gobby { class Folder; class TabLabel: public Gtk::Grid { public: typedef Glib::SignalProxy0 SignalCloseRequest; TabLabel(Folder& folder, SessionView& view, const Glib::ustring& active_icon_name); virtual ~TabLabel(); SignalCloseRequest signal_close_request() { return m_button.signal_clicked(); } protected: static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_notify_status(); } static void on_notify_subscription_group_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_subscription_group(); } void on_folder_document_changed(SessionView* view); // Can be overriden by derived classes: virtual void on_active_user_changed(InfUser* user); virtual void on_notify_status(); virtual void on_notify_subscription_group(); virtual void on_activate(); // To be called by derived classes: void set_changed(); Folder& m_folder; SessionView& m_view; Gtk::Image m_icon; Gtk::Label m_title; CloseButton m_button; bool m_changed; private: void update_icon(); void update_color(); const Glib::ustring m_active_icon_name; // Whether the document was changed since it has been active. gulong m_notify_status_handle; gulong m_notify_subscription_group_handle; }; } #endif // _GOBBY_TABLABEL_HPP_ gobby-0.6.0/code/core/textundogrouping.hpp0000664000175000017500000000377214003367605015557 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TEXTUNDOGROUPING_HPP_ #define _GOBBY_TEXTUNDOGROUPING_HPP_ #include #include #include #include namespace Gobby { class TextUndoGrouping { public: TextUndoGrouping(InfAdoptedAlgorithm* algorithm, InfTextUser* user, GtkTextBuffer* buffer); ~TextUndoGrouping(); guint get_undo_size() const; guint get_redo_size() const; InfTextUndoGrouping* get_inf_grouping() { return m_grouping; } protected: static void on_begin_user_action_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)-> on_begin_user_action(); } static void on_end_user_action_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)-> on_end_user_action(); } void on_begin_user_action(); void on_end_user_action(); GtkTextBuffer* m_buffer; InfTextUndoGrouping* m_grouping; gulong m_begin_user_action_handle; gulong m_end_user_action_handle; }; } #endif // _GOBBY_TEXTUNDOGROUPING_HPP_ gobby-0.6.0/code/core/chatsessionview.cpp0000664000175000017500000000375614003367605015345 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/chatsessionview.hpp" Gobby::ChatSessionView::ChatSessionView(InfChatSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, Preferences& preferences): SessionView(INF_SESSION(session), title, path, hostname), m_preferences(preferences), m_chat(INF_GTK_CHAT(inf_gtk_chat_new())) { inf_gtk_chat_set_session(m_chat, session); gtk_widget_show(GTK_WIDGET(m_chat)); gtk_grid_attach_next_to(GTK_GRID(gobj()), GTK_WIDGET(m_chat), GTK_WIDGET(m_info_frame.gobj()), GTK_POS_BOTTOM, 1, 1); } InfUser* Gobby::ChatSessionView::get_active_user() const { return inf_gtk_chat_get_active_user(m_chat); } void Gobby::ChatSessionView::set_active_user(InfUser* user) { g_assert( user == NULL || inf_user_table_lookup_user_by_id( inf_session_get_user_table(INF_SESSION(m_session)), inf_user_get_id(INF_USER(user))) == INF_USER(user)); inf_gtk_chat_set_active_user(m_chat, user); active_user_changed(user); } gobby-0.6.0/code/core/foldermanager.hpp0000664000175000017500000001112314003367605014725 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FOLDERMANAGER_HPP_ #define _GOBBY_FOLDERMANAGER_HPP_ #include "core/browser.hpp" #include "core/folder.hpp" #include "core/userjoin.hpp" #include "core/documentinfostorage.hpp" #include #include namespace Gobby { // The FolderManager class manages the two folders, for text documents and // chat documents. On top of this, it also manages a relation of browser // entries to sessions and session proxies. class FolderManager: public sigc::trackable { public: typedef std::unique_ptr* UserJoinRef; typedef sigc::signal SignalDocumentAdded; typedef sigc::signal SignalDocumentRemoved; FolderManager(Browser& browser, DocumentInfoStorage& info_storage, Folder& text_folder, Folder& chat_folder); ~FolderManager(); const Folder& get_text_folder() const { return m_text_folder; } const Folder& get_chat_folder() const { return m_chat_folder; } // Add a SessionView for the given session void add_document(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, UserJoinRef userjoin); void remove_document(SessionView& view); SessionView* lookup_document(InfSession* session) const; void switch_to_document(SessionView& view); // Emitted whenever a document has been added, either for text or // for chat sessions. SignalDocumentAdded signal_document_added() const { return m_signal_document_added; } SignalDocumentRemoved signal_document_removed() const { return m_signal_document_removed; } protected: static void on_set_browser_static(InfGtkBrowserModel* model, GtkTreePath* path, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser, gpointer user_data) { static_cast(user_data)->on_set_browser( model, iter, old_browser, new_browser); } static void on_unsubscribe_session_static(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, InfRequest* request, gpointer user_data) { static_cast(user_data)-> on_unsubscribe_session(browser, iter, proxy, request); } void on_set_browser(InfGtkBrowserModel* model, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser); void on_unsubscribe_session(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, InfRequest* request); void on_text_document_added(SessionView& view); void on_chat_document_added(SessionView& view); void on_document_removed(SessionView& view); Browser& m_browser; DocumentInfoStorage& m_info_storage; Folder& m_text_folder; Folder& m_chat_folder; sigc::connection m_text_document_added_connection; sigc::connection m_chat_document_added_connection; gulong m_set_browser_handler; class BrowserInfo; typedef std::map BrowserMap; BrowserMap m_browser_map; class SessionInfo; typedef std::map SessionMap; SessionMap m_session_map; SignalDocumentAdded m_signal_document_added; SignalDocumentRemoved m_signal_document_removed; }; } #endif // _GOBBY_FOLDERMANAGER_HPP_ gobby-0.6.0/code/core/texttablabel.hpp0000664000175000017500000000573314003367605014604 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TEXTTABLABEL_HPP_ #define _GOBBY_TEXTTABLABEL_HPP_ #include "core/textsessionview.hpp" #include "core/tablabel.hpp" namespace Gobby { class TextTabLabel: public TabLabel { public: TextTabLabel(Folder& folder, TextSessionView& view); ~TextTabLabel(); protected: static void on_modified_changed_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)->on_modified_changed(); } static void on_text_erased_static(InfTextBuffer* buffer, guint position, InfTextChunk* chunk, InfTextUser* author, gpointer user_data) { static_cast(user_data)->on_changed(author); } static void on_text_inserted_static(InfTextBuffer* buffer, guint position, InfTextChunk* text, InfTextUser* author, gpointer user_data) { static_cast(user_data)->on_changed(author); } virtual void on_style_updated(); virtual void on_notify_status(); // override virtual void on_activate(); void on_modified_changed(); void on_changed(InfTextUser* author); Gtk::Label m_dots; private: void update_modified(); void update_dot_char(); void update_dots(); gunichar m_dot_char; gulong m_modified_changed_handle; gulong m_erase_text_handle; gulong m_insert_text_handle; class UserWatcher { public: UserWatcher(TextTabLabel* label, InfTextUser* user); UserWatcher(const UserWatcher& other); ~UserWatcher(); InfTextUser* get_user() const; bool operator==(InfTextUser* other_user) const; private: void connect(); void disconnect(); static void on_notify_hue(GObject* user_object, GParamSpec* spec, gpointer user_data); TabLabel* m_label; InfTextUser* m_user; gulong m_handle; }; typedef std::list UserWatcherList; UserWatcherList m_changed_by; }; } #endif // _GOBBY_TEXTTABLABEL_HPP_ gobby-0.6.0/code/core/sessionuserview.cpp0000664000175000017500000000721414003367605015375 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/sessionuserview.hpp" #include "core/closableframe.hpp" #include "util/i18n.hpp" // TODO: Consider using a single user list for all SessionViews, reparenting // into the current SessionUserView's frame. Keep dummy widgets in other // SessionUserViews so text does not resize. // Or, maybe more favorable, just put the userlist outside of the notebook, // but keep the notebook tabs on top of the userlist. Gobby::SessionUserView::SessionUserView(SessionView& view, bool show_disconnected, Preferences::Option& opt_view, Preferences::Option& w): m_view(view), m_userlist_width(w), m_userlist(inf_session_get_user_table(view.get_session())) { m_userlist.show(); m_userlist.set_show_disconnected(show_disconnected); Gtk::Frame* frame = Gtk::manage(new ClosableFrame( _("User List"), "user-list", opt_view)); frame->set_shadow_type(Gtk::SHADOW_IN); frame->add(m_userlist); // frame manages visibility itself pack1(view, true, false); pack2(*frame, false, false); } void Gobby::SessionUserView::on_size_allocate(Gtk::Allocation& allocation) { Gtk::HPaned::on_size_allocate(allocation); // Setup initial paned position. We can't do this simply every time // on_size_allocate() is called since this would lead to an endless // loop somehow when the userlist width is changed forcefully // (for example by a m_view.set_info() requiring much width). if(!m_doc_userlist_width_changed_connection.connected()) { Glib::SignalProxyProperty proxy = property_position().signal_changed(); m_doc_userlist_width_changed_connection = proxy.connect(sigc::mem_fun( *this, &SessionUserView:: on_doc_userlist_width_changed)); Preferences::Option& option = m_userlist_width; m_pref_userlist_width_changed_connection = option.signal_changed().connect(sigc::mem_fun( *this, &SessionUserView:: on_pref_userlist_width_changed)); int desired_position = get_width() - m_userlist_width; desired_position = std::min( desired_position, property_max_position()); if(get_position() != desired_position) set_position(desired_position); } } void Gobby::SessionUserView::on_doc_userlist_width_changed() { unsigned int userlist_width = get_width() - get_position(); if(m_userlist_width != userlist_width) { m_pref_userlist_width_changed_connection.block(); m_userlist_width = userlist_width; m_pref_userlist_width_changed_connection.unblock(); } } void Gobby::SessionUserView::on_pref_userlist_width_changed() { int position = get_width() - m_userlist_width; if(get_position() != position) { m_doc_userlist_width_changed_connection.block(); set_position(position); m_doc_userlist_width_changed_connection.unblock(); } } gobby-0.6.0/code/core/applicationactions.cpp0000664000175000017500000000210314003367605015774 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "applicationactions.hpp" Gobby::ApplicationActions::ApplicationActions(Gio::ActionMap& map): quit(map.add_action("quit")), preferences(map.add_action("preferences")), help(map.add_action("help")), about(map.add_action("about")) { } gobby-0.6.0/code/core/closableframe.cpp0000664000175000017500000000467514003367605014727 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/closableframe.hpp" #include "util/closebutton.hpp" #include #include Gobby::ClosableFrame::ClosableFrame(const Glib::ustring& title, const Glib::ustring& icon_name, Preferences::Option& option): m_option(option), m_allow_visible(true) { CloseButton* button = Gtk::manage(new CloseButton); button->set_hexpand(true); button->set_halign(Gtk::ALIGN_END); button->signal_clicked().connect( sigc::mem_fun(*this, &ClosableFrame::on_clicked)); m_option.signal_changed().connect( sigc::mem_fun(*this, &ClosableFrame::on_option)); button->show(); Gtk::Image* image = Gtk::manage( new Gtk::Image); image->set_from_icon_name(icon_name, Gtk::ICON_SIZE_MENU); image->show(); Gtk::Label* label_title = Gtk::manage( new Gtk::Label(title, Gtk::ALIGN_START)); label_title->show(); m_grid.set_border_width(6); m_grid.set_column_spacing(6); m_grid.set_row_spacing(6); m_grid.attach(*image, 0, 0, 1, 1); m_grid.attach(*label_title, 1, 0, 1, 1); m_grid.attach(*button, 2, 0, 1, 1); m_grid.show(); add(m_grid); on_option(); } void Gobby::ClosableFrame::set_allow_visible(bool allow_visible) { m_allow_visible = allow_visible; if(m_option && m_allow_visible) show(); else hide(); } void Gobby::ClosableFrame::on_add(Gtk::Widget* widget) { if(widget == &m_grid) Gtk::Frame::on_add(widget); else m_grid.attach(*widget, 0, 1, 3, 1); } void Gobby::ClosableFrame::on_clicked() { m_option = false; } void Gobby::ClosableFrame::on_option() { if(m_option && m_allow_visible) show(); else hide(); } gobby-0.6.0/code/core/windowactions.hpp0000664000175000017500000000512714003367605015016 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_WINDOWACTIONS_HPP_ #define _GOBBY_WINDOWACTIONS_HPP_ #include "core/preferences.hpp" #include namespace Gobby { class WindowActions { public: WindowActions(Gio::ActionMap& map, const Preferences& preferences); const Glib::RefPtr new_document; const Glib::RefPtr open; const Glib::RefPtr open_location; const Glib::RefPtr save; const Glib::RefPtr save_as; const Glib::RefPtr save_all; const Glib::RefPtr export_html; const Glib::RefPtr connect; const Glib::RefPtr close; const Glib::RefPtr undo; const Glib::RefPtr redo; const Glib::RefPtr cut; const Glib::RefPtr copy; const Glib::RefPtr paste; const Glib::RefPtr find; const Glib::RefPtr find_next; const Glib::RefPtr find_prev; const Glib::RefPtr find_replace; const Glib::RefPtr goto_line; const Glib::RefPtr hide_user_colors; const Glib::RefPtr fullscreen; const Glib::RefPtr zoom_in; const Glib::RefPtr zoom_out; const Glib::RefPtr view_toolbar; const Glib::RefPtr view_statusbar; const Glib::RefPtr view_browser; const Glib::RefPtr view_chat; const Glib::RefPtr view_document_userlist; const Glib::RefPtr view_chat_userlist; const Glib::RefPtr highlight_mode; }; } #endif // _GOBBY_WINDOWACTIONS_HPP_ gobby-0.6.0/code/core/toolbar.hpp0000664000175000017500000000236214003367605013566 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TOOLBAR_HPP_ #define _GOBBY_TOOLBAR_HPP_ #include "core/preferences.hpp" #include #include namespace Gobby { class Toolbar: public Gtk::Grid { public: Toolbar(const Preferences& preferences); private: void on_toolbar_style_changed(); void on_show_toolbar_changed(); const Preferences& m_preferences; Gtk::Toolbar* m_toolbar; }; } #endif // _GOBBY_TOOLBAR_HPP_ gobby-0.6.0/code/core/windowactions.cpp0000664000175000017500000000517714003367605015016 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "windowactions.hpp" Gobby::WindowActions::WindowActions(Gio::ActionMap& map, const Preferences& preferences): new_document(map.add_action("new")), open(map.add_action("open")), open_location(map.add_action("open-location")), save(map.add_action("save")), save_as(map.add_action("save-as")), save_all(map.add_action("save-all")), export_html(map.add_action("export-html")), connect(map.add_action("connect")), close(map.add_action("close")), undo(map.add_action("undo")), redo(map.add_action("redo")), cut(map.add_action("cut")), copy(map.add_action("copy")), paste(map.add_action("paste")), find(map.add_action("find")), find_next(map.add_action("find-next")), find_prev(map.add_action("find-prev")), find_replace(map.add_action("find-replace")), goto_line(map.add_action("goto-line")), hide_user_colors(map.add_action("hide-user-colors")), fullscreen(map.add_action_bool("fullscreen", false)), zoom_in(map.add_action("zoom-in")), zoom_out(map.add_action("zoom-out")), view_toolbar(map.add_action_bool( "view-toolbar", static_cast(preferences.appearance.show_toolbar))), view_statusbar(map.add_action_bool( "view-statusbar", static_cast(preferences.appearance.show_statusbar))), view_browser(map.add_action_bool( "view-browser", static_cast(preferences.appearance.show_browser))), view_chat(map.add_action_bool( "view-chat", static_cast(preferences.appearance.show_chat))), view_document_userlist(map.add_action_bool( "view-document-userlist", static_cast( preferences.appearance.show_document_userlist))), view_chat_userlist(map.add_action_bool( "view-chat-userlist", static_cast( preferences.appearance.show_chat_userlist))), highlight_mode(map.add_action_radio_string("highlight-mode", "")) { } gobby-0.6.0/code/core/applicationactions.hpp0000664000175000017500000000241014003367605016002 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_APPLICATIONACTIONS_HPP_ #define _GOBBY_APPLICATIONACTIONS_HPP_ #include namespace Gobby { class ApplicationActions { public: ApplicationActions(Gio::ActionMap& map); const Glib::RefPtr quit; const Glib::RefPtr preferences; const Glib::RefPtr help; const Glib::RefPtr about; }; } #endif // _GOBBY_APPLICATIONACTIONS_HPP_ gobby-0.6.0/code/core/userjoin.cpp0000664000175000017500000001570214003367605013757 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/userjoin.hpp" #include #include #include namespace { void retr_local_user_func(InfUser* user, gpointer user_data) { (*static_cast(user_data)) = user; } std::vector::iterator find_name_param( std::vector& params) { for(std::vector::iterator iter = params.begin(); iter != params.end(); ++iter) { if(std::strcmp(iter->name, "name") == 0) return iter; } g_assert_not_reached(); return params.end(); } } Gobby::UserJoin::UserJoin(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, std::unique_ptr param_provider): m_node(browser, iter), m_proxy(proxy), m_param_provider(std::move(param_provider)), m_synchronization_complete_handler(0), m_request(NULL), m_retry_index(1), m_user(NULL), m_error(NULL) { g_object_ref(m_proxy); InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); if(inf_session_get_status(session) == INF_SESSION_SYNCHRONIZING) { // If not yet synchronized, wait for synchronization until // attempting userjoin m_synchronization_complete_handler = g_signal_connect_after( G_OBJECT(session), "synchronization-complete", G_CALLBACK(on_synchronization_complete_static), this); } else { // Delay this call to make sure we don't emit the // finished signal right inside the constructor. // TODO: This might not be a problem, since the caller // can just check for completion with the get_user() // and get_error() methods. Glib::signal_idle().connect( sigc::bind_return(sigc::mem_fun( *this, &UserJoin::attempt_user_join), false)); } g_object_unref(session); } Gobby::UserJoin::~UserJoin() { if(m_synchronization_complete_handler) { InfSession* session; g_object_get(G_OBJECT(m_proxy), "session", &session, NULL); g_signal_handler_disconnect( session, m_synchronization_complete_handler); g_object_unref(session); } if(m_request) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_user_join_finished_static), this); g_object_unref(m_request); // TODO: Keep watching the request, and when it finishes, make // the user unavailable. This should typically not be // necessary, because on the server side user join requests // finish immediately, and on the client side the only thing // that leads to the UserJoinInfo being deleted is when the // document is removed and we are unsubscribed from the // session, in which case we do not care about the user join // anymore anyway. // However, it would be good to handle this, just in case. } if(m_error != NULL) g_error_free(m_error); g_object_unref(m_proxy); } void Gobby::UserJoin::UserJoin::on_synchronization_complete() { // Disconnect signal handler, so that we don't get notified when // syncing this document in running state to another location // or server. InfSession* session; g_object_get(G_OBJECT(m_proxy), "session", &session, NULL); g_signal_handler_disconnect( session, m_synchronization_complete_handler); m_synchronization_complete_handler = 0; g_object_unref(session); // Attempt user join after synchronization attempt_user_join(); } void Gobby::UserJoin::on_user_join_finished(InfUser* user, const GError* error) { if(m_request != NULL) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_user_join_finished_static), this); g_object_unref(m_request); m_request = NULL; } if(error == NULL) { user_join_complete(user, error); } else if(error->domain == inf_user_error_quark() && error->code == INF_USER_ERROR_NAME_IN_USE) { // If name is in use retry with alternative user name ++m_retry_index; attempt_user_join(); } else { user_join_complete(user, error); } } void Gobby::UserJoin::attempt_user_join() { // Check if there is already a local user, for example for a // synced-in document. InfSession* session; g_object_get(G_OBJECT(m_proxy), "session", &session, NULL); InfUserTable* user_table = inf_session_get_user_table(session); InfUser* user = NULL; inf_user_table_foreach_local_user(user_table, retr_local_user_func, &user); g_object_unref(session); if(user != NULL) { user_join_complete(user, NULL); return; } // Next, check whether we are allowed to join a user if(m_node.get_browser() && m_node.get_browser_iter()) { InfBrowser* browser = m_node.get_browser(); const InfBrowserIter* iter = m_node.get_browser_iter(); const InfAclAccount* account = inf_browser_get_acl_local_account(browser); const InfAclAccountId acc_id = (account != NULL) ? account->id : 0; InfAclMask msk; inf_acl_mask_set1(&msk, INF_ACL_CAN_JOIN_USER); if(!inf_browser_check_acl(browser, iter, acc_id, &msk, NULL)) { GError* error = NULL; g_set_error( &error, inf_request_error_quark(), INF_REQUEST_ERROR_NOT_AUTHORIZED, "%s", inf_request_strerror( INF_REQUEST_ERROR_NOT_AUTHORIZED)); user_join_complete(NULL, error); g_error_free(error); return; } } // We are allowed, so attempt to join the user now. std::vector params = m_param_provider->get_user_join_parameters(); std::vector::iterator name_index = find_name_param(params); const gchar* name = g_value_get_string(&name_index->value); if(m_retry_index > 1) { gchar* new_name = g_strdup_printf( "%s %u", name, m_retry_index); g_value_take_string(&name_index->value, new_name); } InfRequest* request = inf_session_proxy_join_user( m_proxy, params.size(), ¶ms[0], on_user_join_finished_static, this); for(unsigned int i = 0; i < params.size(); ++i) g_value_unset(¶ms[i].value); if(request != NULL) { m_request = request; g_object_ref(m_request); } } void Gobby::UserJoin::user_join_complete(InfUser* user, const GError* error) { g_assert(m_request == NULL); g_assert(m_user == NULL && m_error == NULL); m_user = user; if(error) m_error = g_error_copy(error); m_signal_finished.emit(m_user, error); } gobby-0.6.0/code/core/titlebar.hpp0000664000175000017500000000371514003367605013735 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TITLEBAR_HPP_ #define _GOBBY_TITLEBAR_HPP_ #include "core/folder.hpp" #include "core/sessionview.hpp" #include #include namespace Gobby { class TitleBar: public sigc::trackable { public: TitleBar(Gtk::Window& window, const Folder& folder); ~TitleBar(); private: static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_notify_status(); } static void on_notify_modified_static(InfBuffer* buffer, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_notify_modified(); } void on_document_removed(SessionView& view); void on_document_changed(SessionView* view); void on_notify_status(); void on_notify_modified(); void update_title(); Gtk::Window& m_window; const Folder& m_folder; SessionView* m_current_view; gulong m_notify_status_handler; gulong m_modified_changed_handler; }; } #endif // _GOBBY_TITLEBAR_HPP_ gobby-0.6.0/code/core/texttablabel.cpp0000664000175000017500000001364514003367605014600 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/texttablabel.hpp" #include "core/folder.hpp" Gobby::TextTabLabel::UserWatcher::UserWatcher(TextTabLabel* label, InfTextUser* user): m_label(label), m_user(user) { connect(); } Gobby::TextTabLabel::UserWatcher::UserWatcher(const UserWatcher& other): m_label(other.m_label), m_user(other.m_user) { connect(); } Gobby::TextTabLabel::UserWatcher::~UserWatcher() { g_signal_handler_disconnect(m_user, m_handle); } InfTextUser* Gobby::TextTabLabel::UserWatcher::get_user() const { return m_user; } bool Gobby::TextTabLabel::UserWatcher::operator==(InfTextUser* other_user) const { return m_user == other_user; } void Gobby::TextTabLabel::UserWatcher::connect() { m_handle = g_signal_connect( G_OBJECT(m_user), "notify::hue", G_CALLBACK(&UserWatcher::on_notify_hue), m_label); } void Gobby::TextTabLabel::UserWatcher::on_notify_hue(GObject* user_object, GParamSpec* spec, gpointer user_data) { static_cast(user_data)->update_dots(); } Gobby::TextTabLabel::TextTabLabel(Folder& folder, TextSessionView& view): TabLabel(folder, view, "text-x-generic"), m_dot_char(0) { m_modified_changed_handle = g_signal_connect_after( G_OBJECT(view.get_text_buffer()), "modified-changed", G_CALLBACK(on_modified_changed_static), this); InfTextBuffer* buffer = INF_TEXT_BUFFER( inf_session_get_buffer( INF_SESSION(view.get_session()))); m_insert_text_handle = g_signal_connect_after( G_OBJECT(buffer), "text-inserted", G_CALLBACK(on_text_inserted_static), this); m_erase_text_handle = g_signal_connect_after( G_OBJECT(buffer), "text-erased", G_CALLBACK(on_text_erased_static), this); insert_next_to(m_title, Gtk::POS_RIGHT); attach_next_to(m_dots, m_title, Gtk::POS_RIGHT, 1, 1); update_modified(); update_dot_char(); } Gobby::TextTabLabel::~TextTabLabel() { TextSessionView& text_view = dynamic_cast(m_view); g_signal_handler_disconnect(text_view.get_text_buffer(), m_modified_changed_handle); InfTextBuffer* buffer = INF_TEXT_BUFFER( inf_session_get_buffer( INF_SESSION(m_view.get_session()))); g_signal_handler_disconnect(buffer, m_erase_text_handle); g_signal_handler_disconnect(buffer, m_insert_text_handle); } void Gobby::TextTabLabel::on_style_updated() { TabLabel::on_style_updated(); update_dot_char(); } void Gobby::TextTabLabel::on_notify_status() { TabLabel::on_notify_status(); update_modified(); } void Gobby::TextTabLabel::on_activate() { TabLabel::on_activate(); m_changed_by.clear(); update_dots(); } void Gobby::TextTabLabel::on_modified_changed() { update_modified(); } void Gobby::TextTabLabel::on_changed(InfTextUser* author) { if(!m_changed) { InfSession* session = INF_SESSION(m_view.get_session()); if(inf_session_get_status(session) == INF_SESSION_RUNNING) set_changed(); } if(m_folder.get_current_document() != &m_view) { // TODO: remove dot if all the user's // new contributions where undone if(std::find(m_changed_by.begin(), m_changed_by.end(), author) == m_changed_by.end()) { m_changed_by.push_back(UserWatcher(this, author)); update_dots(); } } } void Gobby::TextTabLabel::update_modified() { InfSession* session = INF_SESSION(m_view.get_session()); bool modified = inf_buffer_get_modified(inf_session_get_buffer(session)); InfSessionStatus status = inf_session_get_status(session); if(status == INF_SESSION_SYNCHRONIZING || status == INF_SESSION_PRESYNC) { modified = false; } if(modified) m_title.set_text("*" + m_view.get_title()); else m_title.set_text(m_view.get_title()); } void Gobby::TextTabLabel::update_dot_char() { static const gunichar dot_chars[] = { 0x270E, /* pencil */ 0x26AB, /* medium black circle */ 0x25CF, /* black circle */ 0x002A, /* asterisk */ 0x0000 }; // Find a glyph for the user dots const gunichar* c; for(c = dot_chars; *c; ++c) { m_dots.set_text(Glib::ustring(1, *c)); if(m_dots.get_layout()->get_unknown_glyphs_count() == 0) break; } m_dot_char = *c; // Update dots using this char update_dots(); } void Gobby::TextTabLabel::update_dots() { g_assert(m_dot_char != 0); if (m_changed_by.empty()) { m_dots.hide(); } else { Glib::ustring markup; for(UserWatcherList::iterator iter = m_changed_by.begin(); iter != m_changed_by.end(); ++iter) { double hue = inf_text_user_get_hue(iter->get_user()); double sat = 0.6; double val = 0.6; double r, g, b; gtk_hsv_to_rgb(hue, sat, val, &r, &g, &b); const unsigned short red_i = static_cast(r * 65535.0 + 0.5); const unsigned short green_i = static_cast(g * 65535.0 + 0.5); const unsigned short blue_i = static_cast(b * 65535.0 + 0.5); gchar* markup_escaped = g_markup_printf_escaped( "&#%u;", red_i, green_i, blue_i, static_cast(m_dot_char)); markup = markup_escaped; g_free(markup_escaped); } m_dots.set_markup(markup); m_dots.show(); } } gobby-0.6.0/code/core/filechooser.hpp0000664000175000017500000000304414003367605014424 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_CHOOSER_HPP_ #define _GOBBY_FILE_CHOOSER_HPP_ #include #include namespace Gobby { // This class manages a common "current folder uri" for file chooser // dialogs. class FileChooser { public: class Dialog: public Gtk::FileChooserDialog { public: Dialog(Gobby::FileChooser& chooser, Gtk::Window& parent, const Glib::ustring& title, Gtk::FileChooserAction action); ~Dialog(); protected: Gobby::FileChooser& m_chooser; }; FileChooser(); const std::string& get_current_folder_uri() const; void set_current_folder_uri(const std::string& uri); private: std::string m_current_folder_uri; }; } #endif // _GOBBY_FILE_CHOOSER_HPP_ gobby-0.6.0/code/core/selfhoster.hpp0000664000175000017500000000513014003367605014276 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SELF_HOSTER_HPP_ #define _GOBBY_SELF_HOSTER_HPP_ #include "core/credentialsgenerator.hpp" #include "core/certificatemanager.hpp" #include "core/statusbar.hpp" #include "core/server.hpp" #include #include #include #include #include namespace Gobby { class SelfHoster: public sigc::trackable { public: SelfHoster(InfIo* io, InfCommunicationManager* communication_manager, InfLocalPublisher* publisher, InfSaslContext* sasl_context, StatusBar& status_bar, CertificateManager& cert_manager, const Preferences& preferences); ~SelfHoster(); InfdDirectory* get_directory() { return m_directory; } protected: static void directory_foreach_func_close_static( InfXmlConnection* connection, gpointer user_data); static void directory_foreach_func_set_sasl_context_static( InfXmlConnection* connection, gpointer user_data); const char* get_sasl_mechanisms() const; bool ensure_dh_params(); void on_dh_params_done(const DHParamsGeneratorHandle* handle, gnutls_dh_params_t dh_params, const GError* error); void on_require_password_changed(); void apply_preferences(); InfSaslContext* m_sasl_context; StatusBar& m_status_bar; CertificateManager& m_cert_manager; const Preferences& m_preferences; bool m_dh_params_loaded; StatusBar::MessageHandle m_info_handle; StatusBar::MessageHandle m_dh_params_message_handle; InfdDirectory* m_directory; Server m_server; std::unique_ptr m_dh_params_handle; }; } #endif // _GOBBY_SELF_HOSTER_HPP_ gobby-0.6.0/code/gobby-resources.c0000664000175000017500000360207214005476630013751 00000000000000#include #if defined (__ELF__) && ( __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 6)) # define SECTION __attribute__ ((section (".gresource.gobby"), aligned (8))) #else # define SECTION #endif #ifdef _MSC_VER static const SECTION union { const guint8 data[93192]; const double alignment; void * const ptr;} _gobby_resource_data = { { 0107, 0126, 0141, 0162, 0151, 0141, 0156, 0164, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0030, 0000, 0000, 0000, 0030, 0002, 0000, 0000, 0000, 0000, 0000, 0050, 0022, 0000, 0000, 0000, 0000, 0000, 0000, 0000, 0003, 0000, 0000, 0000, 0003, 0000, 0000, 0000, 0003, 0000, 0000, 0000, 0003, 0000, 0000, 0000, 0004, 0000, 0000, 0000, 0004, 0000, 0000, 0000, 0004, 0000, 0000, 0000, 0005, 0000, 0000, 0000, 0005, 0000, 0000, 0000, 0007, 0000, 0000, 0000, 0011, 0000, 0000, 0000, 0011, 0000, 0000, 0000, 0012, 0000, 0000, 0000, 0012, 0000, 0000, 0000, 0016, 0000, 0000, 0000, 0020, 0000, 0000, 0000, 0020, 0000, 0000, 0000, 0246, 0311, 0073, 0047, 0011, 0000, 0000, 0000, 0030, 0002, 0000, 0000, 0006, 0000, 0114, 0000, 0040, 0002, 0000, 0000, 0044, 0002, 0000, 0000, 0014, 0307, 0155, 0312, 0016, 0000, 0000, 0000, 0044, 0002, 0000, 0000, 0024, 0000, 0166, 0000, 0070, 0002, 0000, 0000, 0247, 0015, 0000, 0000, 0024, 0043, 0224, 0307, 0016, 0000, 0000, 0000, 0247, 0015, 0000, 0000, 0027, 0000, 0166, 0000, 0300, 0015, 0000, 0000, 0313, 0026, 0000, 0000, 0216, 0011, 0266, 0056, 0016, 0000, 0000, 0000, 0313, 0026, 0000, 0000, 0025, 0000, 0166, 0000, 0340, 0026, 0000, 0000, 0265, 0271, 0000, 0000, 0135, 0334, 0341, 0127, 0016, 0000, 0000, 0000, 0265, 0271, 0000, 0000, 0016, 0000, 0166, 0000, 0310, 0271, 0000, 0000, 0135, 0316, 0000, 0000, 0045, 0114, 0225, 0365, 0016, 0000, 0000, 0000, 0135, 0316, 0000, 0000, 0031, 0000, 0166, 0000, 0170, 0316, 0000, 0000, 0160, 0330, 0000, 0000, 0025, 0111, 0014, 0120, 0016, 0000, 0000, 0000, 0160, 0330, 0000, 0000, 0016, 0000, 0166, 0000, 0200, 0330, 0000, 0000, 0040, 0341, 0000, 0000, 0354, 0213, 0170, 0174, 0015, 0000, 0000, 0000, 0040, 0341, 0000, 0000, 0003, 0000, 0114, 0000, 0044, 0341, 0000, 0000, 0050, 0341, 0000, 0000, 0122, 0221, 0325, 0252, 0016, 0000, 0000, 0000, 0050, 0341, 0000, 0000, 0012, 0000, 0166, 0000, 0070, 0341, 0000, 0000, 0304, 0365, 0000, 0000, 0044, 0330, 0265, 0104, 0007, 0000, 0000, 0000, 0304, 0365, 0000, 0000, 0006, 0000, 0114, 0000, 0314, 0365, 0000, 0000, 0320, 0365, 0000, 0000, 0116, 0105, 0160, 0342, 0016, 0000, 0000, 0000, 0320, 0365, 0000, 0000, 0017, 0000, 0166, 0000, 0340, 0365, 0000, 0000, 0163, 0375, 0000, 0000, 0246, 0007, 0221, 0244, 0016, 0000, 0000, 0000, 0163, 0375, 0000, 0000, 0021, 0000, 0166, 0000, 0210, 0375, 0000, 0000, 0041, 0064, 0001, 0000, 0224, 0274, 0211, 0253, 0016, 0000, 0000, 0000, 0041, 0064, 0001, 0000, 0007, 0000, 0166, 0000, 0050, 0064, 0001, 0000, 0367, 0115, 0001, 0000, 0324, 0265, 0002, 0000, 0377, 0377, 0377, 0377, 0367, 0115, 0001, 0000, 0001, 0000, 0114, 0000, 0370, 0115, 0001, 0000, 0374, 0115, 0001, 0000, 0123, 0057, 0360, 0217, 0000, 0000, 0000, 0000, 0374, 0115, 0001, 0000, 0003, 0000, 0114, 0000, 0000, 0116, 0001, 0000, 0064, 0116, 0001, 0000, 0127, 0042, 0000, 0153, 0016, 0000, 0000, 0000, 0064, 0116, 0001, 0000, 0027, 0000, 0166, 0000, 0120, 0116, 0001, 0000, 0054, 0124, 0001, 0000, 0341, 0205, 0207, 0227, 0016, 0000, 0000, 0000, 0054, 0124, 0001, 0000, 0033, 0000, 0166, 0000, 0110, 0124, 0001, 0000, 0031, 0140, 0001, 0000, 0257, 0122, 0247, 0144, 0016, 0000, 0000, 0000, 0031, 0140, 0001, 0000, 0022, 0000, 0166, 0000, 0060, 0140, 0001, 0000, 0007, 0154, 0001, 0000, 0147, 0157, 0142, 0142, 0171, 0057, 0000, 0000, 0016, 0000, 0000, 0000, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0055, 0144, 0151, 0141, 0154, 0157, 0147, 0056, 0165, 0151, 0137, 0013, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0040, 0145, 0156, 0143, 0157, 0144, 0151, 0156, 0147, 0075, 0042, 0125, 0124, 0106, 0055, 0070, 0042, 0077, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0163, 0040, 0154, 0151, 0142, 0075, 0042, 0147, 0164, 0153, 0053, 0042, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0063, 0056, 0061, 0060, 0042, 0057, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0040, 0151, 0144, 0075, 0042, 0103, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0151, 0164, 0154, 0145, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0157, 0156, 0156, 0145, 0143, 0164, 0040, 0124, 0157, 0040, 0123, 0145, 0162, 0166, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0163, 0151, 0172, 0141, 0142, 0154, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0171, 0160, 0145, 0137, 0150, 0151, 0156, 0164, 0042, 0076, 0144, 0151, 0141, 0154, 0157, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0166, 0142, 0157, 0170, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0166, 0142, 0157, 0170, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0171, 0157, 0165, 0164, 0137, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0111, 0155, 0141, 0147, 0145, 0042, 0040, 0151, 0144, 0075, 0042, 0151, 0155, 0141, 0147, 0145, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0162, 0151, 0147, 0150, 0164, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0156, 0145, 0164, 0167, 0157, 0162, 0153, 0055, 0163, 0145, 0162, 0166, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0163, 0151, 0172, 0145, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0151, 0147, 0150, 0164, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0120, 0154, 0145, 0141, 0163, 0145, 0040, 0145, 0156, 0164, 0145, 0162, 0040, 0141, 0040, 0150, 0157, 0163, 0164, 0040, 0156, 0141, 0155, 0145, 0040, 0167, 0151, 0164, 0150, 0040, 0167, 0150, 0151, 0143, 0150, 0040, 0164, 0157, 0040, 0145, 0163, 0164, 0141, 0142, 0154, 0151, 0163, 0150, 0040, 0141, 0040, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0056, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0122, 0145, 0155, 0157, 0164, 0145, 0040, 0105, 0156, 0144, 0160, 0157, 0151, 0156, 0164, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0145, 0156, 0164, 0162, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0105, 0156, 0164, 0162, 0171, 0042, 0040, 0151, 0144, 0075, 0042, 0145, 0156, 0164, 0162, 0171, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0141, 0164, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0157, 0160, 0145, 0156, 0055, 0154, 0157, 0143, 0141, 0164, 0151, 0157, 0156, 0055, 0144, 0151, 0141, 0154, 0157, 0147, 0056, 0165, 0151, 0000, 0000, 0373, 0010, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0040, 0145, 0156, 0143, 0157, 0144, 0151, 0156, 0147, 0075, 0042, 0125, 0124, 0106, 0055, 0070, 0042, 0077, 0076, 0012, 0074, 0041, 0055, 0055, 0040, 0107, 0145, 0156, 0145, 0162, 0141, 0164, 0145, 0144, 0040, 0167, 0151, 0164, 0150, 0040, 0147, 0154, 0141, 0144, 0145, 0040, 0063, 0056, 0061, 0070, 0056, 0063, 0040, 0055, 0055, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0163, 0040, 0154, 0151, 0142, 0075, 0042, 0147, 0164, 0153, 0053, 0042, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0063, 0056, 0061, 0060, 0042, 0057, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0040, 0151, 0144, 0075, 0042, 0117, 0160, 0145, 0156, 0114, 0157, 0143, 0141, 0164, 0151, 0157, 0156, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0151, 0164, 0154, 0145, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0117, 0160, 0145, 0156, 0040, 0114, 0157, 0143, 0141, 0164, 0151, 0157, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0163, 0151, 0172, 0141, 0142, 0154, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0171, 0160, 0145, 0137, 0150, 0151, 0156, 0164, 0042, 0076, 0144, 0151, 0141, 0154, 0157, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0166, 0142, 0157, 0170, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0166, 0142, 0157, 0170, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0171, 0157, 0165, 0164, 0137, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0105, 0156, 0164, 0145, 0162, 0040, 0164, 0150, 0145, 0040, 0154, 0157, 0143, 0141, 0164, 0151, 0157, 0156, 0040, 0050, 0125, 0122, 0111, 0051, 0040, 0157, 0146, 0040, 0164, 0150, 0145, 0040, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0040, 0171, 0157, 0165, 0040, 0167, 0157, 0165, 0154, 0144, 0040, 0154, 0151, 0153, 0145, 0040, 0164, 0157, 0040, 0157, 0160, 0145, 0156, 0056, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0162, 0141, 0160, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0137, 0143, 0150, 0141, 0162, 0163, 0042, 0076, 0063, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0157, 0155, 0142, 0157, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0157, 0143, 0141, 0164, 0151, 0157, 0156, 0055, 0143, 0157, 0155, 0142, 0157, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0163, 0055, 0145, 0156, 0164, 0162, 0171, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0160, 0162, 0145, 0146, 0145, 0162, 0145, 0156, 0143, 0145, 0163, 0055, 0144, 0151, 0141, 0154, 0157, 0147, 0056, 0165, 0151, 0305, 0242, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0040, 0145, 0156, 0143, 0157, 0144, 0151, 0156, 0147, 0075, 0042, 0125, 0124, 0106, 0055, 0070, 0042, 0077, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0163, 0040, 0154, 0151, 0142, 0075, 0042, 0147, 0164, 0153, 0053, 0042, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0063, 0056, 0061, 0060, 0042, 0057, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0040, 0151, 0144, 0075, 0042, 0120, 0162, 0145, 0146, 0145, 0162, 0145, 0156, 0143, 0145, 0163, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0151, 0164, 0154, 0145, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0120, 0162, 0145, 0146, 0145, 0162, 0145, 0156, 0143, 0145, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0163, 0151, 0172, 0141, 0142, 0154, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0171, 0160, 0145, 0137, 0150, 0151, 0156, 0164, 0042, 0076, 0144, 0151, 0141, 0154, 0157, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0166, 0142, 0157, 0170, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0166, 0142, 0157, 0170, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0171, 0157, 0165, 0164, 0137, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0116, 0157, 0164, 0145, 0142, 0157, 0157, 0153, 0042, 0040, 0151, 0144, 0075, 0042, 0156, 0157, 0164, 0145, 0142, 0157, 0157, 0153, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0064, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0125, 0163, 0145, 0162, 0040, 0137, 0116, 0141, 0155, 0145, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0165, 0163, 0145, 0162, 0055, 0156, 0141, 0155, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0105, 0156, 0164, 0162, 0171, 0042, 0040, 0151, 0144, 0075, 0042, 0165, 0163, 0145, 0162, 0055, 0156, 0141, 0155, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0065, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0125, 0163, 0145, 0162, 0040, 0103, 0157, 0154, 0157, 0137, 0162, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0165, 0163, 0145, 0162, 0055, 0143, 0157, 0154, 0157, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0157, 0154, 0157, 0162, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0165, 0163, 0145, 0162, 0055, 0143, 0157, 0154, 0157, 0162, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0067, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0157, 0154, 0157, 0162, 0040, 0111, 0156, 0164, 0145, 0156, 0163, 0151, 0164, 0171, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0143, 0141, 0154, 0145, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0157, 0154, 0157, 0162, 0055, 0151, 0156, 0164, 0145, 0156, 0163, 0151, 0164, 0171, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0165, 0156, 0144, 0137, 0144, 0151, 0147, 0151, 0164, 0163, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0150, 0157, 0167, 0137, 0146, 0151, 0154, 0154, 0137, 0154, 0145, 0166, 0145, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0166, 0141, 0154, 0165, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0066, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0145, 0164, 0164, 0151, 0156, 0147, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0070, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0122, 0145, 0155, 0157, 0164, 0145, 0040, 0125, 0163, 0145, 0162, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0063, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0145, 0155, 0157, 0164, 0145, 0055, 0163, 0150, 0157, 0167, 0055, 0143, 0165, 0162, 0163, 0157, 0162, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0150, 0157, 0167, 0040, 0143, 0165, 0162, 0163, 0157, 0162, 0163, 0040, 0157, 0146, 0040, 0162, 0145, 0155, 0157, 0164, 0145, 0040, 0165, 0163, 0145, 0162, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0145, 0155, 0157, 0164, 0145, 0055, 0163, 0150, 0157, 0167, 0055, 0163, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0150, 0157, 0167, 0040, 0163, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0163, 0040, 0157, 0146, 0040, 0162, 0145, 0155, 0157, 0164, 0145, 0040, 0165, 0163, 0145, 0162, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0145, 0155, 0157, 0164, 0145, 0055, 0163, 0150, 0157, 0167, 0055, 0143, 0165, 0162, 0162, 0145, 0156, 0164, 0055, 0154, 0151, 0156, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0110, 0151, 0147, 0150, 0154, 0151, 0147, 0150, 0164, 0040, 0143, 0165, 0162, 0162, 0145, 0156, 0164, 0040, 0154, 0151, 0156, 0145, 0040, 0157, 0146, 0040, 0162, 0145, 0155, 0157, 0164, 0145, 0040, 0165, 0163, 0145, 0162, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0145, 0155, 0157, 0164, 0145, 0055, 0163, 0150, 0157, 0167, 0055, 0151, 0156, 0055, 0163, 0143, 0162, 0157, 0154, 0154, 0142, 0141, 0162, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0111, 0156, 0144, 0151, 0143, 0141, 0164, 0145, 0040, 0143, 0165, 0162, 0163, 0157, 0162, 0040, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0040, 0157, 0146, 0040, 0162, 0145, 0155, 0157, 0164, 0145, 0040, 0165, 0163, 0145, 0162, 0163, 0040, 0151, 0156, 0040, 0164, 0150, 0145, 0040, 0163, 0143, 0162, 0157, 0154, 0154, 0142, 0141, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0071, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0114, 0157, 0143, 0141, 0154, 0040, 0104, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0064, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0145, 0155, 0157, 0164, 0145, 0055, 0141, 0154, 0154, 0157, 0167, 0055, 0145, 0144, 0151, 0164, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0101, 0154, 0154, 0157, 0167, 0040, 0162, 0145, 0155, 0157, 0164, 0145, 0040, 0165, 0163, 0145, 0162, 0163, 0040, 0164, 0157, 0040, 0145, 0144, 0151, 0164, 0040, 0154, 0157, 0143, 0141, 0154, 0040, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0055, 0154, 0157, 0143, 0141, 0154, 0055, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0055, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0122, 0145, 0161, 0165, 0151, 0162, 0145, 0040, 0162, 0145, 0155, 0157, 0164, 0145, 0040, 0165, 0163, 0145, 0162, 0163, 0040, 0164, 0157, 0040, 0145, 0156, 0164, 0145, 0162, 0040, 0141, 0040, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0124, 0103, 0120, 0040, 0120, 0157, 0162, 0164, 0040, 0116, 0165, 0155, 0142, 0145, 0162, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0160, 0157, 0162, 0164, 0055, 0156, 0165, 0155, 0142, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0160, 0151, 0156, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0160, 0157, 0162, 0164, 0055, 0156, 0165, 0155, 0142, 0145, 0162, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0055, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0120, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0055, 0145, 0156, 0164, 0162, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0105, 0156, 0164, 0162, 0171, 0042, 0040, 0151, 0144, 0075, 0042, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0055, 0145, 0156, 0164, 0162, 0171, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0151, 0154, 0151, 0164, 0171, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0145, 0155, 0145, 0155, 0142, 0145, 0162, 0055, 0154, 0157, 0143, 0141, 0154, 0055, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0122, 0145, 0155, 0145, 0155, 0142, 0145, 0162, 0040, 0154, 0157, 0143, 0141, 0154, 0040, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0163, 0040, 0141, 0146, 0164, 0145, 0162, 0040, 0107, 0157, 0142, 0142, 0171, 0040, 0162, 0145, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0055, 0154, 0157, 0143, 0141, 0154, 0055, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0163, 0055, 0144, 0151, 0162, 0145, 0143, 0164, 0157, 0162, 0171, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0060, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0114, 0157, 0143, 0141, 0154, 0040, 0104, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0163, 0040, 0137, 0104, 0151, 0162, 0145, 0143, 0164, 0157, 0162, 0171, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0154, 0157, 0143, 0141, 0154, 0055, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0163, 0055, 0144, 0151, 0162, 0145, 0143, 0164, 0157, 0162, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0106, 0151, 0154, 0145, 0103, 0150, 0157, 0157, 0163, 0145, 0162, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0157, 0143, 0141, 0154, 0055, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0163, 0055, 0144, 0151, 0162, 0145, 0143, 0164, 0157, 0162, 0171, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0065, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0164, 0171, 0160, 0145, 0075, 0042, 0164, 0141, 0142, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0125, 0163, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0141, 0142, 0137, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0070, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0063, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0124, 0141, 0142, 0040, 0123, 0164, 0157, 0160, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0071, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0064, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0124, 0141, 0142, 0040, 0137, 0127, 0151, 0144, 0164, 0150, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0164, 0141, 0142, 0055, 0167, 0151, 0144, 0164, 0150, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0160, 0151, 0156, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0141, 0142, 0055, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0151, 0156, 0163, 0145, 0162, 0164, 0055, 0163, 0160, 0141, 0143, 0145, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0111, 0156, 0163, 0145, 0162, 0164, 0040, 0163, 0160, 0141, 0143, 0145, 0163, 0040, 0151, 0156, 0163, 0164, 0145, 0141, 0144, 0040, 0157, 0146, 0040, 0164, 0141, 0142, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0065, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0111, 0156, 0144, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0141, 0165, 0164, 0157, 0155, 0141, 0164, 0151, 0143, 0055, 0151, 0156, 0144, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0105, 0156, 0141, 0142, 0154, 0145, 0040, 0141, 0165, 0164, 0157, 0155, 0141, 0164, 0151, 0143, 0040, 0151, 0156, 0144, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0066, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0110, 0157, 0155, 0145, 0057, 0105, 0156, 0144, 0040, 0102, 0145, 0150, 0141, 0166, 0151, 0157, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0155, 0141, 0162, 0164, 0055, 0150, 0157, 0155, 0145, 0055, 0145, 0156, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0155, 0141, 0162, 0164, 0040, 0110, 0157, 0155, 0145, 0057, 0105, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0157, 0154, 0164, 0151, 0160, 0137, 0164, 0145, 0170, 0164, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0127, 0151, 0164, 0150, 0040, 0164, 0150, 0151, 0163, 0040, 0157, 0160, 0164, 0151, 0157, 0156, 0040, 0145, 0156, 0141, 0142, 0154, 0145, 0144, 0054, 0040, 0160, 0162, 0145, 0163, 0163, 0151, 0156, 0147, 0040, 0150, 0157, 0155, 0145, 0040, 0157, 0162, 0040, 0145, 0156, 0144, 0040, 0141, 0164, 0040, 0164, 0150, 0145, 0040, 0142, 0145, 0147, 0151, 0156, 0156, 0151, 0156, 0147, 0040, 0157, 0162, 0040, 0145, 0156, 0144, 0040, 0157, 0146, 0040, 0141, 0040, 0154, 0151, 0156, 0145, 0054, 0040, 0162, 0145, 0163, 0160, 0145, 0143, 0164, 0151, 0166, 0145, 0154, 0171, 0054, 0040, 0155, 0157, 0166, 0145, 0163, 0040, 0164, 0150, 0145, 0040, 0143, 0165, 0162, 0163, 0157, 0162, 0040, 0164, 0157, 0040, 0164, 0150, 0145, 0040, 0146, 0151, 0162, 0163, 0164, 0040, 0157, 0162, 0040, 0154, 0141, 0163, 0164, 0040, 0156, 0157, 0156, 0055, 0167, 0150, 0151, 0164, 0145, 0163, 0160, 0141, 0143, 0145, 0040, 0143, 0150, 0141, 0162, 0141, 0143, 0164, 0145, 0162, 0040, 0151, 0156, 0040, 0164, 0150, 0141, 0164, 0040, 0154, 0151, 0156, 0145, 0056, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0065, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0067, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0106, 0151, 0154, 0145, 0040, 0123, 0141, 0166, 0151, 0156, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0060, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0145, 0156, 0141, 0142, 0154, 0145, 0055, 0141, 0165, 0164, 0157, 0163, 0141, 0166, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0105, 0156, 0141, 0142, 0154, 0145, 0040, 0141, 0165, 0164, 0157, 0155, 0141, 0164, 0151, 0143, 0040, 0163, 0141, 0166, 0151, 0156, 0147, 0040, 0157, 0146, 0040, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0055, 0141, 0165, 0164, 0157, 0163, 0141, 0166, 0145, 0055, 0151, 0156, 0164, 0145, 0162, 0166, 0141, 0154, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0070, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0101, 0165, 0164, 0157, 0163, 0141, 0166, 0145, 0040, 0151, 0156, 0164, 0145, 0162, 0166, 0141, 0154, 0040, 0151, 0156, 0040, 0155, 0151, 0156, 0165, 0164, 0145, 0163, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0160, 0151, 0156, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0141, 0165, 0164, 0157, 0163, 0141, 0166, 0145, 0055, 0151, 0156, 0164, 0145, 0162, 0166, 0141, 0154, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0067, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0164, 0171, 0160, 0145, 0075, 0042, 0164, 0141, 0142, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0105, 0144, 0151, 0164, 0157, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0141, 0142, 0137, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0071, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0124, 0145, 0170, 0164, 0040, 0127, 0162, 0141, 0160, 0160, 0151, 0156, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0145, 0156, 0141, 0142, 0154, 0145, 0055, 0167, 0162, 0141, 0160, 0160, 0151, 0156, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0105, 0156, 0141, 0142, 0154, 0145, 0040, 0164, 0145, 0170, 0164, 0040, 0167, 0162, 0141, 0160, 0160, 0151, 0156, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0157, 0055, 0156, 0157, 0164, 0055, 0163, 0160, 0154, 0151, 0164, 0055, 0167, 0157, 0162, 0144, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0104, 0157, 0040, 0156, 0157, 0164, 0040, 0163, 0160, 0154, 0151, 0164, 0040, 0167, 0157, 0162, 0144, 0163, 0040, 0157, 0166, 0145, 0162, 0040, 0164, 0167, 0157, 0040, 0154, 0151, 0156, 0145, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0062, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0060, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0114, 0151, 0156, 0145, 0040, 0116, 0165, 0155, 0142, 0145, 0162, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0163, 0160, 0154, 0141, 0171, 0055, 0154, 0151, 0156, 0145, 0055, 0156, 0165, 0155, 0142, 0145, 0162, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0104, 0151, 0163, 0160, 0154, 0141, 0171, 0040, 0154, 0151, 0156, 0145, 0040, 0156, 0165, 0155, 0142, 0145, 0162, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0165, 0162, 0162, 0145, 0156, 0164, 0040, 0114, 0151, 0156, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0065, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0150, 0151, 0147, 0150, 0154, 0151, 0147, 0150, 0164, 0055, 0143, 0165, 0162, 0162, 0145, 0156, 0164, 0055, 0154, 0151, 0156, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0110, 0151, 0147, 0150, 0154, 0151, 0147, 0150, 0164, 0040, 0143, 0165, 0162, 0162, 0145, 0156, 0164, 0040, 0154, 0151, 0156, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0122, 0151, 0147, 0150, 0164, 0040, 0115, 0141, 0162, 0147, 0151, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0067, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0063, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0163, 0160, 0154, 0141, 0171, 0055, 0162, 0151, 0147, 0150, 0164, 0055, 0155, 0141, 0162, 0147, 0151, 0156, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0104, 0151, 0163, 0160, 0154, 0141, 0171, 0040, 0162, 0151, 0147, 0150, 0164, 0040, 0155, 0141, 0162, 0147, 0151, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0055, 0155, 0141, 0162, 0147, 0151, 0156, 0055, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0063, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0122, 0151, 0147, 0150, 0164, 0040, 0137, 0155, 0141, 0162, 0147, 0151, 0156, 0040, 0141, 0164, 0040, 0143, 0157, 0154, 0165, 0155, 0156, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0162, 0151, 0147, 0150, 0164, 0055, 0155, 0141, 0162, 0147, 0151, 0156, 0055, 0143, 0157, 0154, 0165, 0155, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0160, 0151, 0156, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0151, 0147, 0150, 0164, 0055, 0155, 0141, 0162, 0147, 0151, 0156, 0055, 0143, 0157, 0154, 0165, 0155, 0156, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0070, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0064, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0102, 0162, 0141, 0143, 0153, 0145, 0164, 0040, 0115, 0141, 0164, 0143, 0150, 0151, 0156, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0071, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0150, 0151, 0147, 0150, 0154, 0151, 0147, 0150, 0164, 0055, 0155, 0141, 0164, 0143, 0150, 0151, 0156, 0147, 0055, 0142, 0162, 0141, 0143, 0153, 0145, 0164, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0110, 0151, 0147, 0150, 0154, 0151, 0147, 0150, 0164, 0040, 0155, 0141, 0164, 0143, 0150, 0151, 0156, 0147, 0040, 0142, 0162, 0141, 0143, 0153, 0145, 0164, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0065, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0127, 0150, 0151, 0164, 0145, 0163, 0160, 0141, 0143, 0145, 0040, 0104, 0151, 0163, 0160, 0154, 0141, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0157, 0155, 0142, 0157, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0163, 0160, 0154, 0141, 0171, 0055, 0167, 0150, 0151, 0164, 0145, 0163, 0160, 0141, 0143, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0164, 0171, 0160, 0145, 0075, 0042, 0164, 0141, 0142, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0063, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0126, 0151, 0145, 0167, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0141, 0142, 0137, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0065, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0070, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0124, 0157, 0157, 0154, 0142, 0141, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0157, 0155, 0142, 0157, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0141, 0162, 0055, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0071, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0106, 0157, 0156, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0106, 0157, 0156, 0164, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0146, 0157, 0156, 0164, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0157, 0156, 0164, 0042, 0076, 0123, 0141, 0156, 0163, 0040, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0162, 0145, 0166, 0151, 0145, 0167, 0137, 0164, 0145, 0170, 0164, 0042, 0057, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0063, 0060, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0157, 0154, 0157, 0162, 0040, 0123, 0143, 0150, 0145, 0155, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0143, 0162, 0157, 0154, 0154, 0145, 0144, 0127, 0151, 0156, 0144, 0157, 0167, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0143, 0162, 0157, 0154, 0154, 0145, 0144, 0167, 0151, 0156, 0144, 0157, 0167, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0150, 0141, 0144, 0157, 0167, 0137, 0164, 0171, 0160, 0145, 0042, 0076, 0151, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0162, 0145, 0145, 0126, 0151, 0145, 0167, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0157, 0154, 0157, 0162, 0055, 0163, 0143, 0150, 0145, 0155, 0145, 0055, 0164, 0162, 0145, 0145, 0166, 0151, 0145, 0167, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0141, 0144, 0145, 0162, 0163, 0137, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0163, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0162, 0145, 0145, 0123, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0162, 0145, 0145, 0166, 0151, 0145, 0167, 0055, 0163, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0061, 0042, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0065, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0164, 0171, 0160, 0145, 0075, 0042, 0164, 0141, 0142, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0066, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0101, 0160, 0160, 0145, 0141, 0162, 0141, 0156, 0143, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0141, 0142, 0137, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0066, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0063, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0124, 0162, 0165, 0163, 0164, 0145, 0144, 0040, 0103, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0040, 0101, 0165, 0164, 0150, 0157, 0162, 0151, 0164, 0151, 0145, 0163, 0040, 0050, 0103, 0101, 0163, 0051, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0067, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0162, 0165, 0163, 0164, 0055, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0055, 0143, 0141, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0124, 0162, 0165, 0163, 0164, 0040, 0164, 0150, 0151, 0163, 0040, 0143, 0157, 0155, 0160, 0165, 0164, 0145, 0162, 0047, 0163, 0040, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0040, 0103, 0101, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0063, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0101, 0144, 0144, 0151, 0164, 0151, 0157, 0156, 0141, 0154, 0154, 0171, 0040, 0124, 0162, 0165, 0163, 0164, 0145, 0144, 0040, 0103, 0101, 0163, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0106, 0151, 0154, 0145, 0103, 0150, 0157, 0157, 0163, 0145, 0162, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0141, 0144, 0144, 0151, 0164, 0151, 0157, 0156, 0141, 0154, 0154, 0171, 0055, 0164, 0162, 0165, 0163, 0164, 0145, 0144, 0055, 0143, 0141, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0141, 0055, 0145, 0162, 0162, 0157, 0162, 0055, 0155, 0145, 0163, 0163, 0141, 0147, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0162, 0141, 0160, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0145, 0154, 0145, 0143, 0164, 0141, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0157, 0162, 0145, 0147, 0162, 0157, 0165, 0156, 0144, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0043, 0146, 0146, 0146, 0146, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0063, 0063, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0145, 0143, 0165, 0162, 0145, 0040, 0103, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0157, 0155, 0142, 0157, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0145, 0143, 0165, 0162, 0145, 0055, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0063, 0064, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0101, 0165, 0164, 0150, 0145, 0156, 0164, 0151, 0143, 0141, 0164, 0151, 0157, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0070, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0122, 0141, 0144, 0151, 0157, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0141, 0165, 0164, 0150, 0145, 0156, 0164, 0151, 0143, 0141, 0164, 0151, 0157, 0156, 0055, 0156, 0157, 0156, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0116, 0157, 0156, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0122, 0141, 0144, 0151, 0157, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0141, 0165, 0164, 0150, 0145, 0156, 0164, 0151, 0143, 0141, 0164, 0151, 0157, 0156, 0055, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0101, 0165, 0164, 0150, 0145, 0156, 0164, 0151, 0143, 0141, 0164, 0145, 0040, 0167, 0151, 0164, 0150, 0040, 0141, 0040, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0147, 0162, 0157, 0165, 0160, 0042, 0076, 0141, 0165, 0164, 0150, 0145, 0156, 0164, 0151, 0143, 0141, 0164, 0151, 0157, 0156, 0055, 0156, 0157, 0156, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0055, 0141, 0165, 0164, 0150, 0055, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0063, 0065, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0120, 0162, 0151, 0166, 0141, 0164, 0145, 0040, 0113, 0145, 0171, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0063, 0066, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0145, 0162, 0164, 0055, 0145, 0162, 0162, 0157, 0162, 0055, 0155, 0145, 0163, 0163, 0141, 0147, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0162, 0141, 0160, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0145, 0154, 0145, 0143, 0164, 0141, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0157, 0162, 0145, 0147, 0162, 0157, 0165, 0156, 0144, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0043, 0146, 0146, 0146, 0146, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0153, 0145, 0171, 0055, 0145, 0162, 0162, 0157, 0162, 0055, 0155, 0145, 0163, 0163, 0141, 0147, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0162, 0141, 0160, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0145, 0154, 0145, 0143, 0164, 0141, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0157, 0162, 0145, 0147, 0162, 0157, 0165, 0156, 0144, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0043, 0146, 0146, 0146, 0146, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0106, 0151, 0154, 0145, 0103, 0150, 0157, 0157, 0163, 0145, 0162, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0160, 0162, 0151, 0166, 0141, 0164, 0145, 0055, 0153, 0145, 0171, 0055, 0146, 0151, 0154, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0106, 0151, 0154, 0145, 0103, 0150, 0157, 0157, 0163, 0145, 0162, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0055, 0146, 0151, 0154, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0162, 0145, 0141, 0164, 0145, 0055, 0160, 0162, 0151, 0166, 0141, 0164, 0145, 0055, 0153, 0145, 0171, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0162, 0145, 0141, 0164, 0145, 0040, 0116, 0145, 0167, 0056, 0056, 0056, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0162, 0145, 0141, 0164, 0145, 0055, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0162, 0145, 0141, 0164, 0145, 0040, 0116, 0145, 0167, 0056, 0056, 0056, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0065, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0164, 0171, 0160, 0145, 0075, 0042, 0164, 0141, 0142, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0067, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0145, 0143, 0165, 0162, 0151, 0164, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0141, 0142, 0137, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0164, 0171, 0160, 0145, 0075, 0042, 0164, 0141, 0142, 0042, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0146, 0151, 0156, 0144, 0055, 0144, 0151, 0141, 0154, 0157, 0147, 0056, 0165, 0151, 0000, 0000, 0000, 0000, 0000, 0205, 0024, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0040, 0145, 0156, 0143, 0157, 0144, 0151, 0156, 0147, 0075, 0042, 0125, 0124, 0106, 0055, 0070, 0042, 0077, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0163, 0040, 0154, 0151, 0142, 0075, 0042, 0147, 0164, 0153, 0053, 0042, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0063, 0056, 0061, 0060, 0042, 0057, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0040, 0151, 0144, 0075, 0042, 0106, 0151, 0156, 0144, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0163, 0151, 0172, 0141, 0142, 0154, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0171, 0160, 0145, 0137, 0150, 0151, 0156, 0164, 0042, 0076, 0144, 0151, 0141, 0154, 0157, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0166, 0142, 0157, 0170, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0166, 0142, 0157, 0170, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0171, 0157, 0165, 0164, 0137, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0145, 0141, 0162, 0143, 0150, 0055, 0146, 0157, 0162, 0055, 0154, 0141, 0142, 0145, 0154, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0142, 0141, 0163, 0145, 0154, 0151, 0156, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0123, 0145, 0141, 0162, 0143, 0150, 0040, 0106, 0157, 0162, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0163, 0145, 0141, 0162, 0143, 0150, 0055, 0146, 0157, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0105, 0156, 0164, 0162, 0171, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0145, 0141, 0162, 0143, 0150, 0055, 0146, 0157, 0162, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0142, 0141, 0163, 0145, 0154, 0151, 0156, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0141, 0164, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0145, 0160, 0154, 0141, 0143, 0145, 0055, 0167, 0151, 0164, 0150, 0055, 0154, 0141, 0142, 0145, 0154, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0142, 0141, 0163, 0145, 0154, 0151, 0156, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0122, 0145, 0160, 0154, 0141, 0143, 0145, 0040, 0137, 0127, 0151, 0164, 0150, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0162, 0145, 0160, 0154, 0141, 0143, 0145, 0055, 0167, 0151, 0164, 0150, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0105, 0156, 0164, 0162, 0171, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0145, 0160, 0154, 0141, 0143, 0145, 0055, 0167, 0151, 0164, 0150, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0142, 0141, 0163, 0145, 0154, 0151, 0156, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0141, 0164, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0155, 0141, 0164, 0143, 0150, 0055, 0143, 0141, 0163, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0115, 0141, 0164, 0143, 0150, 0040, 0103, 0141, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0155, 0141, 0164, 0143, 0150, 0055, 0145, 0156, 0164, 0151, 0162, 0145, 0055, 0167, 0157, 0162, 0144, 0055, 0157, 0156, 0154, 0171, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0115, 0141, 0164, 0143, 0150, 0040, 0137, 0145, 0156, 0164, 0151, 0162, 0145, 0040, 0167, 0157, 0162, 0144, 0040, 0157, 0156, 0154, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0145, 0141, 0162, 0143, 0150, 0055, 0142, 0141, 0143, 0153, 0167, 0141, 0162, 0144, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0145, 0141, 0162, 0143, 0150, 0040, 0137, 0142, 0141, 0143, 0153, 0167, 0141, 0162, 0144, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0167, 0162, 0141, 0160, 0055, 0141, 0162, 0157, 0165, 0156, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0127, 0162, 0141, 0137, 0160, 0040, 0101, 0162, 0157, 0165, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0065, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0055, 0151, 0156, 0146, 0157, 0055, 0144, 0151, 0141, 0154, 0157, 0147, 0056, 0165, 0151, 0000, 0000, 0350, 0011, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0040, 0145, 0156, 0143, 0157, 0144, 0151, 0156, 0147, 0075, 0042, 0125, 0124, 0106, 0055, 0070, 0042, 0077, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0163, 0040, 0154, 0151, 0142, 0075, 0042, 0147, 0164, 0153, 0053, 0042, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0063, 0056, 0061, 0060, 0042, 0057, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0040, 0151, 0144, 0075, 0042, 0103, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0111, 0156, 0146, 0157, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0151, 0164, 0154, 0145, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0040, 0111, 0156, 0146, 0157, 0162, 0155, 0141, 0164, 0151, 0157, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0163, 0151, 0172, 0141, 0142, 0154, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0171, 0160, 0145, 0137, 0150, 0151, 0156, 0164, 0042, 0076, 0144, 0151, 0141, 0154, 0157, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0166, 0142, 0157, 0170, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0166, 0142, 0157, 0170, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0171, 0157, 0165, 0164, 0137, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0111, 0155, 0141, 0147, 0145, 0042, 0040, 0151, 0144, 0075, 0042, 0151, 0155, 0141, 0147, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0163, 0151, 0172, 0145, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0107, 0124, 0113, 0137, 0101, 0114, 0111, 0107, 0116, 0137, 0123, 0124, 0101, 0122, 0124, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0143, 0162, 0157, 0154, 0154, 0145, 0144, 0127, 0151, 0156, 0144, 0157, 0167, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0143, 0162, 0157, 0154, 0154, 0145, 0144, 0055, 0167, 0151, 0156, 0144, 0157, 0167, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0150, 0141, 0144, 0157, 0167, 0137, 0164, 0171, 0160, 0145, 0042, 0076, 0151, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0151, 0156, 0055, 0143, 0157, 0156, 0164, 0145, 0156, 0164, 0055, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0060, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0151, 0156, 0055, 0143, 0157, 0156, 0164, 0145, 0156, 0164, 0055, 0150, 0145, 0151, 0147, 0150, 0164, 0042, 0076, 0070, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0162, 0145, 0145, 0126, 0151, 0145, 0167, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0162, 0145, 0145, 0166, 0151, 0145, 0167, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0163, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0162, 0145, 0145, 0123, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0162, 0145, 0145, 0166, 0151, 0145, 0167, 0055, 0163, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0062, 0042, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0111, 0156, 0146, 0107, 0164, 0153, 0103, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0126, 0151, 0145, 0167, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0055, 0151, 0156, 0146, 0157, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0147, 0157, 0164, 0157, 0055, 0144, 0151, 0141, 0154, 0157, 0147, 0056, 0165, 0151, 0000, 0000, 0220, 0010, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0040, 0145, 0156, 0143, 0157, 0144, 0151, 0156, 0147, 0075, 0042, 0125, 0124, 0106, 0055, 0070, 0042, 0077, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0163, 0040, 0154, 0151, 0142, 0075, 0042, 0147, 0164, 0153, 0053, 0042, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0063, 0056, 0061, 0060, 0042, 0057, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0040, 0151, 0144, 0075, 0042, 0107, 0157, 0164, 0157, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0151, 0164, 0154, 0145, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0107, 0157, 0040, 0124, 0157, 0040, 0114, 0151, 0156, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0163, 0151, 0172, 0141, 0142, 0154, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0171, 0160, 0145, 0137, 0150, 0151, 0156, 0164, 0042, 0076, 0144, 0151, 0141, 0154, 0157, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0166, 0142, 0157, 0170, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0166, 0142, 0157, 0170, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0171, 0157, 0165, 0164, 0137, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0114, 0151, 0156, 0145, 0040, 0137, 0116, 0165, 0155, 0142, 0145, 0162, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0163, 0160, 0151, 0156, 0055, 0142, 0165, 0164, 0164, 0157, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0160, 0151, 0156, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0160, 0151, 0156, 0055, 0142, 0165, 0164, 0164, 0157, 0156, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0141, 0164, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0156, 0160, 0165, 0164, 0137, 0160, 0165, 0162, 0160, 0157, 0163, 0145, 0042, 0076, 0156, 0165, 0155, 0142, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0156, 0165, 0155, 0145, 0162, 0151, 0143, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0144, 0145, 0057, 0000, 0011, 0000, 0000, 0000, 0164, 0157, 0157, 0154, 0142, 0141, 0162, 0056, 0165, 0151, 0000, 0000, 0000, 0000, 0000, 0000, 0174, 0024, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0077, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0142, 0141, 0162, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0141, 0162, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0165, 0164, 0164, 0157, 0156, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0167, 0151, 0156, 0056, 0156, 0145, 0167, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0055, 0156, 0145, 0167, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0163, 0137, 0151, 0155, 0160, 0157, 0162, 0164, 0141, 0156, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0116, 0145, 0167, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0157, 0155, 0157, 0147, 0145, 0156, 0145, 0157, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0165, 0164, 0164, 0157, 0156, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0167, 0151, 0156, 0056, 0157, 0160, 0145, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0055, 0157, 0160, 0145, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0163, 0137, 0151, 0155, 0160, 0157, 0162, 0164, 0141, 0156, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0117, 0160, 0145, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0157, 0155, 0157, 0147, 0145, 0156, 0145, 0157, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0165, 0164, 0164, 0157, 0156, 0063, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0167, 0151, 0156, 0056, 0163, 0141, 0166, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0055, 0163, 0141, 0166, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0163, 0137, 0151, 0155, 0160, 0157, 0162, 0164, 0141, 0156, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0141, 0166, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0157, 0155, 0157, 0147, 0145, 0156, 0145, 0157, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0145, 0160, 0141, 0162, 0141, 0164, 0157, 0162, 0124, 0157, 0157, 0154, 0111, 0164, 0145, 0155, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0145, 0160, 0141, 0162, 0141, 0164, 0157, 0162, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0165, 0164, 0164, 0157, 0156, 0064, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0167, 0151, 0156, 0056, 0165, 0156, 0144, 0157, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0145, 0144, 0151, 0164, 0055, 0165, 0156, 0144, 0157, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0163, 0137, 0151, 0155, 0160, 0157, 0162, 0164, 0141, 0156, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0125, 0156, 0144, 0157, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0157, 0155, 0157, 0147, 0145, 0156, 0145, 0157, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0165, 0164, 0164, 0157, 0156, 0065, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0167, 0151, 0156, 0056, 0162, 0145, 0144, 0157, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0145, 0144, 0151, 0164, 0055, 0162, 0145, 0144, 0157, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0163, 0137, 0151, 0155, 0160, 0157, 0162, 0164, 0141, 0156, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0122, 0145, 0144, 0157, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0157, 0155, 0157, 0147, 0145, 0156, 0145, 0157, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0145, 0160, 0141, 0162, 0141, 0164, 0157, 0162, 0124, 0157, 0157, 0154, 0111, 0164, 0145, 0155, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0145, 0160, 0141, 0162, 0141, 0164, 0157, 0162, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0165, 0164, 0164, 0157, 0156, 0066, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0167, 0151, 0156, 0056, 0143, 0165, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0145, 0144, 0151, 0164, 0055, 0143, 0165, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0163, 0137, 0151, 0155, 0160, 0157, 0162, 0164, 0141, 0156, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0165, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0157, 0155, 0157, 0147, 0145, 0156, 0145, 0157, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0165, 0164, 0164, 0157, 0156, 0067, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0167, 0151, 0156, 0056, 0143, 0157, 0160, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0145, 0144, 0151, 0164, 0055, 0143, 0157, 0160, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0163, 0137, 0151, 0155, 0160, 0157, 0162, 0164, 0141, 0156, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0157, 0160, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0157, 0155, 0157, 0147, 0145, 0156, 0145, 0157, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0165, 0164, 0164, 0157, 0156, 0070, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0167, 0151, 0156, 0056, 0160, 0141, 0163, 0164, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0145, 0144, 0151, 0164, 0055, 0160, 0141, 0163, 0164, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0163, 0137, 0151, 0155, 0160, 0157, 0162, 0164, 0141, 0156, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0120, 0141, 0163, 0164, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0157, 0155, 0157, 0147, 0145, 0156, 0145, 0157, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0145, 0160, 0141, 0162, 0141, 0164, 0157, 0162, 0124, 0157, 0157, 0154, 0111, 0164, 0145, 0155, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0145, 0160, 0141, 0162, 0141, 0164, 0157, 0162, 0063, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0165, 0164, 0164, 0157, 0156, 0071, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0167, 0151, 0156, 0056, 0146, 0151, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0145, 0144, 0151, 0164, 0055, 0146, 0151, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0163, 0137, 0151, 0155, 0160, 0157, 0162, 0164, 0141, 0156, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0106, 0151, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0157, 0155, 0157, 0147, 0145, 0156, 0145, 0157, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0157, 0157, 0154, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0157, 0157, 0154, 0142, 0165, 0164, 0164, 0157, 0156, 0061, 0060, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0167, 0151, 0156, 0056, 0146, 0151, 0156, 0144, 0055, 0162, 0145, 0160, 0154, 0141, 0143, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0145, 0144, 0151, 0164, 0055, 0146, 0151, 0156, 0144, 0055, 0162, 0145, 0160, 0154, 0141, 0143, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0163, 0137, 0151, 0155, 0160, 0157, 0162, 0164, 0141, 0156, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0106, 0151, 0156, 0144, 0040, 0101, 0156, 0144, 0040, 0122, 0145, 0160, 0154, 0141, 0143, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0157, 0155, 0157, 0147, 0145, 0156, 0145, 0157, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0060, 0170, 0065, 0063, 0071, 0057, 0000, 0000, 0000, 0000, 0000, 0000, 0145, 0156, 0164, 0162, 0171, 0055, 0144, 0151, 0141, 0154, 0157, 0147, 0056, 0165, 0151, 0000, 0203, 0007, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0040, 0145, 0156, 0143, 0157, 0144, 0151, 0156, 0147, 0075, 0042, 0125, 0124, 0106, 0055, 0070, 0042, 0077, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0163, 0040, 0154, 0151, 0142, 0075, 0042, 0147, 0164, 0153, 0053, 0042, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0063, 0056, 0061, 0060, 0042, 0057, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0040, 0151, 0144, 0075, 0042, 0105, 0156, 0164, 0162, 0171, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0171, 0160, 0145, 0137, 0150, 0151, 0156, 0164, 0042, 0076, 0144, 0151, 0141, 0154, 0157, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0163, 0151, 0172, 0141, 0142, 0154, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0055, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0166, 0142, 0157, 0170, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0166, 0142, 0157, 0170, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0171, 0157, 0165, 0164, 0137, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0151, 0156, 0164, 0162, 0157, 0055, 0154, 0141, 0142, 0145, 0154, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0055, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0145, 0156, 0164, 0162, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0055, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0105, 0156, 0164, 0162, 0171, 0042, 0040, 0151, 0144, 0075, 0042, 0145, 0156, 0164, 0162, 0171, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0141, 0164, 0145, 0163, 0055, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0151, 0156, 0151, 0164, 0151, 0141, 0154, 0055, 0144, 0151, 0141, 0154, 0157, 0147, 0056, 0165, 0151, 0000, 0000, 0000, 0000, 0211, 0066, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0040, 0145, 0156, 0143, 0157, 0144, 0151, 0156, 0147, 0075, 0042, 0125, 0124, 0106, 0055, 0070, 0042, 0077, 0076, 0012, 0074, 0041, 0055, 0055, 0040, 0107, 0145, 0156, 0145, 0162, 0141, 0164, 0145, 0144, 0040, 0167, 0151, 0164, 0150, 0040, 0147, 0154, 0141, 0144, 0145, 0040, 0063, 0056, 0061, 0070, 0056, 0063, 0040, 0055, 0055, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0163, 0040, 0154, 0151, 0142, 0075, 0042, 0147, 0164, 0153, 0053, 0042, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0063, 0056, 0061, 0060, 0042, 0057, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0040, 0151, 0144, 0075, 0042, 0111, 0156, 0151, 0164, 0151, 0141, 0154, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0151, 0164, 0154, 0145, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0157, 0156, 0156, 0145, 0143, 0164, 0040, 0124, 0157, 0040, 0123, 0145, 0162, 0166, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0163, 0151, 0172, 0141, 0142, 0154, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0171, 0160, 0145, 0137, 0150, 0151, 0156, 0164, 0042, 0076, 0144, 0151, 0141, 0154, 0157, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0166, 0142, 0157, 0170, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0166, 0142, 0157, 0170, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0171, 0157, 0165, 0164, 0137, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0167, 0145, 0154, 0143, 0157, 0155, 0145, 0055, 0154, 0141, 0142, 0145, 0154, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0127, 0145, 0154, 0143, 0157, 0155, 0145, 0040, 0164, 0157, 0040, 0107, 0157, 0142, 0142, 0171, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0143, 0141, 0154, 0145, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0061, 0056, 0064, 0063, 0071, 0071, 0071, 0071, 0071, 0071, 0071, 0071, 0071, 0071, 0071, 0071, 0071, 0071, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0171, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0102, 0145, 0146, 0157, 0162, 0145, 0040, 0167, 0145, 0040, 0163, 0164, 0141, 0162, 0164, 0054, 0040, 0141, 0040, 0146, 0145, 0167, 0040, 0157, 0160, 0164, 0151, 0157, 0156, 0163, 0040, 0156, 0145, 0145, 0144, 0040, 0164, 0157, 0040, 0142, 0145, 0040, 0143, 0157, 0156, 0146, 0151, 0147, 0165, 0162, 0145, 0144, 0056, 0040, 0131, 0157, 0165, 0040, 0143, 0141, 0156, 0040, 0154, 0141, 0164, 0145, 0162, 0040, 0143, 0150, 0141, 0156, 0147, 0145, 0040, 0164, 0150, 0145, 0155, 0040, 0142, 0171, 0040, 0143, 0150, 0157, 0157, 0163, 0151, 0156, 0147, 0040, 0046, 0154, 0164, 0073, 0151, 0046, 0147, 0164, 0073, 0120, 0162, 0145, 0146, 0145, 0162, 0145, 0156, 0143, 0145, 0163, 0046, 0154, 0164, 0073, 0057, 0151, 0046, 0147, 0164, 0073, 0040, 0146, 0162, 0157, 0155, 0040, 0164, 0150, 0145, 0040, 0141, 0160, 0160, 0154, 0151, 0143, 0141, 0164, 0151, 0157, 0156, 0040, 0155, 0145, 0156, 0165, 0056, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0155, 0141, 0162, 0153, 0165, 0160, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0162, 0141, 0160, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0170, 0137, 0167, 0151, 0144, 0164, 0150, 0137, 0143, 0150, 0141, 0162, 0163, 0042, 0076, 0064, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0111, 0155, 0141, 0147, 0145, 0042, 0040, 0151, 0144, 0075, 0042, 0151, 0155, 0141, 0147, 0145, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0151, 0170, 0145, 0154, 0137, 0163, 0151, 0172, 0145, 0042, 0076, 0061, 0062, 0070, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0147, 0157, 0142, 0142, 0171, 0055, 0060, 0056, 0065, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0163, 0151, 0172, 0145, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0151, 0147, 0150, 0164, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0063, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0156, 0141, 0155, 0145, 0055, 0154, 0141, 0142, 0145, 0154, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0164, 0157, 0160, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0125, 0163, 0145, 0162, 0040, 0116, 0141, 0155, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0105, 0156, 0164, 0162, 0171, 0042, 0040, 0151, 0144, 0075, 0042, 0156, 0141, 0155, 0145, 0055, 0145, 0156, 0164, 0162, 0171, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0164, 0157, 0160, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0141, 0164, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0131, 0157, 0165, 0162, 0040, 0156, 0141, 0155, 0145, 0040, 0141, 0163, 0040, 0163, 0150, 0157, 0167, 0156, 0040, 0164, 0157, 0040, 0157, 0164, 0150, 0145, 0162, 0040, 0165, 0163, 0145, 0162, 0163, 0056, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0143, 0141, 0154, 0145, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0060, 0056, 0070, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0064, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0063, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0164, 0157, 0160, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0125, 0163, 0145, 0162, 0040, 0103, 0157, 0154, 0157, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0157, 0154, 0157, 0162, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0157, 0154, 0157, 0162, 0055, 0142, 0165, 0164, 0164, 0157, 0156, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0164, 0157, 0160, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0151, 0164, 0154, 0145, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0150, 0157, 0157, 0163, 0145, 0040, 0141, 0040, 0125, 0163, 0145, 0162, 0040, 0103, 0157, 0154, 0157, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0064, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0124, 0150, 0145, 0040, 0143, 0157, 0154, 0157, 0162, 0040, 0167, 0151, 0164, 0150, 0040, 0167, 0150, 0151, 0143, 0150, 0040, 0164, 0145, 0170, 0164, 0040, 0171, 0157, 0165, 0040, 0150, 0141, 0166, 0145, 0040, 0167, 0162, 0151, 0164, 0164, 0145, 0156, 0040, 0151, 0163, 0040, 0142, 0162, 0141, 0156, 0144, 0145, 0144, 0056, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0143, 0141, 0154, 0145, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0060, 0056, 0070, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0064, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0065, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0164, 0157, 0160, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0122, 0145, 0155, 0157, 0164, 0145, 0040, 0103, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0141, 0154, 0154, 0157, 0167, 0055, 0162, 0145, 0155, 0157, 0164, 0145, 0055, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0163, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0101, 0154, 0154, 0157, 0167, 0040, 0162, 0145, 0155, 0157, 0164, 0145, 0040, 0165, 0163, 0145, 0162, 0163, 0040, 0164, 0157, 0040, 0145, 0144, 0151, 0164, 0040, 0154, 0157, 0143, 0141, 0154, 0040, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0163, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0162, 0145, 0155, 0157, 0164, 0145, 0055, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0163, 0055, 0147, 0162, 0151, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0103, 0150, 0145, 0143, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0141, 0163, 0153, 0055, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0101, 0163, 0153, 0040, 0162, 0145, 0155, 0157, 0164, 0145, 0040, 0165, 0163, 0145, 0162, 0163, 0040, 0164, 0157, 0040, 0145, 0156, 0164, 0145, 0162, 0040, 0141, 0040, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0055, 0147, 0162, 0151, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0066, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0120, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0154, 0154, 0151, 0160, 0163, 0151, 0172, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0105, 0156, 0164, 0162, 0171, 0042, 0040, 0151, 0144, 0075, 0042, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0151, 0154, 0151, 0164, 0171, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0067, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0101, 0165, 0164, 0150, 0145, 0156, 0164, 0151, 0143, 0141, 0164, 0151, 0157, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0145, 0151, 0147, 0150, 0164, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0142, 0157, 0154, 0144, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0122, 0141, 0144, 0151, 0157, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0162, 0145, 0141, 0164, 0145, 0055, 0163, 0145, 0154, 0146, 0055, 0163, 0151, 0147, 0156, 0145, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0162, 0145, 0141, 0164, 0145, 0040, 0141, 0040, 0163, 0145, 0154, 0146, 0055, 0163, 0151, 0147, 0156, 0145, 0144, 0040, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0040, 0050, 0122, 0145, 0143, 0157, 0155, 0155, 0145, 0156, 0144, 0145, 0144, 0051, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0147, 0162, 0157, 0165, 0160, 0042, 0076, 0143, 0162, 0145, 0141, 0164, 0145, 0055, 0163, 0145, 0154, 0146, 0055, 0163, 0151, 0147, 0156, 0145, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0063, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0070, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0111, 0164, 0040, 0155, 0141, 0171, 0040, 0164, 0141, 0153, 0145, 0040, 0141, 0040, 0146, 0145, 0167, 0040, 0163, 0145, 0143, 0157, 0156, 0144, 0163, 0040, 0146, 0157, 0162, 0040, 0164, 0150, 0145, 0040, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0040, 0164, 0157, 0040, 0142, 0145, 0040, 0147, 0145, 0156, 0145, 0162, 0141, 0164, 0145, 0144, 0056, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0143, 0141, 0154, 0145, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0060, 0056, 0070, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0064, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0122, 0141, 0144, 0151, 0157, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0165, 0163, 0145, 0055, 0145, 0170, 0151, 0163, 0164, 0151, 0156, 0147, 0055, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0125, 0163, 0145, 0040, 0141, 0156, 0040, 0145, 0170, 0151, 0163, 0164, 0151, 0156, 0147, 0040, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0040, 0050, 0105, 0170, 0160, 0145, 0162, 0164, 0040, 0117, 0160, 0164, 0151, 0157, 0156, 0051, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0143, 0145, 0151, 0166, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0162, 0141, 0167, 0137, 0151, 0156, 0144, 0151, 0143, 0141, 0164, 0157, 0162, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0147, 0162, 0157, 0165, 0160, 0042, 0076, 0143, 0162, 0145, 0141, 0164, 0145, 0055, 0163, 0145, 0154, 0146, 0055, 0163, 0151, 0147, 0156, 0145, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0065, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0071, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0170, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0125, 0163, 0145, 0040, 0141, 0156, 0040, 0145, 0170, 0151, 0163, 0164, 0151, 0156, 0147, 0040, 0160, 0162, 0151, 0166, 0141, 0164, 0145, 0040, 0153, 0145, 0171, 0040, 0141, 0156, 0144, 0040, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0056, 0040, 0124, 0150, 0145, 0040, 0146, 0151, 0154, 0145, 0163, 0040, 0155, 0165, 0163, 0164, 0040, 0142, 0145, 0040, 0151, 0156, 0040, 0120, 0105, 0115, 0040, 0146, 0157, 0162, 0155, 0141, 0164, 0056, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0162, 0141, 0160, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0143, 0141, 0154, 0145, 0042, 0040, 0166, 0141, 0154, 0165, 0145, 0075, 0042, 0060, 0056, 0070, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0060, 0064, 0042, 0057, 0076, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0163, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0055, 0147, 0162, 0151, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0154, 0145, 0146, 0164, 0042, 0076, 0062, 0064, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0060, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0120, 0162, 0151, 0166, 0141, 0164, 0145, 0040, 0113, 0145, 0171, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0061, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0143, 0145, 0156, 0164, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0106, 0151, 0154, 0145, 0103, 0150, 0157, 0157, 0163, 0145, 0162, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0160, 0162, 0151, 0166, 0141, 0164, 0145, 0055, 0153, 0145, 0171, 0055, 0146, 0151, 0154, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0106, 0151, 0154, 0145, 0103, 0150, 0157, 0157, 0163, 0145, 0162, 0102, 0165, 0164, 0164, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0143, 0145, 0162, 0164, 0151, 0146, 0151, 0143, 0141, 0164, 0145, 0055, 0146, 0151, 0154, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0067, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0065, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0155, 0145, 0156, 0165, 0056, 0165, 0151, 0277, 0031, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0077, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0155, 0145, 0156, 0165, 0040, 0151, 0144, 0075, 0042, 0141, 0160, 0160, 0155, 0145, 0156, 0165, 0042, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0120, 0162, 0145, 0146, 0145, 0162, 0145, 0156, 0143, 0145, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0141, 0160, 0160, 0056, 0160, 0162, 0145, 0146, 0145, 0162, 0145, 0156, 0143, 0145, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0110, 0145, 0154, 0160, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0141, 0160, 0160, 0056, 0150, 0145, 0154, 0160, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0101, 0142, 0157, 0165, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0141, 0160, 0160, 0056, 0141, 0142, 0157, 0165, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0121, 0165, 0151, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0141, 0160, 0160, 0056, 0161, 0165, 0151, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0057, 0155, 0145, 0156, 0165, 0076, 0074, 0155, 0145, 0156, 0165, 0040, 0151, 0144, 0075, 0042, 0167, 0151, 0156, 0155, 0145, 0156, 0165, 0042, 0076, 0074, 0163, 0165, 0142, 0155, 0145, 0156, 0165, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0106, 0151, 0154, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0116, 0145, 0167, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0156, 0145, 0167, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0156, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0117, 0160, 0145, 0156, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0157, 0160, 0145, 0156, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0157, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0117, 0160, 0145, 0156, 0040, 0137, 0114, 0157, 0143, 0141, 0164, 0151, 0157, 0156, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0157, 0160, 0145, 0156, 0055, 0154, 0157, 0143, 0141, 0164, 0151, 0157, 0156, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0154, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0123, 0141, 0166, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0163, 0141, 0166, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0141, 0166, 0145, 0040, 0137, 0101, 0163, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0163, 0141, 0166, 0145, 0055, 0141, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0046, 0154, 0164, 0073, 0163, 0150, 0151, 0146, 0164, 0046, 0147, 0164, 0073, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0141, 0166, 0145, 0040, 0101, 0154, 0154, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0163, 0141, 0166, 0145, 0055, 0141, 0154, 0154, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0046, 0154, 0164, 0073, 0163, 0150, 0151, 0146, 0164, 0046, 0147, 0164, 0073, 0154, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0105, 0170, 0160, 0157, 0162, 0164, 0040, 0101, 0163, 0040, 0137, 0110, 0124, 0115, 0114, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0145, 0170, 0160, 0157, 0162, 0164, 0055, 0150, 0164, 0155, 0154, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0046, 0154, 0164, 0073, 0163, 0150, 0151, 0146, 0164, 0046, 0147, 0164, 0073, 0150, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0157, 0156, 0156, 0145, 0143, 0164, 0040, 0137, 0124, 0157, 0040, 0123, 0145, 0162, 0166, 0145, 0162, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0103, 0154, 0157, 0163, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0143, 0154, 0157, 0163, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0167, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0057, 0163, 0165, 0142, 0155, 0145, 0156, 0165, 0076, 0074, 0163, 0165, 0142, 0155, 0145, 0156, 0165, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0105, 0144, 0151, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0125, 0156, 0144, 0157, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0165, 0156, 0144, 0157, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0172, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0122, 0145, 0144, 0157, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0162, 0145, 0144, 0157, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0046, 0154, 0164, 0073, 0163, 0150, 0151, 0146, 0164, 0046, 0147, 0164, 0073, 0172, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0165, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0143, 0165, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0170, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0103, 0157, 0160, 0171, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0143, 0157, 0160, 0171, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0143, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0120, 0141, 0163, 0164, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0160, 0141, 0163, 0164, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0166, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0106, 0151, 0156, 0144, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0146, 0151, 0156, 0144, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0146, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0106, 0151, 0156, 0144, 0040, 0116, 0145, 0137, 0170, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0146, 0151, 0156, 0144, 0055, 0156, 0145, 0170, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0147, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0106, 0151, 0156, 0144, 0040, 0120, 0162, 0145, 0137, 0166, 0151, 0157, 0165, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0146, 0151, 0156, 0144, 0055, 0160, 0162, 0145, 0166, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0046, 0154, 0164, 0073, 0163, 0150, 0151, 0146, 0164, 0046, 0147, 0164, 0073, 0147, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0106, 0151, 0156, 0144, 0040, 0101, 0156, 0144, 0040, 0122, 0145, 0137, 0160, 0154, 0141, 0143, 0145, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0146, 0151, 0156, 0144, 0055, 0162, 0145, 0160, 0154, 0141, 0143, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0150, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0107, 0157, 0040, 0124, 0157, 0040, 0137, 0114, 0151, 0156, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0147, 0157, 0164, 0157, 0055, 0154, 0151, 0156, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0151, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0057, 0163, 0165, 0142, 0155, 0145, 0156, 0165, 0076, 0074, 0163, 0165, 0142, 0155, 0145, 0156, 0165, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0126, 0151, 0145, 0167, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0122, 0145, 0163, 0145, 0164, 0040, 0125, 0163, 0145, 0162, 0040, 0103, 0157, 0154, 0157, 0162, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0150, 0151, 0144, 0145, 0055, 0165, 0163, 0145, 0162, 0055, 0143, 0157, 0154, 0157, 0162, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0046, 0154, 0164, 0073, 0163, 0150, 0151, 0146, 0164, 0046, 0147, 0164, 0073, 0143, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0106, 0165, 0154, 0154, 0163, 0143, 0162, 0145, 0145, 0156, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0146, 0165, 0154, 0154, 0163, 0143, 0162, 0145, 0145, 0156, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0106, 0061, 0061, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0132, 0157, 0157, 0155, 0040, 0111, 0156, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0172, 0157, 0157, 0155, 0055, 0151, 0156, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0160, 0154, 0165, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0132, 0157, 0157, 0155, 0040, 0117, 0165, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0172, 0157, 0157, 0155, 0055, 0157, 0165, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0155, 0151, 0156, 0165, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0126, 0151, 0145, 0167, 0040, 0124, 0157, 0157, 0154, 0040, 0102, 0141, 0162, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0166, 0151, 0145, 0167, 0055, 0164, 0157, 0157, 0154, 0142, 0141, 0162, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0126, 0151, 0145, 0167, 0040, 0123, 0164, 0141, 0164, 0165, 0163, 0040, 0102, 0141, 0162, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0166, 0151, 0145, 0167, 0055, 0163, 0164, 0141, 0164, 0165, 0163, 0142, 0141, 0162, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0126, 0151, 0145, 0167, 0040, 0104, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0040, 0102, 0162, 0157, 0167, 0163, 0145, 0162, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0166, 0151, 0145, 0167, 0055, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0106, 0071, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0126, 0151, 0145, 0167, 0040, 0103, 0150, 0141, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0166, 0151, 0145, 0167, 0055, 0143, 0150, 0141, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0163, 0150, 0151, 0146, 0164, 0046, 0147, 0164, 0073, 0106, 0071, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0126, 0151, 0145, 0167, 0040, 0104, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0040, 0125, 0163, 0145, 0162, 0040, 0114, 0151, 0163, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0166, 0151, 0145, 0167, 0055, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0055, 0165, 0163, 0145, 0162, 0055, 0154, 0151, 0163, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0106, 0071, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0126, 0151, 0145, 0167, 0040, 0103, 0150, 0141, 0164, 0040, 0125, 0163, 0145, 0162, 0040, 0114, 0151, 0163, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0166, 0151, 0145, 0167, 0055, 0143, 0150, 0141, 0164, 0055, 0165, 0163, 0145, 0162, 0055, 0154, 0151, 0163, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0143, 0145, 0154, 0042, 0076, 0046, 0154, 0164, 0073, 0160, 0162, 0151, 0155, 0141, 0162, 0171, 0046, 0147, 0164, 0073, 0046, 0154, 0164, 0073, 0163, 0150, 0151, 0146, 0164, 0046, 0147, 0164, 0073, 0106, 0071, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0165, 0142, 0155, 0145, 0156, 0165, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0110, 0151, 0147, 0150, 0154, 0151, 0147, 0150, 0164, 0040, 0115, 0157, 0144, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0116, 0157, 0156, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0167, 0151, 0156, 0056, 0150, 0151, 0147, 0150, 0154, 0151, 0147, 0150, 0164, 0055, 0155, 0157, 0144, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0141, 0162, 0147, 0145, 0164, 0042, 0057, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0041, 0055, 0055, 0040, 0164, 0150, 0151, 0163, 0040, 0151, 0163, 0040, 0146, 0151, 0154, 0154, 0145, 0144, 0040, 0160, 0162, 0157, 0147, 0162, 0141, 0155, 0155, 0141, 0164, 0151, 0143, 0141, 0154, 0154, 0171, 0040, 0055, 0055, 0076, 0074, 0057, 0163, 0165, 0142, 0155, 0145, 0156, 0165, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0057, 0163, 0165, 0142, 0155, 0145, 0156, 0165, 0076, 0074, 0057, 0155, 0145, 0156, 0165, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0057, 0007, 0000, 0000, 0000, 0165, 0151, 0057, 0000, 0017, 0000, 0000, 0000, 0001, 0000, 0000, 0000, 0005, 0000, 0000, 0000, 0020, 0000, 0000, 0000, 0012, 0000, 0000, 0000, 0004, 0000, 0000, 0000, 0006, 0000, 0000, 0000, 0013, 0000, 0000, 0000, 0014, 0000, 0000, 0000, 0002, 0000, 0000, 0000, 0021, 0000, 0000, 0000, 0003, 0000, 0000, 0000, 0010, 0000, 0000, 0000, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0055, 0143, 0157, 0156, 0164, 0145, 0170, 0164, 0055, 0155, 0145, 0156, 0165, 0056, 0165, 0151, 0000, 0000, 0000, 0000, 0000, 0314, 0005, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0077, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0155, 0145, 0156, 0165, 0040, 0151, 0144, 0075, 0042, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0055, 0143, 0157, 0156, 0164, 0145, 0170, 0164, 0055, 0155, 0145, 0156, 0165, 0055, 0151, 0156, 0141, 0143, 0164, 0151, 0166, 0145, 0042, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0122, 0145, 0155, 0157, 0166, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0056, 0162, 0145, 0155, 0157, 0166, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0057, 0155, 0145, 0156, 0165, 0076, 0074, 0155, 0145, 0156, 0165, 0040, 0151, 0144, 0075, 0042, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0055, 0143, 0157, 0156, 0164, 0145, 0170, 0164, 0055, 0155, 0145, 0156, 0165, 0055, 0141, 0143, 0164, 0151, 0166, 0145, 0042, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0104, 0151, 0163, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0040, 0106, 0162, 0157, 0155, 0040, 0123, 0145, 0162, 0166, 0145, 0162, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0056, 0144, 0151, 0163, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0103, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0040, 0111, 0156, 0146, 0157, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0056, 0143, 0157, 0156, 0156, 0145, 0143, 0164, 0151, 0157, 0156, 0055, 0151, 0156, 0146, 0157, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0103, 0162, 0145, 0141, 0164, 0145, 0040, 0101, 0143, 0143, 0157, 0165, 0156, 0164, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0056, 0143, 0162, 0145, 0141, 0164, 0145, 0055, 0141, 0143, 0143, 0157, 0165, 0156, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0162, 0145, 0141, 0164, 0145, 0040, 0104, 0157, 0137, 0143, 0165, 0155, 0145, 0156, 0164, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0056, 0143, 0162, 0145, 0141, 0164, 0145, 0055, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0103, 0162, 0145, 0141, 0164, 0145, 0040, 0104, 0151, 0162, 0145, 0143, 0164, 0157, 0162, 0137, 0171, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0056, 0143, 0162, 0145, 0141, 0164, 0145, 0055, 0144, 0151, 0162, 0145, 0143, 0164, 0157, 0162, 0171, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0117, 0160, 0145, 0156, 0040, 0104, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0056, 0157, 0160, 0145, 0156, 0055, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0137, 0120, 0145, 0162, 0155, 0151, 0163, 0163, 0151, 0157, 0156, 0163, 0056, 0056, 0056, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0056, 0160, 0145, 0162, 0155, 0151, 0163, 0163, 0151, 0157, 0156, 0163, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0151, 0164, 0145, 0155, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0104, 0137, 0145, 0154, 0145, 0164, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0142, 0162, 0157, 0167, 0163, 0145, 0162, 0056, 0144, 0145, 0154, 0145, 0164, 0145, 0074, 0057, 0141, 0164, 0164, 0162, 0151, 0142, 0165, 0164, 0145, 0076, 0074, 0057, 0151, 0164, 0145, 0155, 0076, 0074, 0057, 0163, 0145, 0143, 0164, 0151, 0157, 0156, 0076, 0074, 0057, 0155, 0145, 0156, 0165, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0055, 0154, 0157, 0143, 0141, 0164, 0151, 0157, 0156, 0055, 0144, 0151, 0141, 0154, 0157, 0147, 0056, 0165, 0151, 0000, 0301, 0013, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0040, 0145, 0156, 0143, 0157, 0144, 0151, 0156, 0147, 0075, 0042, 0125, 0124, 0106, 0055, 0070, 0042, 0077, 0076, 0012, 0074, 0041, 0055, 0055, 0040, 0107, 0145, 0156, 0145, 0162, 0141, 0164, 0145, 0144, 0040, 0167, 0151, 0164, 0150, 0040, 0147, 0154, 0141, 0144, 0145, 0040, 0063, 0056, 0061, 0070, 0056, 0063, 0040, 0055, 0055, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0163, 0040, 0154, 0151, 0142, 0075, 0042, 0147, 0164, 0153, 0053, 0042, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0063, 0056, 0061, 0060, 0042, 0057, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0040, 0151, 0144, 0075, 0042, 0104, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0114, 0157, 0143, 0141, 0164, 0151, 0157, 0156, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0163, 0151, 0172, 0141, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0137, 0150, 0145, 0151, 0147, 0150, 0164, 0042, 0076, 0064, 0070, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0171, 0160, 0145, 0137, 0150, 0151, 0156, 0164, 0042, 0076, 0144, 0151, 0141, 0154, 0157, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0166, 0142, 0157, 0170, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0166, 0142, 0157, 0170, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0171, 0157, 0165, 0164, 0137, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0055, 0156, 0141, 0155, 0145, 0055, 0154, 0141, 0142, 0145, 0154, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0104, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0040, 0116, 0141, 0155, 0145, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0105, 0156, 0164, 0162, 0171, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0157, 0143, 0165, 0155, 0145, 0156, 0164, 0055, 0156, 0141, 0155, 0145, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0141, 0164, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0157, 0143, 0141, 0164, 0151, 0157, 0156, 0055, 0154, 0141, 0142, 0145, 0154, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0141, 0154, 0151, 0147, 0156, 0042, 0076, 0163, 0164, 0141, 0162, 0164, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0123, 0143, 0162, 0157, 0154, 0154, 0145, 0144, 0127, 0151, 0156, 0144, 0157, 0167, 0042, 0040, 0151, 0144, 0075, 0042, 0163, 0143, 0162, 0157, 0154, 0154, 0145, 0144, 0167, 0151, 0156, 0144, 0157, 0167, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0150, 0141, 0144, 0157, 0167, 0137, 0164, 0171, 0160, 0145, 0042, 0076, 0151, 0156, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0111, 0156, 0146, 0107, 0164, 0153, 0102, 0162, 0157, 0167, 0163, 0145, 0162, 0126, 0151, 0145, 0167, 0042, 0040, 0151, 0144, 0075, 0042, 0166, 0151, 0145, 0167, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0163, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0124, 0162, 0145, 0145, 0123, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0042, 0040, 0151, 0144, 0075, 0042, 0164, 0162, 0145, 0145, 0166, 0151, 0145, 0167, 0055, 0163, 0145, 0154, 0145, 0143, 0164, 0151, 0157, 0156, 0061, 0042, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0055, 0144, 0151, 0141, 0154, 0157, 0147, 0056, 0165, 0151, 0000, 0000, 0000, 0000, 0000, 0307, 0013, 0000, 0000, 0000, 0000, 0000, 0000, 0074, 0077, 0170, 0155, 0154, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0061, 0056, 0060, 0042, 0040, 0145, 0156, 0143, 0157, 0144, 0151, 0156, 0147, 0075, 0042, 0125, 0124, 0106, 0055, 0070, 0042, 0077, 0076, 0012, 0074, 0041, 0055, 0055, 0040, 0107, 0145, 0156, 0145, 0162, 0141, 0164, 0145, 0144, 0040, 0167, 0151, 0164, 0150, 0040, 0147, 0154, 0141, 0144, 0145, 0040, 0063, 0056, 0061, 0070, 0056, 0063, 0040, 0055, 0055, 0076, 0012, 0074, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0074, 0162, 0145, 0161, 0165, 0151, 0162, 0145, 0163, 0040, 0154, 0151, 0142, 0075, 0042, 0147, 0164, 0153, 0053, 0042, 0040, 0166, 0145, 0162, 0163, 0151, 0157, 0156, 0075, 0042, 0063, 0056, 0061, 0060, 0042, 0057, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0040, 0151, 0144, 0075, 0042, 0120, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0104, 0151, 0141, 0154, 0157, 0147, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0142, 0157, 0162, 0144, 0145, 0162, 0137, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0061, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0151, 0164, 0154, 0145, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0120, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0040, 0122, 0145, 0161, 0165, 0151, 0162, 0145, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0145, 0163, 0151, 0172, 0141, 0142, 0154, 0145, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0171, 0160, 0145, 0137, 0150, 0151, 0156, 0164, 0042, 0076, 0144, 0151, 0141, 0154, 0157, 0147, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0166, 0142, 0157, 0170, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0166, 0142, 0157, 0170, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0157, 0162, 0151, 0145, 0156, 0164, 0141, 0164, 0151, 0157, 0156, 0042, 0076, 0166, 0145, 0162, 0164, 0151, 0143, 0141, 0154, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0040, 0151, 0156, 0164, 0145, 0162, 0156, 0141, 0154, 0055, 0143, 0150, 0151, 0154, 0144, 0075, 0042, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0042, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0102, 0165, 0164, 0164, 0157, 0156, 0102, 0157, 0170, 0042, 0040, 0151, 0144, 0075, 0042, 0144, 0151, 0141, 0154, 0157, 0147, 0055, 0141, 0143, 0164, 0151, 0157, 0156, 0137, 0141, 0162, 0145, 0141, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0171, 0157, 0165, 0164, 0137, 0163, 0164, 0171, 0154, 0145, 0042, 0076, 0145, 0156, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0160, 0154, 0141, 0143, 0145, 0150, 0157, 0154, 0144, 0145, 0162, 0057, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0107, 0162, 0151, 0144, 0042, 0040, 0151, 0144, 0075, 0042, 0147, 0162, 0151, 0144, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0162, 0157, 0167, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0157, 0154, 0165, 0155, 0156, 0137, 0163, 0160, 0141, 0143, 0151, 0156, 0147, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0111, 0155, 0141, 0147, 0145, 0042, 0040, 0151, 0144, 0075, 0042, 0151, 0155, 0141, 0147, 0145, 0061, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0141, 0162, 0147, 0151, 0156, 0137, 0162, 0151, 0147, 0150, 0164, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0156, 0141, 0155, 0145, 0042, 0076, 0156, 0145, 0164, 0167, 0157, 0162, 0153, 0055, 0163, 0145, 0162, 0166, 0145, 0162, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0143, 0157, 0156, 0137, 0163, 0151, 0172, 0145, 0042, 0076, 0066, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0151, 0147, 0150, 0164, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0151, 0156, 0164, 0162, 0157, 0055, 0154, 0141, 0142, 0145, 0154, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0162, 0141, 0160, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0137, 0143, 0150, 0141, 0162, 0163, 0042, 0076, 0063, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0060, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0167, 0151, 0144, 0164, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0114, 0141, 0142, 0145, 0154, 0042, 0040, 0151, 0144, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0062, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0141, 0142, 0145, 0154, 0042, 0040, 0164, 0162, 0141, 0156, 0163, 0154, 0141, 0164, 0141, 0142, 0154, 0145, 0075, 0042, 0171, 0145, 0163, 0042, 0076, 0123, 0145, 0162, 0166, 0145, 0162, 0040, 0137, 0120, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0072, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0165, 0163, 0145, 0137, 0165, 0156, 0144, 0145, 0162, 0154, 0151, 0156, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0155, 0156, 0145, 0155, 0157, 0156, 0151, 0143, 0137, 0167, 0151, 0144, 0147, 0145, 0164, 0042, 0076, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0157, 0142, 0152, 0145, 0143, 0164, 0040, 0143, 0154, 0141, 0163, 0163, 0075, 0042, 0107, 0164, 0153, 0105, 0156, 0164, 0162, 0171, 0042, 0040, 0151, 0144, 0075, 0042, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0042, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0154, 0145, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0143, 0141, 0156, 0137, 0146, 0157, 0143, 0165, 0163, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0150, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0166, 0151, 0163, 0151, 0142, 0151, 0154, 0151, 0164, 0171, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0141, 0143, 0164, 0151, 0166, 0141, 0164, 0145, 0163, 0137, 0144, 0145, 0146, 0141, 0165, 0154, 0164, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0151, 0156, 0160, 0165, 0164, 0137, 0160, 0165, 0162, 0160, 0157, 0163, 0145, 0042, 0076, 0160, 0141, 0163, 0163, 0167, 0157, 0162, 0144, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0154, 0145, 0146, 0164, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0062, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0164, 0157, 0160, 0137, 0141, 0164, 0164, 0141, 0143, 0150, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0145, 0170, 0160, 0141, 0156, 0144, 0042, 0076, 0106, 0141, 0154, 0163, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0146, 0151, 0154, 0154, 0042, 0076, 0124, 0162, 0165, 0145, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0040, 0156, 0141, 0155, 0145, 0075, 0042, 0160, 0157, 0163, 0151, 0164, 0151, 0157, 0156, 0042, 0076, 0061, 0074, 0057, 0160, 0162, 0157, 0160, 0145, 0162, 0164, 0171, 0076, 0074, 0057, 0160, 0141, 0143, 0153, 0151, 0156, 0147, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0143, 0150, 0151, 0154, 0144, 0076, 0074, 0057, 0157, 0142, 0152, 0145, 0143, 0164, 0076, 0074, 0057, 0151, 0156, 0164, 0145, 0162, 0146, 0141, 0143, 0145, 0076, 0012, 0000, 0000, 0050, 0165, 0165, 0141, 0171, 0051 } }; #else /* _MSC_VER */ static const SECTION union { const guint8 data[93192]; const double alignment; void * const ptr;} _gobby_resource_data = { "\107\126\141\162\151\141\156\164\000\000\000\000\000\000\000\000" "\030\000\000\000\030\002\000\000\000\000\000\050\022\000\000\000" "\000\000\000\000\003\000\000\000\003\000\000\000\003\000\000\000" "\003\000\000\000\004\000\000\000\004\000\000\000\004\000\000\000" "\005\000\000\000\005\000\000\000\007\000\000\000\011\000\000\000" "\011\000\000\000\012\000\000\000\012\000\000\000\016\000\000\000" "\020\000\000\000\020\000\000\000\246\311\073\047\011\000\000\000" "\030\002\000\000\006\000\114\000\040\002\000\000\044\002\000\000" "\014\307\155\312\016\000\000\000\044\002\000\000\024\000\166\000" "\070\002\000\000\247\015\000\000\024\043\224\307\016\000\000\000" "\247\015\000\000\027\000\166\000\300\015\000\000\313\026\000\000" "\216\011\266\056\016\000\000\000\313\026\000\000\025\000\166\000" "\340\026\000\000\265\271\000\000\135\334\341\127\016\000\000\000" "\265\271\000\000\016\000\166\000\310\271\000\000\135\316\000\000" "\045\114\225\365\016\000\000\000\135\316\000\000\031\000\166\000" "\170\316\000\000\160\330\000\000\025\111\014\120\016\000\000\000" "\160\330\000\000\016\000\166\000\200\330\000\000\040\341\000\000" "\354\213\170\174\015\000\000\000\040\341\000\000\003\000\114\000" "\044\341\000\000\050\341\000\000\122\221\325\252\016\000\000\000" "\050\341\000\000\012\000\166\000\070\341\000\000\304\365\000\000" "\044\330\265\104\007\000\000\000\304\365\000\000\006\000\114\000" "\314\365\000\000\320\365\000\000\116\105\160\342\016\000\000\000" "\320\365\000\000\017\000\166\000\340\365\000\000\163\375\000\000" "\246\007\221\244\016\000\000\000\163\375\000\000\021\000\166\000" "\210\375\000\000\041\064\001\000\224\274\211\253\016\000\000\000" "\041\064\001\000\007\000\166\000\050\064\001\000\367\115\001\000" "\324\265\002\000\377\377\377\377\367\115\001\000\001\000\114\000" "\370\115\001\000\374\115\001\000\123\057\360\217\000\000\000\000" "\374\115\001\000\003\000\114\000\000\116\001\000\064\116\001\000" "\127\042\000\153\016\000\000\000\064\116\001\000\027\000\166\000" "\120\116\001\000\054\124\001\000\341\205\207\227\016\000\000\000" "\054\124\001\000\033\000\166\000\110\124\001\000\031\140\001\000" "\257\122\247\144\016\000\000\000\031\140\001\000\022\000\166\000" "\060\140\001\000\007\154\001\000\147\157\142\142\171\057\000\000" "\016\000\000\000\143\157\156\156\145\143\164\151\157\156\055\144" "\151\141\154\157\147\056\165\151\137\013\000\000\000\000\000\000" "\074\077\170\155\154\040\166\145\162\163\151\157\156\075\042\061" "\056\060\042\040\145\156\143\157\144\151\156\147\075\042\125\124" "\106\055\070\042\077\076\012\074\151\156\164\145\162\146\141\143" "\145\076\074\162\145\161\165\151\162\145\163\040\154\151\142\075" "\042\147\164\153\053\042\040\166\145\162\163\151\157\156\075\042" "\063\056\061\060\042\057\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\104\151\141\154\157\147\042" "\040\151\144\075\042\103\157\156\156\145\143\164\151\157\156\104" "\151\141\154\157\147\042\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\142\157\162\144\145\162\137\167\151\144\164\150\042\076" "\061\062\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\164\151\164" "\154\145\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\103\157\156\156\145\143\164\040\124" "\157\040\123\145\162\166\145\162\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\162\145\163\151\172\141\142\154\145\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164\171" "\160\145\137\150\151\156\164\042\076\144\151\141\154\157\147\074" "\057\160\162\157\160\145\162\164\171\076\074\143\150\151\154\144" "\040\151\156\164\145\162\156\141\154\055\143\150\151\154\144\075" "\042\166\142\157\170\042\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\102\157\170\042\040\151\144" "\075\042\144\151\141\154\157\147\055\166\142\157\170\061\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\157\162\151\145\156" "\164\141\164\151\157\156\042\076\166\145\162\164\151\143\141\154" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\163\160\141\143\151" "\156\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076" "\074\143\150\151\154\144\040\151\156\164\145\162\156\141\154\055" "\143\150\151\154\144\075\042\141\143\164\151\157\156\137\141\162" "\145\141\042\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\102\165\164\164\157\156\102\157\170\042" "\040\151\144\075\042\144\151\141\154\157\147\055\141\143\164\151" "\157\156\137\141\162\145\141\061\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\141\171\157\165\164\137\163\164\171\154" "\145\042\076\145\156\144\074\057\160\162\157\160\145\162\164\171" "\076\074\143\150\151\154\144\076\074\160\154\141\143\145\150\157" "\154\144\145\162\057\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\160\154\141\143\145\150\157\154\144\145" "\162\057\076\074\057\143\150\151\154\144\076\074\057\157\142\152" "\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\145\170\160" "\141\156\144\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\146\151\154\154\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\160\157\163\151\164" "\151\157\156\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151" "\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143" "\164\040\143\154\141\163\163\075\042\107\164\153\107\162\151\144" "\042\040\151\144\075\042\147\162\151\144\061\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163" "\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\162\157\167\137\163\160\141\143\151\156\147\042\076\066\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\157\154\165\155\156\137" "\163\160\141\143\151\156\147\042\076\066\074\057\160\162\157\160" "\145\162\164\171\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\111\155" "\141\147\145\042\040\151\144\075\042\151\155\141\147\145\061\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\155\141\162\147\151\156\137\162\151\147\150\164" "\042\076\066\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\151\143" "\157\156\137\156\141\155\145\042\076\156\145\164\167\157\162\153" "\055\163\145\162\166\145\162\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\151\143\157\156\137\163\151\172\145\042\076\066\074\057" "\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\150\145\151\147" "\150\164\042\076\062\074\057\160\162\157\160\145\162\164\171\076" "\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154" "\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\114\141\142\145\154" "\042\040\151\144\075\042\154\141\142\145\154\061\042\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151" "\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164" "\141\142\154\145\075\042\171\145\163\042\076\120\154\145\141\163" "\145\040\145\156\164\145\162\040\141\040\150\157\163\164\040\156" "\141\155\145\040\167\151\164\150\040\167\150\151\143\150\040\164" "\157\040\145\163\164\141\142\154\151\163\150\040\141\040\143\157" "\156\156\145\143\164\151\157\156\056\074\057\160\162\157\160\145" "\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141" "\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143" "\150\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\157\160\137\141\164\164\141\143\150\042\076\060\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\167\151\144\164\150\042\076\062\074" "\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153" "\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042" "\154\141\142\145\154\062\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154" "\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042" "\171\145\163\042\076\137\122\145\155\157\164\145\040\105\156\144" "\160\157\151\156\164\072\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\165\163\145\137\165\156\144\145\162\154\151\156\145\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\155" "\156\145\155\157\156\151\143\137\167\151\144\147\145\164\042\076" "\145\156\164\162\171\074\057\160\162\157\160\145\162\164\171\076" "\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156" "\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076\061" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141" "\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\105\156" "\164\162\171\042\040\151\144\075\042\145\156\164\162\171\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165" "\163\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\150\145\170\160\141\156\144\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\141\143\164\151\166\141" "\164\145\163\137\144\145\146\141\165\154\164\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142" "\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145" "\146\164\137\141\164\164\141\143\150\042\076\062\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143" "\150\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\145\170\160\141\156\144\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\146\151\154\154\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\160\157\163\151\164\151\157\156\042\076\061\074\057\160\162\157" "\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076" "\074\057\143\150\151\154\144\076\074\057\157\142\152\145\143\164" "\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145\143" "\164\076\074\057\151\156\164\145\162\146\141\143\145\076\012\000" "\000\050\165\165\141\171\051\157\160\145\156\055\154\157\143\141" "\164\151\157\156\055\144\151\141\154\157\147\056\165\151\000\000" "\373\010\000\000\000\000\000\000\074\077\170\155\154\040\166\145" "\162\163\151\157\156\075\042\061\056\060\042\040\145\156\143\157" "\144\151\156\147\075\042\125\124\106\055\070\042\077\076\012\074" "\041\055\055\040\107\145\156\145\162\141\164\145\144\040\167\151" "\164\150\040\147\154\141\144\145\040\063\056\061\070\056\063\040" "\055\055\076\012\074\151\156\164\145\162\146\141\143\145\076\074" "\162\145\161\165\151\162\145\163\040\154\151\142\075\042\147\164" "\153\053\042\040\166\145\162\163\151\157\156\075\042\063\056\061" "\060\042\057\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\104\151\141\154\157\147\042\040\151\144" "\075\042\117\160\145\156\114\157\143\141\164\151\157\156\104\151" "\141\154\157\147\042\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\142\157\162\144\145\162\137\167\151\144\164\150\042\076\061" "\062\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\151\164\154" "\145\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075" "\042\171\145\163\042\076\117\160\145\156\040\114\157\143\141\164" "\151\157\156\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\162\145" "\163\151\172\141\142\154\145\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\164\171\160\145\137\150\151" "\156\164\042\076\144\151\141\154\157\147\074\057\160\162\157\160" "\145\162\164\171\076\074\143\150\151\154\144\040\151\156\164\145" "\162\156\141\154\055\143\150\151\154\144\075\042\166\142\157\170" "\042\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\102\157\170\042\040\151\144\075\042\144\151\141" "\154\157\147\055\166\142\157\170\061\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\157\162\151\145\156\164\141\164\151\157" "\156\042\076\166\145\162\164\151\143\141\154\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\163\160\141\143\151\156\147\042\076\066" "\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151\154" "\144\040\151\156\164\145\162\156\141\154\055\143\150\151\154\144" "\075\042\141\143\164\151\157\156\137\141\162\145\141\042\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\102\165\164\164\157\156\102\157\170\042\040\151\144\075\042" "\144\151\141\154\157\147\055\141\143\164\151\157\156\137\141\162" "\145\141\061\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\141\171\157\165\164\137\163\164\171\154\145\042\076\145\156" "\144\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151" "\154\144\076\074\160\154\141\143\145\150\157\154\144\145\162\057" "\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144\076" "\074\160\154\141\143\145\150\157\154\144\145\162\057\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\145\170\160\141\156\144\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\146\151\154\154\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\160\157\163\151\164\151\157\156\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\107\162\151\144\042\040\151\144\075" "\042\147\162\151\144\061\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\157\162\151\145\156" "\164\141\164\151\157\156\042\076\166\145\162\164\151\143\141\154" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\162\157\167\137\163" "\160\141\143\151\156\147\042\076\066\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\157\154\165\155\156\137\163\160\141\143\151" "\156\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076" "\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\114\141\142\145\154\042\040" "\151\144\075\042\154\141\142\145\154\061\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150" "\141\154\151\147\156\042\076\163\164\141\162\164\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\170\141\154\151\147\156\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154" "\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042" "\171\145\163\042\076\105\156\164\145\162\040\164\150\145\040\154" "\157\143\141\164\151\157\156\040\050\125\122\111\051\040\157\146" "\040\164\150\145\040\144\157\143\165\155\145\156\164\040\171\157" "\165\040\167\157\165\154\144\040\154\151\153\145\040\164\157\040" "\157\160\145\156\056\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\167\162\141\160\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\167\151\144\164\150\137\143\150\141\162\163" "\042\076\063\060\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\103\157\155" "\142\157\102\157\170\042\040\151\144\075\042\154\157\143\141\164" "\151\157\156\055\143\157\155\142\157\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150\145" "\170\160\141\156\144\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\150\141\163\055\145\156\164\162\171\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156" "\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141" "\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\145\170\160\141\156\144\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\146" "\151\154\154\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\160\157\163\151\164\151\157\156\042\076\061\074" "\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153" "\151\156\147\076\074\057\143\150\151\154\144\076\074\057\157\142" "\152\145\143\164\076\074\057\143\150\151\154\144\076\074\057\157" "\142\152\145\143\164\076\074\057\151\156\164\145\162\146\141\143" "\145\076\012\000\000\050\165\165\141\171\051\160\162\145\146\145" "\162\145\156\143\145\163\055\144\151\141\154\157\147\056\165\151" "\305\242\000\000\000\000\000\000\074\077\170\155\154\040\166\145" "\162\163\151\157\156\075\042\061\056\060\042\040\145\156\143\157" "\144\151\156\147\075\042\125\124\106\055\070\042\077\076\012\074" "\151\156\164\145\162\146\141\143\145\076\074\162\145\161\165\151" "\162\145\163\040\154\151\142\075\042\147\164\153\053\042\040\166" "\145\162\163\151\157\156\075\042\063\056\061\060\042\057\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\104\151\141\154\157\147\042\040\151\144\075\042\120\162\145" "\146\145\162\145\156\143\145\163\104\151\141\154\157\147\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\142\157\162\144\145" "\162\137\167\151\144\164\150\042\076\061\062\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\164\151\164\154\145\042\040\164\162\141" "\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076" "\120\162\145\146\145\162\145\156\143\145\163\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\162\145\163\151\172\141\142\154\145\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\171\160\145\137\150\151\156\164\042\076\144\151\141\154" "\157\147\074\057\160\162\157\160\145\162\164\171\076\074\143\150" "\151\154\144\040\151\156\164\145\162\156\141\154\055\143\150\151" "\154\144\075\042\166\142\157\170\042\076\074\157\142\152\145\143" "\164\040\143\154\141\163\163\075\042\107\164\153\102\157\170\042" "\040\151\144\075\042\144\151\141\154\157\147\055\166\142\157\170" "\061\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\157\162" "\151\145\156\164\141\164\151\157\156\042\076\166\145\162\164\151" "\143\141\154\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\163\160" "\141\143\151\156\147\042\076\066\074\057\160\162\157\160\145\162" "\164\171\076\074\143\150\151\154\144\040\151\156\164\145\162\156" "\141\154\055\143\150\151\154\144\075\042\141\143\164\151\157\156" "\137\141\162\145\141\042\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\102\165\164\164\157\156\102" "\157\170\042\040\151\144\075\042\144\151\141\154\157\147\055\141" "\143\164\151\157\156\137\141\162\145\141\061\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156" "\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\141\171\157\165\164\137\163" "\164\171\154\145\042\076\145\156\144\074\057\160\162\157\160\145" "\162\164\171\076\074\143\150\151\154\144\076\074\160\154\141\143" "\145\150\157\154\144\145\162\057\076\074\057\143\150\151\154\144" "\076\074\143\150\151\154\144\076\074\160\154\141\143\145\150\157" "\154\144\145\162\057\076\074\057\143\150\151\154\144\076\074\057" "\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\145\170\160\141\156\144\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\146\151\154\154\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\160\157" "\163\151\164\151\157\156\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\116" "\157\164\145\142\157\157\153\042\040\151\144\075\042\156\157\164" "\145\142\157\157\153\061\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\143\150\151\154\144" "\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042" "\107\164\153\107\162\151\144\042\040\151\144\075\042\147\162\151" "\144\061\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\142\157\162\144\145\162\137\167\151" "\144\164\150\042\076\061\062\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\157\162\151\145\156\164\141\164\151\157\156\042\076\166" "\145\162\164\151\143\141\154\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\162\157\167\137\163\160\141\143\151\156\147\042\076\066" "\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\107\162\151\144\042\040\151\144\075\042\147\162" "\151\144\062\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156" "\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\155\141\162\147\151\156\137\154" "\145\146\164\042\076\061\062\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\162\157\167\137\163\160\141\143\151\156\147\042\076\066" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\157\154\165\155" "\156\137\163\160\141\143\151\156\147\042\076\061\062\074\057\160" "\162\157\160\145\162\164\171\076\074\143\150\151\154\144\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\114\141\142\145\154\042\040\151\144\075\042\154\141\142\145" "\154\064\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\150\141\154\151\147\156\042\076\163" "\164\141\162\164\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\125\163\145\162\040\137\116" "\141\155\145\072\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\165" "\163\145\137\165\156\144\145\162\154\151\156\145\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\155\156\145" "\155\157\156\151\143\137\167\151\144\147\145\164\042\076\165\163" "\145\162\055\156\141\155\145\074\057\160\162\157\160\145\162\164" "\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153" "\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\105\156\164\162\171\042\040\151\144\075\042\165\163\145\162\055" "\156\141\155\145\042\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141" "\156\137\146\157\143\165\163\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\150\145\170\160\141\156\144\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156" "\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076\061" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114\141" "\142\145\154\042\040\151\144\075\042\154\141\142\145\154\065\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\150\141\154\151\147\156\042\076\163\164\141\162" "\164\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145" "\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075" "\042\171\145\163\042\076\125\163\145\162\040\103\157\154\157\137" "\162\072\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\165\163\145" "\137\165\156\144\145\162\154\151\156\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\155\156\145\155\157" "\156\151\143\137\167\151\144\147\145\164\042\076\165\163\145\162" "\055\143\157\154\157\162\074\057\160\162\157\160\145\162\164\171" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\103" "\157\154\157\162\102\165\164\164\157\156\042\040\151\144\075\042" "\165\163\145\162\055\143\157\154\157\162\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\162\145" "\143\145\151\166\145\163\137\144\145\146\141\165\154\164\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150" "\145\170\160\141\156\144\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076" "\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164" "\164\141\143\150\042\076\061\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\164\157\160\137\141\164\164\141\143\150\042\076\061\074" "\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153" "\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042" "\154\141\142\145\154\067\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\150\141\154\151\147" "\156\042\076\163\164\141\162\164\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\103\157\154" "\157\162\040\111\156\164\145\156\163\151\164\171\072\074\057\160" "\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076\062" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\123\143\141\154\145\042\040\151\144\075" "\042\143\157\154\157\162\055\151\156\164\145\156\163\151\164\171" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\162\157\165\156" "\144\137\144\151\147\151\164\163\042\076\064\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\163\150\157\167\137\146\151\154\154\137" "\154\145\166\145\154\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\144\162\141\167\137\166\141\154\165" "\145\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162" "\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150" "\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157" "\160\137\141\164\164\141\143\150\042\076\062\074\057\160\162\157" "\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076" "\074\057\143\150\151\154\144\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076\061" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075" "\042\154\141\142\145\154\066\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\150\141\154\151" "\147\156\042\076\163\164\141\162\164\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\123\145" "\164\164\151\156\147\163\074\057\160\162\157\160\145\162\164\171" "\076\074\141\164\164\162\151\142\165\164\145\163\076\074\141\164" "\164\162\151\142\165\164\145\040\156\141\155\145\075\042\167\145" "\151\147\150\164\042\040\166\141\154\165\145\075\042\142\157\154" "\144\042\057\076\074\057\141\164\164\162\151\142\165\164\145\163" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114" "\141\142\145\154\042\040\151\144\075\042\154\141\142\145\154\070" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\141\154\151\147\156\042\076\163\164\141" "\162\164\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142" "\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\122\145\155\157\164\145\040\125\163" "\145\162\163\074\057\160\162\157\160\145\162\164\171\076\074\141" "\164\164\162\151\142\165\164\145\163\076\074\141\164\164\162\151" "\142\165\164\145\040\156\141\155\145\075\042\167\145\151\147\150" "\164\042\040\166\141\154\165\145\075\042\142\157\154\144\042\057" "\076\074\057\141\164\164\162\151\142\165\164\145\163\076\074\057" "\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164" "\141\143\150\042\076\062\074\057\160\162\157\160\145\162\164\171" "\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151" "\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143" "\164\040\143\154\141\163\163\075\042\107\164\153\107\162\151\144" "\042\040\151\144\075\042\147\162\151\144\063\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163" "\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\155\141\162\147\151\156\137\154\145\146\164\042\076\061\062\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\157\162\151\145\156\164" "\141\164\151\157\156\042\076\166\145\162\164\151\143\141\154\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\162\157\167\137\163\160" "\141\143\151\156\147\042\076\066\074\057\160\162\157\160\145\162" "\164\171\076\074\143\150\151\154\144\076\074\157\142\152\145\143" "\164\040\143\154\141\163\163\075\042\107\164\153\103\150\145\143" "\153\102\165\164\164\157\156\042\040\151\144\075\042\162\145\155" "\157\164\145\055\163\150\157\167\055\143\165\162\163\157\162\163" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\123\150\157\167" "\040\143\165\162\163\157\162\163\040\157\146\040\162\145\155\157" "\164\145\040\165\163\145\162\163\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\162\145\143\145\151\166\145\163\137\144\145" "\146\141\165\154\164\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\150\145\170\160\141\156\144\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\170" "\141\154\151\147\156\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\144\162\141\167\137\151\156\144\151\143\141\164\157" "\162\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153" "\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\103\150\145\143\153\102\165\164\164\157\156\042\040\151\144\075" "\042\162\145\155\157\164\145\055\163\150\157\167\055\163\145\154" "\145\143\164\151\157\156\163\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\123\150\157\167\040\163\145\154\145\143\164\151\157" "\156\163\040\157\146\040\162\145\155\157\164\145\040\165\163\145" "\162\163\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163" "\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\162" "\145\143\145\151\166\145\163\137\144\145\146\141\165\154\164\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\150\145\170\160\141\156\144\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\170\141\154\151\147\156\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\144\162\141" "\167\137\151\156\144\151\143\141\164\157\162\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142" "\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145" "\146\164\137\141\164\164\141\143\150\042\076\060\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143" "\150\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040" "\143\154\141\163\163\075\042\107\164\153\103\150\145\143\153\102" "\165\164\164\157\156\042\040\151\144\075\042\162\145\155\157\164" "\145\055\163\150\157\167\055\143\165\162\162\145\156\164\055\154" "\151\156\145\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156" "\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076\110" "\151\147\150\154\151\147\150\164\040\143\165\162\162\145\156\164" "\040\154\151\156\145\040\157\146\040\162\145\155\157\164\145\040" "\165\163\145\162\163\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165" "\163\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\162\145\143\145\151\166\145\163\137\144\145\146\141\165" "\154\164\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\170\141\154\151" "\147\156\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\144\162\141\167\137\151\156\144\151\143\141\164\157\162\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\062\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\103\150\145" "\143\153\102\165\164\164\157\156\042\040\151\144\075\042\162\145" "\155\157\164\145\055\163\150\157\167\055\151\156\055\163\143\162" "\157\154\154\142\141\162\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164" "\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163" "\042\076\111\156\144\151\143\141\164\145\040\143\165\162\163\157" "\162\040\160\157\163\151\164\151\157\156\040\157\146\040\162\145" "\155\157\164\145\040\165\163\145\162\163\040\151\156\040\164\150" "\145\040\163\143\162\157\154\154\142\141\162\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141" "\156\137\146\157\143\165\163\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\162\145\143\145\151\166\145\163" "\137\144\145\146\141\165\154\164\042\076\106\141\154\163\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\150\145\170\160\141\156" "\144\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\170\141\154\151\147\156\042\076\060\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\144\162\141\167\137\151\156\144\151\143" "\141\164\157\162\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\157\160\137\141\164\164\141\143\150\042\076\063\074\057\160" "\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156" "\147\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042" "\076\063\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\114\141\142\145\154\042\040\151" "\144\075\042\154\141\142\145\154\071\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150\141" "\154\151\147\156\042\076\163\164\141\162\164\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162\141" "\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076" "\114\157\143\141\154\040\104\157\143\165\155\145\156\164\163\074" "\057\160\162\157\160\145\162\164\171\076\074\141\164\164\162\151" "\142\165\164\145\163\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\167\145\151\147\150\164\042\040\166" "\141\154\165\145\075\042\142\157\154\144\042\057\076\074\057\141" "\164\164\162\151\142\165\164\145\163\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042" "\076\064\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\107\162\151\144\042\040\151\144" "\075\042\147\162\151\144\064\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\155\141\162\147" "\151\156\137\154\145\146\164\042\076\061\062\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\162\157\167\137\163\160\141\143\151\156" "\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\103\150\145\143\153\102\165\164" "\164\157\156\042\040\151\144\075\042\162\145\155\157\164\145\055" "\141\154\154\157\167\055\145\144\151\164\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145" "\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075" "\042\171\145\163\042\076\101\154\154\157\167\040\162\145\155\157" "\164\145\040\165\163\145\162\163\040\164\157\040\145\144\151\164" "\040\154\157\143\141\154\040\144\157\143\165\155\145\156\164\163" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\162\145\143" "\145\151\166\145\163\137\144\145\146\141\165\154\164\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150" "\145\170\160\141\156\144\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\170\141\154\151\147\156\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\144\162\141\167\137" "\151\156\144\151\143\141\164\157\162\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\107\162\151\144\042\040\151\144" "\075\042\147\162\151\144\055\154\157\143\141\154\055\143\157\156" "\156\145\143\164\151\157\156\163\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\155\141\162" "\147\151\156\137\154\145\146\164\042\076\061\062\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\157\162\151\145\156\164\141\164\151" "\157\156\042\076\166\145\162\164\151\143\141\154\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\162\157\167\137\163\160\141\143\151" "\156\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\157\154\165\155\156\137\163\160\141\143\151\156\147\042\076" "\061\062\074\057\160\162\157\160\145\162\164\171\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\103\150\145\143\153\102\165\164\164\157" "\156\042\040\151\144\075\042\162\145\161\165\151\162\145\055\160" "\141\163\163\167\157\162\144\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\122\145\161\165\151\162\145\040\162\145\155\157\164" "\145\040\165\163\145\162\163\040\164\157\040\145\156\164\145\162" "\040\141\040\160\141\163\163\167\157\162\144\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141" "\156\137\146\157\143\165\163\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\162\145\143\145\151\166\145\163" "\137\144\145\146\141\165\154\164\042\076\106\141\154\163\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\170\141\154\151\147\156" "\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\144\162" "\141\167\137\151\156\144\151\143\141\164\157\162\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\167\151\144\164\150\042\076\062\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114\141" "\142\145\154\042\040\151\144\075\042\154\141\142\145\154\061\061" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\141\154\151\147\156\042\076\163\164\141" "\162\164\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142" "\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\137\124\103\120\040\120\157\162\164" "\040\116\165\155\142\145\162\072\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\165\163\145\137\165\156\144\145\162\154\151\156\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\155\156\145\155\157\156\151\143\137\167\151\144\147\145\164" "\042\076\160\157\162\164\055\156\165\155\142\145\162\074\057\160" "\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076\062" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\123\160\151\156\102\165\164\164\157\156" "\042\040\151\144\075\042\160\157\162\164\055\156\165\155\142\145" "\162\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\145\146\164\137\141\164\164\141\143\150\042\076\061\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141" "\143\150\042\076\062\074\057\160\162\157\160\145\162\164\171\076" "\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154" "\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\107\162\151\144\042" "\040\151\144\075\042\147\162\151\144\055\160\141\163\163\167\157" "\162\144\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\155\141\162\147\151\156\137\154\145" "\146\164\042\076\061\062\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\157\154\165\155\156\137\163\160\141\143\151\156\147\042" "\076\061\062\074\057\160\162\157\160\145\162\164\171\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\114\141\142\145\154\042\040\151\144" "\075\042\154\141\142\145\154\061\062\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141" "\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154" "\145\075\042\171\145\163\042\076\137\120\141\163\163\167\157\162" "\144\072\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\165\163\145" "\137\165\156\144\145\162\154\151\156\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\155\156\145\155\157" "\156\151\143\137\167\151\144\147\145\164\042\076\160\141\163\163" "\167\157\162\144\055\145\156\164\162\171\074\057\160\162\157\160" "\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\157\160\137\141\164\164\141\143\150\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156" "\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144" "\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042" "\107\164\153\105\156\164\162\171\042\040\151\144\075\042\160\141" "\163\163\167\157\162\144\055\145\156\164\162\171\042\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151" "\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\166\151\163\151\142\151\154\151\164\171" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\150\145\170\160" "\141\156\144\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141" "\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143" "\150\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\157\160\137\141\164\164\141\143\150\042\076\060\074\057\160\162" "\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147" "\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\061\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\167\151\144\164" "\150\042\076\062\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\103" "\150\145\143\153\102\165\164\164\157\156\042\040\151\144\075\042" "\162\145\155\145\155\142\145\162\055\154\157\143\141\154\055\144" "\157\143\165\155\145\156\164\163\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042" "\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171" "\145\163\042\076\122\145\155\145\155\142\145\162\040\154\157\143" "\141\154\040\144\157\143\165\155\145\156\164\163\040\141\146\164" "\145\162\040\107\157\142\142\171\040\162\145\163\164\141\162\164" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\162\145\143" "\145\151\166\145\163\137\144\145\146\141\165\154\164\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150" "\145\170\160\141\156\144\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\170\141\154\151\147\156\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\144\162\141\167\137" "\151\156\144\151\143\141\164\157\162\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042" "\076\062\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\107\162\151\144\042\040\151\144" "\075\042\147\162\151\144\055\154\157\143\141\154\055\144\157\143" "\165\155\145\156\164\163\055\144\151\162\145\143\164\157\162\171" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\155\141\162\147\151\156\137\154\145\146\164" "\042\076\061\062\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143" "\157\154\165\155\156\137\163\160\141\143\151\156\147\042\076\061" "\062\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042" "\154\141\142\145\154\061\060\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145" "\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075" "\042\171\145\163\042\076\114\157\143\141\154\040\104\157\143\165" "\155\145\156\164\163\040\137\104\151\162\145\143\164\157\162\171" "\072\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\165\163\145\137" "\165\156\144\145\162\154\151\156\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\155\156\145\155\157\156" "\151\143\137\167\151\144\147\145\164\042\076\154\157\143\141\154" "\055\144\157\143\165\155\145\156\164\163\055\144\151\162\145\143" "\164\157\162\171\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\106\151\154" "\145\103\150\157\157\163\145\162\102\165\164\164\157\156\042\040" "\151\144\075\042\154\157\143\141\154\055\144\157\143\165\155\145" "\156\164\163\055\144\151\162\145\143\164\157\162\171\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\150\145\170\160\141\156\144\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164" "\137\141\164\164\141\143\150\042\076\061\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\063\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\057\157\142\152\145\143\164\076\074\160\141" "\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143" "\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\157\160\137\141\164\164\141\143\150\042\076\065\074\057\160\162" "\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147" "\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145\143" "\164\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144" "\040\164\171\160\145\075\042\164\141\142\042\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114\141" "\142\145\154\042\040\151\144\075\042\154\141\142\145\154\061\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\125\163" "\145\162\074\057\160\162\157\160\145\162\164\171\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\141\142\137\146\151\154\154\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\107\162\151\144\042\040\151\144\075\042\147\162" "\151\144\070\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156" "\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\142\157\162\144\145\162\137\167" "\151\144\164\150\042\076\061\062\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\157\162\151\145\156\164\141\164\151\157\156\042\076" "\166\145\162\164\151\143\141\154\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\162\157\167\137\163\160\141\143\151\156\147\042\076" "\066\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042" "\154\141\142\145\154\061\063\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\150\141\154\151" "\147\156\042\076\163\164\141\162\164\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\124\141" "\142\040\123\164\157\160\163\074\057\160\162\157\160\145\162\164" "\171\076\074\141\164\164\162\151\142\165\164\145\163\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\167" "\145\151\147\150\164\042\040\166\141\154\165\145\075\042\142\157" "\154\144\042\057\076\074\057\141\164\164\162\151\142\165\164\145" "\163\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153" "\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\107\162\151\144\042\040\151\144\075\042\147\162\151\144\071\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\155\141\162\147\151\156\137\154\145\146\164\042" "\076\061\062\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\162\157" "\167\137\163\160\141\143\151\156\147\042\076\066\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\157\154\165\155\156\137\163\160" "\141\143\151\156\147\042\076\061\062\074\057\160\162\157\160\145" "\162\164\171\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\114\141\142" "\145\154\042\040\151\144\075\042\154\141\142\145\154\061\064\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\150\141\154\151\147\156\042\076\163\164\141\162" "\164\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145" "\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075" "\042\171\145\163\042\076\124\141\142\040\137\127\151\144\164\150" "\072\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\165\163\145\137" "\165\156\144\145\162\154\151\156\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\155\156\145\155\157\156" "\151\143\137\167\151\144\147\145\164\042\076\164\141\142\055\167" "\151\144\164\150\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\123\160\151" "\156\102\165\164\164\157\156\042\040\151\144\075\042\164\141\142" "\055\167\151\144\164\150\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\150\145\170\160\141\156" "\144\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153" "\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042" "\076\061\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\103\150\145\143\153\102\165\164\164\157\156\042\040\151\144\075" "\042\151\156\163\145\162\164\055\163\160\141\143\145\163\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141" "\142\154\145\075\042\171\145\163\042\076\111\156\163\145\162\164" "\040\163\160\141\143\145\163\040\151\156\163\164\145\141\144\040" "\157\146\040\164\141\142\163\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\162\145\143\145\151\166\145\163\137\144\145\146" "\141\165\154\164\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\150\145\170\160\141\156\144\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\170\141" "\154\151\147\156\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\144\162\141\167\137\151\156\144\151\143\141\164\157\162" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\167\151\144\164\150\042\076\062\074\057\160\162" "\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147" "\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\061\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\114\141\142\145\154\042\040\151\144" "\075\042\154\141\142\145\154\061\065\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150\141" "\154\151\147\156\042\076\163\164\141\162\164\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162\141" "\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076" "\111\156\144\145\156\164\141\164\151\157\156\074\057\160\162\157" "\160\145\162\164\171\076\074\141\164\164\162\151\142\165\164\145" "\163\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\167\145\151\147\150\164\042\040\166\141\154\165\145" "\075\042\142\157\154\144\042\057\076\074\057\141\164\164\162\151" "\142\165\164\145\163\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\062\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\103\150\145\143\153\102\165\164\164\157\156\042" "\040\151\144\075\042\141\165\164\157\155\141\164\151\143\055\151" "\156\144\145\156\164\141\164\151\157\156\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145" "\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075" "\042\171\145\163\042\076\105\156\141\142\154\145\040\141\165\164" "\157\155\141\164\151\143\040\151\156\144\145\156\164\141\164\151" "\157\156\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163" "\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\162" "\145\143\145\151\166\145\163\137\144\145\146\141\165\154\164\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\155\141\162\147\151\156\137\154\145\146\164\042\076\061\062" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\150\145\170\160\141" "\156\144\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\170\141\154\151\147\156\042\076\060\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\144\162\141\167\137\151\156\144\151" "\143\141\164\157\162\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\063\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042\154" "\141\142\145\154\061\066\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\150\141\154\151\147" "\156\042\076\163\164\141\162\164\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\110\157\155" "\145\057\105\156\144\040\102\145\150\141\166\151\157\162\074\057" "\160\162\157\160\145\162\164\171\076\074\141\164\164\162\151\142" "\165\164\145\163\076\074\141\164\164\162\151\142\165\164\145\040" "\156\141\155\145\075\042\167\145\151\147\150\164\042\040\166\141" "\154\165\145\075\042\142\157\154\144\042\057\076\074\057\141\164" "\164\162\151\142\165\164\145\163\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\064\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\103\150\145\143\153\102\165\164\164" "\157\156\042\040\151\144\075\042\163\155\141\162\164\055\150\157" "\155\145\055\145\156\144\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164" "\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163" "\042\076\123\155\141\162\164\040\110\157\155\145\057\105\156\144" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\162\145\143" "\145\151\166\145\163\137\144\145\146\141\165\154\164\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\157\157\154\164\151\160\137\164\145\170\164\042\040\164\162\141" "\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076" "\127\151\164\150\040\164\150\151\163\040\157\160\164\151\157\156" "\040\145\156\141\142\154\145\144\054\040\160\162\145\163\163\151" "\156\147\040\150\157\155\145\040\157\162\040\145\156\144\040\141" "\164\040\164\150\145\040\142\145\147\151\156\156\151\156\147\040" "\157\162\040\145\156\144\040\157\146\040\141\040\154\151\156\145" "\054\040\162\145\163\160\145\143\164\151\166\145\154\171\054\040" "\155\157\166\145\163\040\164\150\145\040\143\165\162\163\157\162" "\040\164\157\040\164\150\145\040\146\151\162\163\164\040\157\162" "\040\154\141\163\164\040\156\157\156\055\167\150\151\164\145\163" "\160\141\143\145\040\143\150\141\162\141\143\164\145\162\040\151" "\156\040\164\150\141\164\040\154\151\156\145\056\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\155\141\162\147\151\156\137\154\145" "\146\164\042\076\061\062\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\150\145\170\160\141\156\144\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\170\141\154\151\147\156\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\144\162\141" "\167\137\151\156\144\151\143\141\164\157\162\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142" "\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145" "\146\164\137\141\164\164\141\143\150\042\076\060\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143" "\150\042\076\065\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040" "\143\154\141\163\163\075\042\107\164\153\114\141\142\145\154\042" "\040\151\144\075\042\154\141\142\145\154\061\067\042\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151" "\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\150\141\154\151\147\156\042\076\163\164\141\162\164\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\106\151\154\145\040\123\141\166\151\156\147\074\057" "\160\162\157\160\145\162\164\171\076\074\141\164\164\162\151\142" "\165\164\145\163\076\074\141\164\164\162\151\142\165\164\145\040" "\156\141\155\145\075\042\167\145\151\147\150\164\042\040\166\141" "\154\165\145\075\042\142\157\154\144\042\057\076\074\057\141\164" "\164\162\151\142\165\164\145\163\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\066\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\107\162\151\144\042\040\151\144\075" "\042\147\162\151\144\061\060\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\155\141\162\147" "\151\156\137\154\145\146\164\042\076\061\062\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\157\162\151\145\156\164\141\164\151\157" "\156\042\076\166\145\162\164\151\143\141\154\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\162\157\167\137\163\160\141\143\151\156" "\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\103\150\145\143\153\102\165\164" "\164\157\156\042\040\151\144\075\042\145\156\141\142\154\145\055" "\141\165\164\157\163\141\166\145\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042" "\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171" "\145\163\042\076\105\156\141\142\154\145\040\141\165\164\157\155" "\141\164\151\143\040\163\141\166\151\156\147\040\157\146\040\144" "\157\143\165\155\145\156\164\163\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\162\145\143\145\151\166\145\163\137\144\145" "\146\141\165\154\164\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\150\145\170\160\141\156\144\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\170" "\141\154\151\147\156\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\144\162\141\167\137\151\156\144\151\143\141\164\157" "\162\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153" "\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\107\162\151\144\042\040\151\144\075\042\147\162\151\144\055\141" "\165\164\157\163\141\166\145\055\151\156\164\145\162\166\141\154" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\155\141\162\147\151\156\137\154\145\146\164" "\042\076\061\062\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143" "\157\154\165\155\156\137\163\160\141\143\151\156\147\042\076\061" "\062\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042" "\154\141\142\145\154\061\070\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\150\141\154\151" "\147\156\042\076\163\164\141\162\164\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\101\165" "\164\157\163\141\166\145\040\151\156\164\145\162\166\141\154\040" "\151\156\040\155\151\156\165\164\145\163\072\074\057\160\162\157" "\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\123\160\151\156\102\165\164\164\157\156\042\040" "\151\144\075\042\141\165\164\157\163\141\166\145\055\151\156\164" "\145\162\166\141\154\042\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143" "\141\156\137\146\157\143\165\163\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\150\145\170\160\141\156\144" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\061\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\061\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\057\157\142\152" "\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146" "\164\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150" "\042\076\067\074\057\160\162\157\160\145\162\164\171\076\074\057" "\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076" "\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156" "\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\160\157\163\151\164\151\157\156\042\076\061\074\057\160" "\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156" "\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144" "\040\164\171\160\145\075\042\164\141\142\042\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114\141" "\142\145\154\042\040\151\144\075\042\154\141\142\145\154\062\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\105\144" "\151\164\157\162\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\160\157\163\151\164\151\157\156\042\076\061\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\164\141\142\137\146\151\154\154\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151" "\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143" "\164\040\143\154\141\163\163\075\042\107\164\153\107\162\151\144" "\042\040\151\144\075\042\147\162\151\144\061\062\042\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151" "\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\142\157\162\144\145\162\137\167\151\144\164\150\042\076\061" "\062\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\157\162\151\145" "\156\164\141\164\151\157\156\042\076\166\145\162\164\151\143\141" "\154\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\162\157\167\137" "\163\160\141\143\151\156\147\042\076\066\074\057\160\162\157\160" "\145\162\164\171\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114\141" "\142\145\154\042\040\151\144\075\042\154\141\142\145\154\061\071" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\141\154\151\147\156\042\076\163\164\141" "\162\164\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142" "\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\124\145\170\164\040\127\162\141\160" "\160\151\156\147\074\057\160\162\157\160\145\162\164\171\076\074" "\141\164\164\162\151\142\165\164\145\163\076\074\141\164\164\162" "\151\142\165\164\145\040\156\141\155\145\075\042\167\145\151\147" "\150\164\042\040\166\141\154\165\145\075\042\142\157\154\144\042" "\057\076\074\057\141\164\164\162\151\142\165\164\145\163\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\103\150\145" "\143\153\102\165\164\164\157\156\042\040\151\144\075\042\145\156" "\141\142\154\145\055\167\162\141\160\160\151\156\147\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\105\156\141\142\154\145\040" "\164\145\170\164\040\167\162\141\160\160\151\156\147\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\162\145\143\145\151\166" "\145\163\137\144\145\146\141\165\154\164\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\155\141\162\147" "\151\156\137\154\145\146\164\042\076\061\062\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\150\145\170\160\141\156\144\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\170\141" "\154\151\147\156\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\144\162\141\167\137\151\156\144\151\143\141\164\157\162" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\103" "\150\145\143\153\102\165\164\164\157\156\042\040\151\144\075\042" "\144\157\055\156\157\164\055\163\160\154\151\164\055\167\157\162" "\144\163\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\104\157" "\040\156\157\164\040\163\160\154\151\164\040\167\157\162\144\163" "\040\157\166\145\162\040\164\167\157\040\154\151\156\145\163\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\162\145\143\145" "\151\166\145\163\137\144\145\146\141\165\154\164\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\155\141" "\162\147\151\156\137\154\145\146\164\042\076\062\064\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\150\145\170\160\141\156\144\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\170\141\154\151\147\156\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\144\162\141\167\137\151\156\144\151\143\141\164" "\157\162\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150" "\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157" "\160\137\141\164\164\141\143\150\042\076\062\074\057\160\162\157" "\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076" "\074\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\114\141\142\145\154\042\040\151\144\075\042\154\141\142\145" "\154\062\060\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156" "\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\150\141\154\151\147\156\042\076" "\163\164\141\162\164\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141" "\142\154\145\075\042\171\145\163\042\076\114\151\156\145\040\116" "\165\155\142\145\162\163\074\057\160\162\157\160\145\162\164\171" "\076\074\141\164\164\162\151\142\165\164\145\163\076\074\141\164" "\164\162\151\142\165\164\145\040\156\141\155\145\075\042\167\145" "\151\147\150\164\042\040\166\141\154\165\145\075\042\142\157\154" "\144\042\057\076\074\057\141\164\164\162\151\142\165\164\145\163" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\063\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\103" "\150\145\143\153\102\165\164\164\157\156\042\040\151\144\075\042" "\144\151\163\160\154\141\171\055\154\151\156\145\055\156\165\155" "\142\145\162\163\042\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162\141" "\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076" "\104\151\163\160\154\141\171\040\154\151\156\145\040\156\165\155" "\142\145\162\163\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\162\145\143\145\151\166\145\163\137\144\145\146\141\165\154" "\164\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\155\141\162\147\151\156\137\154\145\146\164\042\076" "\061\062\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\150\145\170" "\160\141\156\144\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\170\141\154\151\147\156\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\144\162\141\167\137\151\156" "\144\151\143\141\164\157\162\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076\064" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075" "\042\154\141\142\145\154\062\061\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\150\141\154" "\151\147\156\042\076\163\164\141\162\164\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156" "\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076\103" "\165\162\162\145\156\164\040\114\151\156\145\074\057\160\162\157" "\160\145\162\164\171\076\074\141\164\164\162\151\142\165\164\145" "\163\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\167\145\151\147\150\164\042\040\166\141\154\165\145" "\075\042\142\157\154\144\042\057\076\074\057\141\164\164\162\151" "\142\165\164\145\163\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\065\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\103\150\145\143\153\102\165\164\164\157\156\042" "\040\151\144\075\042\150\151\147\150\154\151\147\150\164\055\143" "\165\162\162\145\156\164\055\154\151\156\145\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142" "\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\110\151\147\150\154\151\147\150\164" "\040\143\165\162\162\145\156\164\040\154\151\156\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\162\145\143\145\151\166" "\145\163\137\144\145\146\141\165\154\164\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\155\141\162\147" "\151\156\137\154\145\146\164\042\076\061\062\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\150\145\170\160\141\156\144\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\170\141" "\154\151\147\156\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\144\162\141\167\137\151\156\144\151\143\141\164\157\162" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\066\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114" "\141\142\145\154\042\040\151\144\075\042\154\141\142\145\154\062" "\062\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\150\141\154\151\147\156\042\076\163\164" "\141\162\164\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141" "\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154" "\145\075\042\171\145\163\042\076\122\151\147\150\164\040\115\141" "\162\147\151\156\074\057\160\162\157\160\145\162\164\171\076\074" "\141\164\164\162\151\142\165\164\145\163\076\074\141\164\164\162" "\151\142\165\164\145\040\156\141\155\145\075\042\167\145\151\147" "\150\164\042\040\166\141\154\165\145\075\042\142\157\154\144\042" "\057\076\074\057\141\164\164\162\151\142\165\164\145\163\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\067\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\107\162\151" "\144\042\040\151\144\075\042\147\162\151\144\061\063\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\155\141\162\147\151\156\137\154\145\146\164\042\076\061" "\062\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\157\162\151\145" "\156\164\141\164\151\157\156\042\076\166\145\162\164\151\143\141" "\154\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\162\157\167\137" "\163\160\141\143\151\156\147\042\076\066\074\057\160\162\157\160" "\145\162\164\171\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\103\150" "\145\143\153\102\165\164\164\157\156\042\040\151\144\075\042\144" "\151\163\160\154\141\171\055\162\151\147\150\164\055\155\141\162" "\147\151\156\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156" "\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076\104" "\151\163\160\154\141\171\040\162\151\147\150\164\040\155\141\162" "\147\151\156\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151" "\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\162\145\143\145\151\166\145\163\137\144\145\146\141\165\154\164" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\150\145\170\160\141\156\144\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\170\141\154\151\147\156" "\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\144\162" "\141\167\137\151\156\144\151\143\141\164\157\162\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154" "\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\107\162\151\144\042" "\040\151\144\075\042\147\162\151\144\055\155\141\162\147\151\156" "\055\160\157\163\151\164\151\157\156\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\155\141" "\162\147\151\156\137\154\145\146\164\042\076\061\062\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\143\157\154\165\155\156\137\163" "\160\141\143\151\156\147\042\076\061\062\074\057\160\162\157\160" "\145\162\164\171\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114\141" "\142\145\154\042\040\151\144\075\042\154\141\142\145\154\062\063" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\141\154\151\147\156\042\076\163\164\141" "\162\164\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142" "\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\122\151\147\150\164\040\137\155\141" "\162\147\151\156\040\141\164\040\143\157\154\165\155\156\072\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\165\163\145\137\165\156" "\144\145\162\154\151\156\145\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\155\156\145\155\157\156\151\143" "\137\167\151\144\147\145\164\042\076\162\151\147\150\164\055\155" "\141\162\147\151\156\055\143\157\154\165\155\156\074\057\160\162" "\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076" "\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164" "\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\164\157\160\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153" "\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\123\160\151\156\102\165\164\164\157\156\042" "\040\151\144\075\042\162\151\147\150\164\055\155\141\162\147\151" "\156\055\143\157\154\165\155\156\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\150\145\170\160" "\141\156\144\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141" "\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143" "\150\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\157\160\137\141\164\164\141\143\150\042\076\060\074\057\160\162" "\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147" "\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\061\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\057" "\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164" "\141\143\150\042\076\070\074\057\160\162\157\160\145\162\164\171" "\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151" "\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143" "\164\040\143\154\141\163\163\075\042\107\164\153\114\141\142\145" "\154\042\040\151\144\075\042\154\141\142\145\154\062\064\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165" "\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\150\141\154\151\147\156\042\076\163\164\141\162\164" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154" "\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042" "\171\145\163\042\076\102\162\141\143\153\145\164\040\115\141\164" "\143\150\151\156\147\074\057\160\162\157\160\145\162\164\171\076" "\074\141\164\164\162\151\142\165\164\145\163\076\074\141\164\164" "\162\151\142\165\164\145\040\156\141\155\145\075\042\167\145\151" "\147\150\164\042\040\166\141\154\165\145\075\042\142\157\154\144" "\042\057\076\074\057\141\164\164\162\151\142\165\164\145\163\076" "\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156" "\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141" "\164\164\141\143\150\042\076\071\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\103\150" "\145\143\153\102\165\164\164\157\156\042\040\151\144\075\042\150" "\151\147\150\154\151\147\150\164\055\155\141\164\143\150\151\156" "\147\055\142\162\141\143\153\145\164\163\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145" "\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075" "\042\171\145\163\042\076\110\151\147\150\154\151\147\150\164\040" "\155\141\164\143\150\151\156\147\040\142\162\141\143\153\145\164" "\163\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\162\145" "\143\145\151\166\145\163\137\144\145\146\141\165\154\164\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\155\141\162\147\151\156\137\154\145\146\164\042\076\061\062\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\150\145\170\160\141\156" "\144\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\170\141\154\151\147\156\042\076\060\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\144\162\141\167\137\151\156\144\151\143" "\141\164\157\162\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\157\160\137\141\164\164\141\143\150\042\076\061\060\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042\154" "\141\142\145\154\062\065\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\150\141\154\151\147" "\156\042\076\163\164\141\162\164\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\127\150\151" "\164\145\163\160\141\143\145\040\104\151\163\160\154\141\171\074" "\057\160\162\157\160\145\162\164\171\076\074\141\164\164\162\151" "\142\165\164\145\163\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\167\145\151\147\150\164\042\040\166" "\141\154\165\145\075\042\142\157\154\144\042\057\076\074\057\141" "\164\164\162\151\142\165\164\145\163\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042" "\076\061\061\074\057\160\162\157\160\145\162\164\171\076\074\057" "\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076" "\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\103\157\155\142\157\102\157" "\170\042\040\151\144\075\042\144\151\163\160\154\141\171\055\167" "\150\151\164\145\163\160\141\143\145\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\155\141" "\162\147\151\156\137\154\145\146\164\042\076\061\062\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\150\145\170\160\141\156\144\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156" "\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141" "\164\164\141\143\150\042\076\061\062\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\160\157\163\151\164\151\157\156" "\042\076\062\074\057\160\162\157\160\145\162\164\171\076\074\057" "\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076" "\074\143\150\151\154\144\040\164\171\160\145\075\042\164\141\142" "\042\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042\154" "\141\142\145\154\063\042\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143" "\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042" "\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171" "\145\163\042\076\126\151\145\167\074\057\160\162\157\160\145\162" "\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\160\157\163\151\164\151\157\156\042\076\062" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\164\141\142\137\146" "\151\154\154\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\107\162\151\144\042\040\151\144\075\042\147\162\151\144\061\065" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\142\157\162\144\145\162\137\167\151\144\164" "\150\042\076\061\062\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\157\162\151\145\156\164\141\164\151\157\156\042\076\166\145\162" "\164\151\143\141\154\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\162\157\167\137\163\160\141\143\151\156\147\042\076\066\074\057" "\160\162\157\160\145\162\164\171\076\074\143\150\151\154\144\076" "\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107" "\164\153\114\141\142\145\154\042\040\151\144\075\042\154\141\142" "\145\154\062\070\042\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141" "\156\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\150\141\154\151\147\156\042" "\076\163\164\141\162\164\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164" "\141\142\154\145\075\042\171\145\163\042\076\124\157\157\154\142" "\141\162\074\057\160\162\157\160\145\162\164\171\076\074\141\164" "\164\162\151\142\165\164\145\163\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\167\145\151\147\150\164" "\042\040\166\141\154\165\145\075\042\142\157\154\144\042\057\076" "\074\057\141\164\164\162\151\142\165\164\145\163\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154" "\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\103\157\155\142\157" "\102\157\170\042\040\151\144\075\042\164\157\157\154\142\141\162" "\055\163\164\171\154\145\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\155\141\162\147\151" "\156\137\154\145\146\164\042\076\061\062\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141" "\143\150\042\076\061\074\057\160\162\157\160\145\162\164\171\076" "\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154" "\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\114\141\142\145\154" "\042\040\151\144\075\042\154\141\142\145\154\062\071\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\150\141\154\151\147\156\042\076\163\164\141\162\164\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042" "\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171" "\145\163\042\076\106\157\156\164\074\057\160\162\157\160\145\162" "\164\171\076\074\141\164\164\162\151\142\165\164\145\163\076\074" "\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042" "\167\145\151\147\150\164\042\040\166\141\154\165\145\075\042\142" "\157\154\144\042\057\076\074\057\141\164\164\162\151\142\165\164" "\145\163\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150" "\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157" "\160\137\141\164\164\141\143\150\042\076\062\074\057\160\162\157" "\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076" "\074\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\106\157\156\164\102\165\164\164\157\156\042\040\151\144\075" "\042\146\157\156\164\042\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143" "\141\156\137\146\157\143\165\163\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\162\145\143\145\151\166\145" "\163\137\144\145\146\141\165\154\164\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\155\141\162\147\151\156" "\137\154\145\146\164\042\076\061\062\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\146\157\156\164" "\042\076\123\141\156\163\040\061\062\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\160\162\145\166\151\145\167\137\164\145\170\164" "\042\057\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150" "\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157" "\160\137\141\164\164\141\143\150\042\076\063\074\057\160\162\157" "\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076" "\074\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\114\141\142\145\154\042\040\151\144\075\042\154\141\142\145" "\154\063\060\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156" "\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\150\141\154\151\147\156\042\076" "\163\164\141\162\164\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141" "\142\154\145\075\042\171\145\163\042\076\103\157\154\157\162\040" "\123\143\150\145\155\145\074\057\160\162\157\160\145\162\164\171" "\076\074\141\164\164\162\151\142\165\164\145\163\076\074\141\164" "\164\162\151\142\165\164\145\040\156\141\155\145\075\042\167\145" "\151\147\150\164\042\040\166\141\154\165\145\075\042\142\157\154" "\144\042\057\076\074\057\141\164\164\162\151\142\165\164\145\163" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\064\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\123" "\143\162\157\154\154\145\144\127\151\156\144\157\167\042\040\151" "\144\075\042\163\143\162\157\154\154\145\144\167\151\156\144\157" "\167\061\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\155\141\162\147\151\156\137\154\145\146" "\164\042\076\061\062\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\163\150\141\144\157\167\137\164\171\160\145\042\076\151\156\074" "\057\160\162\157\160\145\162\164\171\076\074\143\150\151\154\144" "\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042" "\107\164\153\124\162\145\145\126\151\145\167\042\040\151\144\075" "\042\143\157\154\157\162\055\163\143\150\145\155\145\055\164\162" "\145\145\166\151\145\167\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\150\145\170\160\141\156" "\144\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\145\170\160\141\156\144\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\150\145\141\144\145\162" "\163\137\166\151\163\151\142\154\145\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151\154" "\144\040\151\156\164\145\162\156\141\154\055\143\150\151\154\144" "\075\042\163\145\154\145\143\164\151\157\156\042\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\124" "\162\145\145\123\145\154\145\143\164\151\157\156\042\040\151\144" "\075\042\164\162\145\145\166\151\145\167\055\163\145\154\145\143" "\164\151\157\156\061\042\057\076\074\057\143\150\151\154\144\076" "\074\057\157\142\152\145\143\164\076\074\057\143\150\151\154\144" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\065\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\160\157\163\151\164\151\157\156" "\042\076\063\074\057\160\162\157\160\145\162\164\171\076\074\057" "\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076" "\074\143\150\151\154\144\040\164\171\160\145\075\042\164\141\142" "\042\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042\154" "\141\142\145\154\062\066\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154" "\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042" "\171\145\163\042\076\101\160\160\145\141\162\141\156\143\145\074" "\057\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\160\157\163\151" "\164\151\157\156\042\076\063\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\164\141\142\137\146\151\154\154\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\107\162\151\144\042\040\151\144\075" "\042\147\162\151\144\061\066\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\142\157\162\144" "\145\162\137\167\151\144\164\150\042\076\061\062\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\157\162\151\145\156\164\141\164\151" "\157\156\042\076\166\145\162\164\151\143\141\154\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\162\157\167\137\163\160\141\143\151" "\156\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076" "\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\114\141\142\145\154\042\040" "\151\144\075\042\154\141\142\145\154\063\061\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163" "\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\150\141\154\151\147\156\042\076\163\164\141\162\164\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164" "\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163" "\042\076\124\162\165\163\164\145\144\040\103\145\162\164\151\146" "\151\143\141\164\145\040\101\165\164\150\157\162\151\164\151\145" "\163\040\050\103\101\163\051\074\057\160\162\157\160\145\162\164" "\171\076\074\141\164\164\162\151\142\165\164\145\163\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\167" "\145\151\147\150\164\042\040\166\141\154\165\145\075\042\142\157" "\154\144\042\057\076\074\057\141\164\164\162\151\142\165\164\145" "\163\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153" "\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\107\162\151\144\042\040\151\144\075\042\147\162\151\144\061\067" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\155\141\162\147\151\156\137\154\145\146\164" "\042\076\061\062\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\162" "\157\167\137\163\160\141\143\151\156\147\042\076\066\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\143\157\154\165\155\156\137\163" "\160\141\143\151\156\147\042\076\061\062\074\057\160\162\157\160" "\145\162\164\171\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\103\150" "\145\143\153\102\165\164\164\157\156\042\040\151\144\075\042\164" "\162\165\163\164\055\144\145\146\141\165\154\164\055\143\141\163" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\124\162\165\163" "\164\040\164\150\151\163\040\143\157\155\160\165\164\145\162\047" "\163\040\144\145\146\141\165\154\164\040\103\101\163\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\162\145\143\145\151\166" "\145\163\137\144\145\146\141\165\154\164\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\150\145\170\160" "\141\156\144\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\170\141\154\151\147\156\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\144\162\141\167\137\151\156\144" "\151\143\141\164\157\162\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076" "\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164" "\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\164\157\160\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\167\151\144\164\150\042" "\076\062\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\114\141\142\145\154\042\040\151" "\144\075\042\154\141\142\145\154\063\062\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150" "\141\154\151\147\156\042\076\163\164\141\162\164\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162" "\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042" "\076\101\144\144\151\164\151\157\156\141\154\154\171\040\124\162" "\165\163\164\145\144\040\103\101\163\072\074\057\160\162\157\160" "\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\157\160\137\141\164\164\141\143\150\042\076\061\074\057\160" "\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156" "\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144" "\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042" "\107\164\153\106\151\154\145\103\150\157\157\163\145\162\102\165" "\164\164\157\156\042\040\151\144\075\042\141\144\144\151\164\151" "\157\156\141\154\154\171\055\164\162\165\163\164\145\144\055\143" "\141\163\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\150\145\170\160\141\156\144\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\061\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\061\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\114\141\142" "\145\154\042\040\151\144\075\042\143\141\055\145\162\162\157\162" "\055\155\145\163\163\141\147\145\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\141\154\151\147\156\042\076\163\164\141" "\162\164\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\170\141\154" "\151\147\156\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\167\162\141\160\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\163\145\154\145\143\164\141\142\154\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\141\164\164\162\151\142\165\164\145\163\076\074\141\164" "\164\162\151\142\165\164\145\040\156\141\155\145\075\042\146\157" "\162\145\147\162\157\165\156\144\042\040\166\141\154\165\145\075" "\042\043\146\146\146\146\060\060\060\060\060\060\060\060\042\057" "\076\074\057\141\164\164\162\151\142\165\164\145\163\076\074\057" "\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164" "\141\143\150\042\076\062\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\167\151\144\164\150\042\076\062\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\061\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042\154" "\141\142\145\154\063\063\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\150\141\154\151\147" "\156\042\076\163\164\141\162\164\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\123\145\143" "\165\162\145\040\103\157\156\156\145\143\164\151\157\156\074\057" "\160\162\157\160\145\162\164\171\076\074\141\164\164\162\151\142" "\165\164\145\163\076\074\141\164\164\162\151\142\165\164\145\040" "\156\141\155\145\075\042\167\145\151\147\150\164\042\040\166\141" "\154\165\145\075\042\142\157\154\144\042\057\076\074\057\141\164" "\164\162\151\142\165\164\145\163\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\062\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\103\157\155\142\157\102\157\170\042" "\040\151\144\075\042\163\145\143\165\162\145\055\143\157\156\156" "\145\143\164\151\157\156\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\155\141\162\147\151" "\156\137\154\145\146\164\042\076\061\062\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141" "\143\150\042\076\063\074\057\160\162\157\160\145\162\164\171\076" "\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154" "\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\114\141\142\145\154" "\042\040\151\144\075\042\154\141\142\145\154\063\064\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\150\141\154\151\147\156\042\076\163\164\141\162\164\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042" "\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171" "\145\163\042\076\101\165\164\150\145\156\164\151\143\141\164\151" "\157\156\074\057\160\162\157\160\145\162\164\171\076\074\141\164" "\164\162\151\142\165\164\145\163\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\167\145\151\147\150\164" "\042\040\166\141\154\165\145\075\042\142\157\154\144\042\057\076" "\074\057\141\164\164\162\151\142\165\164\145\163\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141" "\143\150\042\076\064\074\057\160\162\157\160\145\162\164\171\076" "\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154" "\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\107\162\151\144\042" "\040\151\144\075\042\147\162\151\144\061\070\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163" "\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\155\141\162\147\151\156\137\154\145\146\164\042\076\061\062\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\157\162\151\145\156\164" "\141\164\151\157\156\042\076\166\145\162\164\151\143\141\154\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\162\157\167\137\163\160" "\141\143\151\156\147\042\076\066\074\057\160\162\157\160\145\162" "\164\171\076\074\143\150\151\154\144\076\074\157\142\152\145\143" "\164\040\143\154\141\163\163\075\042\107\164\153\122\141\144\151" "\157\102\165\164\164\157\156\042\040\151\144\075\042\141\165\164" "\150\145\156\164\151\143\141\164\151\157\156\055\156\157\156\145" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\116\157\156\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\162\145\143" "\145\151\166\145\163\137\144\145\146\141\165\154\164\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\170" "\141\154\151\147\156\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\141\143\164\151\166\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\144\162\141\167\137\151" "\156\144\151\143\141\164\157\162\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\122\141\144\151\157\102\165\164\164" "\157\156\042\040\151\144\075\042\141\165\164\150\145\156\164\151" "\143\141\164\151\157\156\055\143\145\162\164\151\146\151\143\141" "\164\145\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\101\165" "\164\150\145\156\164\151\143\141\164\145\040\167\151\164\150\040" "\141\040\143\145\162\164\151\146\151\143\141\164\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\162\145\143\145\151\166" "\145\163\137\144\145\146\141\165\154\164\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\170\141\154\151" "\147\156\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\141\143\164\151\166\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\144\162\141\167\137\151\156\144\151" "\143\141\164\157\162\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\147\162\157\165\160\042\076\141\165\164" "\150\145\156\164\151\143\141\164\151\157\156\055\156\157\156\145" "\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142\152" "\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146" "\164\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150" "\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074\057" "\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076" "\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\107\162\151\144\042\040\151" "\144\075\042\147\162\151\144\055\141\165\164\150\055\143\145\162" "\164\151\146\151\143\141\164\145\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\155\141\162" "\147\151\156\137\154\145\146\164\042\076\061\062\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\162\157\167\137\163\160\141\143\151" "\156\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\157\154\165\155\156\137\163\160\141\143\151\156\147\042\076" "\061\062\074\057\160\162\157\160\145\162\164\171\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075" "\042\154\141\142\145\154\063\065\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\150\141\154" "\151\147\156\042\076\163\164\141\162\164\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156" "\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076\120" "\162\151\166\141\164\145\040\113\145\171\072\074\057\160\162\157" "\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042\154" "\141\142\145\154\063\066\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\150\141\154\151\147" "\156\042\076\163\164\141\162\164\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\103\145\162" "\164\151\146\151\143\141\164\145\072\074\057\160\162\157\160\145" "\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141" "\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143" "\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\157\160\137\141\164\164\141\143\150\042\076\062\074\057\160\162" "\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147" "\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144\076" "\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107" "\164\153\114\141\142\145\154\042\040\151\144\075\042\143\145\162" "\164\055\145\162\162\157\162\055\155\145\163\163\141\147\145\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\150\141\154\151" "\147\156\042\076\163\164\141\162\164\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\170\141\154\151\147\156\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\167\162\141\160\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\163\145\154" "\145\143\164\141\142\154\145\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\141\164\164\162\151\142\165" "\164\145\163\076\074\141\164\164\162\151\142\165\164\145\040\156" "\141\155\145\075\042\146\157\162\145\147\162\157\165\156\144\042" "\040\166\141\154\165\145\075\042\043\146\146\146\146\060\060\060" "\060\060\060\060\060\042\057\076\074\057\141\164\164\162\151\142" "\165\164\145\163\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\157\160\137\141\164\164\141\143\150\042\076\063\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\167\151\144\164\150\042\076\063" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075" "\042\153\145\171\055\145\162\162\157\162\055\155\145\163\163\141" "\147\145\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150" "\141\154\151\147\156\042\076\163\164\141\162\164\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\170\141\154\151\147\156\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\167\162\141\160\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\163\145\154\145\143\164\141\142\154\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\141\164\164\162" "\151\142\165\164\145\163\076\074\141\164\164\162\151\142\165\164" "\145\040\156\141\155\145\075\042\146\157\162\145\147\162\157\165" "\156\144\042\040\166\141\154\165\145\075\042\043\146\146\146\146" "\060\060\060\060\060\060\060\060\042\057\076\074\057\141\164\164" "\162\151\142\165\164\145\163\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076\061" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\167\151\144\164\150" "\042\076\063\074\057\160\162\157\160\145\162\164\171\076\074\057" "\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076" "\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\106\151\154\145\103\150\157" "\157\163\145\162\102\165\164\164\157\156\042\040\151\144\075\042" "\160\162\151\166\141\164\145\055\153\145\171\055\146\151\154\145" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\145\146\164\137\141\164\164\141\143\150\042\076\061\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154" "\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\106\151\154\145\103" "\150\157\157\163\145\162\102\165\164\164\157\156\042\040\151\144" "\075\042\143\145\162\164\151\146\151\143\141\164\145\055\146\151" "\154\145\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\150\145\170\160\141\156\144\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\061\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\062\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\102\165\164" "\164\157\156\042\040\151\144\075\042\143\162\145\141\164\145\055" "\160\162\151\166\141\164\145\055\153\145\171\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142" "\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\103\162\145\141\164\145\040\116\145" "\167\056\056\056\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\162\145\143\145\151\166\145\163\137\144\145\146\141\165\154" "\164\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153" "\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042" "\076\062\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\102\165\164\164\157\156\042\040\151\144\075\042\143\162\145\141" "\164\145\055\143\145\162\164\151\146\151\143\141\164\145\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141" "\142\154\145\075\042\171\145\163\042\076\103\162\145\141\164\145" "\040\116\145\167\056\056\056\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\162\145\143\145\151\166\145\163\137\144\145\146" "\141\165\154\164\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141" "\143\150\042\076\062\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\157\160\137\141\164\164\141\143\150\042\076\062\074\057\160" "\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156" "\147\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042" "\076\062\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\065\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\057\157\142\152\145\143\164\076\074\160\141" "\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\160\157\163\151\164\151\157\156\042\076" "\064\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\040\164\171\160\145\075\042\164\141\142\042\076" "\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107" "\164\153\114\141\142\145\154\042\040\151\144\075\042\154\141\142" "\145\154\062\067\042\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141" "\156\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\123\145\143\165\162\151\164\171\074\057\160\162\157" "\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\160\157\163\151\164\151\157\156" "\042\076\064\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164\141" "\142\137\146\151\154\154\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156" "\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144" "\076\074\160\154\141\143\145\150\157\154\144\145\162\057\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\040\164\171" "\160\145\075\042\164\141\142\042\076\074\160\154\141\143\145\150" "\157\154\144\145\162\057\076\074\057\143\150\151\154\144\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\145\170\160\141\156\144\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\146\151\154\154\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\160\157" "\163\151\164\151\157\156\042\076\061\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\057\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076" "\074\057\151\156\164\145\162\146\141\143\145\076\012\000\000\050" "\165\165\141\171\051\146\151\156\144\055\144\151\141\154\157\147" "\056\165\151\000\000\000\000\000\205\024\000\000\000\000\000\000" "\074\077\170\155\154\040\166\145\162\163\151\157\156\075\042\061" "\056\060\042\040\145\156\143\157\144\151\156\147\075\042\125\124" "\106\055\070\042\077\076\012\074\151\156\164\145\162\146\141\143" "\145\076\074\162\145\161\165\151\162\145\163\040\154\151\142\075" "\042\147\164\153\053\042\040\166\145\162\163\151\157\156\075\042" "\063\056\061\060\042\057\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\104\151\141\154\157\147\042" "\040\151\144\075\042\106\151\156\144\104\151\141\154\157\147\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\142\157\162\144" "\145\162\137\167\151\144\164\150\042\076\061\062\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\162\145\163\151\172\141\142\154\145" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\164\171\160\145\137\150\151\156\164\042\076\144\151\141" "\154\157\147\074\057\160\162\157\160\145\162\164\171\076\074\143" "\150\151\154\144\040\151\156\164\145\162\156\141\154\055\143\150" "\151\154\144\075\042\166\142\157\170\042\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\102\157\170" "\042\040\151\144\075\042\144\151\141\154\157\147\055\166\142\157" "\170\061\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\157" "\162\151\145\156\164\141\164\151\157\156\042\076\166\145\162\164" "\151\143\141\154\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\163" "\160\141\143\151\156\147\042\076\066\074\057\160\162\157\160\145" "\162\164\171\076\074\143\150\151\154\144\040\151\156\164\145\162" "\156\141\154\055\143\150\151\154\144\075\042\141\143\164\151\157" "\156\137\141\162\145\141\042\076\074\157\142\152\145\143\164\040" "\143\154\141\163\163\075\042\107\164\153\102\165\164\164\157\156" "\102\157\170\042\040\151\144\075\042\144\151\141\154\157\147\055" "\141\143\164\151\157\156\137\141\162\145\141\061\042\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141" "\156\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\141\171\157\165\164\137" "\163\164\171\154\145\042\076\145\156\144\074\057\160\162\157\160" "\145\162\164\171\076\074\143\150\151\154\144\076\074\160\154\141" "\143\145\150\157\154\144\145\162\057\076\074\057\143\150\151\154" "\144\076\074\143\150\151\154\144\076\074\160\154\141\143\145\150" "\157\154\144\145\162\057\076\074\057\143\150\151\154\144\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\145\170\160\141\156\144\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\146\151\154\154\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\160" "\157\163\151\164\151\157\156\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\107\162\151\144\042\040\151\144\075\042\147\162\151\144\061\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\162\157\167\137\163\160\141\143\151\156\147\042" "\076\066\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\157\154" "\165\155\156\137\163\160\141\143\151\156\147\042\076\061\062\074" "\057\160\162\157\160\145\162\164\171\076\074\143\150\151\154\144" "\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042" "\107\164\153\114\141\142\145\154\042\040\151\144\075\042\163\145" "\141\162\143\150\055\146\157\162\055\154\141\142\145\154\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165" "\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\141\154\151\147\156\042\076\142\141\163\145\154" "\151\156\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\170\141" "\154\151\147\156\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\137\123\145\141" "\162\143\150\040\106\157\162\072\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\165\163\145\137\165\156\144\145\162\154\151\156\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\155\156\145\155\157\156\151\143\137\167\151\144\147\145\164" "\042\076\163\145\141\162\143\150\055\146\157\162\074\057\160\162" "\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076" "\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164" "\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\164\157\160\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153" "\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\105\156\164\162\171\042\040\151\144\075\042" "\163\145\141\162\143\150\055\146\157\162\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\141" "\154\151\147\156\042\076\142\141\163\145\154\151\156\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\150\145\170\160\141\156\144" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\141\143\164\151\166\141\164\145\163\137\144\145\146\141\165" "\154\164\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150" "\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157" "\160\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157" "\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076" "\074\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\114\141\142\145\154\042\040\151\144\075\042\162\145\160\154" "\141\143\145\055\167\151\164\150\055\154\141\142\145\154\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165" "\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\141\154\151\147\156\042\076\142\141\163\145\154" "\151\156\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\170\141" "\154\151\147\156\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\122\145\160\154" "\141\143\145\040\137\127\151\164\150\072\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\165\163\145\137\165\156\144\145\162\154\151" "\156\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\155\156\145\155\157\156\151\143\137\167\151\144\147" "\145\164\042\076\162\145\160\154\141\143\145\055\167\151\164\150" "\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142\152" "\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146" "\164\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150" "\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074\057" "\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076" "\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\105\156\164\162\171\042\040" "\151\144\075\042\162\145\160\154\141\143\145\055\167\151\164\150" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\166\141\154\151\147\156\042\076\142\141\163\145" "\154\151\156\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150" "\145\170\160\141\156\144\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\141\143\164\151\166\141\164\145\163" "\137\144\145\146\141\165\154\164\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\061\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\103\150\145\143\153\102\165\164\164" "\157\156\042\040\151\144\075\042\155\141\164\143\150\055\143\141" "\163\145\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\137\115" "\141\164\143\150\040\103\141\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\162\145\143\145\151\166\145\163\137\144" "\145\146\141\165\154\164\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\165\163\145\137\165\156\144\145" "\162\154\151\156\145\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\170\141\154\151\147\156\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\144\162\141\167\137\151" "\156\144\151\143\141\164\157\162\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\062\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\167\151\144\164" "\150\042\076\062\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040" "\143\154\141\163\163\075\042\107\164\153\103\150\145\143\153\102" "\165\164\164\157\156\042\040\151\144\075\042\155\141\164\143\150" "\055\145\156\164\151\162\145\055\167\157\162\144\055\157\156\154" "\171\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\115\141\164" "\143\150\040\137\145\156\164\151\162\145\040\167\157\162\144\040" "\157\156\154\171\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\162\145\143\145\151\166\145\163\137\144\145\146\141\165\154" "\164\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\165\163\145\137\165\156\144\145\162\154\151\156\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\170\141\154\151\147\156\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\144\162\141\167\137\151\156\144\151\143\141" "\164\157\162\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141" "\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143" "\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\157\160\137\141\164\164\141\143\150\042\076\063\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\167\151\144\164\150\042\076\062\074" "\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153" "\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\103\150\145\143\153\102\165\164\164\157\156" "\042\040\151\144\075\042\163\145\141\162\143\150\055\142\141\143" "\153\167\141\162\144\163\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164" "\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163" "\042\076\123\145\141\162\143\150\040\137\142\141\143\153\167\141" "\162\144\163\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151" "\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\162\145\143\145\151\166\145\163\137\144\145\146\141\165\154\164" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\165\163\145\137\165\156\144\145\162\154\151\156\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\170\141\154\151\147\156\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\144\162\141\167\137\151\156\144\151\143\141\164" "\157\162\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150" "\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157" "\160\137\141\164\164\141\143\150\042\076\064\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\167\151\144\164\150\042\076\062\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\103\150\145\143\153\102\165\164\164\157\156\042" "\040\151\144\075\042\167\162\141\160\055\141\162\157\165\156\144" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\127\162\141\137" "\160\040\101\162\157\165\156\144\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\162\145\143\145\151\166\145\163\137\144\145" "\146\141\165\154\164\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\165\163\145\137\165\156\144\145\162" "\154\151\156\145\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\170\141\154\151\147\156\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\141\143\164\151\166\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\144\162\141\167\137\151\156\144\151\143\141\164\157\162\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\065\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\167\151\144\164\150\042\076\062\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076" "\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\145\170\160\141\156\144\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\146\151\154\154\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\160\157\163\151\164\151\157\156\042\076" "\061\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\057" "\157\142\152\145\143\164\076\074\057\143\150\151\154\144\076\074" "\057\157\142\152\145\143\164\076\074\057\151\156\164\145\162\146" "\141\143\145\076\012\000\000\050\165\165\141\171\051\143\157\156" "\156\145\143\164\151\157\156\055\151\156\146\157\055\144\151\141" "\154\157\147\056\165\151\000\000\350\011\000\000\000\000\000\000" "\074\077\170\155\154\040\166\145\162\163\151\157\156\075\042\061" "\056\060\042\040\145\156\143\157\144\151\156\147\075\042\125\124" "\106\055\070\042\077\076\012\074\151\156\164\145\162\146\141\143" "\145\076\074\162\145\161\165\151\162\145\163\040\154\151\142\075" "\042\147\164\153\053\042\040\166\145\162\163\151\157\156\075\042" "\063\056\061\060\042\057\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\104\151\141\154\157\147\042" "\040\151\144\075\042\103\157\156\156\145\143\164\151\157\156\111" "\156\146\157\104\151\141\154\157\147\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\142\157\162\144\145\162\137\167\151\144" "\164\150\042\076\061\062\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\151\164\154\145\042\040\164\162\141\156\163\154\141\164" "\141\142\154\145\075\042\171\145\163\042\076\103\157\156\156\145" "\143\164\151\157\156\040\111\156\146\157\162\155\141\164\151\157" "\156\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\162\145\163\151" "\172\141\142\154\145\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\164\171\160\145\137\150\151\156\164" "\042\076\144\151\141\154\157\147\074\057\160\162\157\160\145\162" "\164\171\076\074\143\150\151\154\144\040\151\156\164\145\162\156" "\141\154\055\143\150\151\154\144\075\042\166\142\157\170\042\076" "\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107" "\164\153\102\157\170\042\040\151\144\075\042\144\151\141\154\157" "\147\055\166\142\157\170\061\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\157\162\151\145\156\164\141\164\151\157\156\042" "\076\166\145\162\164\151\143\141\154\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\163\160\141\143\151\156\147\042\076\066\074\057" "\160\162\157\160\145\162\164\171\076\074\143\150\151\154\144\040" "\151\156\164\145\162\156\141\154\055\143\150\151\154\144\075\042" "\141\143\164\151\157\156\137\141\162\145\141\042\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\102" "\165\164\164\157\156\102\157\170\042\040\151\144\075\042\144\151" "\141\154\157\147\055\141\143\164\151\157\156\137\141\162\145\141" "\061\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141" "\171\157\165\164\137\163\164\171\154\145\042\076\145\156\144\074" "\057\160\162\157\160\145\162\164\171\076\074\143\150\151\154\144" "\076\074\160\154\141\143\145\150\157\154\144\145\162\057\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\160" "\154\141\143\145\150\157\154\144\145\162\057\076\074\057\143\150" "\151\154\144\076\074\057\157\142\152\145\143\164\076\074\160\141" "\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\145\170\160\141\156\144\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\146\151" "\154\154\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\160\157\163\151\164\151\157\156\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153" "\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\107\162\151\144\042\040\151\144\075\042\147" "\162\151\144\061\042\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141" "\156\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\157\154\165\155\156\137" "\163\160\141\143\151\156\147\042\076\061\062\074\057\160\162\157" "\160\145\162\164\171\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\111" "\155\141\147\145\042\040\151\144\075\042\151\155\141\147\145\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\151\143\157\156\137\163\151\172\145\042\076\066" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\141\154\151\147" "\156\042\076\107\124\113\137\101\114\111\107\116\137\123\124\101" "\122\124\074\057\160\162\157\160\145\162\164\171\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154" "\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\123\143\162\157\154" "\154\145\144\127\151\156\144\157\167\042\040\151\144\075\042\163" "\143\162\157\154\154\145\144\055\167\151\156\144\157\167\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165" "\163\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\163\150\141\144\157\167\137\164\171\160\145\042\076\151" "\156\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\155\151\156\055" "\143\157\156\164\145\156\164\055\167\151\144\164\150\042\076\062" "\060\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\155\151\156" "\055\143\157\156\164\145\156\164\055\150\145\151\147\150\164\042" "\076\070\060\074\057\160\162\157\160\145\162\164\171\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\124\162\145\145\126\151\145\167\042" "\040\151\144\075\042\164\162\145\145\166\151\145\167\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\143\150\151\154\144\040\151\156\164\145\162\156\141\154" "\055\143\150\151\154\144\075\042\163\145\154\145\143\164\151\157" "\156\042\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\124\162\145\145\123\145\154\145\143\164\151" "\157\156\042\040\151\144\075\042\164\162\145\145\166\151\145\167" "\055\163\145\154\145\143\164\151\157\156\062\042\057\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\057\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076" "\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164" "\164\141\143\150\042\076\061\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\164\157\160\137\141\164\164\141\143\150\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153" "\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\111\156\146\107\164\153\103\157\156\156\145\143\164\151" "\157\156\126\151\145\167\042\040\151\144\075\042\143\157\156\156" "\145\143\164\151\157\156\055\151\156\146\157\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163" "\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141" "\143\150\042\076\062\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\157\160\137\141\164\164\141\143\150\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156" "\147\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\145\170\160\141" "\156\144\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\146\151\154\154\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\160\157\163\151\164\151\157" "\156\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\057\157\142\152\145\143\164\076\074\057\143\150\151\154" "\144\076\074\057\157\142\152\145\143\164\076\074\057\151\156\164" "\145\162\146\141\143\145\076\012\000\000\050\165\165\141\171\051" "\147\157\164\157\055\144\151\141\154\157\147\056\165\151\000\000" "\220\010\000\000\000\000\000\000\074\077\170\155\154\040\166\145" "\162\163\151\157\156\075\042\061\056\060\042\040\145\156\143\157" "\144\151\156\147\075\042\125\124\106\055\070\042\077\076\012\074" "\151\156\164\145\162\146\141\143\145\076\074\162\145\161\165\151" "\162\145\163\040\154\151\142\075\042\147\164\153\053\042\040\166" "\145\162\163\151\157\156\075\042\063\056\061\060\042\057\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\104\151\141\154\157\147\042\040\151\144\075\042\107\157\164" "\157\104\151\141\154\157\147\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\142\157\162\144\145\162\137\167\151\144\164\150" "\042\076\061\062\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\151\164\154\145\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\107\157\040\124\157\040\114" "\151\156\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\162\145" "\163\151\172\141\142\154\145\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\164\171\160\145\137\150\151" "\156\164\042\076\144\151\141\154\157\147\074\057\160\162\157\160" "\145\162\164\171\076\074\143\150\151\154\144\040\151\156\164\145" "\162\156\141\154\055\143\150\151\154\144\075\042\166\142\157\170" "\042\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\102\157\170\042\040\151\144\075\042\144\151\141" "\154\157\147\055\166\142\157\170\061\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\157\162\151\145\156\164\141\164\151\157" "\156\042\076\166\145\162\164\151\143\141\154\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\163\160\141\143\151\156\147\042\076\066" "\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151\154" "\144\040\151\156\164\145\162\156\141\154\055\143\150\151\154\144" "\075\042\141\143\164\151\157\156\137\141\162\145\141\042\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\102\165\164\164\157\156\102\157\170\042\040\151\144\075\042" "\144\151\141\154\157\147\055\141\143\164\151\157\156\137\141\162" "\145\141\061\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\141\171\157\165\164\137\163\164\171\154\145\042\076\145\156" "\144\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151" "\154\144\076\074\160\154\141\143\145\150\157\154\144\145\162\057" "\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144\076" "\074\160\154\141\143\145\150\157\154\144\145\162\057\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\145\170\160\141\156\144\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\146\151\154\154\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\160\157\163\151\164\151\157\156\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\107\162\151\144\042\040\151\144\075" "\042\147\162\151\144\061\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\162\157\167\137\163" "\160\141\143\151\156\147\042\076\066\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\157\154\165\155\156\137\163\160\141\143\151" "\156\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076" "\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\114\141\142\145\154\042\040" "\151\144\075\042\154\141\142\145\154\061\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\114\151\156\145\040\137\116" "\165\155\142\145\162\072\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\165\163\145\137\165\156\144\145\162\154\151\156\145\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\155" "\156\145\155\157\156\151\143\137\167\151\144\147\145\164\042\076" "\163\160\151\156\055\142\165\164\164\157\156\074\057\160\162\157" "\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\123\160\151\156\102\165\164\164\157\156\042\040" "\151\144\075\042\163\160\151\156\055\142\165\164\164\157\156\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\150\145\170\160\141\156\144\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\141\143\164\151\166" "\141\164\145\163\137\144\145\146\141\165\154\164\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\151\156\160" "\165\164\137\160\165\162\160\157\163\145\042\076\156\165\155\142" "\145\162\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\156\165\155" "\145\162\151\143\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141" "\143\150\042\076\061\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\157\160\137\141\164\164\141\143\150\042\076\060\074\057\160" "\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156" "\147\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\145\170\160\141" "\156\144\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\146\151\154\154\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\160\157\163\151\164\151\157" "\156\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\057\157\142\152\145\143\164\076\074\057\143\150\151\154" "\144\076\074\057\157\142\152\145\143\164\076\074\057\151\156\164" "\145\162\146\141\143\145\076\012\000\000\050\165\165\141\171\051" "\144\145\057\000\011\000\000\000\164\157\157\154\142\141\162\056" "\165\151\000\000\000\000\000\000\174\024\000\000\000\000\000\000" "\074\077\170\155\154\040\166\145\162\163\151\157\156\075\042\061" "\056\060\042\077\076\012\074\151\156\164\145\162\146\141\143\145" "\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042" "\107\164\153\124\157\157\154\142\141\162\042\040\151\144\075\042" "\164\157\157\154\142\141\162\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\124\157\157" "\154\102\165\164\164\157\156\042\040\151\144\075\042\164\157\157" "\154\142\165\164\164\157\156\061\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\141\143\164" "\151\157\156\137\156\141\155\145\042\076\167\151\156\056\156\145" "\167\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\151\143\157\156" "\137\156\141\155\145\042\076\144\157\143\165\155\145\156\164\055" "\156\145\167\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\151\163" "\137\151\155\160\157\162\164\141\156\164\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154" "\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042" "\171\145\163\042\076\116\145\167\074\057\160\162\157\160\145\162" "\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\145\170\160\141\156\144\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\150\157\155" "\157\147\145\156\145\157\165\163\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\124\157\157\154\102\165\164\164\157\156\042\040" "\151\144\075\042\164\157\157\154\142\165\164\164\157\156\062\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\141\143\164\151\157\156\137\156\141\155\145\042" "\076\167\151\156\056\157\160\145\156\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\151\143\157\156\137\156\141\155\145\042\076\144" "\157\143\165\155\145\156\164\055\157\160\145\156\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\151\163\137\151\155\160\157\162\164" "\141\156\164\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\117\160" "\145\156\074\057\160\162\157\160\145\162\164\171\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\145" "\170\160\141\156\144\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\150\157\155\157\147\145\156\145\157" "\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\124\157" "\157\154\102\165\164\164\157\156\042\040\151\144\075\042\164\157" "\157\154\142\165\164\164\157\156\063\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\141\143" "\164\151\157\156\137\156\141\155\145\042\076\167\151\156\056\163" "\141\166\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\151\143" "\157\156\137\156\141\155\145\042\076\144\157\143\165\155\145\156" "\164\055\163\141\166\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\151\163\137\151\155\160\157\162\164\141\156\164\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141" "\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154" "\145\075\042\171\145\163\042\076\123\141\166\145\074\057\160\162" "\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076" "\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\145\170\160\141\156\144\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\150\157\155\157\147\145\156\145\157\165\163\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\123\145\160\141\162\141\164\157" "\162\124\157\157\154\111\164\145\155\042\040\151\144\075\042\163" "\145\160\141\162\141\164\157\162\061\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\145\170\160\141\156\144\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\124\157\157\154\102\165\164\164" "\157\156\042\040\151\144\075\042\164\157\157\154\142\165\164\164" "\157\156\064\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156" "\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\141\143\164\151\157\156\137\156" "\141\155\145\042\076\167\151\156\056\165\156\144\157\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\151\143\157\156\137\156\141\155" "\145\042\076\145\144\151\164\055\165\156\144\157\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\151\163\137\151\155\160\157\162\164" "\141\156\164\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\125\156" "\144\157\074\057\160\162\157\160\145\162\164\171\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\145" "\170\160\141\156\144\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\150\157\155\157\147\145\156\145\157" "\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\124\157" "\157\154\102\165\164\164\157\156\042\040\151\144\075\042\164\157" "\157\154\142\165\164\164\157\156\065\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\141\143" "\164\151\157\156\137\156\141\155\145\042\076\167\151\156\056\162" "\145\144\157\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\151\143" "\157\156\137\156\141\155\145\042\076\145\144\151\164\055\162\145" "\144\157\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\151\163\137" "\151\155\160\157\162\164\141\156\164\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042" "\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171" "\145\163\042\076\122\145\144\157\074\057\160\162\157\160\145\162" "\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\145\170\160\141\156\144\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\150\157\155" "\157\147\145\156\145\157\165\163\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\123\145\160\141\162\141\164\157\162\124\157\157" "\154\111\164\145\155\042\040\151\144\075\042\163\145\160\141\162" "\141\164\157\162\062\042\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\145\170\160\141\156\144\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\124\157\157\154\102\165\164\164\157\156\042\040" "\151\144\075\042\164\157\157\154\142\165\164\164\157\156\066\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\141\143\164\151\157\156\137\156\141\155\145\042" "\076\167\151\156\056\143\165\164\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\151\143\157\156\137\156\141\155\145\042\076\145\144" "\151\164\055\143\165\164\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\151\163\137\151\155\160\157\162\164\141\156\164\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141" "\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154" "\145\075\042\171\145\163\042\076\103\165\164\074\057\160\162\157" "\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\145\170\160\141\156\144\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\150\157\155\157\147\145\156\145\157\165\163\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\124\157\157\154\102\165\164\164\157" "\156\042\040\151\144\075\042\164\157\157\154\142\165\164\164\157" "\156\067\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\141\143\164\151\157\156\137\156\141" "\155\145\042\076\167\151\156\056\143\157\160\171\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\151\143\157\156\137\156\141\155\145" "\042\076\145\144\151\164\055\143\157\160\171\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\151\163\137\151\155\160\157\162\164\141" "\156\164\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\103\157\160" "\171\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142" "\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\145\170" "\160\141\156\144\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\150\157\155\157\147\145\156\145\157\165" "\163\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\124\157\157" "\154\102\165\164\164\157\156\042\040\151\144\075\042\164\157\157" "\154\142\165\164\164\157\156\070\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\141\143\164" "\151\157\156\137\156\141\155\145\042\076\167\151\156\056\160\141" "\163\164\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\151\143" "\157\156\137\156\141\155\145\042\076\145\144\151\164\055\160\141" "\163\164\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\151\163" "\137\151\155\160\157\162\164\141\156\164\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\141\142\145\154" "\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042" "\171\145\163\042\076\120\141\163\164\145\074\057\160\162\157\160" "\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\145\170\160\141\156\144\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150" "\157\155\157\147\145\156\145\157\165\163\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\123\145\160\141\162\141\164\157\162\124" "\157\157\154\111\164\145\155\042\040\151\144\075\042\163\145\160" "\141\162\141\164\157\162\063\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\145\170\160\141\156\144\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\124\157\157\154\102\165\164\164\157\156" "\042\040\151\144\075\042\164\157\157\154\142\165\164\164\157\156" "\071\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\141\143\164\151\157\156\137\156\141\155" "\145\042\076\167\151\156\056\146\151\156\144\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\151\143\157\156\137\156\141\155\145\042" "\076\145\144\151\164\055\146\151\156\144\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\151\163\137\151\155\160\157\162\164\141\156" "\164\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\106\151\156\144" "\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142\152" "\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\145\170\160" "\141\156\144\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\157\155\157\147\145\156\145\157\165\163" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151" "\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143" "\164\040\143\154\141\163\163\075\042\107\164\153\124\157\157\154" "\102\165\164\164\157\156\042\040\151\144\075\042\164\157\157\154" "\142\165\164\164\157\156\061\060\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\141\143\164" "\151\157\156\137\156\141\155\145\042\076\167\151\156\056\146\151" "\156\144\055\162\145\160\154\141\143\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\151\143\157\156\137\156\141\155\145\042\076" "\145\144\151\164\055\146\151\156\144\055\162\145\160\154\141\143" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\151\163\137\151" "\155\160\157\162\164\141\156\164\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\106\151\156\144\040\101\156\144\040\122\145\160\154" "\141\143\145\074\057\160\162\157\160\145\162\164\171\076\074\057" "\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\145\170\160\141\156\144\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\150\157\155\157\147\145\156\145" "\157\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\057\151\156\164\145\162\146\141\143\145\076\012\000\000\050\165" "\165\141\171\051\060\170\065\063\071\057\000\000\000\000\000\000" "\145\156\164\162\171\055\144\151\141\154\157\147\056\165\151\000" "\203\007\000\000\000\000\000\000\074\077\170\155\154\040\166\145" "\162\163\151\157\156\075\042\061\056\060\042\040\145\156\143\157" "\144\151\156\147\075\042\125\124\106\055\070\042\077\076\012\074" "\151\156\164\145\162\146\141\143\145\076\074\162\145\161\165\151" "\162\145\163\040\154\151\142\075\042\147\164\153\053\042\040\166" "\145\162\163\151\157\156\075\042\063\056\061\060\042\057\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\104\151\141\154\157\147\042\040\151\144\075\042\105\156\164" "\162\171\104\151\141\154\157\147\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\171\160\145\137\150\151\156\164\042\076" "\144\151\141\154\157\147\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\162\145\163\151\172\141\142\154\145\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\142\157\162\144" "\145\162\055\167\151\144\164\150\042\076\061\062\074\057\160\162" "\157\160\145\162\164\171\076\074\143\150\151\154\144\040\151\156" "\164\145\162\156\141\154\055\143\150\151\154\144\075\042\166\142" "\157\170\042\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\102\157\170\042\040\151\144\075\042\144" "\151\141\154\157\147\055\166\142\157\170\061\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156" "\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\157\162\151\145\156\164\141\164" "\151\157\156\042\076\166\145\162\164\151\143\141\154\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\163\160\141\143\151\156\147\042" "\076\066\074\057\160\162\157\160\145\162\164\171\076\074\143\150" "\151\154\144\040\151\156\164\145\162\156\141\154\055\143\150\151" "\154\144\075\042\141\143\164\151\157\156\137\141\162\145\141\042" "\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042" "\107\164\153\102\165\164\164\157\156\102\157\170\042\040\151\144" "\075\042\144\151\141\154\157\147\055\141\143\164\151\157\156\137" "\141\162\145\141\061\042\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\141\171\157\165\164\137\163\164\171\154\145\042\076" "\145\156\144\074\057\160\162\157\160\145\162\164\171\076\074\143" "\150\151\154\144\076\074\160\154\141\143\145\150\157\154\144\145" "\162\057\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\160\154\141\143\145\150\157\154\144\145\162\057\076" "\074\057\143\150\151\154\144\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\145\170\160\141\156\144" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\146\151\154\154\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\160\157\163\151\164\151\157\156" "\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074\057" "\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076" "\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\107\162\151\144\042\040\151" "\144\075\042\147\162\151\144\061\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\157\154" "\165\155\156\137\163\160\141\143\151\156\147\042\076\066\074\057" "\160\162\157\160\145\162\164\171\076\074\143\150\151\154\144\076" "\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107" "\164\153\114\141\142\145\154\042\040\151\144\075\042\151\156\164" "\162\157\055\154\141\142\145\154\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\155\156\145" "\155\157\156\151\143\055\167\151\144\147\145\164\042\076\145\156" "\164\162\171\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\165\163" "\145\055\165\156\144\145\162\154\151\156\145\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142" "\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145" "\146\164\137\141\164\164\141\143\150\042\076\060\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143" "\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040" "\143\154\141\163\163\075\042\107\164\153\105\156\164\162\171\042" "\040\151\144\075\042\145\156\164\162\171\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150\145" "\170\160\141\156\144\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\141\143\164\151\166\141\164\145\163\055" "\144\145\146\141\165\154\164\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141" "\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\145" "\170\160\141\156\144\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\146\151\154\154\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\160\157\163\151" "\164\151\157\156\042\076\061\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\057\157\142\152\145\143\164\076\074\057\143" "\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074\057" "\151\156\164\145\162\146\141\143\145\076\012\000\000\050\165\165" "\141\171\051\151\156\151\164\151\141\154\055\144\151\141\154\157" "\147\056\165\151\000\000\000\000\211\066\000\000\000\000\000\000" "\074\077\170\155\154\040\166\145\162\163\151\157\156\075\042\061" "\056\060\042\040\145\156\143\157\144\151\156\147\075\042\125\124" "\106\055\070\042\077\076\012\074\041\055\055\040\107\145\156\145" "\162\141\164\145\144\040\167\151\164\150\040\147\154\141\144\145" "\040\063\056\061\070\056\063\040\055\055\076\012\074\151\156\164" "\145\162\146\141\143\145\076\074\162\145\161\165\151\162\145\163" "\040\154\151\142\075\042\147\164\153\053\042\040\166\145\162\163" "\151\157\156\075\042\063\056\061\060\042\057\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\104\151" "\141\154\157\147\042\040\151\144\075\042\111\156\151\164\151\141" "\154\104\151\141\154\157\147\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\142\157\162\144\145\162\137\167\151\144\164\150" "\042\076\061\062\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\151\164\154\145\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\103\157\156\156\145\143\164" "\040\124\157\040\123\145\162\166\145\162\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\162\145\163\151\172\141\142\154\145\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\171\160\145\137\150\151\156\164\042\076\144\151\141\154\157" "\147\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151" "\154\144\040\151\156\164\145\162\156\141\154\055\143\150\151\154" "\144\075\042\166\142\157\170\042\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\102\157\170\042\040" "\151\144\075\042\144\151\141\154\157\147\055\166\142\157\170\061" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\157\162\151" "\145\156\164\141\164\151\157\156\042\076\166\145\162\164\151\143" "\141\154\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\163\160\141" "\143\151\156\147\042\076\066\074\057\160\162\157\160\145\162\164" "\171\076\074\143\150\151\154\144\040\151\156\164\145\162\156\141" "\154\055\143\150\151\154\144\075\042\141\143\164\151\157\156\137" "\141\162\145\141\042\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\102\165\164\164\157\156\102\157" "\170\042\040\151\144\075\042\144\151\141\154\157\147\055\141\143" "\164\151\157\156\137\141\162\145\141\061\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\141\171\157\165\164\137\163\164" "\171\154\145\042\076\145\156\144\074\057\160\162\157\160\145\162" "\164\171\076\074\143\150\151\154\144\076\074\160\154\141\143\145" "\150\157\154\144\145\162\057\076\074\057\143\150\151\154\144\076" "\074\143\150\151\154\144\076\074\160\154\141\143\145\150\157\154" "\144\145\162\057\076\074\057\143\150\151\154\144\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\145" "\170\160\141\156\144\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\146\151\154\154\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\160\157\163" "\151\164\151\157\156\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\107\162" "\151\144\042\040\151\144\075\042\147\162\151\144\061\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\157\162\151\145\156\164\141\164\151\157\156\042\076\166" "\145\162\164\151\143\141\154\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\162\157\167\137\163\160\141\143\151\156\147\042\076\066" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\157\154\165\155" "\156\137\163\160\141\143\151\156\147\042\076\061\062\074\057\160" "\162\157\160\145\162\164\171\076\074\143\150\151\154\144\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\114\141\142\145\154\042\040\151\144\075\042\167\145\154\143" "\157\155\145\055\154\141\142\145\154\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150\141" "\154\151\147\156\042\076\143\145\156\164\145\162\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\166\141\154\151\147\156\042\076\163" "\164\141\162\164\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154" "\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\127\145\154\143\157\155\145" "\040\164\157\040\107\157\142\142\171\074\057\160\162\157\160\145" "\162\164\171\076\074\141\164\164\162\151\142\165\164\145\163\076" "\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075" "\042\167\145\151\147\150\164\042\040\166\141\154\165\145\075\042" "\142\157\154\144\042\057\076\074\141\164\164\162\151\142\165\164" "\145\040\156\141\155\145\075\042\163\143\141\154\145\042\040\166" "\141\154\165\145\075\042\061\056\064\063\071\071\071\071\071\071" "\071\071\071\071\071\071\071\071\042\057\076\074\057\141\164\164" "\162\151\142\165\164\145\163\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141" "\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075" "\042\154\141\142\145\154\061\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145" "\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\170\141\154\151" "\147\156\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\171\141\154\151\147\156\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\102\145" "\146\157\162\145\040\167\145\040\163\164\141\162\164\054\040\141" "\040\146\145\167\040\157\160\164\151\157\156\163\040\156\145\145" "\144\040\164\157\040\142\145\040\143\157\156\146\151\147\165\162" "\145\144\056\040\131\157\165\040\143\141\156\040\154\141\164\145" "\162\040\143\150\141\156\147\145\040\164\150\145\155\040\142\171" "\040\143\150\157\157\163\151\156\147\040\046\154\164\073\151\046" "\147\164\073\120\162\145\146\145\162\145\156\143\145\163\046\154" "\164\073\057\151\046\147\164\073\040\146\162\157\155\040\164\150" "\145\040\141\160\160\154\151\143\141\164\151\157\156\040\155\145" "\156\165\056\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\165\163" "\145\137\155\141\162\153\165\160\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\167\162\141\160\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\155\141" "\170\137\167\151\144\164\150\137\143\150\141\162\163\042\076\064" "\060\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142" "\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145" "\146\164\137\141\164\164\141\143\150\042\076\061\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143" "\150\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040" "\143\154\141\163\163\075\042\107\164\153\111\155\141\147\145\042" "\040\151\144\075\042\151\155\141\147\145\061\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163" "\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\150\141\154\151\147\156\042\076\163\164\141\162\164\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\141\154\151\147\156\042\076" "\163\164\141\162\164\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\160\151\170\145\154\137\163\151\172\145\042\076\061\062\070\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\151\143\157\156\137\156" "\141\155\145\042\076\147\157\142\142\171\055\060\056\065\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\151\143\157\156\137\163\151" "\172\145\042\076\066\074\057\160\162\157\160\145\162\164\171\076" "\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156" "\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\150\145\151\147\150\164\042\076\066\074\057\160\162" "\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147" "\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144\076" "\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107" "\164\153\107\162\151\144\042\040\151\144\075\042\147\162\151\144" "\063\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\162\157\167\137\163\160\141\143\151\156" "\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143" "\157\154\165\155\156\137\163\160\141\143\151\156\147\042\076\061" "\062\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151" "\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163" "\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042" "\156\141\155\145\055\154\141\142\145\154\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150" "\141\154\151\147\156\042\076\163\164\141\162\164\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\166\141\154\151\147\156\042\076\143" "\145\156\164\145\162\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\155\141\162\147\151\156\137\164\157\160\042\076\066\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164" "\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163" "\042\076\125\163\145\162\040\116\141\155\145\074\057\160\162\157" "\160\145\162\164\171\076\074\141\164\164\162\151\142\165\164\145" "\163\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\167\145\151\147\150\164\042\040\166\141\154\165\145" "\075\042\142\157\154\144\042\057\076\074\057\141\164\164\162\151" "\142\165\164\145\163\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\105\156\164\162\171\042\040\151\144\075\042\156" "\141\155\145\055\145\156\164\162\171\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\155\141\162" "\147\151\156\137\164\157\160\042\076\066\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\141\143\164" "\151\166\141\164\145\163\137\144\145\146\141\165\154\164\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\061\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\114\141\142" "\145\154\042\040\151\144\075\042\154\141\142\145\154\062\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165" "\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\150\141\154\151\147\156\042\076\163\164\141\162\164" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\141\154\151\147" "\156\042\076\143\145\156\164\145\162\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\131\157" "\165\162\040\156\141\155\145\040\141\163\040\163\150\157\167\156" "\040\164\157\040\157\164\150\145\162\040\165\163\145\162\163\056" "\074\057\160\162\157\160\145\162\164\171\076\074\141\164\164\162" "\151\142\165\164\145\163\076\074\141\164\164\162\151\142\165\164" "\145\040\156\141\155\145\075\042\163\143\141\154\145\042\040\166" "\141\154\165\145\075\042\060\056\070\060\060\060\060\060\060\060" "\060\060\060\060\060\060\060\060\064\042\057\076\074\057\141\164" "\164\162\151\142\165\164\145\163\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\061\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\167\151\144\164" "\150\042\076\062\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040" "\143\154\141\163\163\075\042\107\164\153\114\141\142\145\154\042" "\040\151\144\075\042\154\141\142\145\154\063\042\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163" "\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\150\141\154\151\147\156\042\076\163\164\141\162\164\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\141\154\151\147\156\042\076" "\143\145\156\164\145\162\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\155\141\162\147\151\156\137\164\157\160\042\076\066\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\125\163\145\162\040\103\157\154\157\162\074\057\160" "\162\157\160\145\162\164\171\076\074\141\164\164\162\151\142\165" "\164\145\163\076\074\141\164\164\162\151\142\165\164\145\040\156" "\141\155\145\075\042\167\145\151\147\150\164\042\040\166\141\154" "\165\145\075\042\142\157\154\144\042\057\076\074\057\141\164\164" "\162\151\142\165\164\145\163\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076\062" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\103\157\154\157\162\102\165\164\164\157" "\156\042\040\151\144\075\042\143\157\154\157\162\055\142\165\164" "\164\157\156\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156" "\137\146\157\143\165\163\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\162\145\143\145\151\166\145\163\137" "\144\145\146\141\165\154\164\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\155\141\162\147\151\156\137\164" "\157\160\042\076\066\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\150\145\170\160\141\156\144\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\151\164\154\145\042\040\164" "\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163" "\042\076\103\150\157\157\163\145\040\141\040\125\163\145\162\040" "\103\157\154\157\162\074\057\160\162\157\160\145\162\164\171\076" "\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156" "\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076\061" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141" "\164\164\141\143\150\042\076\062\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114\141" "\142\145\154\042\040\151\144\075\042\154\141\142\145\154\064\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\150\141\154\151\147\156\042\076\163\164\141\162" "\164\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\141\154\151" "\147\156\042\076\143\145\156\164\145\162\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156" "\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076\124" "\150\145\040\143\157\154\157\162\040\167\151\164\150\040\167\150" "\151\143\150\040\164\145\170\164\040\171\157\165\040\150\141\166" "\145\040\167\162\151\164\164\145\156\040\151\163\040\142\162\141" "\156\144\145\144\056\074\057\160\162\157\160\145\162\164\171\076" "\074\141\164\164\162\151\142\165\164\145\163\076\074\141\164\164" "\162\151\142\165\164\145\040\156\141\155\145\075\042\163\143\141" "\154\145\042\040\166\141\154\165\145\075\042\060\056\070\060\060" "\060\060\060\060\060\060\060\060\060\060\060\060\060\064\042\057" "\076\074\057\141\164\164\162\151\142\165\164\145\163\076\074\057" "\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164" "\141\143\150\042\076\063\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\167\151\144\164\150\042\076\062\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\061\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\062\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\114\141\142\145\154\042\040\151\144\075\042\154" "\141\142\145\154\065\042\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042\076" "\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\143" "\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\150\141\154\151\147\156" "\042\076\163\164\141\162\164\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\141\154\151\147\156\042\076\143\145\156\164\145\162" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\155\141\162\147\151" "\156\137\164\157\160\042\076\066\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\122\145\155" "\157\164\145\040\103\157\156\156\145\143\164\151\157\156\163\074" "\057\160\162\157\160\145\162\164\171\076\074\141\164\164\162\151" "\142\165\164\145\163\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\167\145\151\147\150\164\042\040\166" "\141\154\165\145\075\042\142\157\154\144\042\057\076\074\057\141" "\164\164\162\151\142\165\164\145\163\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164" "\137\141\164\164\141\143\150\042\076\061\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042" "\076\063\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\103\150\145\143\153\102\165\164" "\164\157\156\042\040\151\144\075\042\141\154\154\157\167\055\162" "\145\155\157\164\145\055\143\157\156\156\145\143\164\151\157\156" "\163\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\101\154\154" "\157\167\040\162\145\155\157\164\145\040\165\163\145\162\163\040" "\164\157\040\145\144\151\164\040\154\157\143\141\154\040\144\157" "\143\165\155\145\156\164\163\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\162\145\143\145\151\166\145\163\137\144\145\146" "\141\165\154\164\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\170\141\154\151\147\156\042\076\060\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\144\162\141\167\137\151" "\156\144\151\143\141\164\157\162\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\064\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\107\162\151\144\042\040\151\144\075" "\042\162\145\155\157\164\145\055\143\157\156\156\145\143\164\151" "\157\156\163\055\147\162\151\144\042\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\155\141\162" "\147\151\156\137\154\145\146\164\042\076\061\062\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\157\162\151\145\156\164\141\164\151" "\157\156\042\076\166\145\162\164\151\143\141\154\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\162\157\167\137\163\160\141\143\151" "\156\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076" "\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\103\150\145\143\153\102\165" "\164\164\157\156\042\040\151\144\075\042\141\163\153\055\160\141" "\163\163\167\157\162\144\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164" "\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163" "\042\076\101\163\153\040\162\145\155\157\164\145\040\165\163\145" "\162\163\040\164\157\040\145\156\164\145\162\040\141\040\160\141" "\163\163\167\157\162\144\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\162\145\143\145\151\166\145\163\137\144\145\146\141" "\165\154\164\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\170\141\154\151\147\156\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\144\162\141\167\137\151\156" "\144\151\143\141\164\157\162\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\107\162\151\144\042\040\151\144\075\042" "\160\141\163\163\167\157\162\144\055\147\162\151\144\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\155\141\162\147\151\156\137\154\145\146\164\042\076\061" "\062\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\157\154\165" "\155\156\137\163\160\141\143\151\156\147\042\076\061\062\074\057" "\160\162\157\160\145\162\164\171\076\074\143\150\151\154\144\076" "\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107" "\164\153\114\141\142\145\154\042\040\151\144\075\042\154\141\142" "\145\154\066\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156" "\137\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\150\141\154\151\147\156\042\076" "\163\164\141\162\164\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\166\141\154\151\147\156\042\076\143\145\156\164\145\162\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\120\141\163\163\167\157\162\144\072\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\145\154\154\151\160\163\151\172\145" "\042\076\145\156\144\074\057\160\162\157\160\145\162\164\171\076" "\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156" "\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076\060" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\105\156" "\164\162\171\042\040\151\144\075\042\160\141\163\163\167\157\162" "\144\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163" "\151\142\151\154\151\164\171\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143" "\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137" "\141\164\164\141\143\150\042\076\061\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\057" "\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\145\146\164\137\141\164\164\141\143\150\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164\164" "\141\143\150\042\076\061\074\057\160\162\157\160\145\162\164\171" "\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151" "\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145\143" "\164\040\143\154\141\163\163\075\042\107\164\153\114\141\142\145" "\154\042\040\151\144\075\042\154\141\142\145\154\067\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\150\141\154\151\147\156\042\076\163\164\141\162\164\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\166\141\154\151\147\156" "\042\076\143\145\156\164\145\162\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\101\165\164" "\150\145\156\164\151\143\141\164\151\157\156\074\057\160\162\157" "\160\145\162\164\171\076\074\141\164\164\162\151\142\165\164\145" "\163\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\167\145\151\147\150\164\042\040\166\141\154\165\145" "\075\042\142\157\154\144\042\057\076\074\057\141\164\164\162\151" "\142\165\164\145\163\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\062\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\122\141\144\151\157\102\165\164\164\157\156\042" "\040\151\144\075\042\143\162\145\141\164\145\055\163\145\154\146" "\055\163\151\147\156\145\144\042\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\103\162\145\141\164\145\040\141\040\163\145\154\146" "\055\163\151\147\156\145\144\040\143\145\162\164\151\146\151\143" "\141\164\145\040\050\122\145\143\157\155\155\145\156\144\145\144" "\051\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\162\145" "\143\145\151\166\145\163\137\144\145\146\141\165\154\164\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\155\141\162\147\151\156\137\154\145\146\164\042\076\061\062\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\170\141\154\151\147\156" "\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\144\162" "\141\167\137\151\156\144\151\143\141\164\157\162\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\147\162\157" "\165\160\042\076\143\162\145\141\164\145\055\163\145\154\146\055" "\163\151\147\156\145\144\074\057\160\162\157\160\145\162\164\171" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\063\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114" "\141\142\145\154\042\040\151\144\075\042\154\141\142\145\154\070" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\150\141\154\151\147\156\042\076\163\164\141" "\162\164\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\141\154" "\151\147\156\042\076\143\145\156\164\145\162\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\155\141\162\147\151\156\137\154\145\146" "\164\042\076\061\062\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\170\141\154\151\147\156\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\111\164" "\040\155\141\171\040\164\141\153\145\040\141\040\146\145\167\040" "\163\145\143\157\156\144\163\040\146\157\162\040\164\150\145\040" "\143\145\162\164\151\146\151\143\141\164\145\040\164\157\040\142" "\145\040\147\145\156\145\162\141\164\145\144\056\074\057\160\162" "\157\160\145\162\164\171\076\074\141\164\164\162\151\142\165\164" "\145\163\076\074\141\164\164\162\151\142\165\164\145\040\156\141" "\155\145\075\042\163\143\141\154\145\042\040\166\141\154\165\145" "\075\042\060\056\070\060\060\060\060\060\060\060\060\060\060\060" "\060\060\060\060\064\042\057\076\074\057\141\164\164\162\151\142" "\165\164\145\163\076\074\057\157\142\152\145\143\164\076\074\160" "\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141" "\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\157\160\137\141\164\164\141\143\150\042\076\064\074\057\160" "\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156" "\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144" "\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075\042" "\107\164\153\122\141\144\151\157\102\165\164\164\157\156\042\040" "\151\144\075\042\165\163\145\055\145\170\151\163\164\151\156\147" "\055\143\145\162\164\151\146\151\143\141\164\145\042\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141" "\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154" "\145\075\042\171\145\163\042\076\125\163\145\040\141\156\040\145" "\170\151\163\164\151\156\147\040\143\145\162\164\151\146\151\143" "\141\164\145\040\050\105\170\160\145\162\164\040\117\160\164\151" "\157\156\051\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151" "\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\162\145\143\145\151\166\145\163\137\144\145\146\141\165\154\164" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\155\141\162\147\151\156\137\154\145\146\164\042\076\061" "\062\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\170\141\154\151" "\147\156\042\076\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\141\143\164\151\166\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\144\162\141\167\137\151\156\144\151" "\143\141\164\157\162\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\147\162\157\165\160\042\076\143\162\145" "\141\164\145\055\163\145\154\146\055\163\151\147\156\145\144\074" "\057\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042" "\076\065\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\114\141\142\145\154\042\040\151" "\144\075\042\154\141\142\145\154\071\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150\141" "\154\151\147\156\042\076\163\164\141\162\164\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\166\141\154\151\147\156\042\076\143\145" "\156\164\145\162\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\155" "\141\162\147\151\156\137\154\145\146\164\042\076\061\062\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\170\141\154\151\147\156\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\141\142" "\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\125\163\145\040\141\156\040\145\170" "\151\163\164\151\156\147\040\160\162\151\166\141\164\145\040\153" "\145\171\040\141\156\144\040\143\145\162\164\151\146\151\143\141" "\164\145\056\040\124\150\145\040\146\151\154\145\163\040\155\165" "\163\164\040\142\145\040\151\156\040\120\105\115\040\146\157\162" "\155\141\164\056\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\167" "\162\141\160\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\141\164\164\162\151\142\165\164\145\163\076" "\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075" "\042\163\143\141\154\145\042\040\166\141\154\165\145\075\042\060" "\056\070\060\060\060\060\060\060\060\060\060\060\060\060\060\060" "\060\064\042\057\076\074\057\141\164\164\162\151\142\165\164\145" "\163\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153" "\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160" "\137\141\164\164\141\143\150\042\076\066\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\107\162\151\144\042\040\151\144\075\042\143\145\162\164\151\146" "\151\143\141\164\145\055\147\162\151\144\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\155" "\141\162\147\151\156\137\154\145\146\164\042\076\062\064\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\162\157\167\137\163\160\141" "\143\151\156\147\042\076\066\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\157\154\165\155\156\137\163\160\141\143\151\156\147" "\042\076\061\062\074\057\160\162\157\160\145\162\164\171\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\114\141\142\145\154\042\040\151" "\144\075\042\154\141\142\145\154\061\060\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150" "\141\154\151\147\156\042\076\163\164\141\162\164\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\166\141\154\151\147\156\042\076\143" "\145\156\164\145\162\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141" "\142\154\145\075\042\171\145\163\042\076\120\162\151\166\141\164" "\145\040\113\145\171\072\074\057\160\162\157\160\145\162\164\171" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142" "\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153\114" "\141\142\145\154\042\040\151\144\075\042\154\141\142\145\154\061" "\061\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\150\141\154\151\147\156\042\076\163\164" "\141\162\164\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\141" "\154\151\147\156\042\076\143\145\156\164\145\162\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162" "\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042" "\076\103\145\162\164\151\146\151\143\141\164\145\072\074\057\160" "\162\157\160\145\162\164\171\076\074\057\157\142\152\145\143\164" "\076\074\160\141\143\153\151\156\147\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\154\145\146\164\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\164\157\160\137\141\164\164\141\143\150\042\076\061" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\106\151\154\145\103\150\157\157\163\145" "\162\102\165\164\164\157\156\042\040\151\144\075\042\160\162\151" "\166\141\164\145\055\153\145\171\055\146\151\154\145\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\150\145\170\160\141\156\144\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\057\157\142\152\145" "\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146\164" "\137\141\164\164\141\143\150\042\076\061\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150\042" "\076\060\074\057\160\162\157\160\145\162\164\171\076\074\057\160" "\141\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074" "\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\106\151\154\145\103\150\157\157" "\163\145\162\102\165\164\164\157\156\042\040\151\144\075\042\143" "\145\162\164\151\146\151\143\141\164\145\055\146\151\154\145\042" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143" "\165\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142" "\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145" "\146\164\137\141\164\164\141\143\150\042\076\061\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143" "\150\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137" "\141\164\164\141\143\150\042\076\067\074\057\160\162\157\160\145" "\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\061\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\065\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\057\157\142\152" "\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\145\170\160" "\141\156\144\042\076\106\141\154\163\145\074\057\160\162\157\160" "\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\146\151\154\154\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\160\157\163\151\164\151" "\157\156\042\076\061\074\057\160\162\157\160\145\162\164\171\076" "\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154" "\144\076\074\057\157\142\152\145\143\164\076\074\057\143\150\151" "\154\144\076\074\057\157\142\152\145\143\164\076\074\057\151\156" "\164\145\162\146\141\143\145\076\012\000\000\050\165\165\141\171" "\051\155\145\156\165\056\165\151\277\031\000\000\000\000\000\000" "\074\077\170\155\154\040\166\145\162\163\151\157\156\075\042\061" "\056\060\042\077\076\012\074\151\156\164\145\162\146\141\143\145" "\076\074\155\145\156\165\040\151\144\075\042\141\160\160\155\145" "\156\165\042\076\074\163\145\143\164\151\157\156\076\074\151\164" "\145\155\076\074\141\164\164\162\151\142\165\164\145\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\137\120" "\162\145\146\145\162\145\156\143\145\163\074\057\141\164\164\162" "\151\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\141\143\164\151\157\156\042\076\141" "\160\160\056\160\162\145\146\145\162\145\156\143\145\163\074\057" "\141\164\164\162\151\142\165\164\145\076\074\057\151\164\145\155" "\076\074\057\163\145\143\164\151\157\156\076\074\163\145\143\164" "\151\157\156\076\074\151\164\145\155\076\074\141\164\164\162\151" "\142\165\164\145\040\156\141\155\145\075\042\154\141\142\145\154" "\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042" "\171\145\163\042\076\110\145\154\160\074\057\141\164\164\162\151" "\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145\040" "\156\141\155\145\075\042\141\143\164\151\157\156\042\076\141\160" "\160\056\150\145\154\160\074\057\141\164\164\162\151\142\165\164" "\145\076\074\057\151\164\145\155\076\074\151\164\145\155\076\074" "\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042" "\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141" "\142\154\145\075\042\171\145\163\042\076\101\142\157\165\164\074" "\057\141\164\164\162\151\142\165\164\145\076\074\141\164\164\162" "\151\142\165\164\145\040\156\141\155\145\075\042\141\143\164\151" "\157\156\042\076\141\160\160\056\141\142\157\165\164\074\057\141" "\164\164\162\151\142\165\164\145\076\074\057\151\164\145\155\076" "\074\151\164\145\155\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162" "\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042" "\076\137\121\165\151\164\074\057\141\164\164\162\151\142\165\164" "\145\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\141\143\164\151\157\156\042\076\141\160\160\056\161" "\165\151\164\074\057\141\164\164\162\151\142\165\164\145\076\074" "\057\151\164\145\155\076\074\057\163\145\143\164\151\157\156\076" "\074\057\155\145\156\165\076\074\155\145\156\165\040\151\144\075" "\042\167\151\156\155\145\156\165\042\076\074\163\165\142\155\145" "\156\165\076\074\141\164\164\162\151\142\165\164\145\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\137\106" "\151\154\145\074\057\141\164\164\162\151\142\165\164\145\076\074" "\163\145\143\164\151\157\156\076\074\151\164\145\155\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\154" "\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\137\116\145\167\056\056\056" "\074\057\141\164\164\162\151\142\165\164\145\076\074\141\164\164" "\162\151\142\165\164\145\040\156\141\155\145\075\042\141\143\164" "\151\157\156\042\076\167\151\156\056\156\145\167\074\057\141\164" "\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142\165" "\164\145\040\156\141\155\145\075\042\141\143\143\145\154\042\076" "\046\154\164\073\160\162\151\155\141\162\171\046\147\164\073\156" "\074\057\141\164\164\162\151\142\165\164\145\076\074\057\151\164" "\145\155\076\074\151\164\145\155\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\154\141\142\145\154\042" "\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171" "\145\163\042\076\137\117\160\145\156\056\056\056\074\057\141\164" "\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142\165" "\164\145\040\156\141\155\145\075\042\141\143\164\151\157\156\042" "\076\167\151\156\056\157\160\145\156\074\057\141\164\164\162\151" "\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145\040" "\156\141\155\145\075\042\141\143\143\145\154\042\076\046\154\164" "\073\160\162\151\155\141\162\171\046\147\164\073\157\074\057\141" "\164\164\162\151\142\165\164\145\076\074\057\151\164\145\155\076" "\074\151\164\145\155\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162" "\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042" "\076\117\160\145\156\040\137\114\157\143\141\164\151\157\156\056" "\056\056\074\057\141\164\164\162\151\142\165\164\145\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\141" "\143\164\151\157\156\042\076\167\151\156\056\157\160\145\156\055" "\154\157\143\141\164\151\157\156\074\057\141\164\164\162\151\142" "\165\164\145\076\074\141\164\164\162\151\142\165\164\145\040\156" "\141\155\145\075\042\141\143\143\145\154\042\076\046\154\164\073" "\160\162\151\155\141\162\171\046\147\164\073\154\074\057\141\164" "\164\162\151\142\165\164\145\076\074\057\151\164\145\155\076\074" "\057\163\145\143\164\151\157\156\076\074\163\145\143\164\151\157" "\156\076\074\151\164\145\155\076\074\141\164\164\162\151\142\165" "\164\145\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\137\123\141\166\145\074\057\141\164\164\162\151\142" "\165\164\145\076\074\141\164\164\162\151\142\165\164\145\040\156" "\141\155\145\075\042\141\143\164\151\157\156\042\076\167\151\156" "\056\163\141\166\145\074\057\141\164\164\162\151\142\165\164\145" "\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145" "\075\042\141\143\143\145\154\042\076\046\154\164\073\160\162\151" "\155\141\162\171\046\147\164\073\163\074\057\141\164\164\162\151" "\142\165\164\145\076\074\057\151\164\145\155\076\074\151\164\145" "\155\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\123\141\166" "\145\040\137\101\163\056\056\056\074\057\141\164\164\162\151\142" "\165\164\145\076\074\141\164\164\162\151\142\165\164\145\040\156" "\141\155\145\075\042\141\143\164\151\157\156\042\076\167\151\156" "\056\163\141\166\145\055\141\163\074\057\141\164\164\162\151\142" "\165\164\145\076\074\141\164\164\162\151\142\165\164\145\040\156" "\141\155\145\075\042\141\143\143\145\154\042\076\046\154\164\073" "\160\162\151\155\141\162\171\046\147\164\073\046\154\164\073\163" "\150\151\146\164\046\147\164\073\163\074\057\141\164\164\162\151" "\142\165\164\145\076\074\057\151\164\145\155\076\074\151\164\145" "\155\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\123\141\166" "\145\040\101\154\154\074\057\141\164\164\162\151\142\165\164\145" "\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145" "\075\042\141\143\164\151\157\156\042\076\167\151\156\056\163\141" "\166\145\055\141\154\154\074\057\141\164\164\162\151\142\165\164" "\145\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\141\143\143\145\154\042\076\046\154\164\073\160\162" "\151\155\141\162\171\046\147\164\073\046\154\164\073\163\150\151" "\146\164\046\147\164\073\154\074\057\141\164\164\162\151\142\165" "\164\145\076\074\057\151\164\145\155\076\074\057\163\145\143\164" "\151\157\156\076\074\163\145\143\164\151\157\156\076\074\151\164" "\145\155\076\074\141\164\164\162\151\142\165\164\145\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\105\170" "\160\157\162\164\040\101\163\040\137\110\124\115\114\056\056\056" "\074\057\141\164\164\162\151\142\165\164\145\076\074\141\164\164" "\162\151\142\165\164\145\040\156\141\155\145\075\042\141\143\164" "\151\157\156\042\076\167\151\156\056\145\170\160\157\162\164\055" "\150\164\155\154\074\057\141\164\164\162\151\142\165\164\145\076" "\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075" "\042\141\143\143\145\154\042\076\046\154\164\073\160\162\151\155" "\141\162\171\046\147\164\073\046\154\164\073\163\150\151\146\164" "\046\147\164\073\150\074\057\141\164\164\162\151\142\165\164\145" "\076\074\057\151\164\145\155\076\074\151\164\145\155\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\154" "\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\103\157\156\156\145\143\164" "\040\137\124\157\040\123\145\162\166\145\162\056\056\056\074\057" "\141\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151" "\142\165\164\145\040\156\141\155\145\075\042\141\143\164\151\157" "\156\042\076\167\151\156\056\143\157\156\156\145\143\164\074\057" "\141\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151" "\142\165\164\145\040\156\141\155\145\075\042\141\143\143\145\154" "\042\076\046\154\164\073\160\162\151\155\141\162\171\046\147\164" "\073\164\074\057\141\164\164\162\151\142\165\164\145\076\074\057" "\151\164\145\155\076\074\057\163\145\143\164\151\157\156\076\074" "\163\145\143\164\151\157\156\076\074\151\164\145\155\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\154" "\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\137\103\154\157\163\145\074" "\057\141\164\164\162\151\142\165\164\145\076\074\141\164\164\162" "\151\142\165\164\145\040\156\141\155\145\075\042\141\143\164\151" "\157\156\042\076\167\151\156\056\143\154\157\163\145\074\057\141" "\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\141\143\143\145\154\042" "\076\046\154\164\073\160\162\151\155\141\162\171\046\147\164\073" "\167\074\057\141\164\164\162\151\142\165\164\145\076\074\057\151" "\164\145\155\076\074\057\163\145\143\164\151\157\156\076\074\057" "\163\165\142\155\145\156\165\076\074\163\165\142\155\145\156\165" "\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\137\105\144\151" "\164\074\057\141\164\164\162\151\142\165\164\145\076\074\163\145" "\143\164\151\157\156\076\074\151\164\145\155\076\074\141\164\164" "\162\151\142\165\164\145\040\156\141\155\145\075\042\154\141\142" "\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\137\125\156\144\157\074\057\141\164" "\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142\165" "\164\145\040\156\141\155\145\075\042\141\143\164\151\157\156\042" "\076\167\151\156\056\165\156\144\157\074\057\141\164\164\162\151" "\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145\040" "\156\141\155\145\075\042\141\143\143\145\154\042\076\046\154\164" "\073\160\162\151\155\141\162\171\046\147\164\073\172\074\057\141" "\164\164\162\151\142\165\164\145\076\074\057\151\164\145\155\076" "\074\151\164\145\155\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162" "\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042" "\076\137\122\145\144\157\074\057\141\164\164\162\151\142\165\164" "\145\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\141\143\164\151\157\156\042\076\167\151\156\056\162" "\145\144\157\074\057\141\164\164\162\151\142\165\164\145\076\074" "\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042" "\141\143\143\145\154\042\076\046\154\164\073\160\162\151\155\141" "\162\171\046\147\164\073\046\154\164\073\163\150\151\146\164\046" "\147\164\073\172\074\057\141\164\164\162\151\142\165\164\145\076" "\074\057\151\164\145\155\076\074\057\163\145\143\164\151\157\156" "\076\074\163\145\143\164\151\157\156\076\074\151\164\145\155\076" "\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075" "\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164" "\141\142\154\145\075\042\171\145\163\042\076\103\165\164\074\057" "\141\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151" "\142\165\164\145\040\156\141\155\145\075\042\141\143\164\151\157" "\156\042\076\167\151\156\056\143\165\164\074\057\141\164\164\162" "\151\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\141\143\143\145\154\042\076\046\154" "\164\073\160\162\151\155\141\162\171\046\147\164\073\170\074\057" "\141\164\164\162\151\142\165\164\145\076\074\057\151\164\145\155" "\076\074\151\164\145\155\076\074\141\164\164\162\151\142\165\164" "\145\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164" "\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163" "\042\076\137\103\157\160\171\074\057\141\164\164\162\151\142\165" "\164\145\076\074\141\164\164\162\151\142\165\164\145\040\156\141" "\155\145\075\042\141\143\164\151\157\156\042\076\167\151\156\056" "\143\157\160\171\074\057\141\164\164\162\151\142\165\164\145\076" "\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075" "\042\141\143\143\145\154\042\076\046\154\164\073\160\162\151\155" "\141\162\171\046\147\164\073\143\074\057\141\164\164\162\151\142" "\165\164\145\076\074\057\151\164\145\155\076\074\151\164\145\155" "\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\120\141\163\164" "\145\074\057\141\164\164\162\151\142\165\164\145\076\074\141\164" "\164\162\151\142\165\164\145\040\156\141\155\145\075\042\141\143" "\164\151\157\156\042\076\167\151\156\056\160\141\163\164\145\074" "\057\141\164\164\162\151\142\165\164\145\076\074\141\164\164\162" "\151\142\165\164\145\040\156\141\155\145\075\042\141\143\143\145" "\154\042\076\046\154\164\073\160\162\151\155\141\162\171\046\147" "\164\073\166\074\057\141\164\164\162\151\142\165\164\145\076\074" "\057\151\164\145\155\076\074\057\163\145\143\164\151\157\156\076" "\074\163\145\143\164\151\157\156\076\074\151\164\145\155\076\074" "\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042" "\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141" "\142\154\145\075\042\171\145\163\042\076\137\106\151\156\144\056" "\056\056\074\057\141\164\164\162\151\142\165\164\145\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\141" "\143\164\151\157\156\042\076\167\151\156\056\146\151\156\144\074" "\057\141\164\164\162\151\142\165\164\145\076\074\141\164\164\162" "\151\142\165\164\145\040\156\141\155\145\075\042\141\143\143\145" "\154\042\076\046\154\164\073\160\162\151\155\141\162\171\046\147" "\164\073\146\074\057\141\164\164\162\151\142\165\164\145\076\074" "\057\151\164\145\155\076\074\151\164\145\155\076\074\141\164\164" "\162\151\142\165\164\145\040\156\141\155\145\075\042\154\141\142" "\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\106\151\156\144\040\116\145\137\170" "\164\074\057\141\164\164\162\151\142\165\164\145\076\074\141\164" "\164\162\151\142\165\164\145\040\156\141\155\145\075\042\141\143" "\164\151\157\156\042\076\167\151\156\056\146\151\156\144\055\156" "\145\170\164\074\057\141\164\164\162\151\142\165\164\145\076\074" "\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042" "\141\143\143\145\154\042\076\046\154\164\073\160\162\151\155\141" "\162\171\046\147\164\073\147\074\057\141\164\164\162\151\142\165" "\164\145\076\074\057\151\164\145\155\076\074\151\164\145\155\076" "\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075" "\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164" "\141\142\154\145\075\042\171\145\163\042\076\137\106\151\156\144" "\040\120\162\145\137\166\151\157\165\163\074\057\141\164\164\162" "\151\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\141\143\164\151\157\156\042\076\167" "\151\156\056\146\151\156\144\055\160\162\145\166\074\057\141\164" "\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142\165" "\164\145\040\156\141\155\145\075\042\141\143\143\145\154\042\076" "\046\154\164\073\160\162\151\155\141\162\171\046\147\164\073\046" "\154\164\073\163\150\151\146\164\046\147\164\073\147\074\057\141" "\164\164\162\151\142\165\164\145\076\074\057\151\164\145\155\076" "\074\151\164\145\155\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162" "\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042" "\076\106\151\156\144\040\101\156\144\040\122\145\137\160\154\141" "\143\145\056\056\056\074\057\141\164\164\162\151\142\165\164\145" "\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145" "\075\042\141\143\164\151\157\156\042\076\167\151\156\056\146\151" "\156\144\055\162\145\160\154\141\143\145\074\057\141\164\164\162" "\151\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\141\143\143\145\154\042\076\046\154" "\164\073\160\162\151\155\141\162\171\046\147\164\073\150\074\057" "\141\164\164\162\151\142\165\164\145\076\074\057\151\164\145\155" "\076\074\151\164\145\155\076\074\141\164\164\162\151\142\165\164" "\145\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164" "\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163" "\042\076\107\157\040\124\157\040\137\114\151\156\145\074\057\141" "\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\141\143\164\151\157\156" "\042\076\167\151\156\056\147\157\164\157\055\154\151\156\145\074" "\057\141\164\164\162\151\142\165\164\145\076\074\141\164\164\162" "\151\142\165\164\145\040\156\141\155\145\075\042\141\143\143\145" "\154\042\076\046\154\164\073\160\162\151\155\141\162\171\046\147" "\164\073\151\074\057\141\164\164\162\151\142\165\164\145\076\074" "\057\151\164\145\155\076\074\057\163\145\143\164\151\157\156\076" "\074\057\163\165\142\155\145\156\165\076\074\163\165\142\155\145" "\156\165\076\074\141\164\164\162\151\142\165\164\145\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\137\126" "\151\145\167\074\057\141\164\164\162\151\142\165\164\145\076\074" "\163\145\143\164\151\157\156\076\074\151\164\145\155\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\154" "\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\122\145\163\145\164\040\125" "\163\145\162\040\103\157\154\157\162\163\074\057\141\164\164\162" "\151\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\141\143\164\151\157\156\042\076\167" "\151\156\056\150\151\144\145\055\165\163\145\162\055\143\157\154" "\157\162\163\074\057\141\164\164\162\151\142\165\164\145\076\074" "\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042" "\141\143\143\145\154\042\076\046\154\164\073\160\162\151\155\141" "\162\171\046\147\164\073\046\154\164\073\163\150\151\146\164\046" "\147\164\073\143\074\057\141\164\164\162\151\142\165\164\145\076" "\074\057\151\164\145\155\076\074\057\163\145\143\164\151\157\156" "\076\074\163\145\143\164\151\157\156\076\074\151\164\145\155\076" "\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075" "\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164" "\141\142\154\145\075\042\171\145\163\042\076\106\165\154\154\163" "\143\162\145\145\156\074\057\141\164\164\162\151\142\165\164\145" "\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145" "\075\042\141\143\164\151\157\156\042\076\167\151\156\056\146\165" "\154\154\163\143\162\145\145\156\074\057\141\164\164\162\151\142" "\165\164\145\076\074\141\164\164\162\151\142\165\164\145\040\156" "\141\155\145\075\042\141\143\143\145\154\042\076\106\061\061\074" "\057\141\164\164\162\151\142\165\164\145\076\074\057\151\164\145" "\155\076\074\151\164\145\155\076\074\141\164\164\162\151\142\165" "\164\145\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\132\157\157\155\040\111\156\074\057\141\164\164\162" "\151\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\141\143\164\151\157\156\042\076\167" "\151\156\056\172\157\157\155\055\151\156\074\057\141\164\164\162" "\151\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\141\143\143\145\154\042\076\046\154" "\164\073\160\162\151\155\141\162\171\046\147\164\073\160\154\165" "\163\074\057\141\164\164\162\151\142\165\164\145\076\074\057\151" "\164\145\155\076\074\151\164\145\155\076\074\141\164\164\162\151" "\142\165\164\145\040\156\141\155\145\075\042\154\141\142\145\154" "\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042" "\171\145\163\042\076\132\157\157\155\040\117\165\164\074\057\141" "\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\141\143\164\151\157\156" "\042\076\167\151\156\056\172\157\157\155\055\157\165\164\074\057" "\141\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151" "\142\165\164\145\040\156\141\155\145\075\042\141\143\143\145\154" "\042\076\046\154\164\073\160\162\151\155\141\162\171\046\147\164" "\073\155\151\156\165\163\074\057\141\164\164\162\151\142\165\164" "\145\076\074\057\151\164\145\155\076\074\057\163\145\143\164\151" "\157\156\076\074\163\145\143\164\151\157\156\076\074\151\164\145" "\155\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\126\151\145" "\167\040\124\157\157\154\040\102\141\162\074\057\141\164\164\162" "\151\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\141\143\164\151\157\156\042\076\167" "\151\156\056\166\151\145\167\055\164\157\157\154\142\141\162\074" "\057\141\164\164\162\151\142\165\164\145\076\074\057\151\164\145" "\155\076\074\151\164\145\155\076\074\141\164\164\162\151\142\165" "\164\145\040\156\141\155\145\075\042\154\141\142\145\154\042\040" "\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145" "\163\042\076\126\151\145\167\040\123\164\141\164\165\163\040\102" "\141\162\074\057\141\164\164\162\151\142\165\164\145\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\141" "\143\164\151\157\156\042\076\167\151\156\056\166\151\145\167\055" "\163\164\141\164\165\163\142\141\162\074\057\141\164\164\162\151" "\142\165\164\145\076\074\057\151\164\145\155\076\074\057\163\145" "\143\164\151\157\156\076\074\163\145\143\164\151\157\156\076\074" "\151\164\145\155\076\074\141\164\164\162\151\142\165\164\145\040" "\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162\141" "\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076" "\126\151\145\167\040\104\157\143\165\155\145\156\164\040\102\162" "\157\167\163\145\162\074\057\141\164\164\162\151\142\165\164\145" "\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145" "\075\042\141\143\164\151\157\156\042\076\167\151\156\056\166\151" "\145\167\055\142\162\157\167\163\145\162\074\057\141\164\164\162" "\151\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\141\143\143\145\154\042\076\106\071" "\074\057\141\164\164\162\151\142\165\164\145\076\074\057\151\164" "\145\155\076\074\151\164\145\155\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\154\141\142\145\154\042" "\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171" "\145\163\042\076\126\151\145\167\040\103\150\141\164\074\057\141" "\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\141\143\164\151\157\156" "\042\076\167\151\156\056\166\151\145\167\055\143\150\141\164\074" "\057\141\164\164\162\151\142\165\164\145\076\074\141\164\164\162" "\151\142\165\164\145\040\156\141\155\145\075\042\141\143\143\145" "\154\042\076\046\154\164\073\163\150\151\146\164\046\147\164\073" "\106\071\074\057\141\164\164\162\151\142\165\164\145\076\074\057" "\151\164\145\155\076\074\151\164\145\155\076\074\141\164\164\162" "\151\142\165\164\145\040\156\141\155\145\075\042\154\141\142\145" "\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075" "\042\171\145\163\042\076\126\151\145\167\040\104\157\143\165\155" "\145\156\164\040\125\163\145\162\040\114\151\163\164\074\057\141" "\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\141\143\164\151\157\156" "\042\076\167\151\156\056\166\151\145\167\055\144\157\143\165\155" "\145\156\164\055\165\163\145\162\055\154\151\163\164\074\057\141" "\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\141\143\143\145\154\042" "\076\046\154\164\073\160\162\151\155\141\162\171\046\147\164\073" "\106\071\074\057\141\164\164\162\151\142\165\164\145\076\074\057" "\151\164\145\155\076\074\151\164\145\155\076\074\141\164\164\162" "\151\142\165\164\145\040\156\141\155\145\075\042\154\141\142\145" "\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145\075" "\042\171\145\163\042\076\126\151\145\167\040\103\150\141\164\040" "\125\163\145\162\040\114\151\163\164\074\057\141\164\164\162\151" "\142\165\164\145\076\074\141\164\164\162\151\142\165\164\145\040" "\156\141\155\145\075\042\141\143\164\151\157\156\042\076\167\151" "\156\056\166\151\145\167\055\143\150\141\164\055\165\163\145\162" "\055\154\151\163\164\074\057\141\164\164\162\151\142\165\164\145" "\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145" "\075\042\141\143\143\145\154\042\076\046\154\164\073\160\162\151" "\155\141\162\171\046\147\164\073\046\154\164\073\163\150\151\146" "\164\046\147\164\073\106\071\074\057\141\164\164\162\151\142\165" "\164\145\076\074\057\151\164\145\155\076\074\057\163\145\143\164" "\151\157\156\076\074\163\145\143\164\151\157\156\076\074\163\165" "\142\155\145\156\165\076\074\141\164\164\162\151\142\165\164\145" "\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162" "\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042" "\076\137\110\151\147\150\154\151\147\150\164\040\115\157\144\145" "\074\057\141\164\164\162\151\142\165\164\145\076\074\151\164\145" "\155\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\116\157\156" "\145\074\057\141\164\164\162\151\142\165\164\145\076\074\141\164" "\164\162\151\142\165\164\145\040\156\141\155\145\075\042\141\143" "\164\151\157\156\042\076\167\151\156\056\150\151\147\150\154\151" "\147\150\164\055\155\157\144\145\074\057\141\164\164\162\151\142" "\165\164\145\076\074\141\164\164\162\151\142\165\164\145\040\156" "\141\155\145\075\042\164\141\162\147\145\164\042\057\076\074\057" "\151\164\145\155\076\074\041\055\055\040\164\150\151\163\040\151" "\163\040\146\151\154\154\145\144\040\160\162\157\147\162\141\155" "\155\141\164\151\143\141\154\154\171\040\055\055\076\074\057\163" "\165\142\155\145\156\165\076\074\057\163\145\143\164\151\157\156" "\076\074\057\163\165\142\155\145\156\165\076\074\057\155\145\156" "\165\076\074\057\151\156\164\145\162\146\141\143\145\076\012\000" "\000\050\165\165\141\171\051\057\007\000\000\000\165\151\057\000" "\017\000\000\000\001\000\000\000\005\000\000\000\020\000\000\000" "\012\000\000\000\004\000\000\000\006\000\000\000\013\000\000\000" "\014\000\000\000\002\000\000\000\021\000\000\000\003\000\000\000" "\010\000\000\000\142\162\157\167\163\145\162\055\143\157\156\164" "\145\170\164\055\155\145\156\165\056\165\151\000\000\000\000\000" "\314\005\000\000\000\000\000\000\074\077\170\155\154\040\166\145" "\162\163\151\157\156\075\042\061\056\060\042\077\076\012\074\151" "\156\164\145\162\146\141\143\145\076\074\155\145\156\165\040\151" "\144\075\042\142\162\157\167\163\145\162\055\143\157\156\164\145" "\170\164\055\155\145\156\165\055\151\156\141\143\164\151\166\145" "\042\076\074\163\145\143\164\151\157\156\076\074\151\164\145\155" "\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\137\122\145\155" "\157\166\145\074\057\141\164\164\162\151\142\165\164\145\076\074" "\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042" "\141\143\164\151\157\156\042\076\142\162\157\167\163\145\162\056" "\162\145\155\157\166\145\074\057\141\164\164\162\151\142\165\164" "\145\076\074\057\151\164\145\155\076\074\057\163\145\143\164\151" "\157\156\076\074\057\155\145\156\165\076\074\155\145\156\165\040" "\151\144\075\042\142\162\157\167\163\145\162\055\143\157\156\164" "\145\170\164\055\155\145\156\165\055\141\143\164\151\166\145\042" "\076\074\163\145\143\164\151\157\156\076\074\151\164\145\155\076" "\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145\075" "\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141\164" "\141\142\154\145\075\042\171\145\163\042\076\137\104\151\163\143" "\157\156\156\145\143\164\040\106\162\157\155\040\123\145\162\166" "\145\162\074\057\141\164\164\162\151\142\165\164\145\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\141" "\143\164\151\157\156\042\076\142\162\157\167\163\145\162\056\144" "\151\163\143\157\156\156\145\143\164\074\057\141\164\164\162\151" "\142\165\164\145\076\074\057\151\164\145\155\076\074\151\164\145" "\155\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\137\103\157" "\156\156\145\143\164\151\157\156\040\111\156\146\157\056\056\056" "\074\057\141\164\164\162\151\142\165\164\145\076\074\141\164\164" "\162\151\142\165\164\145\040\156\141\155\145\075\042\141\143\164" "\151\157\156\042\076\142\162\157\167\163\145\162\056\143\157\156" "\156\145\143\164\151\157\156\055\151\156\146\157\074\057\141\164" "\164\162\151\142\165\164\145\076\074\057\151\164\145\155\076\074" "\151\164\145\155\076\074\141\164\164\162\151\142\165\164\145\040" "\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162\141" "\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042\076" "\137\103\162\145\141\164\145\040\101\143\143\157\165\156\164\056" "\056\056\074\057\141\164\164\162\151\142\165\164\145\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\141" "\143\164\151\157\156\042\076\142\162\157\167\163\145\162\056\143" "\162\145\141\164\145\055\141\143\143\157\165\156\164\074\057\141" "\164\164\162\151\142\165\164\145\076\074\057\151\164\145\155\076" "\074\057\163\145\143\164\151\157\156\076\074\163\145\143\164\151" "\157\156\076\074\151\164\145\155\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\154\141\142\145\154\042" "\040\164\162\141\156\163\154\141\164\141\142\154\145\075\042\171" "\145\163\042\076\103\162\145\141\164\145\040\104\157\137\143\165" "\155\145\156\164\056\056\056\074\057\141\164\164\162\151\142\165" "\164\145\076\074\141\164\164\162\151\142\165\164\145\040\156\141" "\155\145\075\042\141\143\164\151\157\156\042\076\142\162\157\167" "\163\145\162\056\143\162\145\141\164\145\055\144\157\143\165\155" "\145\156\164\074\057\141\164\164\162\151\142\165\164\145\076\074" "\057\151\164\145\155\076\074\151\164\145\155\076\074\141\164\164" "\162\151\142\165\164\145\040\156\141\155\145\075\042\154\141\142" "\145\154\042\040\164\162\141\156\163\154\141\164\141\142\154\145" "\075\042\171\145\163\042\076\103\162\145\141\164\145\040\104\151" "\162\145\143\164\157\162\137\171\056\056\056\074\057\141\164\164" "\162\151\142\165\164\145\076\074\141\164\164\162\151\142\165\164" "\145\040\156\141\155\145\075\042\141\143\164\151\157\156\042\076" "\142\162\157\167\163\145\162\056\143\162\145\141\164\145\055\144" "\151\162\145\143\164\157\162\171\074\057\141\164\164\162\151\142" "\165\164\145\076\074\057\151\164\145\155\076\074\151\164\145\155" "\076\074\141\164\164\162\151\142\165\164\145\040\156\141\155\145" "\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154\141" "\164\141\142\154\145\075\042\171\145\163\042\076\137\117\160\145" "\156\040\104\157\143\165\155\145\156\164\056\056\056\074\057\141" "\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\141\143\164\151\157\156" "\042\076\142\162\157\167\163\145\162\056\157\160\145\156\055\144" "\157\143\165\155\145\156\164\074\057\141\164\164\162\151\142\165" "\164\145\076\074\057\151\164\145\155\076\074\057\163\145\143\164" "\151\157\156\076\074\163\145\143\164\151\157\156\076\074\151\164" "\145\155\076\074\141\164\164\162\151\142\165\164\145\040\156\141" "\155\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163" "\154\141\164\141\142\154\145\075\042\171\145\163\042\076\137\120" "\145\162\155\151\163\163\151\157\156\163\056\056\056\074\057\141" "\164\164\162\151\142\165\164\145\076\074\141\164\164\162\151\142" "\165\164\145\040\156\141\155\145\075\042\141\143\164\151\157\156" "\042\076\142\162\157\167\163\145\162\056\160\145\162\155\151\163" "\163\151\157\156\163\074\057\141\164\164\162\151\142\165\164\145" "\076\074\057\151\164\145\155\076\074\151\164\145\155\076\074\141" "\164\164\162\151\142\165\164\145\040\156\141\155\145\075\042\154" "\141\142\145\154\042\040\164\162\141\156\163\154\141\164\141\142" "\154\145\075\042\171\145\163\042\076\104\137\145\154\145\164\145" "\074\057\141\164\164\162\151\142\165\164\145\076\074\141\164\164" "\162\151\142\165\164\145\040\156\141\155\145\075\042\141\143\164" "\151\157\156\042\076\142\162\157\167\163\145\162\056\144\145\154" "\145\164\145\074\057\141\164\164\162\151\142\165\164\145\076\074" "\057\151\164\145\155\076\074\057\163\145\143\164\151\157\156\076" "\074\057\155\145\156\165\076\074\057\151\156\164\145\162\146\141" "\143\145\076\012\000\000\050\165\165\141\171\051\144\157\143\165" "\155\145\156\164\055\154\157\143\141\164\151\157\156\055\144\151" "\141\154\157\147\056\165\151\000\301\013\000\000\000\000\000\000" "\074\077\170\155\154\040\166\145\162\163\151\157\156\075\042\061" "\056\060\042\040\145\156\143\157\144\151\156\147\075\042\125\124" "\106\055\070\042\077\076\012\074\041\055\055\040\107\145\156\145" "\162\141\164\145\144\040\167\151\164\150\040\147\154\141\144\145" "\040\063\056\061\070\056\063\040\055\055\076\012\074\151\156\164" "\145\162\146\141\143\145\076\074\162\145\161\165\151\162\145\163" "\040\154\151\142\075\042\147\164\153\053\042\040\166\145\162\163" "\151\157\156\075\042\063\056\061\060\042\057\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\104\151" "\141\154\157\147\042\040\151\144\075\042\104\157\143\165\155\145" "\156\164\114\157\143\141\164\151\157\156\104\151\141\154\157\147" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\142\157\162" "\144\145\162\137\167\151\144\164\150\042\076\061\062\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\162\145\163\151\172\141\142\154" "\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\144\145\146\141\165\154\164\137\150\145\151\147\150\164" "\042\076\064\070\060\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\164\171\160\145\137\150\151\156\164\042\076\144\151\141\154\157" "\147\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151" "\154\144\040\151\156\164\145\162\156\141\154\055\143\150\151\154" "\144\075\042\166\142\157\170\042\076\074\157\142\152\145\143\164" "\040\143\154\141\163\163\075\042\107\164\153\102\157\170\042\040" "\151\144\075\042\144\151\141\154\157\147\055\166\142\157\170\061" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\157\162\151" "\145\156\164\141\164\151\157\156\042\076\166\145\162\164\151\143" "\141\154\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\163\160\141" "\143\151\156\147\042\076\066\074\057\160\162\157\160\145\162\164" "\171\076\074\143\150\151\154\144\040\151\156\164\145\162\156\141" "\154\055\143\150\151\154\144\075\042\141\143\164\151\157\156\137" "\141\162\145\141\042\076\074\157\142\152\145\143\164\040\143\154" "\141\163\163\075\042\107\164\153\102\165\164\164\157\156\102\157" "\170\042\040\151\144\075\042\144\151\141\154\157\147\055\141\143" "\164\151\157\156\137\141\162\145\141\061\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\141\171\157\165\164\137\163\164" "\171\154\145\042\076\145\156\144\074\057\160\162\157\160\145\162" "\164\171\076\074\143\150\151\154\144\076\074\160\154\141\143\145" "\150\157\154\144\145\162\057\076\074\057\143\150\151\154\144\076" "\074\143\150\151\154\144\076\074\160\154\141\143\145\150\157\154" "\144\145\162\057\076\074\057\143\150\151\154\144\076\074\057\157" "\142\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\145" "\170\160\141\156\144\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\146\151\154\154\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\160\157\163" "\151\164\151\157\156\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143" "\150\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152" "\145\143\164\040\143\154\141\163\163\075\042\107\164\153\107\162" "\151\144\042\040\151\144\075\042\147\162\151\144\061\042\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166" "\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163" "\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\157\162\151\145\156\164\141\164\151\157\156\042\076\166" "\145\162\164\151\143\141\154\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\162\157\167\137\163\160\141\143\151\156\147\042\076\066" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\157\154\165\155" "\156\137\163\160\141\143\151\156\147\042\076\066\074\057\160\162" "\157\160\145\162\164\171\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\114\141\142\145\154\042\040\151\144\075\042\144\157\143\165\155" "\145\156\164\055\156\141\155\145\055\154\141\142\145\154\042\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\166\151\163\151\142\154\145\042\076\124\162\165\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\143\141\156\137\146\157\143\165" "\163\042\076\106\141\154\163\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\154\141\142\145\154\042\040\164\162\141\156\163\154" "\141\164\141\142\154\145\075\042\171\145\163\042\076\104\157\143" "\165\155\145\156\164\040\116\141\155\145\072\074\057\160\162\157" "\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\060\074\057" "\160\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151" "\156\147\076\074\057\143\150\151\154\144\076\074\143\150\151\154" "\144\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\105\156\164\162\171\042\040\151\144\075\042\144" "\157\143\165\155\145\156\164\055\156\141\155\145\042\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151" "\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\141\143\164\151\166\141\164\145\163\137\144\145\146\141\165\154" "\164\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153" "\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\154\145\146\164\137\141\164\164\141\143\150\042" "\076\061\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\164\157\160" "\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157\160" "\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076\074" "\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074\157" "\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164\153" "\114\141\142\145\154\042\040\151\144\075\042\154\157\143\141\164" "\151\157\156\055\154\141\142\145\154\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141" "\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\150\141" "\154\151\147\156\042\076\163\164\141\162\164\074\057\160\162\157" "\160\145\162\164\171\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\154\145\146\164\137\141\164\164" "\141\143\150\042\076\060\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\164\157\160\137\141\164\164\141\143\150\042\076\061\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\167\151\144\164\150\042\076" "\062\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\123\143\162\157\154\154\145\144\127" "\151\156\144\157\167\042\040\151\144\075\042\163\143\162\157\154" "\154\145\144\167\151\156\144\157\167\061\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124" "\162\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\163\150" "\141\144\157\167\137\164\171\160\145\042\076\151\156\074\057\160" "\162\157\160\145\162\164\171\076\074\143\150\151\154\144\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\111\156" "\146\107\164\153\102\162\157\167\163\145\162\126\151\145\167\042" "\040\151\144\075\042\166\151\145\167\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151\142" "\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\143\141\156\137\146\157\143\165\163\042\076\124\162" "\165\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\166\145\170" "\160\141\156\144\042\076\124\162\165\145\074\057\160\162\157\160" "\145\162\164\171\076\074\143\150\151\154\144\040\151\156\164\145" "\162\156\141\154\055\143\150\151\154\144\075\042\163\145\154\145" "\143\164\151\157\156\042\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\124\162\145\145\123\145\154" "\145\143\164\151\157\156\042\040\151\144\075\042\164\162\145\145" "\166\151\145\167\055\163\145\154\145\143\164\151\157\156\061\042" "\057\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145" "\143\164\076\074\057\143\150\151\154\144\076\074\057\157\142\152" "\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145\146" "\164\137\141\164\164\141\143\150\042\076\060\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143\150" "\042\076\062\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\167\151" "\144\164\150\042\076\062\074\057\160\162\157\160\145\162\164\171" "\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150\151" "\154\144\076\074\057\157\142\152\145\143\164\076\074\160\141\143" "\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\145\170\160\141\156\144\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\146\151\154" "\154\042\076\124\162\165\145\074\057\160\162\157\160\145\162\164" "\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\160\157\163\151\164\151\157\156\042\076\061\074\057\160" "\162\157\160\145\162\164\171\076\074\057\160\141\143\153\151\156" "\147\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145" "\143\164\076\074\057\143\150\151\154\144\076\074\057\157\142\152" "\145\143\164\076\074\057\151\156\164\145\162\146\141\143\145\076" "\012\000\000\050\165\165\141\171\051\160\141\163\163\167\157\162" "\144\055\144\151\141\154\157\147\056\165\151\000\000\000\000\000" "\307\013\000\000\000\000\000\000\074\077\170\155\154\040\166\145" "\162\163\151\157\156\075\042\061\056\060\042\040\145\156\143\157" "\144\151\156\147\075\042\125\124\106\055\070\042\077\076\012\074" "\041\055\055\040\107\145\156\145\162\141\164\145\144\040\167\151" "\164\150\040\147\154\141\144\145\040\063\056\061\070\056\063\040" "\055\055\076\012\074\151\156\164\145\162\146\141\143\145\076\074" "\162\145\161\165\151\162\145\163\040\154\151\142\075\042\147\164" "\153\053\042\040\166\145\162\163\151\157\156\075\042\063\056\061" "\060\042\057\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\104\151\141\154\157\147\042\040\151\144" "\075\042\120\141\163\163\167\157\162\144\104\151\141\154\157\147" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\143\141\156\137\146\157\143\165\163\042\076\106\141\154" "\163\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\142\157\162" "\144\145\162\137\167\151\144\164\150\042\076\061\062\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\164\151\164\154\145\042\040\164" "\162\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163" "\042\076\120\141\163\163\167\157\162\144\040\122\145\161\165\151" "\162\145\144\074\057\160\162\157\160\145\162\164\171\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\162\145" "\163\151\172\141\142\154\145\042\076\106\141\154\163\145\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\164\171\160\145\137\150\151" "\156\164\042\076\144\151\141\154\157\147\074\057\160\162\157\160" "\145\162\164\171\076\074\143\150\151\154\144\040\151\156\164\145" "\162\156\141\154\055\143\150\151\154\144\075\042\166\142\157\170" "\042\076\074\157\142\152\145\143\164\040\143\154\141\163\163\075" "\042\107\164\153\102\157\170\042\040\151\144\075\042\144\151\141" "\154\157\147\055\166\142\157\170\061\042\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146" "\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\157\162\151\145\156\164\141\164\151\157" "\156\042\076\166\145\162\164\151\143\141\154\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\163\160\141\143\151\156\147\042\076\066" "\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151\154" "\144\040\151\156\164\145\162\156\141\154\055\143\150\151\154\144" "\075\042\141\143\164\151\157\156\137\141\162\145\141\042\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\102\165\164\164\157\156\102\157\170\042\040\151\144\075\042" "\144\151\141\154\157\147\055\141\143\164\151\157\156\137\141\162" "\145\141\061\042\076\074\160\162\157\160\145\162\164\171\040\156" "\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\154\141\171\157\165\164\137\163\164\171\154\145\042\076\145\156" "\144\074\057\160\162\157\160\145\162\164\171\076\074\143\150\151" "\154\144\076\074\160\154\141\143\145\150\157\154\144\145\162\057" "\076\074\057\143\150\151\154\144\076\074\143\150\151\154\144\076" "\074\160\154\141\143\145\150\157\154\144\145\162\057\076\074\057" "\143\150\151\154\144\076\074\057\157\142\152\145\143\164\076\074" "\160\141\143\153\151\156\147\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\145\170\160\141\156\144\042\076" "\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\146\151\154\154\042\076\106\141\154\163\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\160\157\163\151\164\151\157\156\042\076" "\060\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141" "\143\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143" "\150\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141" "\163\163\075\042\107\164\153\107\162\151\144\042\040\151\144\075" "\042\147\162\151\144\061\042\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\166\151\163\151\142\154\145\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\143\141\156\137\146\157\143\165\163\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\162\157\167\137\163" "\160\141\143\151\156\147\042\076\066\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\157\154\165\155\156\137\163\160\141\143\151" "\156\147\042\076\066\074\057\160\162\157\160\145\162\164\171\076" "\074\143\150\151\154\144\076\074\157\142\152\145\143\164\040\143" "\154\141\163\163\075\042\107\164\153\111\155\141\147\145\042\040" "\151\144\075\042\151\155\141\147\145\061\042\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\154\145\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\143\141\156\137\146\157\143\165\163\042\076\106" "\141\154\163\145\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\155" "\141\162\147\151\156\137\162\151\147\150\164\042\076\066\074\057" "\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162" "\164\171\040\156\141\155\145\075\042\151\143\157\156\137\156\141" "\155\145\042\076\156\145\164\167\157\162\153\055\163\145\162\166" "\145\162\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\151\143\157" "\156\137\163\151\172\145\042\076\066\074\057\160\162\157\160\145" "\162\164\171\076\074\057\157\142\152\145\143\164\076\074\160\141" "\143\153\151\156\147\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\154\145\146\164\137\141\164\164\141\143" "\150\042\076\060\074\057\160\162\157\160\145\162\164\171\076\074" "\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042\164" "\157\160\137\141\164\164\141\143\150\042\076\060\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\150\145\151\147\150\164\042\076\062" "\074\057\160\162\157\160\145\162\164\171\076\074\057\160\141\143" "\153\151\156\147\076\074\057\143\150\151\154\144\076\074\143\150" "\151\154\144\076\074\157\142\152\145\143\164\040\143\154\141\163" "\163\075\042\107\164\153\114\141\142\145\154\042\040\151\144\075" "\042\151\156\164\162\157\055\154\141\142\145\154\042\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\166\151" "\163\151\142\154\145\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\143\141\156\137\146\157\143\165\163\042" "\076\106\141\154\163\145\074\057\160\162\157\160\145\162\164\171" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\167\162\141\160\042\076\124\162\165\145\074\057\160\162\157" "\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171\040" "\156\141\155\145\075\042\167\151\144\164\150\137\143\150\141\162" "\163\042\076\063\060\074\057\160\162\157\160\145\162\164\171\076" "\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156" "\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\154\145\146\164\137\141\164\164\141\143\150\042\076\061" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141" "\164\164\141\143\150\042\076\060\074\057\160\162\157\160\145\162" "\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\167\151\144\164\150\042\076\062\074\057\160\162\157" "\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076" "\074\057\143\150\151\154\144\076\074\143\150\151\154\144\076\074" "\157\142\152\145\143\164\040\143\154\141\163\163\075\042\107\164" "\153\114\141\142\145\154\042\040\151\144\075\042\154\141\142\145" "\154\062\042\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\166\151\163\151\142\154\145\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\143\141\156\137" "\146\157\143\165\163\042\076\106\141\154\163\145\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\154\141\142\145\154\042\040\164\162" "\141\156\163\154\141\164\141\142\154\145\075\042\171\145\163\042" "\076\123\145\162\166\145\162\040\137\120\141\163\163\167\157\162" "\144\072\074\057\160\162\157\160\145\162\164\171\076\074\160\162" "\157\160\145\162\164\171\040\156\141\155\145\075\042\165\163\145" "\137\165\156\144\145\162\154\151\156\145\042\076\124\162\165\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\155\156\145\155\157" "\156\151\143\137\167\151\144\147\145\164\042\076\160\141\163\163" "\167\157\162\144\074\057\160\162\157\160\145\162\164\171\076\074" "\057\157\142\152\145\143\164\076\074\160\141\143\153\151\156\147" "\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075" "\042\154\145\146\164\137\141\164\164\141\143\150\042\076\061\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\164\157\160\137\141\164" "\164\141\143\150\042\076\061\074\057\160\162\157\160\145\162\164" "\171\076\074\057\160\141\143\153\151\156\147\076\074\057\143\150" "\151\154\144\076\074\143\150\151\154\144\076\074\157\142\152\145" "\143\164\040\143\154\141\163\163\075\042\107\164\153\105\156\164" "\162\171\042\040\151\144\075\042\160\141\163\163\167\157\162\144" "\042\076\074\160\162\157\160\145\162\164\171\040\156\141\155\145" "\075\042\166\151\163\151\142\154\145\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\143\141\156\137\146\157" "\143\165\163\042\076\124\162\165\145\074\057\160\162\157\160\145" "\162\164\171\076\074\160\162\157\160\145\162\164\171\040\156\141" "\155\145\075\042\150\145\170\160\141\156\144\042\076\124\162\165" "\145\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157" "\160\145\162\164\171\040\156\141\155\145\075\042\166\151\163\151" "\142\151\154\151\164\171\042\076\106\141\154\163\145\074\057\160" "\162\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164" "\171\040\156\141\155\145\075\042\141\143\164\151\166\141\164\145" "\163\137\144\145\146\141\165\154\164\042\076\124\162\165\145\074" "\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160\145" "\162\164\171\040\156\141\155\145\075\042\151\156\160\165\164\137" "\160\165\162\160\157\163\145\042\076\160\141\163\163\167\157\162" "\144\074\057\160\162\157\160\145\162\164\171\076\074\057\157\142" "\152\145\143\164\076\074\160\141\143\153\151\156\147\076\074\160" "\162\157\160\145\162\164\171\040\156\141\155\145\075\042\154\145" "\146\164\137\141\164\164\141\143\150\042\076\062\074\057\160\162" "\157\160\145\162\164\171\076\074\160\162\157\160\145\162\164\171" "\040\156\141\155\145\075\042\164\157\160\137\141\164\164\141\143" "\150\042\076\061\074\057\160\162\157\160\145\162\164\171\076\074" "\057\160\141\143\153\151\156\147\076\074\057\143\150\151\154\144" "\076\074\057\157\142\152\145\143\164\076\074\160\141\143\153\151" "\156\147\076\074\160\162\157\160\145\162\164\171\040\156\141\155" "\145\075\042\145\170\160\141\156\144\042\076\106\141\154\163\145" "\074\057\160\162\157\160\145\162\164\171\076\074\160\162\157\160" "\145\162\164\171\040\156\141\155\145\075\042\146\151\154\154\042" "\076\124\162\165\145\074\057\160\162\157\160\145\162\164\171\076" "\074\160\162\157\160\145\162\164\171\040\156\141\155\145\075\042" "\160\157\163\151\164\151\157\156\042\076\061\074\057\160\162\157" "\160\145\162\164\171\076\074\057\160\141\143\153\151\156\147\076" "\074\057\143\150\151\154\144\076\074\057\157\142\152\145\143\164" "\076\074\057\143\150\151\154\144\076\074\057\157\142\152\145\143" "\164\076\074\057\151\156\164\145\162\146\141\143\145\076\012\000" "\000\050\165\165\141\171\051" }; #endif /* !_MSC_VER */ static GStaticResource static_resource = { _gobby_resource_data.data, sizeof (_gobby_resource_data.data) - 1 /* nul terminator */, NULL, NULL, NULL }; extern GResource *_gobby_get_resource (void); GResource *_gobby_get_resource (void) { return g_static_resource_get_resource (&static_resource); } /* If G_HAS_CONSTRUCTORS is true then the compiler support *both* constructors and destructors, in a sane way, including e.g. on library unload. If not you're on your own. Some compilers need #pragma to handle this, which does not work with macros, so the way you need to use this is (for constructors): #ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA #pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(my_constructor) #endif G_DEFINE_CONSTRUCTOR(my_constructor) static void my_constructor(void) { ... } */ #ifndef __GTK_DOC_IGNORE__ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) #define G_HAS_CONSTRUCTORS 1 #define G_DEFINE_CONSTRUCTOR(_func) static void __attribute__((constructor)) _func (void); #define G_DEFINE_DESTRUCTOR(_func) static void __attribute__((destructor)) _func (void); #elif defined (_MSC_VER) && (_MSC_VER >= 1500) /* Visual studio 2008 and later has _Pragma */ #include #define G_HAS_CONSTRUCTORS 1 /* We do some weird things to avoid the constructors being optimized * away on VS2015 if WholeProgramOptimization is enabled. First we * make a reference to the array from the wrapper to make sure its * references. Then we use a pragma to make sure the wrapper function * symbol is always included at the link stage. Also, the symbols * need to be extern (but not dllexport), even though they are not * really used from another object file. */ /* We need to account for differences between the mangling of symbols * for Win32 (x86) and x64 programs, as symbols on Win32 are prefixed * with an underscore but symbols on x64 are not. */ #ifdef _WIN64 #define G_MSVC_SYMBOL_PREFIX "" #else #define G_MSVC_SYMBOL_PREFIX "_" #endif #define G_DEFINE_CONSTRUCTOR(_func) G_MSVC_CTOR (_func, G_MSVC_SYMBOL_PREFIX) #define G_DEFINE_DESTRUCTOR(_func) G_MSVC_DTOR (_func, G_MSVC_SYMBOL_PREFIX) #define G_MSVC_CTOR(_func,_sym_prefix) \ static void _func(void); \ extern int (* _array ## _func)(void); \ int _func ## _wrapper(void) { _func(); g_slist_find (NULL, _array ## _func); return 0; } \ __pragma(comment(linker,"/include:" _sym_prefix # _func "_wrapper")) \ __pragma(section(".CRT$XCU",read)) \ __declspec(allocate(".CRT$XCU")) int (* _array ## _func)(void) = _func ## _wrapper; #define G_MSVC_DTOR(_func,_sym_prefix) \ static void _func(void); \ extern int (* _array ## _func)(void); \ int _func ## _constructor(void) { atexit (_func); g_slist_find (NULL, _array ## _func); return 0; } \ __pragma(comment(linker,"/include:" _sym_prefix # _func "_constructor")) \ __pragma(section(".CRT$XCU",read)) \ __declspec(allocate(".CRT$XCU")) int (* _array ## _func)(void) = _func ## _constructor; #elif defined (_MSC_VER) #define G_HAS_CONSTRUCTORS 1 /* Pre Visual studio 2008 must use #pragma section */ #define G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA 1 #define G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA 1 #define G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(_func) \ section(".CRT$XCU",read) #define G_DEFINE_CONSTRUCTOR(_func) \ static void _func(void); \ static int _func ## _wrapper(void) { _func(); return 0; } \ __declspec(allocate(".CRT$XCU")) static int (*p)(void) = _func ## _wrapper; #define G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(_func) \ section(".CRT$XCU",read) #define G_DEFINE_DESTRUCTOR(_func) \ static void _func(void); \ static int _func ## _constructor(void) { atexit (_func); return 0; } \ __declspec(allocate(".CRT$XCU")) static int (* _array ## _func)(void) = _func ## _constructor; #elif defined(__SUNPRO_C) /* This is not tested, but i believe it should work, based on: * http://opensource.apple.com/source/OpenSSL098/OpenSSL098-35/src/fips/fips_premain.c */ #define G_HAS_CONSTRUCTORS 1 #define G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA 1 #define G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA 1 #define G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(_func) \ init(_func) #define G_DEFINE_CONSTRUCTOR(_func) \ static void _func(void); #define G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(_func) \ fini(_func) #define G_DEFINE_DESTRUCTOR(_func) \ static void _func(void); #else /* constructors not supported for this compiler */ #endif #endif /* __GTK_DOC_IGNORE__ */ #ifdef G_HAS_CONSTRUCTORS #ifdef G_DEFINE_CONSTRUCTOR_NEEDS_PRAGMA #pragma G_DEFINE_CONSTRUCTOR_PRAGMA_ARGS(resource_constructor) #endif G_DEFINE_CONSTRUCTOR(resource_constructor) #ifdef G_DEFINE_DESTRUCTOR_NEEDS_PRAGMA #pragma G_DEFINE_DESTRUCTOR_PRAGMA_ARGS(resource_destructor) #endif G_DEFINE_DESTRUCTOR(resource_destructor) #else #warning "Constructor not supported on this compiler, linking in resources will not work" #endif static void resource_constructor (void) { g_static_resource_init (&static_resource); } static void resource_destructor (void) { g_static_resource_fini (&static_resource); } gobby-0.6.0/code/main.cpp0000664000175000017500000000316514003367605012115 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "features.hpp" #include "application.hpp" int main(int argc, char* argv[]) { Glib::RefPtr application = Gobby::Application::create(); const int result = application->run(argc, argv); // In GTK+ 3.12, there is a reference leak present which makes us // end up with one too much reference on the application object. // This bug was fixed for GTK+ 3.14. // https://bugzilla.gnome.org/show_bug.cgi?id=730383 // // We need the application object to be finalized correctly, so that // its destructor runs and the preferences are serialized to disk. // Therefore, this hack makes sure that the application object ends up // with the expected reference count at this point. if(G_OBJECT(application->gobj())->ref_count > 1) application->unreference(); return result; } gobby-0.6.0/code/window.cpp0000664000175000017500000002233314003367605012476 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "features.hpp" #include "window.hpp" #include "commands/file-tasks/task-open.hpp" #include "commands/file-tasks/task-open-multiple.hpp" #include "util/i18n.hpp" #include Gobby::Window::Window(Config& config, GtkSourceLanguageManager* language_manager, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager): m_config(config), m_lang_manager(language_manager), m_file_chooser(file_chooser), m_preferences(preferences), m_cert_manager(cert_manager), m_connection_manager(cert_manager, preferences), m_text_folder(false, m_preferences, m_lang_manager), m_chat_folder(true, m_preferences, m_lang_manager), m_statusbar(m_text_folder, m_preferences), m_toolbar(m_preferences), m_browser(*this, m_statusbar, m_connection_manager), m_chat_frame(_("Chat"), "chat", m_preferences.appearance.show_chat), m_actions(*this, m_preferences), m_info_storage(INF_GTK_BROWSER_MODEL(m_browser.get_store())), m_host_storage(m_browser), m_folder_manager(m_browser, m_info_storage, m_text_folder, m_chat_folder), m_operations(m_info_storage, m_browser, m_folder_manager, m_statusbar), m_auth_commands(*this, m_browser, m_statusbar, m_connection_manager, m_preferences), m_self_hoster(m_connection_manager.get_io(), m_connection_manager.get_communication_manager(), m_connection_manager.get_publisher(), m_auth_commands.get_sasl_context(), m_statusbar, m_cert_manager, m_preferences), m_browser_commands(m_browser, m_folder_manager, m_statusbar, m_operations, m_preferences), m_browser_context_commands(*this, m_connection_manager.get_io(), m_browser, m_file_chooser, m_operations, m_cert_manager, m_preferences), m_autosave_commands(m_text_folder, m_operations, m_info_storage, m_preferences), m_subscription_commands(m_text_folder, m_chat_folder), m_synchronization_commands(m_text_folder, m_chat_folder), m_user_join_commands(m_folder_manager, m_preferences), m_text_folder_commands(m_text_folder), m_chat_folder_commands(m_chat_folder), m_file_commands(*this, m_actions, m_browser, m_folder_manager, m_statusbar, m_file_chooser, m_operations, m_info_storage, m_preferences), m_edit_commands(*this, m_actions, m_text_folder, m_statusbar), m_view_commands(*this, m_actions, m_lang_manager, m_text_folder, m_chat_frame, m_chat_folder, m_preferences), m_title_bar(*this, m_text_folder) { m_chat_frame.signal_show().connect( sigc::mem_fun(*this, &Window::on_chat_show), true); m_chat_frame.signal_hide().connect( sigc::mem_fun(*this, &Window::on_chat_hide), false); m_browser.add_browser(INF_BROWSER(m_self_hoster.get_directory()), _("This Computer")); m_toolbar.show(); m_browser.show(); m_text_folder.show(); m_chat_folder.show(); // Build UI Glib::RefPtr group = Gtk::AccelGroup::create(); // Add focus shortcuts; unfortunately gtkmm does not wrap that API GClosure* closure = g_cclosure_new( G_CALLBACK(on_switch_to_chat_static), this, NULL); gtk_accel_group_connect(group->gobj(), GDK_KEY_m, GDK_CONTROL_MASK, static_cast(0), closure); //g_closure_unref(closure); GClosure* closure2 = g_cclosure_new( G_CALLBACK(on_switch_to_text_static), this, NULL); gtk_accel_group_connect(group->gobj(), GDK_KEY_m, static_cast( GDK_CONTROL_MASK | GDK_SHIFT_MASK), static_cast(0), closure2); //g_closure_unref(closure2); add_accel_group(group); Gtk::Frame* frame_browser = Gtk::manage(new ClosableFrame( _("Document Browser"), "document-list", m_preferences.appearance.show_browser)); frame_browser->set_shadow_type(Gtk::SHADOW_IN); frame_browser->add(m_browser); // frame_browser manages visibility itself Gtk::Frame* frame_text = Gtk::manage(new Gtk::Frame); frame_text->set_shadow_type(Gtk::SHADOW_IN); frame_text->add(m_text_folder); frame_text->show(); m_chat_frame.set_shadow_type(Gtk::SHADOW_IN); m_chat_frame.add(m_chat_folder); // frame_chat manages visibility itself m_chat_paned.pack1(*frame_text, true, false); m_chat_paned.pack2(m_chat_frame, false, false); m_chat_paned.show(); m_paned.pack1(*frame_browser, false, false); m_paned.pack2(m_chat_paned, true, false); m_paned.show(); m_grid.set_orientation(Gtk::ORIENTATION_VERTICAL); m_grid.attach(m_toolbar, 0, 0, 1, 1); m_grid.attach(m_paned, 0, 1, 1, 1); m_grid.attach(m_statusbar, 0, 2, 1, 1); m_grid.show(); // Give initial focus to the browser, which will in turn give focus // to the "Direct Connection" expander, so people can quickly // get going. set_focus_child(m_browser); add(m_grid); set_default_size(800, 600); set_role("Gobby"); } void Gobby::Window::subscribe(const Glib::ustring& uri) { m_operations.subscribe_path(uri); } void Gobby::Window::open_files(const Operations::file_list& files) { if(files.size() == 1) { m_file_commands.set_task( new TaskOpen(m_file_commands, files[0])); } else if(files.size() > 1) { m_file_commands.set_task( new TaskOpenMultiple(m_file_commands, files)); } } // GtkWindow catches keybindings for the menu items _before_ passing them to // the focused widget. This is unfortunate and means that pressing ctrl+V // in an entry on the browser ends up pasting text in the TextView. // Here we override GtkWindow's handler to do the same things that it // does, but in the opposite order and then we chain up to the grand // parent handler, skipping Gtk::Window::key_press_event(). // This code is basically stolen from gedit, but ported to C++. bool Gobby::Window::on_key_press_event(GdkEventKey* event) { bool handled = gtk_window_propagate_key_event(GTK_WINDOW(gobj()), event); if(!handled) handled = gtk_window_activate_key(GTK_WINDOW(gobj()), event); // Skip Gtk::Window default handler here: if(!handled) handled = Gtk::Container::on_key_press_event(event); return handled; } void Gobby::Window::on_realize() { Gtk::Window::on_realize(); m_paned.set_position(m_paned.get_width() * 2 / 5); m_chat_paned.set_position(m_chat_paned.get_height() * 7 / 10); } void Gobby::Window::on_show() { Gtk::Window::on_show(); Glib::RefPtr settings( Gio::Settings::create("de.0x539.gobby.state.initial")); // Migrate from config.xml const Config::ParentEntry& entry = m_config.get_root()["initial"]; if(entry.has_value("run")) settings->set_boolean("run", entry.get_value("run")); if(!settings->get_boolean("run")) { m_initial_dlg = InitialDialog::create( *this, m_statusbar, m_preferences, m_cert_manager); m_initial_dlg->present(); m_initial_dlg->signal_hide().connect( sigc::mem_fun(*this, &Window::on_initial_dialog_hide)); } } void Gobby::Window::on_initial_dialog_hide() { m_initial_dlg.reset(NULL); // Don't show again Glib::RefPtr settings( Gio::Settings::create("de.0x539.gobby.state.initial")); settings->set_boolean("run", true); } bool Gobby::Window::on_switch_to_chat() { SessionView* view = m_chat_folder.get_current_document(); if(!view) return false; ChatSessionView* chat_view = dynamic_cast(view); if(!chat_view) return false; m_preferences.appearance.show_chat = true; InfGtkChat* chat = chat_view->get_chat(); GtkWidget* entry = inf_gtk_chat_get_entry(chat); gtk_widget_grab_focus(GTK_WIDGET(entry)); return true; } bool Gobby::Window::on_switch_to_text() { SessionView* view = m_text_folder.get_current_document(); if(!view) return false; TextSessionView* text_view = dynamic_cast(view); if(!text_view) return false; GtkSourceView* gtk_view = text_view->get_text_view(); gtk_widget_grab_focus(GTK_WIDGET(gtk_view)); // TODO: Turn chat back off if previously activated // via on_switch_to_chat()? return true; } void Gobby::Window::on_chat_hide() { Gtk::Widget* focus = get_focus(); // Actually this always returns NULL if m_chat_frame has focus, // because the focus is removed again. I think it's good enough // though. if(focus == NULL || focus == &m_chat_frame || focus->is_ancestor(m_chat_frame)) { on_switch_to_text(); } } void Gobby::Window::on_chat_show() { Gtk::Widget* focus = get_focus(); if(!focus) on_switch_to_chat(); } gobby-0.6.0/code/features.hpp.in0000664000175000017500000000464614005503643013422 00000000000000/* code/features.hpp.in. Generated from configure.ac by autoheader. */ /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* gettext domain */ #undef GETTEXT_PACKAGE /* Define the location where the catalogs will be installed */ #undef GOBBY_LOCALEDIR /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* define if the compiler supports basic C++11 syntax */ #undef HAVE_CXX11 /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION gobby-0.6.0/code/gobby-resources.h0000664000175000017500000000021014005476630013735 00000000000000#ifndef __RESOURCE__gobby_H__ #define __RESOURCE__gobby_H__ #include extern GResource *_gobby_get_resource (void); #endif gobby-0.6.0/code/Makefile.am0000664000175000017500000000277514005504371012522 00000000000000include code/util/Makefile.am include code/core/Makefile.am include code/operations/Makefile.am include code/dialogs/Makefile.am include code/commands/Makefile.am gobby_0_5_SOURCES += \ code/application.cpp \ code/main.cpp \ code/window.cpp \ code/gobby-resources.c noinst_HEADERS += \ code/application.hpp \ code/window.hpp \ code/gobby-resources.h appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 resources = \ code/resources/ui/browser-context-menu.ui \ code/resources/ui/connection-dialog.ui \ code/resources/ui/connection-info-dialog.ui \ code/resources/ui/document-location-dialog.ui \ code/resources/ui/entry-dialog.ui \ code/resources/ui/find-dialog.ui \ code/resources/ui/goto-dialog.ui \ code/resources/ui/initial-dialog.ui \ code/resources/ui/menu.ui \ code/resources/ui/open-location-dialog.ui \ code/resources/ui/password-dialog.ui \ code/resources/ui/preferences-dialog.ui \ code/resources/ui/toolbar.ui code/gobby-resources.h: code/resources/gobby.gresources.xml glib-compile-resources $< \ --target=$@ --sourcedir=$(top_srcdir)/code/resources \ --c-name _gobby --generate-header code/gobby-resources.c: code/resources/gobby.gresources.xml $(resources) glib-compile-resources $< \ --target=$@ --sourcedir=$(top_srcdir)/code/resources \ --c-name _gobby --generate-source EXTRA_DIST += $(resources) code/resources/gobby.gresources.xml BUILT_SOURCES += code/gobby-resources.h code/gobby-resources.c CLEANFILES += code/gobby-resources.h code/gobby-resources.c gobby-0.6.0/code/util/0000775000175000017500000000000014005504730011507 500000000000000gobby-0.6.0/code/util/i18n.cpp0000664000175000017500000000230314003367605012716 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "features.hpp" #include "util/i18n.hpp" #include const char* Gobby::_(const char* msgid) { return dgettext(GETTEXT_PACKAGE, msgid); } const char* Gobby::ngettext(const char* msgid, const char* msgid_plural, unsigned long int n) { return dngettext(GETTEXT_PACKAGE, msgid, msgid_plural, n); } gobby-0.6.0/code/util/asyncoperation.hpp0000664000175000017500000000306714003367605015212 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_ASYNC_OPERATION_HPP_ #define _GOBBY_ASYNC_OPERATION_HPP_ #include #include namespace Gobby { class AsyncOperation { public: class Handle { friend class AsyncOperation; public: Handle(AsyncOperation& operation); ~Handle(); void cancel(); private: AsyncOperation* m_operation; }; AsyncOperation(); virtual ~AsyncOperation(); static std::unique_ptr start(std::unique_ptr operation); protected: virtual void run() = 0; virtual void finish() = 0; const Handle* get_handle() const { return m_handle; } private: void thread_run(); bool done(); Glib::Thread* m_thread; Handle* m_handle; bool m_finished; }; } #endif // _GOBBY_ASYNC_OPERATION_HPP_ gobby-0.6.0/code/util/serialize.hpp0000664000175000017500000001635614003367605014150 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SERIALIZE_HPP_ #define _GOBBY_SERIALIZE_HPP_ #include #include #include namespace Gobby { /** Generic stuff to de/serialize data types to/from strings. */ namespace serialize { /** Error that is thrown if conversion from a string fails. For example, if * "t3" should be converted to int. */ class conversion_error: public std::runtime_error { public: conversion_error(const std::string& message); }; /** @brief Several built-in type names. */ template struct type_name {}; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; /** Abstract base context type to convert something to a string. */ template class context_base_to { public: virtual ~context_base_to() {} /** @brief Converts the given data type to a string. */ virtual std::string to_string(const data_type& from) const = 0; }; /** Abstract base context type to convert a string to another type. */ template class context_base_from { public: virtual ~context_base_from() {} /** @brief Converts a string to a data type. Might throw * serialize::conversion_error. */ virtual data_type from_string(const std::string& from) const = 0; }; /** Default context to convert something literally to a string. */ template class default_context_to: public context_base_to { public: /** @brief Converts the given data type to a string. */ virtual std::string to_string(const data_type& from) const; protected: /** Method derived classes may overload to alter the conversion. */ virtual void on_stream_setup(std::stringstream& stream) const; }; /** Default context to convert a string literally to a type. */ template class default_context_from: public context_base_from { public: /** @brief Converts the given string to the type specified * as template parameter. * * May throw serialize::conversion_error(). */ virtual data_type from_string(const std::string& from) const; protected: /** Method derived classes may overload to alter the conversion. */ virtual void on_stream_setup(std::stringstream& stream) const; }; #if 0 /** Context that uses hexadecimal representation for numerical types. */ template class hex_context_to: public default_context_to { protected: virtual void on_stream_setup(std::stringstream& stream) const; }; /** Context that uses hexadecimal representation for numerical types. */ template class hex_context_from: public default_context_from { public: virtual void on_stream_setup(std::stringstream& stream) const; }; #endif template<> class default_context_to: public context_base_to { public: typedef std::string data_type; virtual std::string to_string(const data_type& from) const; }; template<> class default_context_from: public context_base_from { public: typedef std::string data_type; virtual data_type from_string(const std::string& from) const; }; template<> class default_context_to: public context_base_to { public: typedef const char* data_type; virtual std::string to_string(const data_type& from) const; }; template class default_context_to: public context_base_to { public: typedef char data_type[N]; virtual std::string to_string(const data_type& from) const; }; /** A serialized object. */ class data { public: /** Uses the given string as serialized data without converting it. */ data(const std::string& serialized); /** Serialises the given object with the given context. A default * context is used if no one is given. */ template data(const type& data, const context_base_to& ctx = default_context_to()); /** Returns the serialized data. */ const std::string& serialized() const; /** Deserializes the object with the given context. A default context * is used of no one is given. */ template type as(const context_base_from& ctx = default_context_from()) const; protected: std::string m_serialized; }; template std::string default_context_to:: to_string(const data_type& from) const { std::stringstream stream; on_stream_setup(stream); stream << from; return stream.str(); } template data_type default_context_from:: from_string(const std::string& from) const { std::stringstream stream(from); on_stream_setup(stream); data_type data; stream >> data; if(stream.bad() ) { throw conversion_error( "Could not convert \"" + from + "\" to " + type_name::name ); } return data; } template void default_context_to:: on_stream_setup(std::stringstream& stream) const { } template void default_context_from:: on_stream_setup(std::stringstream& stream) const { } #if 0 template void hex_context_to:: on_stream_setup(std::stringstream& stream) const { stream << std::hex; } template void hex_context_from:: on_stream_setup(std::stringstream& stream) const { stream >> std::hex; } #endif template data::data(const data_type& data, const context_base_to& ctx): m_serialized(ctx.to_string(data) ) { } template data_type data::as(const context_base_from& ctx) const { return ctx.from_string(m_serialized); } template std::string default_context_to:: to_string(const data_type& from) const { return from; } } // namespace serialize } // namespace Gobby #endif // _GOBBY_SERIALIZE_HPP_ gobby-0.6.0/code/util/i18n.hpp0000664000175000017500000000236214003367605012730 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_I18N_HPP_ #define _GOBBY_I18N_HPP_ #ifndef N_ # define N_(id) (id) #endif namespace Gobby { /** Translates a message from the gobby catalog. */ const char* _(const char* msgid); /** Translate pluralized message from the gobby catalog. */ const char* ngettext(const char* msgid, const char* msgid_plural, unsigned long int n); } #endif // _GOBBY_I18N_HPP_ gobby-0.6.0/code/util/config.cpp0000664000175000017500000001446014003367605013413 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/config.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include #include #include #include #include #include namespace { template typename Map::mapped_type ptrmap_find(const Map& map, const typename Map::key_type& key) { typename Map::const_iterator iter = map.find(key); if(iter == map.end() ) return NULL; return iter->second; } } Gobby::Config::Entry::Entry(const Glib::ustring& name): m_name(name) { } const Glib::ustring& Gobby::Config::Entry::get_name() const { return m_name; } Gobby::Config::ParentEntry::ParentEntry(const Glib::ustring& name): Entry(name) { } Gobby::Config::ParentEntry::ParentEntry(const xmlpp::Element& elem): Entry(elem.get_name() ) { xmlpp::Node::NodeList list = elem.get_children(); for(xmlpp::Node::NodeList::iterator iter = list.begin(); iter != list.end(); ++ iter) { xmlpp::Element* child = dynamic_cast(*iter); if(child == NULL) continue; if(child->get_child_text() && !child->get_child_text()->is_white_space()) { ValueEntry* entry = new TypedValueEntry( *child ); m_map[child->get_name()] = entry; } else { m_map[child->get_name()] = new ParentEntry(*child); } } } Gobby::Config::ParentEntry::~ParentEntry() { for(map_type::iterator iter = m_map.begin(); iter != m_map.end(); ++ iter) { delete iter->second; } } void Gobby::Config::ParentEntry::save(xmlpp::Element& elem) const { for(map_type::const_iterator iter = m_map.begin(); iter != m_map.end(); ++ iter) { Entry* entry = iter->second; xmlpp::Element* child = elem.add_child(entry->get_name() ); entry->save(*child); } } Gobby::Config::Entry* Gobby::Config::ParentEntry:: get_child(const Glib::ustring& name) { return ptrmap_find(m_map, name); } const Gobby::Config::Entry* Gobby::Config::ParentEntry:: get_child(const Glib::ustring& name) const { return ptrmap_find(m_map, name); } Gobby::Config::ParentEntry* Gobby::Config::ParentEntry:: get_parent_child(const Glib::ustring& name) { return dynamic_cast(get_child(name) ); } const Gobby::Config::ParentEntry* Gobby::Config::ParentEntry:: get_parent_child(const Glib::ustring& name) const { return dynamic_cast(get_child(name) ); } Gobby::Config::ValueEntry* Gobby::Config::ParentEntry:: get_value_child(const Glib::ustring& name) { return dynamic_cast(get_child(name) ); } const Gobby::Config::ValueEntry* Gobby::Config::ParentEntry:: get_value_child(const Glib::ustring& name) const { return dynamic_cast(get_child(name) ); } bool Gobby::Config::ParentEntry::has_value(const Glib::ustring& name) const { return get_value_child(name) != NULL; } Gobby::Config::ParentEntry& Gobby::Config::ParentEntry:: operator[](const Glib::ustring& name) { ParentEntry* entry = get_parent_child(name); if(entry != NULL) return *entry; return set_parent(name); } Gobby::Config::ParentEntry& Gobby::Config::ParentEntry:: set_parent(const Glib::ustring& name) { Entry* entry = get_child(name); if(entry != NULL) delete entry; ParentEntry* child = new ParentEntry(name); m_map[name] = child; return *child; } Gobby::Config::ParentEntry::iterator Gobby::Config::ParentEntry::begin() { return iterator(m_map.begin() ); } Gobby::Config::ParentEntry::const_iterator Gobby::Config::ParentEntry:: begin() const { return const_iterator(m_map.begin() ); } Gobby::Config::ParentEntry::iterator Gobby::Config::ParentEntry::end() { return iterator(m_map.end() ); } Gobby::Config::ParentEntry::const_iterator Gobby::Config::ParentEntry:: end() const { return const_iterator(m_map.end() ); } Gobby::Config::Config(const Glib::ustring& file): m_filename(file) { xmlpp::DomParser parser; if(!Glib::file_test(file, Glib::FILE_TEST_IS_REGULAR)) { m_root.reset(new ParentEntry("gobby-config") ); return; } try { parser.parse_file(file); } catch(xmlpp::exception& e) { // Empty config m_root.reset(new ParentEntry("gobby-config") ); return; } xmlpp::Document* document = parser.get_document(); if(document == NULL) { m_root.reset(new ParentEntry("gobby-config") ); return; } xmlpp::Element* root = document->get_root_node(); // Config is present, but contains no root node if(root == NULL) { m_root.reset(new ParentEntry("gobby-config") ); return; } m_root.reset(new ParentEntry(*root) ); } Gobby::Config::~Config() { xmlpp::Document document; xmlpp::Element* root = document.create_root_node("gobby-config"); m_root->save(*root); try { Glib::ustring dirname = Glib::path_get_dirname(m_filename); create_directory_with_parents(dirname, 0700); document.write_to_file_formatted(m_filename, "UTF-8"); } catch(Glib::Exception& e) { g_warning("Could not write config file: %s", e.what().c_str() ); } catch(std::exception& e) { g_warning("Could not write config file: %s", e.what() ); } } Gobby::Config::ParentEntry& Gobby::Config::get_root() { return *m_root; } const Gobby::Config::ParentEntry& Gobby::Config::get_root() const { return *m_root; } std::string Gobby::serialize::default_context_to:: to_string(const data_type& from) const { return from; } Gobby::serialize::default_context_from::data_type Gobby::serialize::default_context_from:: from_string(const std::string& from) const { return from; } gobby-0.6.0/code/util/file.cpp0000664000175000017500000000527314003367605013067 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/file.hpp" #include "util/i18n.hpp" #include #include #include #include // For mkdir / CreateDirectory #ifdef WIN32 #include #else #include #include #include #endif namespace { void create_directory(const char* path, int mode) { #ifdef WIN32 // TODO: Use widechar API? if(CreateDirectoryA(path, NULL) == FALSE) { LPVOID msgbuf; DWORD err = GetLastError(); // TODO: Use widechar API? FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), reinterpret_cast(&msgbuf), 0, NULL ); std::string error_message = static_cast(msgbuf); LocalFree(msgbuf); // TODO: Convert to UTF-8? throw std::runtime_error( Glib::ustring::compose( Gobby::_("Could not create directory " "\"%1\": %2"), std::string(path), error_message)); } #else if(g_mkdir(path, mode) == -1) { throw std::runtime_error( Glib::ustring::compose( Gobby::_("Could not create directory " "\"%1\": %2"), std::string(path), std::strerror(errno))); } #endif } } namespace Gobby { void create_directory_with_parents(const std::string& path, int mode) { // Directory exists, nothing to do if(Glib::file_test(path, Glib::FILE_TEST_IS_DIR) ) return; // Find path to the directory to create std::string path_to = Glib::path_get_dirname(path); // Create this path, if it doesn't exists create_directory_with_parents(path_to, mode); // Create new directory create_directory(path.c_str(), mode); } std::string config_filename(const std::string& filename) { return Glib::build_filename( Glib::build_filename( Glib::get_user_config_dir(), "gobby"), filename); } } gobby-0.6.0/code/util/historyentry.cpp0000664000175000017500000002240214003367605014724 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/historyentry.hpp" #include #include namespace { Glib::ustring strip(const Glib::ustring& string) { gchar* dup = g_strdup(string.c_str()); dup = g_strchug(dup); Glib::ustring retval(dup); g_free(dup); return retval; } bool strequal(const Glib::ustring& string1, const Glib::ustring& string2) { gchar* casefold1 = g_utf8_casefold(string1.c_str(), -1); gchar* casefold2 = g_utf8_casefold(string2.c_str(), -1); int collate = g_utf8_collate(casefold1, casefold2); g_free(casefold1); g_free(casefold2); return collate == 0; } } // Load history asynchronously, to save startup time class Gobby::History::Loader { public: Loader(History& history); private: void close(); void add(const std::string& str); void process(unsigned int size); void on_read(const Glib::RefPtr& result); void on_stream_read(const Glib::RefPtr& result); History& m_history; Glib::RefPtr m_file; Glib::RefPtr m_stream; std::string m_line; static const unsigned int BUFFER_SIZE = 1024; char m_buffer[BUFFER_SIZE]; }; Gobby::History::Loader::Loader(History& history): m_history(history) { m_file = Gio::File::create_for_path(m_history.m_history_file); m_file->read_async(sigc::mem_fun(*this, &Loader::on_read)); } void Gobby::History::Loader::close() { m_history.m_loader.reset(NULL); } void Gobby::History::Loader::add(const std::string& str) { if(!str.empty()) { Gtk::TreeIter iter = m_history.m_history->append(); (*iter)[m_history.m_history_columns.text] = str; } } void Gobby::History::Loader::process(unsigned int size) { const char* pos = m_buffer; const char* end = m_buffer + size; const char* next; const Gtk::TreeNodeChildren& children = m_history.m_history->children(); while((next = std::find(pos, end, '\n')) != end) { if(!m_line.empty()) { add(m_line + std::string(pos, next - pos)); m_line.clear(); } else { add(std::string(pos, next - pos)); } if(children.size() == m_history.m_length) break; pos = next + 1; } if(children.size() == m_history.m_length) { close(); } else { m_line.append(pos, end - pos); m_stream->read_async( m_buffer, BUFFER_SIZE, sigc::mem_fun(*this, &Loader::on_stream_read)); } } void Gobby::History::Loader::on_read( const Glib::RefPtr& result) { try { m_stream = m_file->read_finish(result); m_stream->read_async( m_buffer, BUFFER_SIZE, sigc::mem_fun(*this, &Loader::on_stream_read)); } catch(const Glib::Exception& ex) { close(); } } void Gobby::History::Loader::on_stream_read( const Glib::RefPtr& result) { gssize size; try { size = m_stream->read_finish(result); // This should have caused an exception g_assert(size >= 0); if(size == 0) { // EOF if(!m_line.empty()) add(m_line); close(); } else { process(size); } } catch(const Glib::Exception& ex) { close(); } } Gobby::History::History(const std::string& history_file, unsigned int length): m_length(length), m_history(Gtk::ListStore::create(m_history_columns)), m_current(m_history->children().end()), m_history_file(history_file), m_loader(new Loader(*this)) { } Gobby::History::History(unsigned int length): m_length(length), m_history(Gtk::ListStore::create(m_history_columns)), m_current(m_history->children().end()) { } Gobby::History::~History() { try { if(!m_history_file.empty()) { Glib::RefPtr file = Gio::File::create_for_path(m_history_file); Glib::RefPtr stream = file->replace(); const Gtk::TreeNodeChildren& children = m_history->children(); for(Gtk::TreeIter iter = children.begin(); iter != children.end(); ++ iter) { const Glib::ustring& str = (*iter)[m_history_columns.text]; gsize bytes_written; stream->write_all(str, bytes_written); g_assert(bytes_written == str.length()); stream->write_all("\n", bytes_written); g_assert(bytes_written == 1); } } } catch(const Glib::Exception& error) { // Ignore } } Glib::RefPtr Gobby::History::get_store() { return m_history; } const Gobby::History::Columns& Gobby::History::get_columns() const { return m_history_columns; } bool Gobby::History::up(const Glib::ustring& current, Glib::ustring& entry) { if(m_current == m_history->children().end()) { m_current = m_history->children().begin(); // No entries in list: if(m_current == m_history->children().end()) return false; if(!current.empty()) commit_noscroll(current); } else { ++ m_current; if(m_current == m_history->children().end()) { -- m_current; return false; } } entry = (*m_current)[m_history_columns.text]; return true; } bool Gobby::History::down(const Glib::ustring& current, Glib::ustring& entry) { if(m_current == m_history->children().end()) { if(!current.empty()) { entry.clear(); commit_noscroll(current); return true; } else { return false; } } if(m_current == m_history->children().begin()) { m_current = m_history->children().end(); entry.clear(); return true; } -- m_current; entry = (*m_current)[m_history_columns.text]; return true; } void Gobby::History::commit(const Glib::ustring& str) { commit_noscroll(str); m_current = m_history->children().end(); } void Gobby::History::commit_noscroll(const Glib::ustring& str) { const Glib::ustring stripped = strip(str); // Check if the entry already exists in the list, and if yes, // remove it. for(Gtk::TreeIter iter = m_history->children().begin(); iter != m_history->children().end(); ++iter) { const Glib::ustring& entry = (*iter)[m_history_columns.text]; if(strequal(entry, stripped)) { m_history->erase(iter); break; } } Gtk::TreeIter iter = m_history->prepend(); (*iter)[m_history_columns.text] = stripped; while(m_history->children().size() > m_length) { iter = m_history->children().end(); -- iter; m_history->erase(iter); } } Gobby::HistoryEntry::HistoryEntry(const std::string& history_file, unsigned int length): m_history(history_file, length) { } Gobby::HistoryEntry::HistoryEntry(unsigned int length): m_history(length) { } void Gobby::HistoryEntry::commit() { m_history.commit(get_text()); } bool Gobby::HistoryEntry::on_key_press_event(GdkEventKey* event) { Glib::ustring entry; if(event->keyval == GDK_KEY_Up) { if(m_history.up(get_text(), entry)) set_text(entry); return true; } if(event->keyval == GDK_KEY_Down) { if(m_history.down(get_text(), entry)) set_text(entry); return true; } return Gtk::Entry::on_key_press_event(event); } Gobby::HistoryComboBox::HistoryComboBox( const Glib::RefPtr& builder, const char* id, const std::string& history_file, unsigned int length) : Gtk::ComboBox(GTK_COMBO_BOX( gtk_builder_get_object(builder->gobj(), id))), m_history(history_file, length) { set_model(m_history.get_store()); set_entry_text_column(m_history.get_columns().text); get_entry()->signal_key_press_event().connect( sigc::mem_fun( *this, &HistoryComboBox::on_entry_key_press_event), false); } Gobby::HistoryComboBox::HistoryComboBox(const std::string& history_file, unsigned int length): Gtk::ComboBox(true), m_history(history_file, length) { set_model(m_history.get_store()); set_entry_text_column(m_history.get_columns().text); get_entry()->signal_key_press_event().connect( sigc::mem_fun( *this, &HistoryComboBox::on_entry_key_press_event), false); } Gobby::HistoryComboBox::HistoryComboBox(unsigned int length): Gtk::ComboBox(true), m_history(length) { set_model(m_history.get_store()); set_entry_text_column(m_history.get_columns().text); get_entry()->signal_key_press_event().connect( sigc::mem_fun( *this, &HistoryComboBox::on_entry_key_press_event), false); } void Gobby::HistoryComboBox::commit() { m_history.commit(get_entry()->get_text()); } Glib::RefPtr Gobby::HistoryComboBox::get_accessible() { return get_entry()->get_accessible(); } bool Gobby::HistoryComboBox::on_entry_key_press_event(GdkEventKey* event) { Glib::ustring entry; if(event->keyval == GDK_KEY_Up) { if(m_history.up(get_entry()->get_text(), entry)) get_entry()->set_text(entry); return true; } if(event->keyval == GDK_KEY_Down) { if(m_history.down(get_entry()->get_text(), entry)) get_entry()->set_text(entry); return true; } return false; } gobby-0.6.0/code/util/defaultaccumulator.hpp0000664000175000017500000000266214003367605016040 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_DEFAULT_ACCUMULATOR_HPP_ #define _GOBBY_DEFAULT_ACCUMULATOR_HPP_ namespace Gobby { /** Accumulator for signals with return type that defaults to a value if no * signal handler is connected. */ template class default_accumulator { public: typedef return_type result_type; template result_type operator()(iterator begin, iterator end) const { return_type result = default_return; for(; begin != end; ++ begin) result = *begin; return result; } }; } // namespace Gobby #endif // _GOBBY_DEFAULT_ACCUMULATOR_HPP_ gobby-0.6.0/code/util/config.hpp0000664000175000017500000002730114003367605013416 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CONFIG_HPP_ #define _GOBBY_CONFIG_HPP_ #include "serialize.hpp" #include #include #include #include #include // TODO: Use registry on windows, gconf with gnome #include #include namespace Gobby { namespace serialize { template<> class default_context_to: public context_base_to { public: typedef Glib::ustring data_type; virtual std::string to_string(const data_type& from) const; }; template<> class default_context_from: public context_base_from { public: typedef Glib::ustring data_type; virtual data_type from_string(const std::string& from) const; }; } // namespace serialize class Config { public: /** @brief Abstract base class for configuration file entries. */ class Entry { public: Entry(const Glib::ustring& name); virtual ~Entry() {} /** @brief Saves this entry into the given element. */ virtual void save(xmlpp::Element& elem) const = 0; /** @brief Returns the name of this entry. */ const Glib::ustring& get_name() const; protected: Glib::ustring m_name; }; /** @brief Entry that contains a value. */ class ValueEntry: public Entry { public: /** @brief Stores an object of the given type into this * entry. */ template ValueEntry( const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx = serialize::default_context_to() ); /** @brief Returns the value of this entry and tries to * convert it to the requested type. */ template DataType get( const serialize::context_base_from& ctx = serialize::default_context_from() ) const; protected: serialize::data m_data; }; /** Value entry with type information. Useful for future storage * backends like gconf or windows registry. */ template class TypedValueEntry: public ValueEntry { public: /** @brief Creates a new typed value entry that is converted * to a string using the given context. */ TypedValueEntry( const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx = serialize::default_context_to() ); /** @brief Reads a value entry from a xml element. */ TypedValueEntry(const xmlpp::Element& elem); /** @brief Stores this entry into the given element. */ virtual void save(xmlpp::Element& elem) const; }; /** @brief Entry containing child entries. */ class ParentEntry: public Entry { protected: typedef std::map map_type; public: template class iterator_base { public: typedef BaseIterator base_iterator; iterator_base(const base_iterator& iter); iterator_base& operator++(); iterator_base operator++(int); bool operator==(const iterator_base& other) const; bool operator!=(const iterator_base& other) const; Entry& operator*() const; Entry* operator->() const; protected: base_iterator m_iter; }; typedef iterator_base iterator; typedef iterator_base const_iterator; /** @brief Creates a new ParentEntry of the given name with * no children. */ ParentEntry(const Glib::ustring& name); /** @brief a new ParentEntry from the given xml element. */ ParentEntry(const xmlpp::Element& elem); virtual ~ParentEntry(); /** @brief Stores this ParentEntry into the given xml element. */ virtual void save(xmlpp::Element& elem) const; /** @brief Returns a child entry with the given name. * * Returns NULL if there is no such child. */ Entry* get_child(const Glib::ustring& name); /** @brief Returns a child entry with the given name. * * Returns NULL if there is no such child. */ const Entry* get_child(const Glib::ustring& name) const; /** @brief Returns a child that is another parent entry * and has the given name. * * Returns NULL if there is no such child. */ ParentEntry* get_parent_child(const Glib::ustring& name); /** @brief Returns a child that is another parent entry * and has the given name. * * Returns NULL if there is no such child. */ const ParentEntry* get_parent_child(const Glib::ustring& name) const; /** @brief Returns a child that is a value entry and has * the given name. * * Returns NULL if there is no such child. */ ValueEntry* get_value_child(const Glib::ustring& name); /** @brief Returns a child that is a value entry and has * the given name. * * Returns NULL if there is no such child. */ const ValueEntry* get_value_child(const Glib::ustring& name) const; /** @brief: Returns whether there is a child ValueEntry with * the given name. */ bool has_value(const Glib::ustring& name) const; /** @brief Returns the value from the child with the given * name. * * If there is no such child (or it is not a ValueEntry), the * given default value is returned. */ template DataType get_value( const Glib::ustring& name, const DataType& default_value = DataType(), const serialize::context_base_from& ctx = serialize::default_context_from() ) const; /** @brief Returns the value from the child with the given * name. * * If there is no such child (or it is not a ValueEntry), a * new child will be created (replacing a potential old one) * and assigned the given default value. */ template DataType supply_value( const Glib::ustring& name, const DataType& default_value = DataType(), const serialize::context_base_from& ctx_from = serialize::default_context_from(), const serialize::context_base_to& ctx_to = serialize::default_context_to() ); /** @brief Creates a new child ValueEntry with the given name * and value. * * If there is already a child with this name, it will be * removed. */ template void set_value( const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx = serialize::default_context_to() ); /** @brief Returns the parent entry at name. * * If there is no parent node, a new one will be created * that overwrites the current entry (if any). */ ParentEntry& operator[](const Glib::ustring& name); /** @brief Creates a new ParentEntry with the given name. * * If there is already a child with this name, it will be * removed. */ ParentEntry& set_parent(const Glib::ustring& name); /** @brief Returns an iterator to the beginning of the * child entry sequence. */ iterator begin(); /** @brief Returns an iterator to the beginning of the * child entry sequence. */ const_iterator begin() const; /** @brief Returns an iterator to the end of the child * entry sequence. */ iterator end(); /** @brief Returns an iterator to the end of the child * entry sequence. */ const_iterator end() const; protected: map_type m_map; }; Config(const Glib::ustring& file); ~Config(); ParentEntry& get_root(); const ParentEntry& get_root() const; protected: Glib::ustring m_filename; std::unique_ptr m_root; }; template Config::ValueEntry:: ValueEntry(const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx): Entry(name), m_data(value, ctx) { } template DataType Config::ValueEntry:: get(const serialize::context_base_from& from) const { return m_data.Gobby::serialize::data::as(from); } template Config::TypedValueEntry:: TypedValueEntry(const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx): ValueEntry(name, value, ctx) { } template Config::TypedValueEntry::TypedValueEntry(const xmlpp::Element& elem): ValueEntry(elem.get_name(), elem.get_child_text()->get_content() ) { } template void Config::TypedValueEntry::save(xmlpp::Element& elem) const { elem.set_child_text(m_data.serialized() ); } template Config::ParentEntry::iterator_base:: iterator_base(const base_iterator& iter): m_iter(iter) { } template Config::ParentEntry::iterator_base& Config::ParentEntry::iterator_base::operator++() { ++ m_iter; return *this; } template Config::ParentEntry::iterator_base Config::ParentEntry::iterator_base::operator++(int) { iterator_base temp(*this); ++ m_iter; return temp; } template bool Config::ParentEntry::iterator_base:: operator==(const iterator_base& other) const { return m_iter == other.m_iter; } template bool Config::ParentEntry::iterator_base:: operator!=(const iterator_base& other) const { return m_iter != other.m_iter; } template Entry& Config::ParentEntry::iterator_base:: operator*() const { return *m_iter->second; } template Entry* Config::ParentEntry::iterator_base:: operator->() const { return m_iter->second; } template DataType Config::ParentEntry:: get_value(const Glib::ustring& name, const DataType& default_value, const serialize::context_base_from& ctx) const { const ValueEntry* entry = get_value_child(name); if(entry == NULL) return default_value; return entry->ValueEntry::get(ctx); } template DataType Config::ParentEntry:: supply_value(const Glib::ustring& name, const DataType& default_value, const serialize::context_base_from& ctx_from, const serialize::context_base_to& ctx_to) { ValueEntry* entry = get_value_child(name); if(entry != NULL) return entry->get(ctx_from); set_value(name, default_value, ctx_to); return default_value; } template void Config::ParentEntry:: set_value(const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx) { Entry* entry = get_child(name); if(entry != NULL) delete entry; m_map[name] = new TypedValueEntry(name, value, ctx); } } // namespace Gobby #endif // _GOBBY_CONFIG_HPP_ gobby-0.6.0/code/util/Makefile.am0000664000175000017500000000075214003367605013475 00000000000000gobby_0_5_SOURCES += \ code/util/asyncoperation.cpp \ code/util/closebutton.cpp \ code/util/config.cpp \ code/util/file.cpp \ code/util/historyentry.cpp \ code/util/i18n.cpp \ code/util/serialize.cpp \ code/util/uri.cpp noinst_HEADERS += \ code/util/asyncoperation.hpp \ code/util/closebutton.hpp \ code/util/config.hpp \ code/util/defaultaccumulator.hpp \ code/util/file.hpp \ code/util/historyentry.hpp \ code/util/i18n.hpp \ code/util/serialize.hpp \ code/util/uri.hpp gobby-0.6.0/code/util/historyentry.hpp0000664000175000017500000000521014003367605014727 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_HISTORYENTRY_HPP_ #define _GOBBY_HISTORYENTRY_HPP_ #include #include #include #include #include #include namespace Gobby { class History { public: class Columns: public Gtk::TreeModelColumnRecord { public: Columns() { add(text); } Gtk::TreeModelColumn text; }; History(const std::string& history_file, unsigned int length); History(unsigned int length); ~History(); Glib::RefPtr get_store(); const Columns& get_columns() const; bool up(const Glib::ustring& current, Glib::ustring& entry); bool down(const Glib::ustring& current, Glib::ustring& entry); void commit(const Glib::ustring& str); protected: void commit_noscroll(const Glib::ustring& str); const unsigned int m_length; const Columns m_history_columns; Glib::RefPtr m_history; Gtk::TreeIter m_current; std::string m_history_file; private: class Loader; std::unique_ptr m_loader; }; class HistoryEntry: public Gtk::Entry { public: HistoryEntry(const std::string& history_file, unsigned int length); HistoryEntry(unsigned int length); void commit(); protected: virtual bool on_key_press_event(GdkEventKey* event); History m_history; }; class HistoryComboBox: public Gtk::ComboBox { public: HistoryComboBox(const Glib::RefPtr& builder, const char* id, const std::string& history_file, unsigned int length); HistoryComboBox(const std::string& history_file, unsigned int length); HistoryComboBox(unsigned int length); void commit(); Glib::RefPtr get_accessible(); protected: bool on_entry_key_press_event(GdkEventKey* event); History m_history; }; } // namespace Gobby #endif // _GOBBY_HISTORYENTRY_HPP_ gobby-0.6.0/code/util/serialize.cpp0000664000175000017500000000460714003367605014137 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/serialize.hpp" const char* Gobby::serialize::type_name::name = "int"; const char* Gobby::serialize::type_name::name = "long"; const char* Gobby::serialize::type_name::name = "short"; const char* Gobby::serialize::type_name::name = "char"; const char* Gobby::serialize::type_name::name = "unsigned int"; const char* Gobby::serialize::type_name::name = "unsigned long"; const char* Gobby::serialize::type_name::name = "unsigned short"; const char* Gobby::serialize::type_name::name = "unsigned char"; const char* Gobby::serialize::type_name::name = "float"; const char* Gobby::serialize::type_name::name = "double"; const char* Gobby::serialize::type_name::name = "long double"; const char* Gobby::serialize::type_name::name = "bool"; Gobby::serialize::conversion_error:: conversion_error(const std::string& message): std::runtime_error(message) { } Gobby::serialize::data::data(const std::string& serialized): m_serialized(serialized) { } const std::string& Gobby::serialize::data::serialized() const { return m_serialized; } std::string Gobby::serialize::default_context_to:: to_string(const data_type& from) const { return from; } Gobby::serialize::default_context_from::data_type Gobby::serialize::default_context_from:: from_string(const data_type& from) const { return from; } std::string Gobby::serialize::default_context_to:: to_string(const data_type& from) const { return from; } gobby-0.6.0/code/util/asyncoperation.cpp0000664000175000017500000000451714003367605015206 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/asyncoperation.hpp" #include #include #include Gobby::AsyncOperation::Handle::Handle(AsyncOperation& operation): m_operation(&operation) { } Gobby::AsyncOperation::Handle::~Handle() { if(m_operation) { if(!m_operation->m_finished) cancel(); m_operation->m_handle = NULL; } } void Gobby::AsyncOperation::Handle::cancel() { assert(m_operation); assert(m_operation->m_finished == false); m_operation->m_finished = true; } Gobby::AsyncOperation::AsyncOperation(): m_thread(NULL), m_handle(NULL), m_finished(false) { } Gobby::AsyncOperation::~AsyncOperation() { if(m_handle) m_handle->m_operation = NULL; } std::unique_ptr Gobby::AsyncOperation::start(std::unique_ptr operation) { assert(operation->m_thread == NULL); assert(operation->m_handle == NULL); assert(operation->m_finished == false); AsyncOperation* op = operation.release(); std::unique_ptr handle(new Handle(*op)); op->m_handle = handle.get(); op->m_thread = Glib::Thread::create( sigc::mem_fun(*op, &AsyncOperation::thread_run), true); return handle; } void Gobby::AsyncOperation::thread_run() { run(); Glib::signal_idle().connect( sigc::mem_fun(*this, &AsyncOperation::done)); } bool Gobby::AsyncOperation::done() { if(!m_finished) { // m_handle DTOR cancels the operation g_assert(m_handle != NULL); m_finished = true; finish(); } if(m_handle) m_handle->m_operation = NULL; delete this; return false; } gobby-0.6.0/code/util/closebutton.hpp0000664000175000017500000000207014003367605014506 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CLOSEBUTTON_HPP_ #define _GOBBY_CLOSEBUTTON_HPP_ #include namespace Gobby { class CloseButton: public Gtk::Button { public: CloseButton(); }; } // namespace Gobby #endif // _GOBBY_CLOSEBUTTON_HPP_ gobby-0.6.0/code/util/uri.cpp0000664000175000017500000000566614003367605012755 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/uri.hpp" #include "util/i18n.hpp" #include #include #ifndef G_OS_WIN32 # include # include #endif namespace Gobby { void parse_uri(const std::string& uri, std::string& scheme, std::string& netloc, std::string& path) { // First, parse the scheme. If there is no scheme found, default // to infinote: std::string::size_type scheme_delim = uri.find("://"); if(scheme_delim == std::string::npos) { scheme = "infinote"; scheme_delim = 0; } else { scheme = uri.substr(0, scheme_delim); // Skip ':' and all following '/' do { ++scheme_delim; } while(uri[scheme_delim] == '/'); } std::string::size_type path_delim = uri.find('/', scheme_delim); if(path_delim == std::string::npos) { netloc = uri.substr(scheme_delim); path.clear(); } else { netloc = Glib::uri_unescape_string( uri.substr(scheme_delim, path_delim - scheme_delim)); path = Glib::uri_unescape_string(uri.substr(path_delim)); } } void parse_netloc(const std::string& netloc, std::string& hostname, std::string& service, unsigned int& device_index) { std::string str = netloc; service = "6523"; // Default device_index = 0; // Default // Strip away device name std::string::size_type pos; if( (pos = str.rfind('%')) != std::string::npos) { std::string device_name = str.substr(pos + 1); str.erase(pos); #ifdef G_OS_WIN32 // TODO: Implement device_index = 0; #else device_index = if_nametoindex(device_name.c_str()); if(device_index == 0) { throw std::runtime_error( _("Device \"%1\" does not exist")); } #endif } if(str[0] == '[' && ((pos = str.find(']', 1)) != std::string::npos)) { // Hostname surrounded by '[...]' hostname = str.substr(1, pos-1); ++ pos; if(pos < str.length() && str[pos] == ':') service = str.substr(pos + 1); } else { pos = str.find(':'); if(pos != std::string::npos) { hostname = str.substr(0, pos); service = str.substr(pos + 1); } else { hostname = str; } } } } // namespace Gobby gobby-0.6.0/code/util/closebutton.cpp0000664000175000017500000000326614003367605014511 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/closebutton.hpp" #include #include Gobby::CloseButton::CloseButton() { set_relief(Gtk::RELIEF_NONE); set_focus_on_click(false); static const gchar button_style[] = "* {\n" " -GtkButton-default-border: 0;\n" " -GtkButton-default-outside-border: 0;\n" " -GtkButton-inner-border: 0;\n" " -GtkWidget-focus-line-width: 0;\n" " -GtkWidget-focus-padding: 0;\n" " padding: 0;\n" "}"; Glib::RefPtr provider = Gtk::CssProvider::create(); provider->load_from_data(button_style); get_style_context()->add_provider( provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); Gtk::Image* button_image = Gtk::manage(new Gtk::Image); button_image->set_from_icon_name("window-close", Gtk::ICON_SIZE_MENU); add(*button_image); button_image->show(); } gobby-0.6.0/code/util/uri.hpp0000664000175000017500000000241714003367605012751 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_URI_HPP_ #define _GOBBY_URI_HPP_ #include namespace Gobby { void parse_uri(const std::string& uri, std::string& scheme, std::string& netloc, std::string& path); void parse_netloc(const std::string& netloc, std::string& hostname, std::string& service, unsigned int& device_index); } #endif // _GOBBY_URI_HPP_ gobby-0.6.0/code/util/file.hpp0000664000175000017500000000211114003367605013060 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_DIR_HPP_ #define _GOBBY_DIR_HPP_ #include namespace Gobby { void create_directory_with_parents(const std::string& path, int mode=0755); std::string config_filename(const std::string& filename); } #endif // _GOBBY_DIR_HPP_ gobby-0.6.0/code/operations/0000775000175000017500000000000014005504730012715 500000000000000gobby-0.6.0/code/operations/operation-export-html.cpp0000664000175000017500000004461114003367605017636 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ // Include this first because some of the other headers include X11.h which, // among others, #defines "None". #include #include "operations/operation-export-html.hpp" #include "util/i18n.hpp" #include #include #include #include #include #include #include #include namespace { char const gobby_icon[] = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9gMEQwLEOi12dIAAAvuSURBVGje7Zl/cFTXdcc/b997u/t2V9Ki30hCEBAGgw3IEGPiH+MQGzshdpO4hcSJcezG+eEJdiF4HNdpaNJmOm7tIW7dpiWexh2Pm4KTVrELFv4RG8e4EyaG8MMFYSQLIfQDSfv713vv3nf7xy5CgMBIns44M5yZN3vvvrv7zvecc7/nnvPgklySS/IHLdrFLJozZ862WbNmhfP5fEBKqSulFIBSStm27Yxda5qmCAQCDiiKqyCbzVqe540+y/M8T9O0stqaWr19R/uisb9fDKYGV+gw1Az9z4O8kG7GxQBobW2d+vTTT7cK4QJQURFFKTV6lcCUxkXFT4/Hn+/7/T62b9tOMBB8pu2Ftq+eelZlyP/mvAUfaw0GzMTRroGeT55M3/W6bXecTzffxbqqUChg2/ZZyjI6h1NAOGs8/lxKyYaHNlBXV7tm9erVPwBYBNGli65sPDmY9EL1U+oarpj+8TkLpr362ZqKRz40gFAohGVZZ3x3JgjGAXHK+mfOi2EkUUqx6clNmqEb31+zZs2DU0P+9UsWzJvWWl9r7vvN/6Z9SnlXLprZ1DKzfu1iqJh0CJXiGM+T+P1+crkcsVjsvJ4YL2T8fj9VVZWj923bwfO8Iogfb+LuNXdvarls9nErYFKWixvXRwNlb+/tzMS7BrR8QVSaun4rUm6ZDAB/PB4P9vT00NjYMK71zw2TC1sfFMpTDJ8cRnoCx3b54oqbNXf3G82J7i6UUhi6xtLqcGTEkfRkcyPKJ4+Nt50vxEJlwH/5NO06TSPg8/nw+XzMnXs5L7W3U1tbi5SS/v7+D7T+2fO6ulpeefkVuru7kZ6H49ic2P4if3LdEt5/42Vcx0UqRUJ4OJ7HO73xX76Uc/54IiHkB+Kahs9TSkOB9CQg2bd/P42NjSSTSQKBwOSsr+CWW29BKUU2m2Okv4/X9/+OdF8P0nVRgKsUtlQci+eOpXLOAxOl0acAXUNDoc65qZRi1apVvPjiCzQ0NNDV1cXAwMAYRU9b+7TSiunTZ1BXV3sW/Xr8atMTLGmqo3/3LjzAQ5GTCqUkQ9nC9l3QNxEAUeA+AE+p88ZXe3s7x4/30tTUSGNjI+Xl5WdY+OywOTWOxWKjRgiFQgjXRc8kEX4XJ5tBKRCewvYUnSO5w5m8+/BEE9mnAeZPDyGkIpUVOELheQpdA7+ukbI9MgWPLVu2sH79egqFPENDJ8coejYrje+Z+vo63tq6hZaqChLvH8YrriArFa6QIpG3/30XpCcK4JMAf/2VaXz8YyFiCZvB4QL5rIOlQ01Ep3PI5Y5/6aOtrY0VK1ZcgE7PVdzvN5k9u2V0feeuN1naVE33yHDR+krhKsXR4cxBuyD+5oMocjwAMwAWNgYRtiCsK5ordETAoHPIZeObFstuXsVzzzTyzt4D/OL5/+C+r3+TYNC6KBAAQgg0TaPrwH6mhvzEOo9wKpdnhSJdELm44zz5BojJAAgBaEIghUQ6EukIfrUvR+0t63hq/fXU1ZSDUnz+thsYOJniz7+7jm8/8BC6bpxH8bFMVbzX3NzMqz/dTGtVlGOH96AAobyi9Ucy+35dkM9cTIIdD0APcK2wXTzXQ7qSPccKTP/cI6z89A2ELKt4AtEUhubSVF/OM5v/joe//xTfuv/+szbwmSxkmv5RFkonEvgLGdInBlBecW1GegymC6mUEI9e7AlhvLPQd6KWL+vmBcIWKE/xXGc9n7rxGkJWCLQg+EqXFgCfju04zG2pwTBMLCuIZQUJBq3SZ4BAIEAwGCQQ8I+G0Us/3cysmijJ3mMl6yuEp+hK5A/sLIjXLxbAeB7oD5i+ff1x5xNHT7p847lBnv3XtVRWVXOoo5NoRTmapoOmoaTAFQ7JZJoVN9/Atu3bWLBg4Rl0ejqcVIl56qmvr2f40EHqgh7SKSaujJQcz3nqPdt+bCIFzXgAIrG8vnfjf8euWb044ps31c/Sq1t5/j+3UzjwE37fVcD2Qhg+HVNmqQnkeWV/mi07XmNkeIjp05vHVfzUZ1VVFb97eQfN5RaJ9w4Ws66ncKVi2CqX78uhY5MGoOv6581AaPOia28N+zTb9+qRtxjJSmqqKnn33cOsX1rJbUtObWyJsMOIgp+hmEM6nSGZjJFOp8ehz6LymqZRVVXF7ue3sKjCoC+bLjKP9IgFowRa5jkc6WRSAAJW2WPR6tpvfuEb3ysvn1KL69pkD9WR73gWTfeRy9lIV+AJD0/I0UtJj5AJjuPgOC6pVPq8zKOU4n927iSqQ/L9TpQqnnny0qP5xhsZTqbURGtiAyAYijzaOPPy+//ovkciuk9HCBelFPUtS/jhj+bjieI5VjoST3qj7FQE4/HekCQQDFJbW0Nz87QL0ufWf/sZ88oCDHaMoICc8IiHq/nq+u+wZ+NGJgNgVtAKP/SZu9ZFlJS4QhQf5kn60i6RCgkaRCIW0hF4UhUVd4uekMKjMxFA13XePdRBX1/fuAc5pRTCdRFDA+RFCoXCUYq0hPmfuY2AZaEmbH/wVVbXfHvx8s+Vg8J1HYTrIFwb4Tro/jAjGZvuY73Mn3cZ299JFr3glpKc67GvJ0/M9giHQuzZcwDQME0T0zQwDAPDMEtzkwM72mmJhkkP9KEU5KQiU9nADV/68qinJuwBTdNXN82ap7nO6YIdpVDKwy7k2P3mS4hkF48+vJYV//AkVcEsCxpMpOvR0Vfgr3Y7LLx1Mf39A2ScJMeP97Bs2TI0TTuncxE79C4NWhalFLZSJDwf1999L4ZpTsr6AD4pZblhBnAdG9exEa6N69ok40PsenEzn12znG2//g3hcIiFdyzn74+Uc+ezce76eZy/2KdRf89CWiLT+NFj/0h0VZQHvvcgO3bsQNd1IpHI6OXXfSR7O0n19qBQ5KVCNMzk6pUrS7WxNzkPoKEJxy4Wl6pUP3mSd157jns23kllYyX3/O2fcucPHqHluhYic5eTKWRI2SkyToZUIcUL7k6CC4MEQ0HMr5hsfPwvqampYenSpZimCUA6MUTDnGb2vr2XyyJ+hvDzhYe+C0A8nhhT3U3QA4mRodDJE11FD7g2wrHpPbKbK2+aA1NgMD1IQiRovr6ZpEgSy8VIFBKkCilShRRpO014Rhg9pBdziaUTujnET372z3R1dY2GZXKoj/lXzaVp2eW8VZDIqXXMuuqqYgUVrZh0a9G46aabtu597RfLM7lceW3DDBWtbfJnkp3anFU30JfqQ3oSV7rY0qbgFsi7eXJujpyToyAK4/6p1WzRsbODZDKJ67oYhkH6ZB/xdI6MBl9+eC1X337vaB0dDofG6XJcJICVK1f+2cqVK5eOjIxcc+TIkXmxWKxpyE4vHBEjPi/tjQJwpIMtbGxhn1fxsSL9EsdxyOfzlJWV8fZbb+CzU9yxdiNTZ10xppunSCbThMOhyQFYt25dP9AGtD3++OPVpmlee/CfDv68P9VveaoIQHgC4YmJxablI5FI4DgOSin0yhl8cc29hCJl57QaLSuApmmT3MRjZMOGDcNPPPHEnvRIWhvuHSZQM7mNJbKC5PEkhmHi8xVP7Pd86wE6OjpIpVKYph9d92FZFpZlEY1GPwQLnSWVlZVDt6+4/Ze/3fbbTwymBquNKYYebApaRr2h6ZaOHtTRreKGlXmJLEi8goeX9GBQIYYl1RVVfP1L91FZWVnqpyp8Ph+zZ8/m6NGjJBKJYiLL5XBdB9eVBAIBstmsBlgf+v3A1q1b9b6+vhal1JUnTpxY1N3d/WAwEoyksilSmRSZTAZN0wiHwkTCEcrDZUytbWDG9Bk0NTURDAYIhcJUVFRgmsY5jd9CIc/w8DDxeAIpBUIIbNumvX2H29bW9jXgMJAC4sAIF6iNLyrwZs6c+V5ra+sUv9/vMwxDMwxDA6UphXJdVwkhlJRSua6rHMf2zmylM24P9dQax3F8tl3QfD5N7+09EejuPvY1oPvs3jKQKIFJTxhASeqB8P/j2yIdqAaqgNiFtthY72h8NCUMTC2BMc7jxgygfVQBjI2QypL3K0pzCRRKII9/1AGc8f4QqAOCJRDJDwi1S3JJLskfgvwfcPxaSBSG+m4AAAAASUVORK5CYII="; // Sort tags so that CSS declaration order corresponds to priority struct TagComparator { bool operator()(GtkTextTag* first, GtkTextTag* second) const { return gtk_text_tag_get_priority(first) < gtk_text_tag_get_priority(second); } }; typedef std::set priority_tag_set; // We don't use Glib::ustring::compose for now because // it's formatting support does not compile properly under // Windows. See https://bugzilla.gnome.org/show_bug.cgi?id=599340 Glib::ustring uprintf(gchar const* fmt, ...) { va_list args; va_start(args, fmt); gchar* str = g_strdup_vprintf(fmt, args); va_end(args); Glib::ustring result; try { result = str; } catch (...) { g_free(str); throw; } g_free(str); return result; } unsigned int rgba_to_rgb24(const GdkRGBA* rgba) { const guint8 red = static_cast(rgba->red * 255.0 + 0.5); const guint8 green = static_cast(rgba->green * 255.0 + 0.5); const guint8 blue = static_cast(rgba->blue * 255.0 + 0.5); return (red << 16) | (green << 8) | blue; } Glib::ustring get_current_tags(priority_tag_set& tags, GtkTextIter* iter) { GSList* current_tags = gtk_text_iter_get_tags(iter); // make sure to free current_tags in an exception-safe manner: Glib::SListHandle > handle( current_tags, Glib::OWNERSHIP_SHALLOW); Glib::ustring classes; for(GSList* tag = current_tags; tag != 0; tag = tag->next) { if(!classes.empty()) classes += ' '; classes += uprintf( "tag_%p", static_cast(tag->data)); tags.insert(GTK_TEXT_TAG(tag->data)); } return classes; } // write the Gtk::TextBuffer from document into content, inserting // s for line breaks and authorship of chunks of text, also // save all users and tags encountered and the total number of // lines dumped void dump_buffer(Gobby::TextSessionView& view, xmlpp::Element* content, std::set& users, priority_tag_set& tags, unsigned int& line_counter) { using namespace Gobby; users.clear(); tags.clear(); line_counter = 1; xmlpp::Element* last_node = content; xmlpp::Element* line_no = last_node->add_child("span"); line_no->set_attribute("class", "line_no"); line_no->set_attribute("id", "line_1"); GtkTextBuffer* buffer = GTK_TEXT_BUFFER( view.get_text_buffer()); InfTextGtkBuffer* inf_buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer( INF_SESSION(view.get_session()))); GtkTextIter begin; gtk_text_buffer_get_start_iter(buffer, &begin); { GtkTextIter end; gtk_text_buffer_get_end_iter(buffer, &end); gtk_source_buffer_ensure_highlight( GTK_SOURCE_BUFFER(buffer), &begin, &end); } // iterate through chunks of text during which the currently // set tags do not change, write each as a while(!gtk_text_iter_is_end(&begin)) { // add current tags as classes for CSS formatting // (both for author of text and syntax highlighting) Glib::ustring classes = get_current_tags(tags, &begin); if(!classes.empty()) { last_node = last_node->add_child("span"); last_node->set_attribute("class", classes); // add mouseover "written by" popup // this only needs to happen when there are tags, // because the presence of an author implies a tag InfTextUser* user = inf_text_gtk_buffer_get_author( inf_buffer, &begin); if(user) { char const* user_name = inf_user_get_name( INF_USER(user)); last_node->set_attribute( "title", uprintf(_("written by: %s"), user_name)); users.insert(user); } } GtkTextIter next = begin; gtk_text_iter_forward_to_tag_toggle(&next, 0); // split text by newlines so we can // insert line number elements gchar* text = gtk_text_iter_get_text(&begin, &next); try { gchar const* last_pos = text; for(gchar const* i = last_pos; *i; ++i) { if(*i != '\n') continue; ++line_counter; gchar const* next_pos = i; ++next_pos; last_node->add_child_text( Glib::ustring(last_pos, next_pos)); last_pos = next_pos; line_no = last_node->add_child("span"); line_no->set_attribute("class", "line_no"); line_no->set_attribute( "id", uprintf("line_%d", line_counter)); } last_node->add_child_text( Glib::ustring(last_pos)); } catch(...) { g_free(text); throw; } g_free(text); // if we do not have any tags, we did not add classes // and consequently did not go into a new span if(!classes.empty()) last_node = last_node->get_parent(); begin = next; } } // some random interesting information/advertisement to be put at // the end of the html output void dump_info(xmlpp::Element* node, Gobby::TextSessionView& view) { using namespace Gobby; // put current time char const* time_str; int const n = 128; char buf[n]; { std::time_t now; std::time(&now); // TODO: localtime is not threadsafe if(std::strftime(buf, n, "%c", localtime(&now))) time_str = buf; else time_str = _(""); } char const* hostname = view.get_hostname().c_str(); char const* path = view.get_path().c_str(); char const* translated = // %1$s is session name/hostname // %2$s is path within the session // %3$s is current date as formatted by %c, // %4$s is a link to the gobby site, it must be present because // we need to handle that manually to insert a hyperlink // instead of just printf'ing it. _("Document generated from %1$s:%2$s at %3$s by %4$s"); char const* p = std::strstr(translated, "%4$s"); g_assert(p); node->add_child_text( uprintf(Glib::ustring(translated, p).c_str(), hostname, path, time_str)); xmlpp::Element* link = node->add_child("a"); link->set_attribute("href", "http://gobby.github.io/"); link->add_child_text(PACKAGE_STRING); if(*p != '\0') node->add_child_text( uprintf(p+4 , hostname, path, time_str)); } // list each author before the actual text void dump_user_list(xmlpp::Element* list, const std::set& users) { for(std::set::const_iterator i = users.begin(); i != users.end(); ++i) { // TODO: Get the S and V from the InfTextGtkBuffer // setting? double hue = inf_text_user_get_hue(*i); double sat = 0.35; double val = 1.0; double r, g, b; gtk_hsv_to_rgb(hue, sat, val, &r, &g, &b); Gdk::RGBA rgba; rgba.set_rgba(r, g, b, 1.0); const char* name = inf_user_get_name(INF_USER(*i)); const unsigned int rgb = rgba_to_rgb24(rgba.gobj()); xmlpp::Element* item = list->add_child("li"); item->add_child_text(name); item->set_attribute( "style", uprintf("background-color: #%06x;", rgb)); } } void dump_tags_style(xmlpp::Element* css, const priority_tag_set& tags) { for(priority_tag_set::const_iterator i = tags.begin(); i != tags.end(); ++i) { GdkRGBA* fg, * bg; gint weight; gboolean underline; PangoStyle style; gboolean fg_set, bg_set, weight_set, underline_set, style_set; g_object_get(G_OBJECT(*i), "background-rgba", &bg, "foreground-rgba", &fg, "weight", &weight, "underline", &underline, "style", &style, "background-set", &bg_set, "foreground-set", &fg_set, "weight-set", &weight_set, "underline-set", &underline_set, "style-set", &style_set, NULL); unsigned int bg_rgb = 0, fg_rgb = 0; if(fg_set) fg_rgb = rgba_to_rgb24(fg); if(bg_set) bg_rgb = rgba_to_rgb24(bg); gdk_rgba_free(fg); gdk_rgba_free(bg); css->add_child_text( uprintf(".tag_%p {\n", static_cast(*i))); if(fg_set) css->add_child_text(uprintf( " color: #%06x;", fg_rgb)); if(bg_set) css->add_child_text(uprintf( " background-color: #%06x;", bg_rgb)); if(weight_set) css->add_child_text(uprintf( " font-weight: %d;", weight)); if(underline_set) css->add_child_text(uprintf( " text-decoration: %s;", underline ? "underline" : "none")); if(style_set) css->add_child_text(uprintf( " font-style: %s;", (style == PANGO_STYLE_ITALIC) ? "italic" : "none")); css->add_child_text("}\n"); } } // generate xhtml representation of the document and write it to the // specified location in the filesystem std::string export_html(Gobby::TextSessionView& view) { using namespace Gobby; xmlpp::Document output; output.set_internal_subset("html", "-//W3C//DTD XHTML 1.1//EN", "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"); xmlpp::Element * root = output.create_root_node( "html", "http://www.w3.org/1999/xhtml"), * head = root->add_child("head"), * body = root->add_child("body"), * title = head->add_child("title"), * style = head->add_child("style"), * h1 = body->add_child("h1"), * h2 = body->add_child("h2"), * user_list = body->add_child("ul"), * content = body->add_child("pre"), * info = body->add_child("p"), * icon = h1->add_child("img"); icon->set_attribute("src", gobby_icon); icon->set_attribute("width", "48"); icon->set_attribute("height", "48"); icon->set_attribute("alt", "a gobby document:"); icon->set_attribute("class", "icon"); const Glib::ustring& document_name = view.get_title(); title->add_child_text(document_name + " - infinote document"); h1->add_child_text(document_name); content->set_attribute("class", "document"); std::set users; priority_tag_set tags; unsigned int line_counter; dump_buffer(view, content, users, tags, line_counter); h2->add_child_text(_("Participants")); info->set_attribute("class", "info"); dump_info(info, view); style->set_attribute("type", "text/css"); dump_user_list(user_list, users); dump_tags_style(style, tags); if(!user_list->cobj()->children) { body->remove_child(h2); body->remove_child(user_list); } style->add_child_text( ".document {\n" " border-top: 1px solid gray;\n" " border-bottom: 1px solid black;\n" " padding-bottom: 1.2em;\n" " counter-reset: line;\n" "}\n" ".line_no:before {\n" " content: counter(line);\n" " counter-increment: line;\n" "}\n" ".info {\n" " font-size: small;\n" "}\n"); style->add_child_text( uprintf( ".line_no {\n" " position: absolute;\n" " float: left;\n" " clear: left;\n" " margin-left: -%1$uem;\n" " color: gray;\n" "}\n" ".document {\n" " padding-left: %1$uem\n" "}\n", static_cast( std::log(line_counter) / std::log(10))+1)); return output.write_to_string("utf-8"); } } // anonymous namespace Gobby::OperationExportHtml::OperationExportHtml( Operations& operations, TextSessionView& view, const Glib::RefPtr& file) : Operation(operations), m_title(view.get_title()), m_file(file), m_xml(export_html(view)), m_index(0) { } Gobby::OperationExportHtml::~OperationExportHtml() { if(m_file) { // TODO: Cancel outstanding async operations? get_status_bar().remove_message(m_message_handle); } } void Gobby::OperationExportHtml::start() { m_file->replace_async( sigc::mem_fun(*this, &OperationExportHtml::on_file_replace)); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Exporting document \"%1\" to \"%2\" in HTML..."), m_title, m_file->get_uri())); } void Gobby::OperationExportHtml::on_file_replace( const Glib::RefPtr& result) { try { m_stream = m_file->replace_finish(result); m_stream->write_async( m_xml.c_str(), m_xml.length(), sigc::mem_fun( *this, &OperationExportHtml::on_stream_write)); } catch(const Glib::Exception& ex) { error(ex.what()); } } void Gobby::OperationExportHtml::on_stream_write( const Glib::RefPtr& result) { try { gssize size = m_stream->write_finish(result); // On size < 0 an exception should have been thrown. g_assert(size >= 0); m_index += size; if(m_index < m_xml.length()) { // Write next chunk m_stream->write_async( m_xml.c_str() + m_index, m_xml.length() - m_index, sigc::mem_fun( *this, &OperationExportHtml:: on_stream_write)); } else { m_stream->close(); finish(); } } catch(const Glib::Exception& ex) { error(ex.what()); } } void Gobby::OperationExportHtml::error(const Glib::ustring& message) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to export document \"%1\" to HTML"), m_file->get_uri()), message); fail(); } gobby-0.6.0/code/operations/operation-new.hpp0000664000175000017500000000401214003367605016140 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATIONNEW_HPP_ #define _GOBBY_OPERATIONS_OPERATIONNEW_HPP_ #include "operations/operations.hpp" #include namespace Gobby { class OperationNew: public Operations::Operation { public: OperationNew(Operations& operations, InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name, bool directory); virtual ~OperationNew(); virtual void start(); protected: static void on_request_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { const InfBrowserIter* iter; inf_request_result_get_add_node(result, NULL, NULL, &iter); static_cast(user_data)-> on_request_finished(iter, error); } void on_request_finished(const InfBrowserIter* iter, const GError* error); protected: InfRequest* m_request; InfBrowser* m_browser; const InfBrowserIter m_parent; Glib::ustring m_name; bool m_directory; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATIONNEW_HPP_ gobby-0.6.0/code/operations/operations.hpp0000664000175000017500000001171714003367605015546 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATIONS_HPP_ #define _GOBBY_OPERATIONS_OPERATIONS_HPP_ #include "core/browser.hpp" #include "core/statusbar.hpp" #include "core/documentinfostorage.hpp" #include "core/foldermanager.hpp" #include "core/textsessionview.hpp" #include #include #include #include namespace Gobby { class OperationNew; class OperationOpen; class OperationOpenMultiple; class OperationSave; class OperationDelete; class OperationSubscribePath; class OperationExportHtml; class Operations: public sigc::trackable { public: class Operation { public: typedef sigc::signal SignalFinished; Operation(Operations& operations): m_operations(operations) {} virtual ~Operation() = 0; virtual void start() = 0; StatusBar& get_status_bar() { return m_operations.m_status_bar; } Browser& get_browser() { return m_operations.m_browser; } FolderManager& get_folder_manager() { return m_operations.m_folder_manager; } DocumentInfoStorage& get_info_storage() { return m_operations.m_info_storage; } SignalFinished signal_finished() const { return m_signal_finished; } protected: void fail() { m_operations.fail_operation(this); } void finish() { m_operations.finish_operation(this); } Operations& m_operations; private: SignalFinished m_signal_finished; }; typedef sigc::signal SignalBeginSaveOperation; typedef std::vector > file_list; Operations(DocumentInfoStorage& info_storage, Browser& browser, FolderManager& folder_manager, StatusBar& status_bar); ~Operations(); OperationNew* create_directory(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name); OperationNew* create_document(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name); OperationOpen* create_document(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name, const Preferences& preferences, const Glib::RefPtr& file, const char* encoding); OperationOpenMultiple* create_documents(InfBrowser* browser, const InfBrowserIter* parent, const Preferences& prefs, const file_list& files); OperationSave* save_document(TextSessionView& view, const Glib::RefPtr& file, const std::string& encoding, DocumentInfoStorage::EolStyle eol_style); OperationDelete* delete_node(InfBrowser* browser, const InfBrowserIter* iter); // uri must be of kind infinote://[hostname]/[path] OperationSubscribePath* subscribe_path(const std::string& uri); OperationSubscribePath* subscribe_path(InfBrowser* browser, const std::string& path); OperationExportHtml* export_html(TextSessionView& view, const Glib::RefPtr& file); OperationSave* get_save_operation_for_document(TextSessionView& view); SignalBeginSaveOperation signal_begin_save_operation() const { return m_signal_begin_save_operation; } protected: void fail_operation(Operation* operation); void finish_operation(Operation* operation); DocumentInfoStorage& m_info_storage; Browser& m_browser; FolderManager& m_folder_manager; StatusBar& m_status_bar; typedef std::set OperationSet; OperationSet m_operations; SignalBeginSaveOperation m_signal_begin_save_operation; private: template OperationType* check_operation(OperationType* op) { if(m_operations.find(op) == m_operations.end()) return NULL; return op; } }; } #endif // _GOBBY_OPERATIONS_OPERATIONS_HPP_ gobby-0.6.0/code/operations/operation-open-multiple.cpp0000664000175000017500000001147514003367605020147 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ // TODO: Show "Querying file name(s)..." in statusbar when querying file // names without actually opening a file because of waiting for the file name. #include "operations/operation-open-multiple.hpp" #include "operations/operation-open.hpp" #include "util/i18n.hpp" Gobby::OperationOpenMultiple::OperationOpenMultiple( Operations& operations, const Preferences& prefs, InfBrowser* browser, const InfBrowserIter* parent, const file_list& files): Operation(operations), m_preferences(prefs), m_parent(browser, parent), m_current(NULL) { m_parent.signal_node_removed().connect( sigc::mem_fun(*this, &OperationOpenMultiple::on_node_removed)); for(file_list::const_iterator iter = files.begin(); iter != files.end(); ++iter) { info_list::iterator info_iter = m_infos.insert(m_infos.end(), Info()); Info& info = *info_iter; info.file = *iter; info.encoding = NULL; /* auto-detect... */ } } void Gobby::OperationOpenMultiple::start() { for(info_list::iterator iter = m_infos.begin(); iter != m_infos.end(); ++iter) { query(iter); } } void Gobby::OperationOpenMultiple::query(const info_list::iterator& info) { if(info->name.empty()) { try { // Query file name info->file->query_info_async( sigc::bind( sigc::mem_fun( *this, &OperationOpenMultiple:: on_query_info), info), G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); } catch(const Gio::Error& ex) { single_error(info, ex.what()); } } else { if(!m_current) load_info(info); } } void Gobby::OperationOpenMultiple::on_node_removed() { fatal_error(_("Parent folder was removed")); } void Gobby::OperationOpenMultiple::on_query_info( const Glib::RefPtr& result, const info_list::iterator& info) { try { Glib::RefPtr file_info = info->file->query_info_finish(result); info->name = file_info->get_display_name(); if(!m_current) load_info(info); } catch(const Gio::Error& ex) { single_error(info, ex.what()); } } void Gobby::OperationOpenMultiple::on_finished( bool success, const info_list::iterator& info) { m_infos.erase(info); m_current = NULL; if(m_infos.empty()) { // All documents loaded finish(); } else { // Find the next info with name set for(info_list::iterator iter = m_infos.begin(); iter != m_infos.end(); ++iter) { if(!iter->name.empty()) { load_info(iter); break; } } // If no info was found, then wait for names to become // available, by query info results } } void Gobby::OperationOpenMultiple::load_info(const info_list::iterator& iter) { g_assert(m_current == NULL); g_assert(!iter->name.empty()); m_current = m_operations.create_document( m_parent.get_browser(), m_parent.get_browser_iter(), iter->name, m_preferences, iter->file, iter->encoding); // TODO: In principle this could be NULL if the whole operation // finished synchrounously. In this case with the current API we // cannot find out whether the operation was successful or not. What // we do does not depend on whether the operation is successful, // so it does not matter at this point. But in principle we should // change the API so that we can find it out here. Note also that // currently, OperationOpen can never finish synchrounously. if(m_current == NULL) { on_finished(true, iter); } else { m_current->signal_finished().connect( sigc::bind( sigc::mem_fun( *this, &OperationOpenMultiple::on_finished), iter)); } } void Gobby::OperationOpenMultiple::single_error( const info_list::iterator& iter, const Glib::ustring& message) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to open document \"%1\""), iter->file->get_uri()), message); m_infos.erase(iter); // Finish operation if there are no more files to load if(m_infos.empty()) finish(); } void Gobby::OperationOpenMultiple::fatal_error(const Glib::ustring& message) { get_status_bar().add_error_message( _("Failed to open multiple documents"), message); fail(); } gobby-0.6.0/code/operations/operation-save.cpp0000664000175000017500000001607614003367605016315 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-save.hpp" #include "util/i18n.hpp" #include #include Gobby::OperationSave::OperationSave(Operations& operations, TextSessionView& view, const Glib::RefPtr& file, const std::string& encoding, DocumentInfoStorage::EolStyle eol_style): Operation(operations), m_file(file), m_view(&view), m_start_time(std::time(NULL)), m_current_line_index(0), m_encoding(encoding), m_eol_style(eol_style), m_storage_key(view.get_info_storage_key()), m_iconv(encoding.c_str(), "UTF-8"), m_buffer_size(0), m_buffer_index(0) { const Folder& folder = get_folder_manager().get_text_folder(); folder.signal_document_removed().connect( sigc::mem_fun(*this, &OperationSave::on_document_removed)); // Load content so that the session can go on while saving GtkTextBuffer* buffer = GTK_TEXT_BUFFER(view.get_text_buffer()); GtkTextIter prev; GtkTextIter pos; GtkTextIter old_pos; gtk_text_buffer_get_start_iter(buffer, &prev); pos = prev; if(!gtk_text_iter_ends_line(&pos)) gtk_text_iter_forward_to_line_end(&pos); do { Line line; line.first = gtk_text_buffer_get_text(buffer, &prev, &pos, TRUE); line.second = gtk_text_iter_get_line_index(&pos); m_lines.push_back(line); //if(gtk_text_iter_is_end(&prev)) // break; old_pos = pos; gtk_text_iter_forward_line(&prev); gtk_text_iter_forward_to_line_end(&pos); } while(!gtk_text_iter_equal(&pos, &old_pos)); m_current_line = m_lines.begin(); } Gobby::OperationSave::~OperationSave() { // TODO: Cancel outstanding async operations? for(std::list::iterator iter = m_lines.begin(); iter != m_lines.end(); ++ iter) { g_free(iter->first); } get_status_bar().remove_message(m_message_handle); } void Gobby::OperationSave::start() { m_file->replace_async(sigc::mem_fun(*this, &OperationSave::on_file_replace)); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Saving document \"%1\" to \"%2\"..."), m_view->get_title(), m_file->get_uri())); } void Gobby::OperationSave::on_document_removed(SessionView& view) { // We keep the document to unset the modified flag when the operation // is complete, however, if the document is removed in the meanwhile, // then we don't need to care anymore. if(m_view == &view) m_view = NULL; } void Gobby::OperationSave::on_file_replace( const Glib::RefPtr& result) { try { m_stream = m_file->replace_finish(result); attempt_next(); } catch(const Glib::Exception& ex) { error(ex.what()); } } void Gobby::OperationSave::attempt_next() { bool done; if(m_current_line == m_lines.end()) { done = true; } else { // Always save a newline at the end, except the document // is empty. assert(!m_lines.empty()); std::list::const_iterator iter = m_lines.begin(); ++iter; if(iter == m_lines.end() && m_lines.front().first[0] == '\0') done = true; else done = false; } if(done) { DocumentInfoStorage::Info info; info.uri = m_file->get_uri(); info.encoding = m_encoding; info.eol_style = m_eol_style; get_info_storage().set_info(m_storage_key, info); m_stream->close(); if(m_view != NULL) { // TODO: Don't unset modified flag if the document has // changed in the meanwhile, but set // buffer-modified-time in algorithm. gtk_text_buffer_set_modified( GTK_TEXT_BUFFER(m_view->get_text_buffer()), FALSE); } finish(); } else { write_next(); } } void Gobby::OperationSave::write_next() { gchar* inbuf; gsize inlen; char newlinebuf[2] = { '\r', '\n' }; if(m_current_line_index < m_current_line->second) { inbuf = m_current_line->first + m_current_line_index; inlen = m_current_line->second - m_current_line_index; } else { // Write newline switch(m_eol_style) { case DocumentInfoStorage::EOL_CR: inbuf = newlinebuf + 0; inlen = 1; break; case DocumentInfoStorage::EOL_LF: inbuf = newlinebuf + 1; inlen = 1; break; case DocumentInfoStorage::EOL_CRLF: inbuf = newlinebuf + 0; inlen = 2; break; default: g_assert_not_reached(); break; } } gchar* outbuf = m_buffer; gsize outlen = BUFFER_SIZE; gchar* preserve_inbuf = inbuf; /* iconv is defined as libiconv on Windows, or at least when using the * binary packages from ftp.gnome.org. Therefore we can't properly * call Glib::IConv::iconv. Therefore, we use the C API here. */ std::size_t retval = g_iconv( m_iconv.gobj(), &inbuf, &inlen, &outbuf, &outlen); if(retval == static_cast(-1)) { g_assert(errno != EILSEQ); // E2BIG and EINVAL are fully OK here. } else if(retval > 0) { error(_("The document contains one or more characters that " "cannot be encoded in the specified character " "coding.")); return; } // Advance bytes read. m_current_line_index += inbuf - preserve_inbuf; m_buffer_size = BUFFER_SIZE - outlen; m_buffer_index = 0; g_assert(m_buffer_size > 0); if(m_current_line_index > m_current_line->second) { // Converted whole line: g_free(m_current_line->first); m_current_line = m_lines.erase(m_current_line); m_current_line_index = 0; } m_stream->write_async(m_buffer, m_buffer_size, sigc::mem_fun(*this, &OperationSave::on_stream_write)); } void Gobby::OperationSave::on_stream_write( const Glib::RefPtr& result) { try { gssize size = m_stream->write_finish(result); // On size < 0 an exception should have been thrown. g_assert(size >= 0); m_buffer_index += size; if(m_buffer_index < m_buffer_size) { // Write next chunk m_stream->write_async( m_buffer + m_buffer_index, m_buffer_size - m_buffer_index, sigc::mem_fun( *this, &OperationSave::on_stream_write)); } else { // Go on with next part of line and/or next line attempt_next(); } } catch(const Glib::Exception& ex) { error(ex.what()); } } void Gobby::OperationSave::error(const Glib::ustring& message) { get_status_bar().add_error_message( Glib::ustring::compose(_("Failed to save document \"%1\""), m_file->get_uri()), message); fail(); } gobby-0.6.0/code/operations/operation-delete.cpp0000664000175000017500000000444514003367605016616 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-delete.hpp" #include "util/i18n.hpp" Gobby::OperationDelete::OperationDelete(Operations& operations, InfBrowser* browser, const InfBrowserIter* iter): Operation(operations), m_browser(browser), m_iter(*iter), m_name(inf_browser_get_node_name(browser, iter)), m_request(NULL) { g_object_ref(browser); } Gobby::OperationDelete::~OperationDelete() { if(m_request != NULL) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_request_finished_static), this); g_object_unref(m_request); get_status_bar().remove_message(m_message_handle); } g_object_unref(m_browser); } void Gobby::OperationDelete::start() { InfRequest* request = inf_browser_remove_node( m_browser, &m_iter, on_request_finished_static, this ); // Object might be gone at this point, so check stack variable if(request != NULL) { m_request = request; // Note infc_browser_remove_node does not return a // new reference. g_object_ref(m_request); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Removing node \"%1\"..."), m_name)); } } void Gobby::OperationDelete::on_request_finished(const GError* error) { if(error) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to delete node \"%1\""), m_name), error->message); fail(); } else { finish(); } } gobby-0.6.0/code/operations/operation-open.hpp0000664000175000017500000000603514003367605016317 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATION_OPEN_HPP_ #define _GOBBY_OPERATIONS_OPERATION_OPEN_HPP_ #include "operations/operations.hpp" #include "core/documentinfostorage.hpp" #include "core/nodewatch.hpp" #include #include #include #include namespace Gobby { class OperationOpen: public Operations::Operation, public sigc::trackable { public: OperationOpen(Operations& operations, const Preferences& preferences, InfBrowser* browser, const InfBrowserIter* parent, const std::string& name, const Glib::RefPtr& file, const char* encoding /* NULL means auto-detect */); virtual ~OperationOpen(); virtual void start(); protected: static void on_request_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { const InfBrowserIter* iter; inf_request_result_get_add_node(result, NULL, NULL, &iter); static_cast(user_data)-> on_request_finished(iter, error); } void on_node_removed(); void on_file_read(const Glib::RefPtr& result); void on_stream_read(const Glib::RefPtr& result); bool on_idle(); void encoding_error(); void read_finish(); void on_request_finished(const InfBrowserIter* iter, const GError* error); void error(const Glib::ustring& message); protected: const Preferences& m_preferences; const std::string m_name; const Glib::RefPtr m_file; NodeWatch m_parent; int m_encoding_auto_detect_index; std::unique_ptr m_iconv; std::string m_encoding; DocumentInfoStorage::EolStyle m_eol_style; struct buffer { static const unsigned int SIZE = 1024; char buf[SIZE]; }; Glib::RefPtr m_stream; std::unique_ptr m_buffer; sigc::connection m_idle_connection; InfRequest* m_request; std::vector m_raw_content; std::vector::size_type m_raw_pos; GtkTextBuffer* m_content; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATION_OPEN_HPP_ gobby-0.6.0/code/operations/operation-open-multiple.hpp0000664000175000017500000000436514003367605020154 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATION_OPEN_MULTIPLE_HPP_ #define _GOBBY_OPERATIONS_OPERATION_OPEN_MULTIPLE_HPP_ #include "operations/operations.hpp" #include "core/nodewatch.hpp" #include #include namespace Gobby { class OperationOpenMultiple: public Operations::Operation, public sigc::trackable { public: typedef Operations::file_list file_list; OperationOpenMultiple(Operations& operations, const Preferences& preferences, InfBrowser* browser, const InfBrowserIter* parent, const file_list& files); virtual void start(); protected: struct Info { Glib::RefPtr file; std::string name; const char* encoding; }; typedef std::list info_list; void query(const info_list::iterator& info); void on_node_removed(); void on_query_info(const Glib::RefPtr& result, const info_list::iterator& info); void on_finished(bool success, const info_list::iterator& info); void load_info(const info_list::iterator& iter); void single_error(const info_list::iterator& iter, const Glib::ustring& message); void fatal_error(const Glib::ustring& message); const Preferences& m_preferences; NodeWatch m_parent; unsigned int m_num_uris; info_list m_infos; OperationOpen* m_current; }; } #endif // _GOBBY_OPERATIONS_OPERATION_OPEN_MULTIPLE_HPP_ gobby-0.6.0/code/operations/Makefile.am0000664000175000017500000000126614003367605014704 00000000000000gobby_0_5_SOURCES += \ code/operations/operations.cpp \ code/operations/operation-delete.cpp \ code/operations/operation-export-html.cpp \ code/operations/operation-new.cpp \ code/operations/operation-open.cpp \ code/operations/operation-open-multiple.cpp \ code/operations/operation-save.cpp \ code/operations/operation-subscribe-path.cpp noinst_HEADERS += \ code/operations/operations.hpp \ code/operations/operation-delete.hpp \ code/operations/operation-export-html.hpp \ code/operations/operation-new.hpp \ code/operations/operation-open.hpp \ code/operations/operation-open-multiple.hpp \ code/operations/operation-save.hpp \ code/operations/operation-subscribe-path.hpp gobby-0.6.0/code/operations/operation-subscribe-path.hpp0000664000175000017500000000660214003367605020271 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATIONSUBSCRIBEPATH_HPP_ #define _GOBBY_OPERATIONS_OPERATIONSUBSCRIBEPATH_HPP_ #include "operations/operations.hpp" #include "core/browser.hpp" #include namespace Gobby { class OperationSubscribePath: public Operations::Operation { public: OperationSubscribePath(Operations& operations, const std::string& uri); OperationSubscribePath(Operations& operations, InfBrowser* browser, const std::string& path); virtual ~OperationSubscribePath(); virtual void start(); private: void start_without_browser(); void start_with_browser(); void explore(); void descend(); void make_explore_request(); void make_subscribe_request(); static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_status(); } static void on_browser_deleted_static(gpointer user_data, GObject* where_the_object_was) { static_cast(user_data)-> on_browser_deleted(); } static void on_explore_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { static_cast(user_data)-> on_explore_finished(error); } static void on_subscribe_finished_static(InfRequest* request, const InfRequestResult* res, const GError* error, gpointer user_data) { const InfBrowserIter* iter; if(error == NULL) { inf_request_result_get_subscribe_session( res, NULL, &iter, NULL); } static_cast(user_data)-> on_subscribe_finished(iter, error); } void on_notify_status(); void on_browser_deleted(); void on_explore_finished(const GError* error); void on_subscribe_finished(const InfBrowserIter* iter, const GError* error); InfBrowser* m_browser; std::string m_target; std::vector m_path; std::vector::size_type m_path_index; InfBrowserIter m_path_iter; InfRequest* m_request; gulong m_notify_status_id; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATIONSUBSCRIBEPATH_HPP_ gobby-0.6.0/code/operations/operation-new.cpp0000664000175000017500000000563114003367605016143 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-new.hpp" #include "core/noteplugin.hpp" #include "util/i18n.hpp" Gobby::OperationNew::OperationNew(Operations& operations, InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name, bool directory): Operation(operations), m_request(NULL), m_browser(browser), m_parent(*parent), m_name(name), m_directory(directory) { g_object_ref(browser); } Gobby::OperationNew::~OperationNew() { if(m_request != NULL) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_request_finished_static), this); g_object_unref(m_request); get_status_bar().remove_message(m_message_handle); } g_object_unref(m_browser); } void Gobby::OperationNew::start() { InfRequest* request; if(m_directory) { request = inf_browser_add_subdirectory( m_browser, &m_parent, m_name.c_str(), NULL, on_request_finished_static, this); } else { request = inf_browser_add_note( m_browser, &m_parent, m_name.c_str(), "InfText", NULL, NULL, TRUE, on_request_finished_static, this); } if(request != NULL) { m_request = request; g_object_ref(m_request); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( m_directory ? _("Creating directory \"%1\"...") : _("Creating document \"%1\"..."), m_name)); } } void Gobby::OperationNew::on_request_finished(const InfBrowserIter* iter, const GError* error) { if(error) { const Glib::ustring prefix = Glib::ustring::compose( m_directory ? _("Failed to create directory \"%1\""): _("Failed to create document \"%1\""), m_name); get_status_bar().add_error_message(prefix, error->message); fail(); } else { if(!m_directory) { InfSessionProxy* proxy = inf_browser_get_session(m_browser, iter); g_assert(proxy != NULL); get_folder_manager().add_document( m_browser, iter, proxy, NULL); } finish(); } } gobby-0.6.0/code/operations/operation-subscribe-path.cpp0000664000175000017500000002553014003367605020265 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-subscribe-path.hpp" #include "util/i18n.hpp" #include "util/uri.hpp" namespace { std::vector split_path(const std::string& path) { std::vector result; if(path.empty()) return result; if(path[0] != '/') { throw std::runtime_error( Glib::ustring::compose( Gobby::_("Invalid path: \"%1\""), path)); } std::string::size_type prev = 1, pos; while( (pos = path.find('/', prev)) != std::string::npos) { std::string component = path.substr(prev, pos - prev); if(component.empty()) { throw std::runtime_error( Glib::ustring::compose( Gobby::_("Invalid path " "component: \"%1\""), component)); } result.push_back(component); prev = pos + 1; } // Trailing '/' is allowed std::string component = path.substr(prev); if(!component.empty()) result.push_back(component); return result; } std::string make_path_string(const std::vector& path) { std::string result; for(std::vector::const_iterator iter = path.begin(); iter != path.end(); ++iter) { result += "/"; result += *iter; } return result; } } Gobby::OperationSubscribePath::OperationSubscribePath(Operations& operations, const std::string& uri): Operation(operations), m_browser(NULL), m_target(uri), m_request(NULL), m_notify_status_id(0), m_message_handle(get_status_bar().invalid_handle()) { } Gobby::OperationSubscribePath::OperationSubscribePath(Operations& operations, InfBrowser* inf_browser, const std::string& p): Operation(operations), m_browser(inf_browser), m_target(p), m_request(NULL), m_notify_status_id(0), m_message_handle(get_status_bar().invalid_handle()) { g_object_weak_ref(G_OBJECT(m_browser), on_browser_deleted_static, this); } Gobby::OperationSubscribePath::~OperationSubscribePath() { if(m_request != NULL) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_subscribe_finished_static), this); g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_explore_finished_static), this); } if(m_notify_status_id != 0) g_signal_handler_disconnect(m_browser, m_notify_status_id); if(m_message_handle != get_status_bar().invalid_handle()) get_status_bar().remove_message(m_message_handle); if(m_browser != NULL) { g_object_weak_unref(G_OBJECT(m_browser), on_browser_deleted_static, this); } } void Gobby::OperationSubscribePath::start() { try { if(m_browser) { m_path = split_path(m_target); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Subscribing to \"%1\"..."), m_target)); start_with_browser(); } else { start_without_browser(); } } catch(const std::exception& ex) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to connect to \"%1\""), m_target), ex.what()); fail(); } } void Gobby::OperationSubscribePath::start_without_browser() { std::string scheme, netloc, path; parse_uri(m_target, scheme, netloc, path); if(scheme != "infinote") { throw std::runtime_error( Glib::ustring::compose( _("URI scheme \"%1\" not supported"), scheme)); } m_path = split_path(path); std::string hostname, service; unsigned int device_index; parse_netloc(netloc, hostname, service, device_index); try { m_browser = get_browser().add_remote( hostname, service, device_index, true); g_assert(m_browser != NULL); // We need a weak reference on the browser, so that we can // cancel the operation in case it disappears. This happens // when the connection manager notices that a connection to // the host which the new connection is trying to connect to // exists already. g_object_weak_ref(G_OBJECT(m_browser), on_browser_deleted_static, this); if(m_path.empty()) { m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Connecting to \"%1\"..."), m_target)); } else { m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Subscribing to \"%1\"..."), m_target)); } start_with_browser(); } catch(const std::exception& ex) { if(m_path.empty()) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to connect to \"%1\""), m_target), ex.what()); } else { get_status_bar().add_error_message( Glib::ustring::compose( _("Could not subscribe to \"%1\""), m_target), ex.what()); } fail(); } } void Gobby::OperationSubscribePath::start_with_browser() { InfBrowserStatus status; g_object_get(G_OBJECT(m_browser), "status", &status, NULL); if(status == INF_BROWSER_OPEN) { inf_browser_get_root(m_browser, &m_path_iter); m_path_index = 0; explore(); } else { m_notify_status_id = g_signal_connect( G_OBJECT(m_browser), "notify::status", G_CALLBACK(on_notify_status_static), this); } } void Gobby::OperationSubscribePath::explore() { if(m_path_index == m_path.size()) { // We are done get_browser().set_selected(m_browser, &m_path_iter); if(inf_browser_is_subdirectory(m_browser, &m_path_iter)) { finish(); } else { InfSessionProxy* proxy = inf_browser_get_session( m_browser, &m_path_iter); if(proxy != NULL) { InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); SessionView* view = get_folder_manager().lookup_document( session); g_object_unref(session); if(view != NULL) { get_folder_manager(). switch_to_document( *view); } else { get_folder_manager().add_document( m_browser, &m_path_iter, proxy, NULL); } finish(); } else { make_subscribe_request(); } } } else { if(inf_browser_is_subdirectory(m_browser, &m_path_iter)) { // This is a subdirectory node. Explore it. if(inf_browser_get_explored(m_browser, &m_path_iter)) { descend(); } else { make_explore_request(); } } else { // This is a leaf node. This is an error, since we // did not yet end up at the end of the path. get_browser().set_selected(m_browser, &m_path_iter); get_status_bar().remove_message(m_message_handle); get_status_bar().add_error_message( Glib::ustring::compose( _("Could not subscribe to \"%1\""), m_target), Glib::ustring::compose( _("Path \"%1\" does not exist"), make_path_string(m_path))); fail(); } } } void Gobby::OperationSubscribePath::descend() { g_assert(m_path_index < m_path.size()); g_assert(inf_browser_is_subdirectory(m_browser, &m_path_iter)); g_assert(inf_browser_get_explored(m_browser, &m_path_iter)); if(inf_browser_get_child(m_browser, &m_path_iter)) { do { const char* name = inf_browser_get_node_name( m_browser, &m_path_iter); if(m_path[m_path_index] == name) { ++m_path_index; explore(); return; } } while(inf_browser_get_next(m_browser, &m_path_iter)); } // Cannot find child get_status_bar().remove_message(m_message_handle); m_message_handle = get_status_bar().invalid_handle(); get_status_bar().add_error_message( Glib::ustring::compose( _("Could not subscribe to \"%1\""), m_target), Glib::ustring::compose( _("Path \"%1\" does not exist"), make_path_string(m_path))); fail(); } void Gobby::OperationSubscribePath::make_explore_request() { g_assert(m_request == NULL); m_request = inf_browser_get_pending_request( m_browser, &m_path_iter, "explore-node"); if(m_request == NULL) { m_request = inf_browser_explore( m_browser, &m_path_iter, on_explore_finished_static, this); } else { g_signal_connect( G_OBJECT(m_request), "finished", G_CALLBACK(on_explore_finished_static), this); } } void Gobby::OperationSubscribePath::make_subscribe_request() { g_assert(m_request == NULL); m_request = inf_browser_get_pending_request( m_browser, &m_path_iter, "subscribe-session"); if(m_request == NULL) { m_request = inf_browser_subscribe( m_browser, &m_path_iter, on_subscribe_finished_static, this); } else { g_signal_connect( G_OBJECT(m_request), "finished", G_CALLBACK(on_subscribe_finished_static), this); } } void Gobby::OperationSubscribePath::on_notify_status() { InfBrowserStatus status; g_object_get(G_OBJECT(m_browser), "status", &status, NULL); switch(status) { case INF_BROWSER_OPEN: g_signal_handler_disconnect(m_browser, m_notify_status_id); m_notify_status_id = 0; inf_browser_get_root(m_browser, &m_path_iter); m_path_index = 0; explore(); break; case INF_BROWSER_OPENING: break; case INF_BROWSER_CLOSED: // Don't set an error message, the user will already be // notified by the closed browser. fail(); break; default: g_assert_not_reached(); break; } } void Gobby::OperationSubscribePath::on_browser_deleted() { m_browser = NULL; m_notify_status_id = 0; // Don't set an error message, the user will already be // notified by the closed browser. fail(); } void Gobby::OperationSubscribePath::on_explore_finished(const GError* error) { m_request = NULL; if(error != NULL) { get_status_bar().add_error_message( Glib::ustring::compose( _("Could not subscribe to \"%1\""), m_target), error->message); fail(); } else { descend(); } } void Gobby::OperationSubscribePath::on_subscribe_finished( const InfBrowserIter* iter, const GError* error) { m_request = NULL; if(error != NULL) { get_status_bar().add_error_message( Glib::ustring::compose( _("Could not subscribe to \"%1\""), m_target), error->message); fail(); } else { InfSessionProxy* proxy = inf_browser_get_session(m_browser, iter); g_assert(proxy != NULL); get_folder_manager().add_document( m_browser, iter, proxy, NULL); /* From this point on subscription-commands takes over */ finish(); } } gobby-0.6.0/code/operations/operation-save.hpp0000664000175000017500000000531714003367605016316 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATION_SAVE_HPP_ #define _GOBBY_OPERATIONS_OPERATION_SAVE_HPP_ #include "operations/operations.hpp" #include "core/documentinfostorage.hpp" #include #include #include #include namespace Gobby { class OperationSave: public Operations::Operation, public sigc::trackable { public: // TODO: This should maybe just take a text buffer to save, not a // textsessionview. OperationSave(Operations& operations, TextSessionView& view, const Glib::RefPtr& file, const std::string& encoding, DocumentInfoStorage::EolStyle eol_style); virtual ~OperationSave(); virtual void start(); // Note these can return NULL in case the view has been closed // in the meanwhile. TextSessionView* get_view() { return m_view; } const TextSessionView* get_view() const { return m_view; } std::time_t get_start_time() const { return m_start_time; } protected: void on_document_removed(SessionView& view); void on_file_replace(const Glib::RefPtr& result); void on_stream_write(const Glib::RefPtr& result); void attempt_next(); void write_next(); void error(const Glib::ustring& message); protected: const Glib::RefPtr m_file; TextSessionView* m_view; std::time_t m_start_time; typedef std::pair Line; std::list m_lines; std::list::iterator m_current_line; std::size_t m_current_line_index; std::string m_encoding; DocumentInfoStorage::EolStyle m_eol_style; std::string m_storage_key; Glib::IConv m_iconv; static const std::size_t BUFFER_SIZE = 1024; char m_buffer[BUFFER_SIZE]; std::size_t m_buffer_size; std::size_t m_buffer_index; Glib::RefPtr m_stream; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATION_SAVE_HPP_ gobby-0.6.0/code/operations/operation-open.cpp0000664000175000017500000003074014003367605016312 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-open.hpp" #include "core/noteplugin.hpp" #include "util/i18n.hpp" #include #include #include #include #include // memmove. Is there some C++ replacement for this? namespace { // These are the charsets that we try to convert a file from when // autodetecting the encoding. const char* get_autodetect_encoding(unsigned int index) { // Translators: This is the 8 bit encoding that is tried when // autodetecting a file's encoding. static const char* DEFAULT_8BIT_ENCODING = N_("ISO-8859-1"); static const char* ENCODINGS[] = { "UTF-8", DEFAULT_8BIT_ENCODING, "UTF-16", "UCS-2", "UCS-4" }; static const unsigned int N_ENCODINGS = sizeof(ENCODINGS)/sizeof(ENCODINGS[0]); if(index == 1) return Gobby::_(ENCODINGS[index]); if(index < N_ENCODINGS) return ENCODINGS[index]; return NULL; } } Gobby::OperationOpen::OperationOpen(Operations& operations, const Preferences& preferences, InfBrowser* browser, const InfBrowserIter* parent, const std::string& name, const Glib::RefPtr& file, const char* encoding): Operation(operations), m_preferences(preferences), m_name(name), m_file(file), m_parent(browser, parent), m_encoding_auto_detect_index(-1), m_eol_style(DocumentInfoStorage::EOL_CR), m_request(NULL), m_raw_pos(0), m_content(NULL), m_message_handle(get_status_bar().invalid_handle()) { if(encoding != NULL) { m_encoding = encoding; } else { m_encoding_auto_detect_index = 0; m_encoding = get_autodetect_encoding(0); } } Gobby::OperationOpen::~OperationOpen() { // TODO: Cancel outstanding async operations? if(m_request != NULL) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_request_finished_static), this); g_object_unref(m_request); } if(m_content != NULL) g_object_unref(m_content); if(m_message_handle != get_status_bar().invalid_handle()) get_status_bar().remove_message(m_message_handle); } void Gobby::OperationOpen::start() { m_iconv.reset(new Glib::IConv("UTF-8", m_encoding)); try { m_file->read_async(sigc::mem_fun( *this, &OperationOpen::on_file_read)); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Opening document \"%1\"..."), m_file->get_uri())); m_parent.signal_node_removed().connect( sigc::mem_fun( *this, &OperationOpen::on_node_removed)); m_content = GTK_TEXT_BUFFER(gtk_source_buffer_new(NULL)); } catch(const Gio::Error& err) { error(err.what()); } } void Gobby::OperationOpen::on_node_removed() { error(_("The directory into which the new document " "was supposed to be inserted has been removed")); } void Gobby::OperationOpen::on_file_read( const Glib::RefPtr& result) { try { m_stream = m_file->read_finish(result); m_buffer.reset(new buffer); m_stream->read_async( m_buffer->buf, buffer::SIZE, sigc::mem_fun(*this, &OperationOpen::on_stream_read)); } catch(const Glib::Exception& ex) { error(ex.what()); } } void Gobby::OperationOpen::on_stream_read( const Glib::RefPtr& result) { try { gssize size = m_stream->read_finish(result); // Close stream after reading, this signals the idle handler // that all data has been read from the file. if(size <= 0) { m_stream->close(); m_stream.reset(); m_buffer.reset(NULL); // If the idle handler is not connected, then we have // already processed all the data. if(!m_idle_connection.connected()) read_finish(); } else { m_raw_content.insert(m_raw_content.end(), m_buffer->buf, m_buffer->buf + size); // Process read data in an idle handler if(!m_idle_connection.connected()) { m_idle_connection = Glib::signal_idle().connect( sigc::mem_fun(*this, &OperationOpen:: on_idle)); } m_stream->read_async( m_buffer->buf, buffer::SIZE, sigc::mem_fun( *this, &OperationOpen::on_stream_read)); } } catch(const Glib::Exception& ex) { error(ex.what()); } } bool Gobby::OperationOpen::on_idle() { static const unsigned int CONVERT_BUFFER_SIZE = 1024; const char* inbuffer = &m_raw_content[m_raw_pos]; char* inbuf = const_cast(inbuffer); gsize inbytes = m_raw_content.size() - m_raw_pos; char outbuffer[CONVERT_BUFFER_SIZE]; gchar* outbuf = outbuffer; gsize outbytes = CONVERT_BUFFER_SIZE; /* iconv is defined as libiconv on Windows, or at least when using the * binary packages from ftp.gnome.org. Therefore we can't propely * call Glib::IConv::iconv. Therefore, we use the C API here. */ const std::size_t result = g_iconv(m_iconv->gobj(), &inbuf, &inbytes, &outbuf, &outbytes); bool more_to_process = (inbytes != 0); if(result == static_cast(-1)) { if(errno == EILSEQ) { // Invalid text for the current encoding encoding_error(); return false; } if(errno == EINVAL) { // If EINVAL is set, this means that an incomplete // multibyte sequence was at the end of the input. // We might have some more bytes, but those do not // make up a whole character, so we need to wait for // more input. if(!m_stream) { // However, if we already read all input, then // there is no more input to come. We // consider this an error since the file // should not end with an incomplete multibyte // sequence. encoding_error(); return false; } else { // Otherwise, we need to wait for more data // to process. more_to_process = false; } } } m_raw_pos += (inbuf - inbuffer); // We now have outbuf - outbuffer bytes of valid UTF-8 in outbuffer. char* prev = outbuffer; char* pos; const char to_find[] = { '\r', '\n', '\0' }; /* TODO: Write directly into the buffer here, * instead of memmoving stuff. */ while( (pos = std::find_first_of(prev, outbuf, to_find, to_find + sizeof(to_find))) != outbuf) { if(*pos == '\0') { // There is a nullbyte in the conversion. As normal // text files don't contain nullbytes, this only // occurs when converting for example a UTF-16 from // ISO-8859-1 to UTF-8 (note that the UTF-16 file is // valid ISO-8859-1, it just contains lots of // nullbytes). We therefore produce an error here. encoding_error(); return false; } else { // We convert everything to '\n' as line separator, // but remember the current eol-style to correctly // save the document back to disk. prev = pos + 1; if(*pos == '\r' && prev != outbuf && *prev == '\n') { // CRLF style line break std::memmove(prev, prev + 1, outbuf - prev - 1); m_eol_style = DocumentInfoStorage::EOL_CRLF; --outbuf; } else if(*pos == '\r') { *pos = '\n'; m_eol_style = DocumentInfoStorage::EOL_CR; } else { m_eol_style = DocumentInfoStorage::EOL_LF; } } } GtkTextIter insert_iter; gtk_text_buffer_get_end_iter(m_content, &insert_iter); gtk_text_buffer_insert(m_content, &insert_iter, outbuffer, outbuf - outbuffer); // Done reading and converting the whole file if(!more_to_process && !m_stream) read_finish(); return more_to_process; } void Gobby::OperationOpen::encoding_error() { if(m_encoding_auto_detect_index == -1) { error(_("The file contains data not in the " "specified encoding")); } else { ++ m_encoding_auto_detect_index; const char* next_encoding = get_autodetect_encoding( m_encoding_auto_detect_index); if(next_encoding == NULL) { error(_("The file either contains data in an unknown " "encoding, or it contains binary data.")); } else { // Delete current content: GtkTextIter start_iter, end_iter; gtk_text_buffer_get_start_iter(m_content, &start_iter); gtk_text_buffer_get_end_iter(m_content, &end_iter); gtk_text_buffer_delete(m_content, &start_iter, &end_iter); m_raw_pos = 0; m_encoding = next_encoding; m_iconv.reset(new Glib::IConv("UTf-8", m_encoding)); // Read again, try with next encoding. m_idle_connection = Glib::signal_idle().connect( sigc::mem_fun(*this, &OperationOpen::on_idle)); } } } void Gobby::OperationOpen::read_finish() { // If the last character is a newline character, remove it. GtkTextIter end_iter, test_iter; gtk_text_buffer_get_end_iter(m_content, &end_iter); test_iter = end_iter; if(gtk_text_iter_backward_char(&test_iter)) { if(gtk_text_iter_get_char(&test_iter) == '\n') { gtk_text_buffer_delete( m_content, &test_iter, &end_iter); } } gtk_text_buffer_set_modified(m_content, FALSE); GtkTextIter insert_iter; GtkTextMark* insert = gtk_text_buffer_get_insert(m_content); gtk_text_buffer_get_iter_at_mark(m_content, &insert_iter, insert); InfUser* user = INF_USER(g_object_new( INF_TEXT_TYPE_USER, "id", 1, "flags", INF_USER_LOCAL, "name", m_preferences.user.name.get().c_str(), /* The user is made active when the user * switches to the document. */ "status", INF_USER_INACTIVE, "hue", m_preferences.user.hue.get(), "caret-position", gtk_text_iter_get_offset(&insert_iter), static_cast(NULL))); InfUserTable* user_table = inf_user_table_new(); inf_user_table_add_user(user_table, user); g_object_unref(user); InfTextGtkBuffer* text_gtk_buffer = inf_text_gtk_buffer_new(m_content, user_table); g_object_unref(user_table); ConnectionManager& connection_manager = get_browser().get_connection_manager(); InfCommunicationManager* communication_manager = connection_manager.get_communication_manager(); InfBrowser* browser = m_parent.get_browser(); InfIo* io; g_object_get(G_OBJECT(browser), "io", &io, NULL); InfTextSession* session = inf_text_session_new_with_user_table( communication_manager, INF_TEXT_BUFFER(text_gtk_buffer), io, user_table, INF_SESSION_RUNNING, NULL, NULL); g_object_unref(io); g_object_unref(text_gtk_buffer); InfRequest* request = inf_browser_add_note( m_parent.get_browser(), m_parent.get_browser_iter(), m_name.c_str(), "InfText", NULL, INF_SESSION(session), TRUE, on_request_finished_static, this); g_object_unref(session); if(request != NULL) { m_request = request; g_object_ref(m_request); // TODO: We can remove the node watch here, but need to have // the browser available in on_request_finished then. Maybe // just disconnect the signal, or bind it. } } void Gobby::OperationOpen::on_request_finished(const InfBrowserIter* iter, const GError* error) { if(error != NULL) { OperationOpen::error(error->message); } else { // Store document info so that we know where we loaded the // file from, so we don't have to ask the user where to store // it when s/he wants to save it again. DocumentInfoStorage::Info info; info.uri = m_file->get_uri(); info.encoding = m_encoding; info.eol_style = m_eol_style; get_info_storage().set_info( m_parent.get_browser(), iter, info); InfSessionProxy* proxy = inf_browser_get_session(m_parent.get_browser(), iter); g_assert(proxy != NULL); get_folder_manager().add_document( m_parent.get_browser(), iter, proxy, NULL); finish(); } } void Gobby::OperationOpen::error(const Glib::ustring& message) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to open document \"%1\""), m_file->get_uri()), message); fail(); } gobby-0.6.0/code/operations/operation-export-html.hpp0000664000175000017500000000353214003367605017640 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATION_EXPORT_HTML_HPP_ #define _GOBBY_OPERATIONS_OPERATION_EXPORT_HTML_HPP_ #include "operations/operations.hpp" #include "core/documentinfostorage.hpp" #include #include #include namespace Gobby { class OperationExportHtml: public Operations::Operation, public sigc::trackable { public: OperationExportHtml(Operations& operations, TextSessionView& view, const Glib::RefPtr& file); virtual ~OperationExportHtml(); virtual void start(); protected: void on_file_replace(const Glib::RefPtr& result); void on_stream_write(const Glib::RefPtr& result); void error(const Glib::ustring& message); protected: const std::string m_title; const Glib::RefPtr m_file; const std::string m_xml; std::string::size_type m_index; Glib::RefPtr m_stream; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATION_EXPORT_HTML_HPP_ gobby-0.6.0/code/operations/operation-delete.hpp0000664000175000017500000000341314003367605016615 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATIONDELETE_HPP_ #define _GOBBY_OPERATIONS_OPERATIONDELETE_HPP_ #include "operations/operations.hpp" namespace Gobby { class OperationDelete: public Operations::Operation { public: OperationDelete(Operations& operations, InfBrowser* browser, const InfBrowserIter* iter); virtual ~OperationDelete(); virtual void start(); protected: static void on_request_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { static_cast(user_data)-> on_request_finished(error); } void on_request_finished(const GError* error); protected: InfBrowser* m_browser; const InfBrowserIter m_iter; const Glib::ustring m_name; InfRequest* m_request; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATIONDELETE_HPP_ gobby-0.6.0/code/operations/operations.cpp0000664000175000017500000001401614003367605015534 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-new.hpp" #include "operations/operation-open.hpp" #include "operations/operation-open-multiple.hpp" #include "operations/operation-save.hpp" #include "operations/operation-delete.hpp" #include "operations/operation-subscribe-path.hpp" #include "operations/operation-export-html.hpp" #include "operations/operations.hpp" #include "core/noteplugin.hpp" #include "util/i18n.hpp" Gobby::Operations::Operation::~Operation() {} Gobby::Operations::Operations(DocumentInfoStorage& info_storage, Browser& browser, FolderManager& folder_manager, StatusBar& status_bar): m_info_storage(info_storage), m_browser(browser), m_folder_manager(folder_manager), m_status_bar(status_bar) { } Gobby::Operations::~Operations() { for(OperationSet::iterator iter = m_operations.begin(); iter != m_operations.end(); ++ iter) { delete *iter; } } Gobby::OperationNew* Gobby::Operations::create_directory(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name) { OperationNew* op = new OperationNew(*this, browser, parent, name, true); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationNew* Gobby::Operations::create_document(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name) { OperationNew* op = new OperationNew(*this, browser, parent, name, false); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationOpen* Gobby::Operations::create_document(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name, const Preferences& preferences, const Glib::RefPtr& file, const char* encoding) { OperationOpen* op = new OperationOpen(*this, preferences, browser, parent, name, file, encoding); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationOpenMultiple* Gobby::Operations::create_documents(InfBrowser* browser, const InfBrowserIter* parent, const Preferences& prefs, const file_list& files) { OperationOpenMultiple* op = new OperationOpenMultiple(*this, prefs, browser, parent, files); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationSave* Gobby::Operations::save_document(TextSessionView& view, const Glib::RefPtr& file, const std::string& encoding, DocumentInfoStorage::EolStyle eol_style) { OperationSave* prev_op = get_save_operation_for_document(view); // Cancel previous save operation: if(prev_op != NULL) fail_operation(prev_op); OperationSave* op = new OperationSave(*this, view, file, encoding, eol_style); m_operations.insert(op); m_signal_begin_save_operation.emit(op); op->start(); return check_operation(op); } Gobby::OperationDelete* Gobby::Operations::delete_node(InfBrowser* browser, const InfBrowserIter* iter) { OperationDelete* op = new OperationDelete(*this, browser, iter); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationSubscribePath* Gobby::Operations::subscribe_path(const std::string& uri) { OperationSubscribePath* op = new OperationSubscribePath(*this, uri); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationSubscribePath* Gobby::Operations::subscribe_path(InfBrowser* browser, const std::string& path) { OperationSubscribePath* op = new OperationSubscribePath(*this, browser, path); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationExportHtml* Gobby::Operations::export_html(TextSessionView& view, const Glib::RefPtr& file) { OperationExportHtml* op = new OperationExportHtml(*this, view, file); m_operations.insert(op); op->start(); return op; } Gobby::OperationSave* Gobby::Operations::get_save_operation_for_document(TextSessionView& view) { for(OperationSet::iterator iter = m_operations.begin(); iter != m_operations.end(); ++ iter) { Operation* op = *iter; OperationSave* save_op = dynamic_cast(op); if(save_op != NULL) { if(save_op->get_view() == &view) return save_op; } } return NULL; } void Gobby::Operations::finish_operation(Operation* operation) { m_operations.erase(operation); operation->signal_finished().emit(true); delete operation; } void Gobby::Operations::fail_operation(Operation* operation) { m_operations.erase(operation); operation->signal_finished().emit(false); delete operation; } gobby-0.6.0/code/application.hpp0000664000175000017500000000303214003367605013472 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_APPLICATION_HPP_ #define _GOBBY_APPLICATION_HPP_ #include "window.hpp" #include namespace Gobby { class Application: public Gtk::Application { public: static Glib::RefPtr create(); protected: int on_handle_local_options( const Glib::RefPtr& options_dict); virtual void on_startup(); virtual void on_activate(); virtual void on_open(const type_vec_files& files, const Glib::ustring& hint); void handle_error(const std::string& message); class Data; std::unique_ptr m_data; Application(); std::unique_ptr m_window; Gobby::Window* m_gobby_window; }; } #endif // _GOBBY_APPLICATION_HPP_ gobby-0.6.0/code/dialogs/0000775000175000017500000000000014005504730012154 500000000000000gobby-0.6.0/code/dialogs/password-dialog.hpp0000664000175000017500000000274014003367605015715 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_PASSWORDDIALOG_HPP_ #define _GOBBY_PASSWORDDIALOG_HPP_ #include #include #include namespace Gobby { class PasswordDialog: public Gtk::Dialog { private: PasswordDialog(const Glib::RefPtr& builder, const Glib::ustring& remote_id, unsigned int retry_counter); public: static std::unique_ptr create( Gtk::Window& parent, const Glib::ustring& remote_id, unsigned int retry_counter); Glib::ustring get_password() const; protected: virtual void on_show(); Gtk::Entry* m_entry; }; } #endif // _GOBBY_PASSWORDDIALOG_HPP_ gobby-0.6.0/code/dialogs/connection-info-dialog.cpp0000664000175000017500000002157114003367605017141 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/connection-info-dialog.hpp" #include "util/i18n.hpp" #include Gobby::ConnectionInfoDialog::ConnectionInfoDialog( GtkDialog* cobject, const Glib::RefPtr& builder) : Gtk::Dialog(cobject), m_browser(NULL), m_connection_store(Gtk::ListStore::create(m_columns)), m_connection_added_handler(0), m_connection_removed_handler(0), m_empty(true) { builder->get_widget("image", m_image); builder->get_widget("treeview", m_connection_tree_view); builder->get_widget("scrolled-window", m_connection_scroll); m_connection_view = INF_GTK_CONNECTION_VIEW( gtk_builder_get_object(builder->gobj(), "connection-info")); m_connection_tree_view->set_model(m_connection_store); Gtk::CellRendererPixbuf* icon_renderer = Gtk::manage(new Gtk::CellRendererPixbuf); Gtk::CellRendererText* name_renderer = Gtk::manage(new Gtk::CellRendererText); Gtk::TreeViewColumn* column = Gtk::manage(new Gtk::TreeViewColumn(_("Connections"))); column->pack_start(*icon_renderer, false); column->pack_start(*name_renderer, true); column->set_cell_data_func( *icon_renderer, sigc::mem_fun(*this, &ConnectionInfoDialog::icon_cell_data_func)); column->set_cell_data_func( *name_renderer, sigc::mem_fun(*this, &ConnectionInfoDialog::name_cell_data_func)); m_connection_tree_view->append_column(*column); Glib::RefPtr selection = m_connection_tree_view->get_selection(); selection->signal_changed().connect( sigc::mem_fun(*this, &ConnectionInfoDialog::on_selection_changed)); } Gobby::ConnectionInfoDialog::~ConnectionInfoDialog() { set_browser(NULL); } std::unique_ptr Gobby::ConnectionInfoDialog::create(Gtk::Window& parent, InfBrowser* browser) { // Make sure the GType for InfGtkConnectionView is registered, // since the UI definition contains a widget of this kind, and // GtkBuilder will want to look it up. // Also, make sure the call does not get optimized out. GType type = inf_gtk_connection_view_get_type(); if(type == 0) throw std::logic_error("inf_gtk_connection_view_get_type"); Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/connection-info-dialog.ui"); ConnectionInfoDialog* dialog_ptr; builder->get_widget_derived("ConnectionInfoDialog", dialog_ptr); std::unique_ptr dialog(dialog_ptr); dialog->set_transient_for(parent); dialog->set_browser(browser); return dialog; } void Gobby::ConnectionInfoDialog::set_browser(InfBrowser* browser) { if(m_browser != NULL) { if(m_connection_added_handler != 0) { g_signal_handler_disconnect( G_OBJECT(m_browser), m_connection_added_handler); } if(m_connection_removed_handler != 0) { g_signal_handler_disconnect( G_OBJECT(m_browser), m_connection_removed_handler); } g_object_unref(m_browser); } m_browser = browser; if(m_browser != NULL) g_object_ref(m_browser); if(INFC_IS_BROWSER(browser)) { m_empty = false; InfXmlConnection* conn = infc_browser_get_connection( INFC_BROWSER(browser)); if(INF_IS_XMPP_CONNECTION(conn)) { inf_gtk_connection_view_set_connection( m_connection_view, INF_XMPP_CONNECTION(conn)); } /* TODO: Show this corresponding to connection status, or * network-server if we are a server. */ m_image->set_from_icon_name( "network-idle", Gtk::ICON_SIZE_DIALOG); m_connection_scroll->hide(); } else if(INFD_IS_DIRECTORY(browser)) { m_connection_store->clear(); m_empty = true; infd_directory_foreach_connection( INFD_DIRECTORY(browser), &ConnectionInfoDialog::foreach_connection_func_static, this); m_connection_added_handler = g_signal_connect( G_OBJECT(browser), "connection-added", G_CALLBACK(on_connection_added_static), this); m_connection_removed_handler = g_signal_connect( G_OBJECT(browser), "connection-removed", G_CALLBACK(on_connection_removed_static), this); Glib::RefPtr selection = m_connection_tree_view->get_selection(); if(m_empty) { selection->set_mode(Gtk::SELECTION_NONE); Gtk::TreeIter iter = m_connection_store->append(); (*iter)[m_columns.connection] = NULL; } else { selection->set_mode(Gtk::SELECTION_BROWSE); } m_image->set_from_icon_name( "network-server", Gtk::ICON_SIZE_DIALOG); } if(!m_empty) gtk_widget_show(GTK_WIDGET(m_connection_view)); else gtk_widget_hide(GTK_WIDGET(m_connection_view)); } void Gobby::ConnectionInfoDialog::foreach_connection_func( InfXmlConnection* conn) { if(INF_IS_XMPP_CONNECTION(conn)) { g_assert(find_connection(INF_XMPP_CONNECTION(conn)) == m_connection_store->children().end()); if(m_empty) m_connection_store->clear(); Gtk::TreeIter iter = m_connection_store->append(); (*iter)[m_columns.connection] = INF_XMPP_CONNECTION(conn); if(m_empty) { gtk_widget_show(GTK_WIDGET(m_connection_view)); m_connection_tree_view->get_selection()-> set_mode(Gtk::SELECTION_BROWSE); m_connection_tree_view->get_selection()->select(iter); m_empty = false; } } } void Gobby::ConnectionInfoDialog::on_connection_added( InfXmlConnection* conn) { if(INF_IS_XMPP_CONNECTION(conn)) { g_assert(find_connection(INF_XMPP_CONNECTION(conn)) == m_connection_store->children().end()); if(m_empty) m_connection_store->clear(); Gtk::TreeIter iter = m_connection_store->append(); (*iter)[m_columns.connection] = INF_XMPP_CONNECTION(conn); if(m_empty) { gtk_widget_show(GTK_WIDGET(m_connection_view)); m_connection_tree_view->get_selection()-> set_mode(Gtk::SELECTION_BROWSE); m_connection_tree_view->get_selection()->select(iter); m_empty = false; } } } void Gobby::ConnectionInfoDialog::on_connection_removed( InfXmlConnection* conn) { if(INF_IS_XMPP_CONNECTION(conn)) { Gtk::TreeIter iter = find_connection(INF_XMPP_CONNECTION(conn)); g_assert(iter != m_connection_store->children().end()); m_connection_store->erase(iter); g_assert(!m_empty); if(m_connection_store->children().empty()) { Gtk::TreeIter iter = m_connection_store->append(); (*iter)[m_columns.connection] = NULL; gtk_widget_hide(GTK_WIDGET(m_connection_view)); m_connection_tree_view->get_selection()-> set_mode(Gtk::SELECTION_NONE); m_empty = true; } } } void Gobby::ConnectionInfoDialog::on_selection_changed() { if(m_connection_tree_view->get_selection()->count_selected_rows() > 0) { Gtk::TreeIter iter = m_connection_tree_view->get_selection()-> get_selected(); inf_gtk_connection_view_set_connection( m_connection_view, (*iter)[m_columns.connection]); } else { inf_gtk_connection_view_set_connection( m_connection_view, NULL); } } void Gobby::ConnectionInfoDialog::icon_cell_data_func( Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter) { Gtk::CellRendererPixbuf* pixbuf_renderer = dynamic_cast(renderer); g_assert(pixbuf_renderer); InfXmppConnection* conn = (*iter)[m_columns.connection]; // TODO: stock_size? pixbuf_renderer->property_icon_name() = "network-idle"; pixbuf_renderer->property_visible() = (conn != NULL); } void Gobby::ConnectionInfoDialog::name_cell_data_func( Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter) { Gtk::CellRendererText* text_renderer = dynamic_cast(renderer); g_assert(text_renderer); gchar* hostname; InfXmppConnection* conn = (*iter)[m_columns.connection]; if(conn != NULL) { g_object_get( G_OBJECT(conn), "remote-hostname", &hostname, NULL); text_renderer->property_text() = hostname; g_free(hostname); } else { text_renderer->property_text() = _("Nobody is connected to this computer"); text_renderer->property_wrap_width() = 170; } text_renderer->property_visible() = true; } Gtk::TreeIter Gobby::ConnectionInfoDialog::find_connection( InfXmppConnection* conn) { const Gtk::TreeModel::Children& children = m_connection_store->children(); for(Gtk::TreeIter iter = children.begin(); iter != children.end(); ++iter) { if(conn == (*iter)[m_columns.connection]) return iter; } return children.end(); } gobby-0.6.0/code/dialogs/initial-dialog.cpp0000664000175000017500000002076314003367605015504 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/initial-dialog.hpp" #include "core/credentialsgenerator.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include "features.hpp" #include #include namespace { class InitialCertGenerator { public: InitialCertGenerator(Gobby::CertificateManager& cert_manager, Gobby::StatusBar& status_bar, const std::string& key_filename, const std::string& cert_filename): m_cert_manager(cert_manager), m_status_bar(status_bar), m_key_filename(key_filename), m_cert_filename(cert_filename), m_key(NULL), m_status_handle(m_status_bar.invalid_handle()) { m_key_handle = Gobby::create_key( GNUTLS_PK_RSA, 2048, sigc::mem_fun( *this, &InitialCertGenerator:: on_key_generated)); m_status_handle = m_status_bar.add_info_message( Gobby::_("Generating 2048-bit " "RSA private key...")); } ~InitialCertGenerator() { if(m_key != NULL) gnutls_x509_privkey_deinit(m_key); if(m_status_handle != m_status_bar.invalid_handle()) m_status_bar.remove_message(m_status_handle); } private: void on_key_generated(const Gobby::KeyGeneratorHandle* handle, gnutls_x509_privkey_t key, const GError* error) { m_key_handle.reset(NULL); m_key = key; if(error != NULL) { m_status_bar.add_error_message( Gobby::_("Failed to generate " "private key"), Glib::ustring::compose( Gobby::_("%1\n\nYou can try " "again to create a " "key in the " "Security tab of " "the preferences " "dialog."), error->message)); m_cert_manager.set_private_key( NULL, m_key_filename.c_str(), error); done(); return; } m_crt_handle = Gobby::create_self_signed_certificate( m_key, sigc::mem_fun( *this, &InitialCertGenerator:: on_cert_generated)); } void on_cert_generated( const Gobby::CertificateGeneratorHandle* hndl, gnutls_x509_crt_t cert, const GError* error) { m_status_bar.remove_message(m_status_handle); m_status_handle = m_status_bar.invalid_handle(); m_crt_handle.reset(NULL); m_cert_manager.set_private_key( m_key, m_key_filename.c_str(), NULL); m_key = NULL; if(error != NULL) { m_status_bar.add_error_message( Gobby::_("Failed to generate " "self-signed certificate"), Glib::ustring::compose( Gobby::_("%1\n\nYou can try " "again to create a " "certificate in the " "Security tab of " "the preferences " "dialog."), error->message)); } else { // Note this needs to be allocated with // g_malloc, since it is directly passed and // freed by libinfinity gnutls_x509_crt_t* crt_array = static_cast( g_malloc(sizeof( gnutls_x509_crt_t))); crt_array[0] = cert; m_cert_manager.set_certificates( crt_array, 1, m_cert_filename.c_str(), NULL); } done(); } void done() { delete this; } Gobby::CertificateManager& m_cert_manager; Gobby::StatusBar& m_status_bar; const std::string m_key_filename; const std::string m_cert_filename; gnutls_x509_privkey_t m_key; std::unique_ptr m_key_handle; std::unique_ptr m_crt_handle; Gobby::StatusBar::MessageHandle m_status_handle; }; } Gobby::InitialDialog::InitialDialog( GtkDialog* cobject, const Glib::RefPtr& builder) : Gtk::Dialog(cobject), m_status_bar(NULL), m_preferences(NULL), m_cert_manager(NULL) { builder->get_widget("name-entry", m_name_entry); builder->get_widget_derived("color-button", m_color_button); builder->get_widget("allow-remote-connections", m_remote_allow_connections); builder->get_widget("ask-password", m_remote_require_password); builder->get_widget("password", m_remote_password_entry); builder->get_widget("create-self-signed", m_remote_auth_self); builder->get_widget("use-existing-certificate", m_remote_auth_external); builder->get_widget("private-key-file", m_remote_auth_external_keyfile); builder->get_widget("certificate-file", m_remote_auth_external_certfile); builder->get_widget("remote-connections-grid", m_remote_connections_grid); builder->get_widget("password-grid", m_password_grid); builder->get_widget("certificate-grid", m_certificate_grid); m_remote_allow_connections->signal_toggled().connect( sigc::mem_fun(*this, &Gobby::InitialDialog:: on_remote_allow_connections_toggled)); m_remote_require_password->signal_toggled().connect( sigc::mem_fun(*this, &Gobby::InitialDialog:: on_remote_require_password_toggled)); m_remote_auth_external->signal_toggled().connect( sigc::mem_fun(*this, &Gobby::InitialDialog:: on_remote_auth_external_toggled)); add_button(_("_Close"), Gtk::RESPONSE_CLOSE); } std::unique_ptr Gobby::InitialDialog::create(Gtk::Window& parent, StatusBar& status_bar, Preferences& preferences, CertificateManager& cert_manager) { Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/initial-dialog.ui"); InitialDialog* dialog_ptr; builder->get_widget_derived("InitialDialog", dialog_ptr); std::unique_ptr dialog(dialog_ptr); dialog->set_transient_for(parent); dialog->m_status_bar = &status_bar; dialog->m_preferences = &preferences; dialog->m_cert_manager = &cert_manager; // Set initial values dialog->m_name_entry->set_text(preferences.user.name); dialog->m_color_button->set_hue(preferences.user.hue); dialog->m_remote_allow_connections->set_active( preferences.user.allow_remote_access); dialog->m_remote_require_password->set_active( preferences.user.require_password); dialog->m_remote_password_entry->set_text( static_cast(preferences.user.password)); // Set initial sensitivity dialog->on_remote_allow_connections_toggled(); dialog->on_remote_require_password_toggled(); dialog->on_remote_auth_external_toggled(); return dialog; } void Gobby::InitialDialog::on_response(int id) { m_preferences->user.name = m_name_entry->get_text(); m_preferences->user.hue = m_color_button->get_hue(); m_preferences->user.allow_remote_access = m_remote_allow_connections->get_active(); m_preferences->user.require_password = m_remote_require_password->get_active(); m_preferences->user.password = m_remote_password_entry->get_text(); m_preferences->security.authentication_enabled = true; if(m_remote_auth_self->get_active()) { // The certificate generator takes care of its own: new InitialCertGenerator( *m_cert_manager, *m_status_bar, config_filename("key.pem"), config_filename("cert.pem")); } else { m_preferences->security.certificate_file = m_remote_auth_external_certfile->get_filename(); m_preferences->security.key_file = m_remote_auth_external_keyfile->get_filename(); } hide(); } void Gobby::InitialDialog::on_remote_allow_connections_toggled() { m_remote_connections_grid->set_sensitive( m_remote_allow_connections->get_active()); } void Gobby::InitialDialog::on_remote_require_password_toggled() { m_password_grid->set_sensitive( m_remote_require_password->get_active()); } void Gobby::InitialDialog::on_remote_auth_external_toggled() { m_certificate_grid->set_sensitive( m_remote_auth_external->get_active()); } gobby-0.6.0/code/dialogs/goto-dialog.hpp0000664000175000017500000000347614003367605015032 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_GOTODIALOG_HPP_ #define _GOBBY_GOTODIALOG_HPP_ #include "core/folder.hpp" #include "core/sessionview.hpp" #include #include #include namespace Gobby { class GotoDialog: public Gtk::Dialog { private: friend class Gtk::Builder; GotoDialog(GtkDialog* cobject, const Glib::RefPtr& builder); public: ~GotoDialog(); static std::unique_ptr create(Gtk::Window& parent, const Folder& folder); protected: static void on_changed_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)->on_changed(); } virtual void on_show(); virtual void on_response(int id); void on_document_changed(SessionView* view); void on_changed(); const Folder* m_folder; Gtk::SpinButton* m_entry_line; TextSessionView* m_current_view; gulong m_changed_handler; }; } #endif // _GOBBY_GOTODIALOG_HPP_ gobby-0.6.0/code/dialogs/connection-dialog.cpp0000664000175000017500000000372514003367605016211 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/connection-dialog.hpp" #include "util/i18n.hpp" // TODO: Merge this with entrydialog and passworddialog to a slightly more // generic entry dialog. Gobby::ConnectionDialog::ConnectionDialog( GtkDialog* cobject, const Glib::RefPtr& builder) : Gtk::Dialog(cobject) { builder->get_widget("entry", m_entry); } std::unique_ptr Gobby::ConnectionDialog::create(Gtk::Window& parent) { Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/connection-dialog.ui"); ConnectionDialog* dialog; builder->get_widget_derived("ConnectionDialog", dialog); dialog->set_transient_for(parent); return std::unique_ptr(dialog); } Glib::ustring Gobby::ConnectionDialog::get_host_name() const { return m_entry->get_text(); } void Gobby::ConnectionDialog::on_show() { Gtk::Dialog::on_show(); // We can't do this in the constructor, because the buttons are added // by the caller after the widget has been constructed. set_default_response(Gtk::RESPONSE_ACCEPT); m_entry->select_region(0, m_entry->get_text().length()); m_entry->grab_focus(); } gobby-0.6.0/code/dialogs/find-dialog.hpp0000664000175000017500000000774314003367605015003 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FINDDIALOG_HPP_ #define _GOBBY_FINDDIALOG_HPP_ #include "core/folder.hpp" #include "core/statusbar.hpp" #include "core/sessionview.hpp" #include #include #include #include #include namespace Gobby { class FindDialog: public Gtk::Dialog { private: friend class Gtk::Builder; FindDialog(GtkDialog* cobject, const Glib::RefPtr& builder); public: typedef sigc::signal SignalFindTextChanged; typedef sigc::signal SignalReplaceTextChanged; static std::unique_ptr create(Gtk::Window& parent, const Folder& folder, StatusBar& status_bar); ~FindDialog(); bool get_search_only() const; void set_search_only(bool search_only); Glib::ustring get_find_text() const; Glib::ustring get_replace_text() const; bool find_next(); bool find_previous(); SignalFindTextChanged signal_find_text_changed() const { return m_signal_find_text_changed; } SignalReplaceTextChanged signal_replace_text_changed() const { return m_signal_replace_text_changed; } protected: enum SearchDirection { SEARCH_FORWARD, SEARCH_BACKWARD }; virtual void on_show(); virtual void on_response(int id); void on_document_changed(SessionView* view); void on_active_user_changed(InfUser* user); void on_find_text_changed(); void on_replace_text_changed(); SearchDirection get_direction() const; bool find(); bool replace(); bool replace_all(); // Searches for an occurence with the provided options, selecting the // result, if any. bool find_and_select(const GtkTextIter* from, SearchDirection direction); // Searches for a occurence, beginning from from, and wrapping around // if the corresponding checkbutton is checked. bool find_wrap(const GtkTextIter* from, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end); // Searches for an occurence in the given range bool find_range(const GtkTextIter* from, const GtkTextIter* to, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end); // Searches for an occurence, ignoring whole word only option bool find_range_once(const GtkTextIter* from, const GtkTextIter* to, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end); const Folder* m_folder; StatusBar* m_status_bar; sigc::connection m_active_user_changed_connection; Gtk::Label* m_label_replace; Gtk::Entry* m_entry_find; Gtk::Entry* m_entry_replace; Gtk::CheckButton* m_check_case; Gtk::CheckButton* m_check_whole_word; Gtk::CheckButton* m_check_backwards; Gtk::CheckButton* m_check_wrap_around; Gtk::Button* m_button_replace; Gtk::Button* m_button_replace_all; SignalFindTextChanged m_signal_find_text_changed; SignalReplaceTextChanged m_signal_replace_text_changed; private: void update_sensitivity(); }; } #endif // _GOBBY_FINDDIALOG_HPP_ gobby-0.6.0/code/dialogs/document-location-dialog.cpp0000664000175000017500000001727214003367605017500 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/document-location-dialog.hpp" #include "util/i18n.hpp" Gobby::DocumentLocationDialog::DocumentLocationDialog( GtkDialog* cobject, const Glib::RefPtr& builder) : Gtk::Dialog(cobject), m_filter_model(NULL) { builder->get_widget("document-name-label", m_name_label); builder->get_widget("document-name", m_name_entry); builder->get_widget("location-label", m_location_label); m_view = INF_GTK_BROWSER_VIEW( gtk_builder_get_object(GTK_BUILDER(builder->gobj()), "view")); g_signal_connect(m_view, "selection-changed", G_CALLBACK(on_selection_changed_static), this); add_button(_("_Cancel"), Gtk::RESPONSE_CANCEL); add_button(_("_Open"), Gtk::RESPONSE_ACCEPT); set_response_sensitive(Gtk::RESPONSE_ACCEPT, false); set_default_response(Gtk::RESPONSE_ACCEPT); } std::unique_ptr Gobby::DocumentLocationDialog::create(Gtk::Window& parent, InfGtkBrowserModel* model) { Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/document-location-dialog.ui"); DocumentLocationDialog* dialog_ptr = NULL; builder->get_widget_derived("DocumentLocationDialog", dialog_ptr); std::unique_ptr dialog(dialog_ptr); dialog->set_transient_for(parent); dialog->m_filter_model = inf_gtk_browser_model_filter_new(model); gtk_tree_view_set_model( GTK_TREE_VIEW(dialog->m_view), GTK_TREE_MODEL(dialog->m_filter_model)); g_signal_connect(dialog->m_filter_model, "row-changed", G_CALLBACK(on_row_changed_static), dialog.get()); // Hide non-subdirectories: gtk_tree_model_filter_set_visible_func( GTK_TREE_MODEL_FILTER(dialog->m_filter_model), filter_visible_func_static, dialog.get(), NULL); // Required to filter initial content: gtk_tree_model_filter_refilter( GTK_TREE_MODEL_FILTER(dialog->m_filter_model)); // Default is single document mode: dialog->set_single_document_mode(); return dialog; } Gobby::DocumentLocationDialog::~DocumentLocationDialog() { g_object_unref(m_filter_model); m_filter_model = NULL; } Glib::ustring Gobby::DocumentLocationDialog::get_document_name() const { return m_name_entry->get_text(); } void Gobby::DocumentLocationDialog::set_document_name( const Glib::ustring& document_name) { m_name_entry->set_text(document_name); } InfBrowser* Gobby::DocumentLocationDialog::get_selected_directory( InfBrowserIter* iter) const { GtkTreeIter tree_iter; if(inf_gtk_browser_view_get_selected(m_view, &tree_iter)) { InfGtkBrowserModelStatus status = INF_GTK_BROWSER_MODEL_CONNECTED; GtkTreeIter dummy_iter; if(!gtk_tree_model_iter_parent(GTK_TREE_MODEL(m_filter_model), &dummy_iter, &tree_iter)) { gtk_tree_model_get( GTK_TREE_MODEL(m_filter_model), &tree_iter, INF_GTK_BROWSER_MODEL_COL_STATUS, &status, -1); } if(status == INF_GTK_BROWSER_MODEL_CONNECTED) { InfBrowserIter* browser_iter; InfBrowser* browser; gtk_tree_model_get( GTK_TREE_MODEL(m_filter_model), &tree_iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, INF_GTK_BROWSER_MODEL_COL_NODE, &browser_iter, -1); *iter = *browser_iter; inf_browser_iter_free(browser_iter); g_object_unref(browser); return browser; } else { return NULL; } } else { return NULL; } } InfGtkBrowserModel* Gobby::DocumentLocationDialog::get_browser_model() const { return INF_GTK_BROWSER_MODEL( gtk_tree_model_filter_get_model( GTK_TREE_MODEL_FILTER(m_filter_model))); } void Gobby::DocumentLocationDialog::set_single_document_mode() { set_title(_("Select document's target location")); m_location_label->set_text( _("Choose a directory to create the document into:")); m_name_label->show(); m_name_entry->show(); } void Gobby::DocumentLocationDialog::set_multiple_document_mode() { set_title(_("Select documents' target location")); m_location_label->set_text( _("Choose a directory to create the documents into:")); m_name_label->hide(); m_name_entry->hide(); } void Gobby::DocumentLocationDialog::on_show() { Gtk::Dialog::on_show(); if(m_name_entry->get_visible()) { m_name_entry->select_region( 0, m_name_entry->get_text_length()); m_name_entry->grab_focus(); } else { gtk_widget_grab_focus(GTK_WIDGET(m_view)); } } void Gobby::DocumentLocationDialog::on_selection_changed(GtkTreeIter* iter) { gboolean accept_sensitive = false; if(iter != NULL) { GtkTreeIter dummy_iter; if(gtk_tree_model_iter_parent(GTK_TREE_MODEL(m_filter_model), &dummy_iter, iter)) { // Child: Always OK accept_sensitive = true; } else { // Top-level node: Check status InfGtkBrowserModelStatus status; gtk_tree_model_get(GTK_TREE_MODEL(m_filter_model), iter, INF_GTK_BROWSER_MODEL_COL_STATUS, &status, -1); accept_sensitive = (status == INF_GTK_BROWSER_MODEL_CONNECTED); } } set_response_sensitive(Gtk::RESPONSE_ACCEPT, accept_sensitive); } void Gobby::DocumentLocationDialog::on_row_changed(GtkTreePath* path, GtkTreeIter* iter) { // If a toplevel entry is selected, and the status changed to // connected, then make the Accept button sensitive. On the other // hand, if status changed to something else, then // make it insensitive. GtkTreeIter sel_iter; if(inf_gtk_browser_view_get_selected(m_view, &sel_iter)) { // We cannot compare the iterators directly here, since // GtkTreeModelFilter seems to allow two iterators pointing to // the same row but having a different user_data3 field. We // therefore compare the paths instead. GtkTreePath* sel_path = gtk_tree_model_get_path( GTK_TREE_MODEL(m_filter_model), &sel_iter); if(gtk_tree_path_compare(path, sel_path) == 0) { GtkTreeIter dummy_iter; if(!gtk_tree_model_iter_parent( GTK_TREE_MODEL(m_filter_model), &dummy_iter, iter)) { InfGtkBrowserModelStatus s; gtk_tree_model_get( GTK_TREE_MODEL(m_filter_model), iter, INF_GTK_BROWSER_MODEL_COL_STATUS, &s, -1); set_response_sensitive( Gtk::RESPONSE_ACCEPT, s == INF_GTK_BROWSER_MODEL_CONNECTED ); } } gtk_tree_path_free(sel_path); } } bool Gobby::DocumentLocationDialog::filter_visible_func(GtkTreeModel* model, GtkTreeIter* iter) { GtkTreeIter dummy_iter; if(!gtk_tree_model_iter_parent(model, &dummy_iter, iter)) { return true; } else { InfBrowserIter* browser_iter; InfBrowser* browser; gtk_tree_model_get( model, iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, INF_GTK_BROWSER_MODEL_COL_NODE, &browser_iter, -1); bool result = inf_browser_is_subdirectory(browser, browser_iter); inf_browser_iter_free(browser_iter); g_object_unref(browser); return result; } } gobby-0.6.0/code/dialogs/connection-info-dialog.hpp0000664000175000017500000000652614003367605017151 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CONNECTIONINFODIALOG_HPP_ #define _GOBBY_CONNECTIONINFODIALOG_HPP_ #include #include #include #include #include #include #include #include namespace Gobby { class ConnectionInfoDialog: public Gtk::Dialog { friend class Gtk::Builder; ConnectionInfoDialog(GtkDialog* cobject, const Glib::RefPtr& builder); public: ~ConnectionInfoDialog(); static std::unique_ptr create( Gtk::Window& parent, InfBrowser* browser); void set_browser(InfBrowser* browser); private: static void foreach_connection_func_static(InfXmlConnection* conn, gpointer user_data) { static_cast(user_data)-> foreach_connection_func(conn); } static void on_connection_added_static(InfdDirectory* directory, InfXmlConnection* conn, gpointer user_data) { static_cast(user_data)-> on_connection_added(conn); } static void on_connection_removed_static(InfdDirectory* directory, InfXmlConnection* conn, gpointer user_data) { static_cast(user_data)-> on_connection_removed(conn); } void foreach_connection_func(InfXmlConnection* conn); void on_connection_added(InfXmlConnection* conn); void on_connection_removed(InfXmlConnection* conn); void on_selection_changed(); void icon_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter); void name_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter); protected: Gtk::TreeIter find_connection(InfXmppConnection* conn); class Columns: public Gtk::TreeModelColumnRecord { public: Gtk::TreeModelColumn connection; Columns() { add(connection); } }; InfBrowser* m_browser; Columns m_columns; Glib::RefPtr m_connection_store; Gtk::Image* m_image; Gtk::TreeView* m_connection_tree_view; Gtk::ScrolledWindow* m_connection_scroll; InfGtkConnectionView* m_connection_view; gulong m_connection_added_handler; gulong m_connection_removed_handler; bool m_empty; }; } #endif // _GOBBY_CONNECTIONINFODIALOG_HPP_ gobby-0.6.0/code/dialogs/preferences-dialog.cpp0000664000175000017500000006462014003367605016354 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/preferences-dialog.hpp" #include "util/i18n.hpp" #include #include #include #include #include #include namespace { using namespace Gobby; Gtk::WrapMode wrap_mode_from_check_buttons(Gtk::CheckButton& char_button, Gtk::CheckButton& word_button) { if(!char_button.get_active()) return Gtk::WRAP_NONE; else if(!word_button.get_active()) return Gtk::WRAP_CHAR; else return Gtk::WRAP_WORD_CHAR; } template void connect_option(Gtk::CheckButton& checkbutton, Preferences::Option& option) { checkbutton.signal_toggled().connect( sigc::compose( sigc::mem_fun( option, &Preferences::Option::set ), sigc::mem_fun( checkbutton, &Gtk::CheckButton::get_active ) ) ); } template void connect_option(Gtk::Scale& scale, Preferences::Option& option) { scale.signal_value_changed().connect( sigc::compose( sigc::mem_fun( option, &Preferences::Option::set ), sigc::mem_fun( scale, &Gtk::Scale::get_value ) ) ); } template void connect_option(Gtk::SpinButton& spinbutton, Preferences::Option& option) { spinbutton.signal_value_changed().connect( sigc::compose( sigc::mem_fun( option, &Preferences::Option::set ), sigc::mem_fun( spinbutton, &Gtk::SpinButton::get_value ) ) ); } template void connect_option(Gtk::Entry& entry, Preferences::Option& option) { entry.signal_changed().connect( sigc::compose( sigc::mem_fun( option, &Preferences::Option::set ), sigc::mem_fun( entry, &Gtk::Entry::get_text ) ) ); } void connect_wrap_option(Gtk::CheckButton& char_button, Gtk::CheckButton& word_button, Preferences::Option& option) { sigc::slot toggled_slot( sigc::compose( sigc::mem_fun( option, &Preferences::Option< Gtk::WrapMode>::set ), sigc::bind( sigc::ptr_fun( wrap_mode_from_check_buttons), sigc::ref(char_button), sigc::ref(word_button) ) ) ); char_button.signal_toggled().connect(toggled_slot); word_button.signal_toggled().connect(toggled_slot); } void connect_hue_option(Gobby::HueButton& hue_button, Preferences::Option& option) { hue_button.property_color().signal_changed().connect( sigc::compose( sigc::mem_fun( option, &Preferences::Option::set ), sigc::mem_fun( hue_button, &Gobby::HueButton::get_hue ) ) ); } } Gobby::PreferencesDialog::User::User( const Glib::RefPtr& builder, Preferences& preferences) { builder->get_widget("user-name", m_ent_user_name); builder->get_widget_derived("user-color", m_btn_user_color); builder->get_widget("color-intensity", m_scl_user_alpha); builder->get_widget("remote-show-cursors", m_btn_remote_show_cursors); builder->get_widget("remote-show-selections", m_btn_remote_show_selections); builder->get_widget("remote-show-current-line", m_btn_remote_show_current_lines); builder->get_widget("remote-show-in-scrollbar", m_btn_remote_show_cursor_positions); builder->get_widget("grid-local-connections", m_grid_local_connections); builder->get_widget("remote-allow-edit", m_btn_local_allow_connections); builder->get_widget("require-password", m_btn_local_require_password); builder->get_widget("grid-password", m_grid_password); builder->get_widget("password-entry", m_ent_local_password); builder->get_widget("port-number", m_ent_local_port); builder->get_widget("remember-local-documents", m_btn_local_keep_documents); builder->get_widget("grid-local-documents-directory", m_grid_local_documents_directory); builder->get_widget("local-documents-directory", m_btn_local_documents_directory); m_conn_local_documents_directory.reset(new PathConnection( *m_btn_local_documents_directory, preferences.user.host_directory)); m_btn_local_allow_connections->signal_toggled().connect( sigc::mem_fun( *this, &User::on_local_allow_connections_toggled)); m_btn_local_require_password->signal_toggled().connect( sigc::mem_fun( *this, &User::on_local_require_password_toggled)); m_btn_local_keep_documents->signal_toggled().connect( sigc::mem_fun( *this, &User::on_local_keep_documents_toggled)); m_ent_user_name->set_text(preferences.user.name); connect_option(*m_ent_user_name, preferences.user.name); m_btn_user_color->set_hue(preferences.user.hue); m_btn_user_color->set_saturation(0.35); m_btn_user_color->set_value(1.0); connect_hue_option(*m_btn_user_color, preferences.user.hue); m_scl_user_alpha->set_range(0.0, 1.0); m_scl_user_alpha->set_increments(0.0025, 0.1); m_scl_user_alpha->set_value(preferences.user.alpha); connect_option(*m_scl_user_alpha, preferences.user.alpha); m_btn_remote_show_cursors->set_active( preferences.user.show_remote_cursors); connect_option(*m_btn_remote_show_cursors, preferences.user.show_remote_cursors); m_btn_remote_show_selections->set_active( preferences.user.show_remote_selections); connect_option(*m_btn_remote_show_selections, preferences.user.show_remote_selections); m_btn_remote_show_current_lines->set_active( preferences.user.show_remote_current_lines); connect_option(*m_btn_remote_show_current_lines, preferences.user.show_remote_current_lines); m_btn_remote_show_cursor_positions->set_active( preferences.user.show_remote_cursor_positions); connect_option(*m_btn_remote_show_cursor_positions, preferences.user.show_remote_cursor_positions); m_btn_local_allow_connections->set_active( preferences.user.allow_remote_access); connect_option(*m_btn_local_allow_connections, preferences.user.allow_remote_access); m_btn_local_require_password->set_active( preferences.user.require_password); connect_option(*m_btn_local_require_password, preferences.user.require_password); m_ent_local_password->set_text( static_cast(preferences.user.password)); connect_option(*m_ent_local_password, preferences.user.password); m_ent_local_port->set_range(1, 65535); m_ent_local_port->set_value(preferences.user.port); m_ent_local_port->set_increments(1, 1); connect_option(*m_ent_local_port, preferences.user.port); m_btn_local_keep_documents->set_active( preferences.user.keep_local_documents); connect_option(*m_btn_local_keep_documents, preferences.user.keep_local_documents); m_btn_local_documents_directory->set_filename( static_cast(preferences.user.host_directory)); // Initial sensitivity on_local_allow_connections_toggled(); on_local_require_password_toggled(); on_local_keep_documents_toggled(); } void Gobby::PreferencesDialog::User::on_local_allow_connections_toggled() { m_grid_local_connections->set_sensitive( m_btn_local_allow_connections->get_active()); } void Gobby::PreferencesDialog::User::on_local_require_password_toggled() { m_grid_password->set_sensitive( m_btn_local_require_password->get_active()); } void Gobby::PreferencesDialog::User::on_local_keep_documents_toggled() { m_grid_local_documents_directory->set_sensitive( m_btn_local_keep_documents->get_active()); } Gobby::PreferencesDialog::Editor::Editor( const Glib::RefPtr& builder, Preferences& preferences) { builder->get_widget("tab-width", m_ent_tab_width); builder->get_widget("insert-spaces", m_btn_tab_spaces); builder->get_widget("automatic-indentation", m_btn_indentation_auto); builder->get_widget("smart-home-end", m_btn_homeend_smart); builder->get_widget("enable-autosave", m_btn_autosave_enabled); builder->get_widget("grid-autosave-interval", m_grid_autosave_interval); builder->get_widget("autosave-interval", m_ent_autosave_interval); const unsigned int tab_width = preferences.editor.tab_width; const bool tab_spaces = preferences.editor.tab_spaces; const bool indentation_auto = preferences.editor.indentation_auto; const bool homeend_smart = preferences.editor.homeend_smart; const unsigned int autosave_enabled = preferences.editor.autosave_enabled; const unsigned int autosave_interval = preferences.editor.autosave_interval; m_btn_autosave_enabled->signal_toggled().connect( sigc::mem_fun(*this, &Editor::on_autosave_enabled_toggled)); m_ent_tab_width->set_range(1, 8); m_ent_tab_width->set_value(tab_width); m_ent_tab_width->set_increments(1, 1); connect_option(*m_ent_tab_width, preferences.editor.tab_width); m_btn_tab_spaces->set_active(tab_spaces); connect_option(*m_btn_tab_spaces, preferences.editor.tab_spaces); m_btn_indentation_auto->set_active(indentation_auto); connect_option(*m_btn_indentation_auto, preferences.editor.indentation_auto); m_btn_homeend_smart->set_active(homeend_smart); connect_option(*m_btn_homeend_smart, preferences.editor.homeend_smart); m_btn_autosave_enabled->set_active(autosave_enabled); connect_option(*m_btn_autosave_enabled, preferences.editor.autosave_enabled); m_ent_autosave_interval->set_range(1, 60); m_ent_autosave_interval->set_value(autosave_interval); m_ent_autosave_interval->set_increments(1, 10); connect_option(*m_ent_autosave_interval, preferences.editor.autosave_interval); // Initial sensitivity on_autosave_enabled_toggled(); } void Gobby::PreferencesDialog::Editor::on_autosave_enabled_toggled() { m_grid_autosave_interval->set_sensitive( m_btn_autosave_enabled->get_active()); } Gobby::PreferencesDialog::View::View( const Glib::RefPtr& builder,Preferences& preferences) { builder->get_widget("enable-wrapping", m_btn_wrap_text); builder->get_widget("do-not-split-words", m_btn_wrap_words); builder->get_widget("display-line-numbers", m_btn_linenum_display); builder->get_widget("highlight-current-line", m_btn_curline_highlight); builder->get_widget("display-right-margin", m_btn_margin_display); builder->get_widget("grid-margin-position", m_grid_margin_pos); builder->get_widget("right-margin-column", m_ent_margin_pos); builder->get_widget("highlight-matching-brackets", m_btn_bracket_highlight); builder->get_widget_derived("display-whitespace", m_cmb_spaces_display); const Gtk::WrapMode mode = preferences.view.wrap_mode; const bool linenum_display = preferences.view.linenum_display; const bool curline_highlight = preferences.view.curline_highlight; const bool margin_display = preferences.view.margin_display; const unsigned int margin_pos = preferences.view.margin_pos; const bool bracket_highlight = preferences.view.bracket_highlight; m_btn_margin_display->signal_toggled().connect( sigc::mem_fun(*this, &View::on_margin_display_toggled)); m_btn_wrap_text->signal_toggled().connect( sigc::mem_fun(*this, &View::on_wrap_text_toggled)); m_ent_margin_pos->set_range(1, 1024); m_ent_margin_pos->set_value(margin_pos); m_ent_margin_pos->set_increments(1, 16); connect_option(*m_ent_margin_pos, preferences.view.margin_pos); m_btn_wrap_text->set_active(mode != Gtk::WRAP_NONE); m_btn_wrap_words->set_active(mode == Gtk::WRAP_WORD_CHAR); connect_wrap_option(*m_btn_wrap_text, *m_btn_wrap_words, preferences.view.wrap_mode); m_btn_linenum_display->set_active(linenum_display); connect_option(*m_btn_linenum_display, preferences.view.linenum_display); m_btn_curline_highlight->set_active(curline_highlight); connect_option(*m_btn_curline_highlight, preferences.view.curline_highlight); m_btn_margin_display->set_active(margin_display); connect_option(*m_btn_margin_display, preferences.view.margin_display); m_btn_bracket_highlight->set_active(bracket_highlight); connect_option(*m_btn_bracket_highlight, preferences.view.bracket_highlight); // TODO: When we require a higher version of GtkSourceView, then // we should add GTK_SOURCE_DRAW_SPACES_NBSP here. const int SOURCE_DRAW_SPACES = GTK_SOURCE_DRAW_SPACES_SPACE; m_cmb_spaces_display->set_option(preferences.view.whitespace_display); m_cmb_spaces_display->add( _("Display no whitespace"), static_cast(0)); m_cmb_spaces_display->add( _("Display spaces"), static_cast( SOURCE_DRAW_SPACES)); m_cmb_spaces_display->add( _("Display tabs"), static_cast( GTK_SOURCE_DRAW_SPACES_TAB)); m_cmb_spaces_display->add( _("Display tabs and spaces"), static_cast( SOURCE_DRAW_SPACES | GTK_SOURCE_DRAW_SPACES_TAB)); // Initial sensitivity on_wrap_text_toggled(); on_margin_display_toggled(); } void Gobby::PreferencesDialog::View::on_wrap_text_toggled() { m_btn_wrap_words->set_sensitive(m_btn_wrap_text->get_active()); } void Gobby::PreferencesDialog::View::on_margin_display_toggled() { m_grid_margin_pos->set_sensitive(m_btn_margin_display->get_active()); } Gobby::PreferencesDialog::Appearance::Appearance( const Glib::RefPtr& builder, Preferences& preferences) : m_scheme_list(Gtk::ListStore::create(m_scheme_columns)) { builder->get_widget_derived("toolbar-style", m_cmb_toolbar_style); builder->get_widget("font", m_btn_font); builder->get_widget("color-scheme-treeview", m_scheme_tree); const Pango::FontDescription& font = preferences.appearance.font; m_cmb_toolbar_style->set_option(preferences.appearance.toolbar_style); m_cmb_toolbar_style->add(_("Show text only"), Gtk::TOOLBAR_TEXT); m_cmb_toolbar_style->add(_("Show icons only"), Gtk::TOOLBAR_ICONS); m_cmb_toolbar_style->add(_("Show both icons and text"), Gtk::TOOLBAR_BOTH ); m_cmb_toolbar_style->add(_("Show text besides icons"), Gtk::TOOLBAR_BOTH_HORIZ ); m_btn_font->set_font_name(font.to_string()); m_conn_font.reset(new FontConnection( *m_btn_font, preferences.appearance.font)); Gtk::TreeViewColumn column_name; Gtk::CellRendererText renderer_name; column_name.pack_start(renderer_name, false); column_name.add_attribute(renderer_name.property_text(), m_scheme_columns.name); Pango::AttrList list; Pango::Attribute attr(Pango::Attribute::create_attr_weight( Pango::WEIGHT_BOLD)); list.insert(attr); renderer_name.property_attributes() = list; m_scheme_tree->append_column(column_name); m_scheme_tree->append_column(_("Scheme Description"), m_scheme_columns.description); m_scheme_tree->set_model(m_scheme_list); // Populate scheme list GtkSourceStyleSchemeManager* manager = gtk_source_style_scheme_manager_get_default(); const gchar* const* ids = gtk_source_style_scheme_manager_get_scheme_ids(manager); const Glib::ustring current_scheme = preferences.appearance.scheme_id; for (const gchar* const* id = ids; *id != NULL; ++id) { GtkSourceStyleScheme* scheme = gtk_source_style_scheme_manager_get_scheme( manager, *id); const gchar* name = gtk_source_style_scheme_get_name(scheme); const gchar* desc = gtk_source_style_scheme_get_description(scheme); Gtk::TreeIter iter = m_scheme_list->append(); (*iter)[m_scheme_columns.name] = name; (*iter)[m_scheme_columns.description] = desc; (*iter)[m_scheme_columns.scheme] = scheme; if (current_scheme == gtk_source_style_scheme_get_id(scheme)) m_scheme_tree->get_selection()->select(iter); } m_scheme_tree->get_selection()->signal_changed().connect( sigc::bind( sigc::mem_fun(*this, &Appearance::on_scheme_changed), sigc::ref(preferences))); m_scheme_list->set_sort_column(m_scheme_columns.name, Gtk::SORT_ASCENDING); } void Gobby::PreferencesDialog::Appearance::on_scheme_changed( Preferences& preferences) { Gtk::TreeIter iter = m_scheme_tree->get_selection()->get_selected(); GtkSourceStyleScheme* scheme = (*iter)[m_scheme_columns.scheme]; preferences.appearance.scheme_id = gtk_source_style_scheme_get_id(scheme); } Gobby::PreferencesDialog::Security::Security( const Glib::RefPtr& builder, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager) : m_preferences(preferences), m_file_chooser(file_chooser), m_cert_manager(cert_manager) { builder->get_widget("trust-default-cas", m_btn_use_system_trust); builder->get_widget("additionally-trusted-cas", m_btn_path_trust_file); builder->get_widget("ca-error-message", m_error_trust_file); builder->get_widget_derived("secure-connection", m_cmb_connection_policy); builder->get_widget("authentication-none", m_btn_auth_none); builder->get_widget("authentication-certificate", m_btn_auth_cert); builder->get_widget("grid-auth-certificate", m_grid_auth_cert); builder->get_widget("private-key-file", m_btn_key_file); builder->get_widget("create-private-key", m_btn_key_file_create); builder->get_widget("key-error-message", m_error_key_file); builder->get_widget("certificate-file", m_btn_cert_file); builder->get_widget("create-certificate", m_btn_cert_file_create); builder->get_widget("cert-error-message", m_error_cert_file); m_cert_manager.signal_credentials_changed().connect( sigc::mem_fun(*this, &Security::on_credentials_changed)); m_btn_auth_cert->signal_toggled().connect( sigc::mem_fun(*this, &Security::on_auth_cert_toggled)); m_btn_use_system_trust->set_active( m_preferences.security.use_system_trust); m_btn_use_system_trust->signal_toggled().connect( sigc::mem_fun(*this, &Security::on_use_system_trust_toggled)); const std::string& trust_file = preferences.security.trusted_cas; if(!trust_file.empty()) m_btn_path_trust_file->set_filename(trust_file); m_conn_path_trust_file.reset(new PathConnection( *m_btn_path_trust_file, preferences.security.trusted_cas)); m_cmb_connection_policy->set_option(preferences.security.policy); /* m_cmb_connection_policy->add( _("Never use a secure connection"), INF_XMPP_CONNECTION_SECURITY_ONLY_UNSECURED);*/ m_cmb_connection_policy->add( _("Use TLS if possible"), INF_XMPP_CONNECTION_SECURITY_BOTH_PREFER_TLS); m_cmb_connection_policy->add( _("Always use TLS"), INF_XMPP_CONNECTION_SECURITY_ONLY_TLS); if(preferences.security.authentication_enabled) m_btn_auth_cert->set_active(true); else m_btn_auth_none->set_active(true); connect_option(*m_btn_auth_cert, preferences.security.authentication_enabled); const std::string& key_file = preferences.security.key_file; if(!key_file.empty()) m_btn_key_file->set_filename(key_file); m_conn_path_key_file.reset(new PathConnection( *m_btn_key_file, preferences.security.key_file)); m_btn_key_file_create->signal_clicked().connect( sigc::mem_fun(*this, &Security::on_create_key_clicked)); const std::string& cert_file = preferences.security.certificate_file; if(!cert_file.empty()) m_btn_cert_file->set_filename(cert_file); m_conn_path_cert_file.reset(new PathConnection( *m_btn_cert_file, preferences.security.certificate_file)); m_btn_cert_file_create->signal_clicked().connect( sigc::mem_fun(*this, &Security::on_create_cert_clicked)); // Initial sensitivity and content on_auth_cert_toggled(); on_credentials_changed(); } void Gobby::PreferencesDialog::Security::set_file_error(Gtk::Label& label, const GError* error) { if(error != NULL) { label.set_text(Glib::ustring::compose( _("Error reading file: %1"), error->message)); label.show(); } else { label.hide(); } } Gtk::Window& Gobby::PreferencesDialog::Security::get_toplevel(Gtk::Widget& widget) { Gtk::Window* parent = NULL; Gtk::Widget* toplevel_widget = widget.get_toplevel(); if(gtk_widget_is_toplevel(toplevel_widget->gobj())) parent = dynamic_cast(toplevel_widget); g_assert(parent != NULL); return *parent; } void Gobby::PreferencesDialog::Security::on_use_system_trust_toggled() { m_preferences.security.use_system_trust = m_btn_use_system_trust->get_active(); } void Gobby::PreferencesDialog::Security::on_credentials_changed() { set_file_error(*m_error_trust_file, m_cert_manager.get_trust_error()); if(m_key_generator_handle.get() == NULL) { set_file_error(*m_error_key_file, m_cert_manager.get_key_error()); } else { m_error_key_file->set_text( _("2048-bit RSA private key is being " "generated, please wait...")); m_error_key_file->show(); } if(m_cert_generator_handle.get() == NULL) set_file_error(*m_error_cert_file, m_cert_manager.get_certificate_error()); const bool operation_in_progress = m_key_generator_handle.get() != NULL || m_cert_generator_handle.get() != NULL; m_btn_key_file->set_sensitive(!operation_in_progress); m_btn_key_file_create->set_sensitive(!operation_in_progress); m_btn_cert_file->set_sensitive(!operation_in_progress); m_btn_cert_file_create->set_sensitive( !operation_in_progress && m_cert_manager.get_private_key() != NULL); } void Gobby::PreferencesDialog::Security::on_auth_cert_toggled() { m_grid_auth_cert->set_sensitive(m_btn_auth_cert->get_active()); } void Gobby::PreferencesDialog::Security::on_create_key_clicked() { m_file_dialog.reset(new FileChooser::Dialog( m_file_chooser, get_toplevel(*m_btn_key_file_create), _("Select a location for the generated key"), Gtk::FILE_CHOOSER_ACTION_SAVE)); const std::string& key_file = m_preferences.security.key_file; if(!key_file.empty()) m_file_dialog->set_filename(key_file); m_file_dialog->signal_response().connect( sigc::mem_fun( *this, &Security::on_file_dialog_response_key)); m_file_dialog->present(); } void Gobby::PreferencesDialog::Security::on_create_cert_clicked() { m_file_dialog.reset(new FileChooser::Dialog( m_file_chooser, get_toplevel(*m_btn_cert_file_create), _("Select a location for the generated certificate"), Gtk::FILE_CHOOSER_ACTION_SAVE)); const std::string& certificate_file = m_preferences.security.certificate_file; if(!certificate_file.empty()) m_file_dialog->set_filename(certificate_file); m_file_dialog->signal_response().connect( sigc::mem_fun( *this, &Security::on_file_dialog_response_certificate)); m_file_dialog->present(); } void Gobby::PreferencesDialog::Security::on_file_dialog_response_key( int response_id) { const std::string filename = m_file_dialog->get_filename(); m_file_dialog.reset(NULL); if(response_id == Gtk::RESPONSE_ACCEPT) { m_key_generator_handle = create_key( GNUTLS_PK_RSA, 2048, sigc::bind( sigc::mem_fun( *this, &Security::on_key_generated), filename)); on_credentials_changed(); } } void Gobby::PreferencesDialog::Security::on_file_dialog_response_certificate( int response_id) { const std::string filename = m_file_dialog->get_filename(); m_file_dialog.reset(NULL); if(response_id == Gtk::RESPONSE_ACCEPT && m_cert_manager.get_private_key() != NULL) { m_cert_generator_handle = create_self_signed_certificate( m_cert_manager.get_private_key(), sigc::bind( sigc::mem_fun( *this, &Security::on_cert_generated), filename)); on_credentials_changed(); } } void Gobby::PreferencesDialog::Security::on_key_generated( const KeyGeneratorHandle* handle, gnutls_x509_privkey_t key, const GError* error, const std::string& filename) { m_key_generator_handle.reset(NULL); m_cert_manager.set_private_key(key, filename.c_str(), error); } void Gobby::PreferencesDialog::Security::on_cert_generated( const CertificateGeneratorHandle* hndl, gnutls_x509_crt_t cert, const GError* error, const std::string& filename) { m_cert_generator_handle.reset(NULL); if(cert != NULL) { // Note this needs to be allocated with g_malloc, since it // is directly passed and freed by libinfinity gnutls_x509_crt_t* crt_array = static_cast( g_malloc(sizeof(gnutls_x509_crt_t))); crt_array[0] = cert; m_cert_manager.set_certificates( crt_array, 1, filename.c_str(), error); } else { m_cert_manager.set_certificates( NULL, 0, filename.c_str(), error); } } Gobby::PreferencesDialog::PreferencesDialog( const Glib::RefPtr& builder, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager ): Gtk::Dialog(GTK_DIALOG(gtk_builder_get_object(builder->gobj(), "PreferencesDialog"))), m_page_user(builder, preferences), m_page_editor(builder, preferences), m_page_view(builder, preferences), m_page_appearance(builder, preferences), m_page_security(builder, file_chooser, preferences, cert_manager) { add_button(_("_Close"), Gtk::RESPONSE_CLOSE); } std::unique_ptr Gobby::PreferencesDialog::create(Gtk::Window& parent, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager) { Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/preferences-dialog.ui"); std::unique_ptr dialog( new PreferencesDialog(builder, file_chooser, preferences, cert_manager)); dialog->set_transient_for(parent); return dialog; } void Gobby::PreferencesDialog::on_response(int id) { hide(); } gobby-0.6.0/code/dialogs/open-location-dialog.cpp0000664000175000017500000000513614003367605016617 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/open-location-dialog.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include "features.hpp" Gobby::OpenLocationDialog::OpenLocationDialog( GtkDialog* cobject, const Glib::RefPtr& builder) : Gtk::Dialog(cobject), m_combo(builder, "location-combo", config_filename("recent_uris"), 8) { m_combo.get_entry()->set_activates_default(true); m_combo.get_entry()->signal_changed().connect( sigc::mem_fun(*this, &OpenLocationDialog::on_entry_changed)); } std::unique_ptr Gobby::OpenLocationDialog::create(Gtk::Window& parent) { Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/open-location-dialog.ui"); OpenLocationDialog* dialog; builder->get_widget_derived("OpenLocationDialog", dialog); dialog->set_transient_for(parent); return std::unique_ptr(dialog); } Glib::ustring Gobby::OpenLocationDialog::get_uri() const { return m_combo.get_entry()->get_text(); } void Gobby::OpenLocationDialog::set_uri(const Glib::ustring& uri) { m_combo.get_entry()->set_text(uri); } void Gobby::OpenLocationDialog::on_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) m_combo.commit(); Gtk::Dialog::on_response(response_id); } void Gobby::OpenLocationDialog::on_show() { Gtk::Dialog::on_show(); // We can't do this in the constructor, because the buttons are added // by the caller after the widget has been constructed. set_default_response(Gtk::RESPONSE_ACCEPT); on_entry_changed(); m_combo.get_entry()->select_region( 0, m_combo.get_entry()->get_text().length()); m_combo.grab_focus(); } void Gobby::OpenLocationDialog::on_entry_changed() { set_response_sensitive( Gtk::RESPONSE_ACCEPT, !m_combo.get_entry()->get_text().empty()); } gobby-0.6.0/code/dialogs/Makefile.am0000664000175000017500000000142414003367605014137 00000000000000gobby_0_5_SOURCES += \ code/dialogs/connection-dialog.cpp \ code/dialogs/connection-info-dialog.cpp \ code/dialogs/document-location-dialog.cpp \ code/dialogs/entry-dialog.cpp \ code/dialogs/find-dialog.cpp \ code/dialogs/goto-dialog.cpp \ code/dialogs/initial-dialog.cpp \ code/dialogs/open-location-dialog.cpp \ code/dialogs/password-dialog.cpp \ code/dialogs/preferences-dialog.cpp noinst_HEADERS += \ code/dialogs/connection-dialog.hpp \ code/dialogs/connection-info-dialog.hpp \ code/dialogs/document-location-dialog.hpp \ code/dialogs/entry-dialog.hpp \ code/dialogs/find-dialog.hpp \ code/dialogs/goto-dialog.hpp \ code/dialogs/initial-dialog.hpp \ code/dialogs/open-location-dialog.hpp \ code/dialogs/password-dialog.hpp \ code/dialogs/preferences-dialog.hpp gobby-0.6.0/code/dialogs/document-location-dialog.hpp0000664000175000017500000000610114003367605017472 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_DOCUMENTLOCATIONDIALOG_HPP_ #define _GOBBY_DOCUMENTLOCATIONDIALOG_HPP_ #include #include #include #include #include #include #include namespace Gobby { class DocumentLocationDialog : public Gtk::Dialog { private: friend class Gtk::Builder; DocumentLocationDialog(GtkDialog* cobject, const Glib::RefPtr& builder); public: static std::unique_ptr create( Gtk::Window& parent, InfGtkBrowserModel* model); ~DocumentLocationDialog(); Glib::ustring get_document_name() const; void set_document_name(const Glib::ustring& document_name); InfBrowser* get_selected_directory(InfBrowserIter* iter) const; InfGtkBrowserModel* get_browser_model() const; void set_single_document_mode(); void set_multiple_document_mode(); protected: virtual void on_show(); static void on_selection_changed_static(InfGtkBrowserView* view, GtkTreeIter* iter, gpointer user_data) { static_cast( user_data)->on_selection_changed(iter); } static void on_row_changed_static(GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, gpointer user_data) { static_cast( user_data)->on_row_changed(path, iter); } static gboolean filter_visible_func_static(GtkTreeModel* model, GtkTreeIter* iter, gpointer user_data) { return static_cast( user_data)->filter_visible_func(model, iter); } void on_selection_changed(GtkTreeIter* iter); void on_row_changed(GtkTreePath* path, GtkTreeIter* iter); bool filter_visible_func(GtkTreeModel* model, GtkTreeIter* iter); Gtk::Label* m_name_label; Gtk::Entry* m_name_entry; Gtk::Label* m_location_label; InfGtkBrowserModelFilter* m_filter_model; InfGtkBrowserView* m_view; }; } #endif // _GOBBY_DOCUMENTLOCATIONDIALOG_HPP_ gobby-0.6.0/code/dialogs/entry-dialog.hpp0000664000175000017500000000301514003367605015210 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_ENTRYDIALOG_HPP_ #define _GOBBY_ENTRYDIALOG_HPP_ #include #include #include #include namespace Gobby { class EntryDialog: public Gtk::Dialog { private: friend class Gtk::Builder; EntryDialog(GtkDialog* cobject, const Glib::RefPtr& builder); public: static std::unique_ptr create( Gtk::Window& parent, const Glib::ustring& title, const Glib::ustring& intro_text); Glib::ustring get_text() const; void set_text(const Glib::ustring& text); protected: virtual void on_show(); Gtk::Label* m_intro_label; Gtk::Entry* m_entry; }; } #endif // _GOBBY_ENTRYDIALOG_HPP_ gobby-0.6.0/code/dialogs/password-dialog.cpp0000664000175000017500000000464414003367605015715 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/password-dialog.hpp" #include "util/i18n.hpp" Gobby::PasswordDialog::PasswordDialog( const Glib::RefPtr& builder, const Glib::ustring& remote_id, unsigned int retry_counter) : Gtk::Dialog(GTK_DIALOG(gtk_builder_get_object( builder->gobj(), "PasswordDialog"))) { Gtk::Label* intro_label; builder->get_widget("intro-label", intro_label); builder->get_widget("password", m_entry); if(retry_counter == 0) { intro_label->set_text(Glib::ustring::compose( _("Connection to host \"%1\" requires a password."), remote_id)); } else { intro_label->set_text(Glib::ustring::compose( _("Invalid password for host \"%1\". " "Please try again."), remote_id)); } } std::unique_ptr Gobby::PasswordDialog::create(Gtk::Window& parent, const Glib::ustring& remote_id, unsigned int retry_counter) { Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/password-dialog.ui"); std::unique_ptr dialog( new PasswordDialog(builder, remote_id, retry_counter)); dialog->set_transient_for(parent); return dialog; } Glib::ustring Gobby::PasswordDialog::get_password() const { return m_entry->get_text(); } void Gobby::PasswordDialog::on_show() { Gtk::Dialog::on_show(); // We can't do this in the constructor, because the buttons are added // by the caller after the widget has been constructed. set_default_response(Gtk::RESPONSE_ACCEPT); m_entry->select_region(0, m_entry->get_text().length()); m_entry->grab_focus(); } gobby-0.6.0/code/dialogs/preferences-dialog.hpp0000664000175000017500000003012114003367605016346 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_PREFERENCESDIALOG_HPP_ #define _GOBBY_PREFERENCESDIALOG_HPP_ #include "core/preferences.hpp" #include "core/filechooser.hpp" #include "core/certificatemanager.hpp" #include "core/credentialsgenerator.hpp" #include "core/huebutton.hpp" #include #include #include #include #include #include #include #include #include #include #include namespace Gobby { template class PreferencesComboBox: public Gtk::ComboBox { public: PreferencesComboBox(GtkComboBox* box, const Glib::RefPtr& builder): Gtk::ComboBox(box), m_option(NULL), m_store(Gtk::ListStore::create(m_columns)) { set_model(m_store); Gtk::CellRendererText* renderer = Gtk::manage(new Gtk::CellRendererText); pack_start(*renderer, true); add_attribute(renderer->property_text(), m_columns.text); } void set_option(Preferences::Option& option) { m_option = &option; } void add(const Glib::ustring& text, const OptionType& value) { Gtk::TreeIter iter = m_store->append(); (*iter)[m_columns.text] = text; (*iter)[m_columns.value] = value; if(*m_option == value) set_active(iter); } private: class Columns: public Gtk::TreeModelColumnRecord { public: Gtk::TreeModelColumn text; Gtk::TreeModelColumn value; Columns() { add(text); add(value); } }; virtual void on_changed() { Gtk::ComboBox::on_changed(); OptionType value = (*get_active())[m_columns.value]; if(*m_option != value) *m_option = value; } Preferences::Option* m_option; Columns m_columns; Glib::RefPtr m_store; }; class PreferencesDialog : public Gtk::Dialog { private: PreferencesDialog(const Glib::RefPtr& builder, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager); public: static std::unique_ptr create( Gtk::Window& parent, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager); // An object which keeps two values in sync with each other, using // notification signals of both objects. template class DuplexConnection { public: template DuplexConnection(Sig1 sig1, Sig2 sig2) { m_conn1 = sig1.connect(sigc::mem_fun(*this, &DuplexConnection::changed1)); m_conn2 = sig2.connect(sigc::mem_fun(*this, &DuplexConnection::changed2)); } virtual ~DuplexConnection() { m_conn1.disconnect(); m_conn2.disconnect(); } void block() { m_conn1.block(); m_conn2.block(); } void unblock() { m_conn1.unblock(); m_conn2.unblock(); } private: void changed1() { m_conn2.block(); if(get2() != get1()) set2(get1()); m_conn2.unblock(); } void changed2() { m_conn1.block(); if(get1() != get2()) set1(get2()); m_conn1.unblock(); } protected: virtual Type get1() const = 0; virtual Type get2() const = 0; virtual void set1(const Type& t) = 0; virtual void set2(const Type& t) = 0; private: sigc::connection m_conn1; sigc::connection m_conn2; }; class FontConnection: public DuplexConnection { public: FontConnection( Gtk::FontButton& font_button, Preferences::Option& option) : DuplexConnection( font_button.signal_font_set(), option.signal_changed()), m_font_button(font_button), m_option(option) { } protected: virtual Pango::FontDescription get1() const { return Pango::FontDescription( m_font_button.get_font_name()); } virtual Pango::FontDescription get2() const { return m_option.get(); } virtual void set1(const Pango::FontDescription& val) { m_font_button.set_font_name(val.to_string()); } virtual void set2(const Pango::FontDescription& val) { m_option.set(val); } private: Gtk::FontButton& m_font_button; Preferences::Option& m_option; }; // Note that old GTK+ versions do not emit the file-set signal // of Gtk::FileChooserButton when a new entry is chosen from // the combo box, but only from the dialog. The bug was fixed // only in GTK+ 3.10.0. // // Therefore, we are using the selection-changed signal // instead. However, when the button is constructed, the // signal is emitted "too often" since it is first emitted // with the home folder of the current user, and then again // with what was specified when set_filename() is called // to set the initial name. In the case of the local documents // directory, this causes a significant overhead and running // sessions being closed once the preferences dialog is opened. // // To work around this, we ignore all signal emissions until // the first signal emission with the initially set value occurs. // Once we depend on GTK+ 3.10 or greater, the workaround // can be removed and we can switch to signal_file_set(). class PathConnection: public DuplexConnection { public: PathConnection(Gtk::FileChooser& file_chooser, Preferences::Option& option): DuplexConnection( file_chooser.signal_selection_changed(), option.signal_changed()), m_file_chooser(file_chooser), m_option(option), m_initial_value(option), m_seen_initial_value(file_chooser.get_filename() == m_initial_value) { } protected: virtual std::string get1() const { return m_file_chooser.get_filename(); } virtual std::string get2() const { if(m_seen_initial_value) return m_option.get(); else return ""; } virtual void set1(const std::string& val) { m_file_chooser.set_filename(val); } virtual void set2(const std::string& val) { if(!m_seen_initial_value) { if(val == m_initial_value) m_seen_initial_value = true; } else { m_option.set(val); } } private: Gtk::FileChooser& m_file_chooser; Preferences::Option& m_option; const std::string m_initial_value; bool m_seen_initial_value; }; class User { public: User(const Glib::RefPtr& builder, Preferences& preferences); protected: void on_local_allow_connections_toggled(); void on_local_require_password_toggled(); void on_local_keep_documents_toggled(); Gtk::Entry* m_ent_user_name; HueButton* m_btn_user_color; Gtk::Scale* m_scl_user_alpha; Gtk::CheckButton* m_btn_remote_show_cursors; Gtk::CheckButton* m_btn_remote_show_selections; Gtk::CheckButton* m_btn_remote_show_current_lines; Gtk::CheckButton* m_btn_remote_show_cursor_positions; Gtk::Grid* m_grid_local_connections; Gtk::CheckButton* m_btn_local_allow_connections; Gtk::Grid* m_grid_password; Gtk::CheckButton* m_btn_local_require_password; Gtk::Entry* m_ent_local_password; Gtk::SpinButton* m_ent_local_port; Gtk::CheckButton* m_btn_local_keep_documents; Gtk::Grid* m_grid_local_documents_directory; Gtk::FileChooserButton* m_btn_local_documents_directory; std::unique_ptr m_conn_local_documents_directory; }; class Editor { public: Editor(const Glib::RefPtr& builder, Preferences& preferences); protected: void on_autosave_enabled_toggled(); Gtk::SpinButton* m_ent_tab_width; Gtk::CheckButton* m_btn_tab_spaces; Gtk::CheckButton* m_btn_indentation_auto; Gtk::CheckButton* m_btn_homeend_smart; Gtk::CheckButton* m_btn_autosave_enabled; Gtk::Grid* m_grid_autosave_interval; Gtk::SpinButton* m_ent_autosave_interval; }; class View { public: View(const Glib::RefPtr& builder, Preferences& preferences); protected: void on_wrap_text_toggled(); void on_margin_display_toggled(); Gtk::CheckButton* m_btn_wrap_text; Gtk::CheckButton* m_btn_wrap_words; Gtk::CheckButton* m_btn_linenum_display; Gtk::CheckButton* m_btn_curline_highlight; Gtk::CheckButton* m_btn_margin_display; Gtk::Grid* m_grid_margin_pos; Gtk::SpinButton* m_ent_margin_pos; Gtk::CheckButton* m_btn_bracket_highlight; PreferencesComboBox* m_cmb_spaces_display; }; class Appearance { public: Appearance(const Glib::RefPtr& builder, Preferences& preferences); protected: class SchemeColumns: public Gtk::TreeModelColumnRecord { public: Gtk::TreeModelColumn scheme; Gtk::TreeModelColumn name; Gtk::TreeModelColumn description; SchemeColumns() { add(scheme); add(name); add(description); } }; void on_pref_font_changed(); void on_scheme_changed(Preferences& preferences); PreferencesComboBox* m_cmb_toolbar_style; Gtk::FontButton* m_btn_font; std::unique_ptr m_conn_font; SchemeColumns m_scheme_columns; Glib::RefPtr m_scheme_list; Gtk::TreeView* m_scheme_tree; }; class Security { public: Security(const Glib::RefPtr& builder, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager); protected: void set_file_error(Gtk::Label& label, const GError* error); Gtk::Window& get_toplevel(Gtk::Widget& widget); void on_use_system_trust_toggled(); void on_credentials_changed(); void on_auth_cert_toggled(); void on_create_key_clicked(); void on_create_cert_clicked(); void on_file_dialog_response_key(int response_id); void on_file_dialog_response_certificate(int response_id); void on_key_generated(const KeyGeneratorHandle* handle, gnutls_x509_privkey_t key, const GError* error, const std::string& filename); void on_cert_generated(const CertificateGeneratorHandle* hndl, gnutls_x509_crt_t cert, const GError* error, const std::string& filename); Preferences& m_preferences; FileChooser& m_file_chooser; CertificateManager& m_cert_manager; Gtk::CheckButton* m_btn_use_system_trust; Gtk::FileChooserButton* m_btn_path_trust_file; std::unique_ptr m_conn_path_trust_file; Gtk::Label* m_error_trust_file; PreferencesComboBox* m_cmb_connection_policy; Gtk::RadioButton* m_btn_auth_none; Gtk::RadioButton* m_btn_auth_cert; Gtk::Grid* m_grid_auth_cert; Gtk::FileChooserButton* m_btn_key_file; std::unique_ptr m_conn_path_key_file; Gtk::Button* m_btn_key_file_create; Gtk::Label* m_error_key_file; Gtk::FileChooserButton* m_btn_cert_file; std::unique_ptr m_conn_path_cert_file; Gtk::Button* m_btn_cert_file_create; Gtk::Label* m_error_cert_file; std::unique_ptr m_key_generator_handle; std::unique_ptr m_cert_generator_handle; std::unique_ptr m_file_dialog; }; protected: virtual void on_response(int id); User m_page_user; Editor m_page_editor; View m_page_view; Appearance m_page_appearance; Security m_page_security; }; } #endif // _GOBBY_PREFERENCESDIALOG_HPP_ gobby-0.6.0/code/dialogs/connection-dialog.hpp0000664000175000017500000000275114003367605016214 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CONNECTIONDIALOG_HPP_ #define _GOBBY_CONNECTIONDIALOG_HPP_ #include #include #include namespace Gobby { class ConnectionDialog: public Gtk::Dialog { private: friend class Gtk::Builder; ConnectionDialog(GtkDialog* cobject, const Glib::RefPtr& builder); public: static std::unique_ptr create(Gtk::Window& parent); Glib::ustring get_host_name() const; protected: virtual void on_show(); Gtk::Entry* m_entry; // TODO: Use HistoryComboBox here, with the same history as the direct connection box }; } #endif // _GOBBY_CONNECTIONDIALOG_HPP_ gobby-0.6.0/code/dialogs/entry-dialog.cpp0000664000175000017500000000423314003367605015206 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/entry-dialog.hpp" Gobby::EntryDialog::EntryDialog(GtkDialog* cobject, const Glib::RefPtr& builder): Gtk::Dialog(cobject) { builder->get_widget("intro-label", m_intro_label); builder->get_widget("entry", m_entry); } std::unique_ptr Gobby::EntryDialog::create(Gtk::Window& parent, const Glib::ustring& title, const Glib::ustring& intro_text) { Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/entry-dialog.ui"); EntryDialog* dialog = NULL; builder->get_widget_derived("EntryDialog", dialog); dialog->set_transient_for(parent); dialog->set_title(title); dialog->m_intro_label->set_text_with_mnemonic(intro_text); return std::unique_ptr(dialog); } Glib::ustring Gobby::EntryDialog::get_text() const { return m_entry->get_text(); } void Gobby::EntryDialog::set_text(const Glib::ustring& text) { m_entry->set_text(text); } void Gobby::EntryDialog::on_show() { Gtk::Dialog::on_show(); // We can't do this in the constructor, because the buttons are added // by the caller after the widget has been constructed. set_default_response(Gtk::RESPONSE_ACCEPT); m_entry->select_region(0, m_entry->get_text().length()); m_entry->grab_focus(); } gobby-0.6.0/code/dialogs/goto-dialog.cpp0000664000175000017500000000766514003367605015031 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/goto-dialog.hpp" #include "util/i18n.hpp" #include #include Gobby::GotoDialog::GotoDialog(GtkDialog* cobject, const Glib::RefPtr& builder): Gtk::Dialog(cobject), m_folder(NULL), m_current_view(NULL) { builder->get_widget("spin-button", m_entry_line); m_entry_line->set_increments(1, 10); add_button(_("_Close"), Gtk::RESPONSE_CLOSE); add_button(_("Go To _Line"), Gtk::RESPONSE_ACCEPT); set_default_response(Gtk::RESPONSE_ACCEPT); } Gobby::GotoDialog::~GotoDialog() { on_document_changed(NULL); } std::unique_ptr Gobby::GotoDialog::create(Gtk::Window& parent, const Folder& folder) { Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/goto-dialog.ui"); GotoDialog* dialog_ptr; builder->get_widget_derived("GotoDialog", dialog_ptr); std::unique_ptr dialog(dialog_ptr); dialog->set_transient_for(parent); dialog->m_folder = &folder; folder.signal_document_changed().connect( sigc::mem_fun(*dialog, &GotoDialog::on_document_changed)); // For initial sensitivity: dialog->on_document_changed(folder.get_current_document()); return dialog; } void Gobby::GotoDialog::on_show() { Gtk::Dialog::on_show(); m_entry_line->grab_focus(); if(m_current_view != NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); GtkTextIter cursor; gtk_text_buffer_get_iter_at_mark( buffer, &cursor, gtk_text_buffer_get_insert(buffer)); m_entry_line->set_value(gtk_text_iter_get_line(&cursor) + 1); m_entry_line->select_region( 0, m_entry_line->get_text().length()); } } void Gobby::GotoDialog::on_response(int id) { if(id == Gtk::RESPONSE_ACCEPT) { if (!m_current_view) { g_warning("No current view exists."); return; } int value = m_entry_line->get_value_as_int(); GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); GtkTextIter begin; gtk_text_buffer_get_iter_at_line(buffer, &begin, value - 1); m_current_view->set_selection(&begin, &begin); } else if(id == Gtk::RESPONSE_CLOSE) { hide(); } Gtk::Dialog::on_response(id); } void Gobby::GotoDialog::on_document_changed(SessionView* view) { if(m_current_view != NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); g_signal_handler_disconnect(buffer, m_changed_handler); } m_current_view = dynamic_cast(view); set_response_sensitive(Gtk::RESPONSE_ACCEPT, m_current_view != NULL); m_entry_line->set_sensitive(m_current_view != NULL); if(m_current_view != NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); m_changed_handler = g_signal_connect_after( G_OBJECT(buffer), "changed", G_CALLBACK(on_changed_static), this); on_changed(); } } void Gobby::GotoDialog::on_changed() { if (!m_current_view) { g_warning("No current view exists."); return; } GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); m_entry_line->set_range(1, gtk_text_buffer_get_line_count(buffer)); } gobby-0.6.0/code/dialogs/find-dialog.cpp0000664000175000017500000003021714003367605014766 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2015 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/find-dialog.hpp" #include "core/folder.hpp" #include "util/i18n.hpp" #include #include namespace { typedef gboolean (*TextSearchFunc)( const GtkTextIter*, const gchar*, GtkTextSearchFlags, GtkTextIter*, GtkTextIter*, const GtkTextIter* ); const int RESPONSE_FIND = 1; const int RESPONSE_REPLACE = 2; const int RESPONSE_REPLACE_ALL = 3; } Gobby::FindDialog::FindDialog(GtkDialog* cobject, const Glib::RefPtr& builder): Gtk::Dialog(cobject), m_folder(NULL), m_status_bar(NULL) { builder->get_widget("search-for", m_entry_find); builder->get_widget("replace-with-label", m_label_replace); builder->get_widget("replace-with", m_entry_replace); builder->get_widget("match-case", m_check_case); builder->get_widget("match-entire-word-only", m_check_whole_word); builder->get_widget("search-backwards", m_check_backwards); builder->get_widget("wrap-around", m_check_wrap_around); m_entry_find->signal_changed().connect( sigc::mem_fun(*this, &FindDialog::on_find_text_changed)); m_entry_replace->signal_changed().connect( sigc::mem_fun(*this, &FindDialog::on_replace_text_changed)); add_button(_("_Close"), Gtk::RESPONSE_CLOSE); m_button_replace_all = add_button(_("Replace _All"), RESPONSE_REPLACE_ALL); m_button_replace = add_button(_("_Replace"), RESPONSE_REPLACE); add_button(_("_Find"), RESPONSE_FIND); set_default_response(RESPONSE_FIND); } std::unique_ptr Gobby::FindDialog::create(Gtk::Window& parent, const Folder& folder, StatusBar& status_bar) { Glib::RefPtr builder = Gtk::Builder::create_from_resource( "/de/0x539/gobby/ui/find-dialog.ui"); FindDialog* dialog_ptr; builder->get_widget_derived("FindDialog", dialog_ptr); std::unique_ptr dialog(dialog_ptr); dialog->set_transient_for(parent); dialog->m_folder = &folder; dialog->m_status_bar = &status_bar; folder.signal_document_changed().connect( sigc::mem_fun(*dialog, &FindDialog::on_document_changed)); // For initial sensitivity: dialog->on_document_changed(folder.get_current_document()); return dialog; } Gobby::FindDialog::~FindDialog() { on_document_changed(NULL); } bool Gobby::FindDialog::get_search_only() const { return m_label_replace->get_visible(); } void Gobby::FindDialog::set_search_only(bool search_only) { if(search_only) { m_label_replace->hide(); m_entry_replace->hide(); m_button_replace->hide(); m_button_replace_all->hide(); } else { m_label_replace->show(); m_entry_replace->show(); m_button_replace->show(); m_button_replace_all->show(); } set_title(search_only ? _("Find") : _("Replace") ); } Glib::ustring Gobby::FindDialog::get_find_text() const { return m_entry_find->get_text(); } Glib::ustring Gobby::FindDialog::get_replace_text() const { return m_entry_replace->get_text(); } bool Gobby::FindDialog::find_next() { bool result = find_and_select(NULL, SEARCH_FORWARD); if(!result) { Glib::ustring str = Glib::ustring::compose( _("Phrase \"%1\" has not been found"), get_find_text()); m_status_bar->add_info_message(str, 5); return false; } return true; } bool Gobby::FindDialog::find_previous() { bool result = find_and_select(NULL, SEARCH_BACKWARD); if(!result) { Glib::ustring str = Glib::ustring::compose( _("Phrase \"%1\" has not been found"), get_find_text()); m_status_bar->add_info_message(str, 5); return false; } return true; } void Gobby::FindDialog::on_show() { Gtk::Dialog::on_show(); m_entry_find->grab_focus(); } void Gobby::FindDialog::on_response(int id) { switch(id) { case Gtk::RESPONSE_CLOSE: hide(); break; case RESPONSE_FIND: find(); break; case RESPONSE_REPLACE: replace(); break; case RESPONSE_REPLACE_ALL: replace_all(); break; } Gtk::Dialog::on_response(id); } void Gobby::FindDialog::on_document_changed(SessionView* view) { m_active_user_changed_connection.disconnect(); TextSessionView* text_view = dynamic_cast(view); if(text_view != NULL) { m_active_user_changed_connection = text_view->signal_active_user_changed().connect( sigc::mem_fun( *this, &FindDialog::on_active_user_changed)); } update_sensitivity(); } void Gobby::FindDialog::on_active_user_changed(InfUser* user) { update_sensitivity(); } void Gobby::FindDialog::on_find_text_changed() { update_sensitivity(); m_signal_find_text_changed.emit(); } void Gobby::FindDialog::on_replace_text_changed() { m_signal_replace_text_changed.emit(); } Gobby::FindDialog::SearchDirection Gobby::FindDialog::get_direction() const { if(m_check_backwards->get_active()) return SEARCH_BACKWARD; else return SEARCH_FORWARD; } bool Gobby::FindDialog::find() { if(get_direction() == SEARCH_FORWARD) return find_next(); else return find_previous(); } bool Gobby::FindDialog::replace() { SessionView* view = m_folder->get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); // Get selected string Glib::ustring sel_str = text_view->get_selected_text(); Glib::ustring find_str = get_find_text(); // Lowercase both if we are comparing insensitive if(!m_check_case->get_active() ) { sel_str = sel_str.casefold(); find_str = find_str.casefold(); } // Replace them if they are the same if(sel_str == find_str) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER(text_view->get_text_buffer()); // Replace occurrence Glib::ustring replace_text = get_replace_text(); gtk_text_buffer_delete_selection(buffer, TRUE, TRUE); gtk_text_buffer_insert_at_cursor(buffer, replace_text.c_str(), replace_text.bytes()); // and find the next find_and_select(NULL, get_direction()); return true; } else { // Search the first occurrence return find(); } } bool Gobby::FindDialog::replace_all() { // TODO: Add helper function to get textsessionview? Maybe even add // to Folder? SessionView* view = m_folder->get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); GtkTextIter begin; GtkTextBuffer* buffer = GTK_TEXT_BUFFER(text_view->get_text_buffer()); gtk_text_buffer_get_start_iter(buffer, &begin); unsigned int replace_count = 0; GtkTextIter match_start, match_end; while(find_range(&begin, NULL, SEARCH_FORWARD, &match_start, &match_end)) { Glib::ustring replace_text = get_replace_text(); gtk_text_buffer_delete(buffer, &match_start, &match_end); gtk_text_buffer_insert(buffer, &match_start, replace_text.c_str(), replace_text.bytes()); ++ replace_count; begin = match_start; } Glib::ustring message; bool result; if(replace_count == 0) { message = _("No occurrence has been replaced"); result = false; } else { message = Glib::ustring::compose( ngettext("%1 occurrence has been replaced", "%1 occurrences have been replaced", replace_count), replace_count); result = true; } m_status_bar->add_info_message(message, 5); return result; } bool Gobby::FindDialog::find_and_select(const GtkTextIter* from, SearchDirection direction) { SessionView* view = m_folder->get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); const GtkTextIter* real_begin = from; GtkTextIter insert_iter; // Search from cursor position if from is not given if(from == NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER(text_view->get_text_buffer()); GtkTextMark* mark = gtk_text_buffer_get_insert(buffer); gtk_text_buffer_get_iter_at_mark(buffer, &insert_iter, mark); real_begin = &insert_iter; } GtkTextIter match_start, match_end; if(find_wrap(real_begin, direction, &match_start, &match_end)) { if(direction == SEARCH_FORWARD) text_view->set_selection(&match_end, &match_start); else text_view->set_selection(&match_start, &match_end); return true; } return false; } bool Gobby::FindDialog::find_wrap(const GtkTextIter* from, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end) { SessionView* view = m_folder->get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); GtkTextIter start_pos = *from; bool result = find_range(&start_pos, NULL, direction, match_start, match_end); if(result == true) return true; if(!m_check_wrap_around->get_active()) return false; // Wrap around GtkTextIter restart_pos; GtkTextBuffer* buffer = GTK_TEXT_BUFFER(text_view->get_text_buffer()); if(direction == SEARCH_FORWARD) gtk_text_buffer_get_start_iter(buffer, &restart_pos); else gtk_text_buffer_get_end_iter(buffer, &restart_pos); // Limit to search to: Normally the position where we started. GtkTextIter* relimit = &start_pos; if(direction == SEARCH_BACKWARD) { // ??? gtk_text_iter_forward_chars(&start_pos, get_find_text().length()); if(gtk_text_iter_is_end(&start_pos)) relimit = NULL; } return find_range(&restart_pos, relimit, direction, match_start, match_end); } bool Gobby::FindDialog::find_range(const GtkTextIter* from, const GtkTextIter* to, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end) { GtkTextIter start_pos = *from; while(find_range_once(&start_pos, to, direction, match_start, match_end)) { if(m_check_whole_word->get_active() ) { if(!gtk_text_iter_starts_word(match_start) || !gtk_text_iter_ends_word(match_end)) { if(direction == SEARCH_FORWARD) start_pos = *match_end; else start_pos = *match_start; continue; } } return true; } return false; } bool Gobby::FindDialog::find_range_once(const GtkTextIter* from, const GtkTextIter* to, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end) { GtkTextSearchFlags flags = GtkTextSearchFlags(0); if(!m_check_case->get_active() ) flags = GTK_TEXT_SEARCH_CASE_INSENSITIVE; TextSearchFunc search_func = (direction == SEARCH_FORWARD ? gtk_text_iter_forward_search : gtk_text_iter_backward_search); Glib::ustring find_str = m_entry_find->get_text(); gboolean result = search_func( from, find_str.c_str(), flags, match_start, match_end, to != NULL ? to : NULL ); return result; } void Gobby::FindDialog::update_sensitivity() { SessionView* view = m_folder->get_current_document(); TextSessionView* text_view = dynamic_cast(view); bool find_sensitivity = (!m_entry_find->get_text().empty() && text_view != NULL); bool replace_sensitivity = (find_sensitivity && text_view->get_active_user() != NULL); set_response_sensitive(RESPONSE_FIND, find_sensitivity); set_response_sensitive(RESPONSE_REPLACE, replace_sensitivity); set_response_sensitive(RESPONSE_REPLACE_ALL, replace_sensitivity); } gobby-0.6.0/code/dialogs/initial-dialog.hpp0000664000175000017500000000452014003367605015502 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_INITIALDIALOG_HPP_ #define _GOBBY_INITIALDIALOG_HPP_ #include "core/certificatemanager.hpp" #include "core/statusbar.hpp" #include "core/preferences.hpp" #include "core/huebutton.hpp" #include #include #include #include #include #include namespace Gobby { class InitialDialog : public Gtk::Dialog { private: friend class Gtk::Builder; InitialDialog(GtkDialog* cobject, const Glib::RefPtr& builder); public: static std::unique_ptr create(Gtk::Window& parent, StatusBar& status_bar, Preferences& preferences, CertificateManager& cert_manager); protected: virtual void on_response(int id); void on_remote_allow_connections_toggled(); void on_remote_require_password_toggled(); void on_remote_auth_external_toggled(); StatusBar* m_status_bar; Preferences* m_preferences; CertificateManager* m_cert_manager; Gtk::Entry* m_name_entry; HueButton* m_color_button; Gtk::CheckButton* m_remote_allow_connections; Gtk::CheckButton* m_remote_require_password; Gtk::Entry* m_remote_password_entry; Gtk::RadioButton* m_remote_auth_self; Gtk::RadioButton* m_remote_auth_external; Gtk::FileChooserButton* m_remote_auth_external_keyfile; Gtk::FileChooserButton* m_remote_auth_external_certfile; Gtk::Grid* m_remote_connections_grid; Gtk::Grid* m_password_grid; Gtk::Grid* m_certificate_grid; }; } #endif // _GOBBY_INITIALDIALOG_HPP_ gobby-0.6.0/code/dialogs/open-location-dialog.hpp0000664000175000017500000000302714003367605016621 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPENLOCATIONDIALOG_HPP_ #define _GOBBY_OPENLOCATIONDIALOG_HPP_ #include #include #include "util/historyentry.hpp" namespace Gobby { class OpenLocationDialog: public Gtk::Dialog { private: friend class Gtk::Builder; OpenLocationDialog(GtkDialog* cobject, const Glib::RefPtr& builder); public: static std::unique_ptr create(Gtk::Window& parent); Glib::ustring get_uri() const; void set_uri(const Glib::ustring& uri); protected: virtual void on_response(int response_id); virtual void on_show(); void on_entry_changed(); HistoryComboBox m_combo; }; } #endif // _GOBBY_OPENLOCATIONDIALOG_HPP_ gobby-0.6.0/code/resources/0000775000175000017500000000000014005504730012544 500000000000000gobby-0.6.0/code/resources/gobby.gresources.xml0000664000175000017500000000165114003367605016501 00000000000000 ui/browser-context-menu.ui ui/connection-dialog.ui ui/connection-info-dialog.ui ui/document-location-dialog.ui ui/entry-dialog.ui ui/find-dialog.ui ui/goto-dialog.ui ui/initial-dialog.ui ui/menu.ui ui/open-location-dialog.ui ui/password-dialog.ui ui/preferences-dialog.ui ui/toolbar.ui gobby-0.6.0/code/resources/ui/0000775000175000017500000000000014005504730013161 500000000000000gobby-0.6.0/code/resources/ui/preferences-dialog.ui0000664000175000017500000021426114003367605017212 00000000000000 False 12 Preferences False dialog False vertical 6 False end False False 0 True True True False 12 vertical 6 True False 12 6 12 True False start User _Name: True user-name 0 0 True True True 1 0 True False start User Colo_r: True user-color 0 1 True True True True 1 1 True False start Color Intensity: 0 2 True True True 4 False False 1 2 0 1 True False start Settings 0 0 True False start Remote Users 0 2 True False 12 vertical 6 Show cursors of remote users True True False True 0 True 0 0 Show selections of remote users True True False True 0 True 0 1 Highlight current line of remote users True True False True 0 True 0 2 Indicate cursor position of remote users in the scrollbar True True False True 0 True 0 3 0 3 True False start Local Documents 0 4 True False 12 6 Allow remote users to edit local documents True True False True 0 True 0 0 True False 12 vertical 6 12 Require remote users to enter a password True True False 0 True 0 0 2 True False start _TCP Port Number: True port-number 0 2 True True True 1 2 True False 12 12 True False _Password: True password-entry 0 0 True False True True 1 0 0 1 2 0 1 Remember local documents after Gobby restart True True False True 0 True 0 2 True False 12 12 True False Local Documents _Directory: True local-documents-directory 0 0 True False True 1 0 0 3 0 5 True False User False True False 12 vertical 6 True False start Tab Stops 0 0 True False 12 6 12 True False start Tab _Width: True tab-width 0 0 True True True 1 0 Insert spaces instead of tabs True True False True 0 True 0 1 2 0 1 True False start Indentation 0 2 Enable automatic indentation True True False 12 True 0 True 0 3 True False start Home/End Behavior 0 4 Smart Home/End True True False With this option enabled, pressing home or end at the beginning or end of a line, respectively, moves the cursor to the first or last non-whitespace character in that line. 12 True 0 True 0 5 True False start File Saving 0 6 True False 12 vertical 6 Enable automatic saving of documents True True False True 0 True 0 0 True False 12 12 True False start Autosave interval in minutes: 0 0 True True True 1 0 0 1 0 7 1 True False Editor 1 False True False 12 vertical 6 True False start Text Wrapping 0 0 Enable text wrapping True True False 12 True 0 True 0 1 Do not split words over two lines True True False 24 True 0 True 0 2 True False start Line Numbers 0 3 Display line numbers True True False 12 True 0 True 0 4 True False start Current Line 0 5 Highlight current line True True False 12 True 0 True 0 6 True False start Right Margin 0 7 True False 12 vertical 6 Display right margin True True False True 0 True 0 0 True False 12 12 True False start Right _margin at column: True right-margin-column 0 0 True True True 1 0 0 1 0 8 True False start Bracket Matching 0 9 Highlight matching brackets True True False 12 True 0 True 0 10 True False start Whitespace Display 0 11 True False 12 True 0 12 2 True False View 2 False True False 12 vertical 6 True False start Toolbar 0 0 True False 12 True 0 1 True False start Font 0 2 True True True 12 True Sans 12 0 3 True False start Color Scheme 0 4 True True 12 in True True True True False 0 5 3 True False Appearance 3 False True False 12 vertical 6 True False start Trusted Certificate Authorities (CAs) 0 0 True False 12 6 12 Trust this computer's default CAs True True False True 0 True 0 0 2 True False start Additionally Trusted CAs: 0 1 True False True 1 1 False start 0 True True 0 2 2 0 1 True False start Secure Connection 0 2 True False 12 True 0 3 True False start Authentication 0 4 True False 12 vertical 6 None True True False 0 True True 0 0 Authenticate with a certificate True True False 0 True True authentication-none 0 1 True False 12 6 12 True False start Private Key: 0 0 True False start Certificate: 0 2 False start 0 True True 0 3 3 False start 0 True True 0 1 3 True False True 1 0 True False True 1 2 Create New... True True True 2 0 Create New... True True True 2 2 0 2 0 5 4 True False Security 4 False False True 1 gobby-0.6.0/code/resources/ui/open-location-dialog.ui0000664000175000017500000000616314003367605017460 00000000000000 False 12 Open Location False dialog False vertical 6 False end False False 0 True False vertical 6 6 True False start 0 Enter the location (URI) of the document you would like to open. True 30 0 0 True False True True 0 1 False True 1 gobby-0.6.0/code/resources/ui/document-location-dialog.ui0000664000175000017500000001044414003367605020332 00000000000000 False 12 True 480 dialog False vertical 6 False end False False 0 True False vertical 6 6 True False Document Name: 0 0 True True True 1 0 True False start 0 1 2 True True in True True True 0 2 2 False True 1 gobby-0.6.0/code/resources/ui/goto-dialog.ui0000664000175000017500000000577314003367605015667 00000000000000 False 12 Go To Line False dialog False vertical 6 False end False False 0 True False 6 6 True False Line _Number: True spin-button 0 0 True True True True number True 1 0 False True 1 gobby-0.6.0/code/resources/ui/find-dialog.ui0000664000175000017500000001671114003367605015631 00000000000000 False 12 False dialog False vertical 6 False end False False 0 True False 6 12 True False baseline 0 _Search For: True search-for 0 0 True True baseline True True 1 0 True False baseline 0 Replace _With: True replace-with 0 1 True True baseline True True 1 1 _Match Case True True False True 0 True 0 2 2 Match _entire word only True True False True 0 True 0 3 2 Search _backwards True True False True 0 True 0 4 2 Wra_p Around True True False True 0 True True 0 5 2 False True 1 gobby-0.6.0/code/resources/ui/initial-dialog.ui0000664000175000017500000005337114003367605016345 00000000000000 False 12 Connect To Server False dialog False vertical 6 False end False False 0 True False vertical 6 12 True False center start Welcome to Gobby 1 0 True False 0 0 Before we start, a few options need to be configured. You can later change them by choosing <i>Preferences</i> from the application menu. True True 40 1 1 True False start start 128 gobby-0.5 6 0 0 6 True False 6 12 True False start center 6 User Name 0 0 True True 6 True True 1 0 True False start center Your name as shown to other users. 0 1 2 True False start center 6 User Color 0 2 True True True 6 True Choose a User Color 1 2 True False start center The color with which text you have written is branded. 0 3 2 1 2 True False start center 6 Remote Connections 1 3 Allow remote users to edit local documents True True False 0 True 1 4 True False 12 vertical 6 Ask remote users to enter a password True True False 0 True 0 0 True False 12 12 True False start center Password: end 0 0 True True True False 1 0 0 1 True False start center Authentication 0 2 Create a self-signed certificate (Recommended) True True False 12 0 True create-self-signed 0 3 True False start center 12 0 It may take a few seconds for the certificate to be generated. 0 4 Use an existing certificate (Expert Option) True True False 12 0 True True create-self-signed 0 5 True False start center 12 0 Use an existing private key and certificate. The files must be in PEM format. True 0 6 True False 24 6 12 True False start center Private Key: 0 0 True False start center Certificate: 0 1 True False True 1 0 True False True 1 1 0 7 1 5 False True 1 gobby-0.6.0/code/resources/ui/menu.ui0000664000175000017500000002053514003367605014417 00000000000000
_Preferences app.preferences
Help app.help About app.about _Quit app.quit
_File
_New... win.new <primary>n _Open... win.open <primary>o Open _Location... win.open-location <primary>l
_Save win.save <primary>s Save _As... win.save-as <primary><shift>s Save All win.save-all <primary><shift>l
Export As _HTML... win.export-html <primary><shift>h Connect _To Server... win.connect <primary>t
_Close win.close <primary>w
_Edit
_Undo win.undo <primary>z _Redo win.redo <primary><shift>z
Cut win.cut <primary>x _Copy win.copy <primary>c Paste win.paste <primary>v
_Find... win.find <primary>f Find Ne_xt win.find-next <primary>g _Find Pre_vious win.find-prev <primary><shift>g Find And Re_place... win.find-replace <primary>h Go To _Line win.goto-line <primary>i
_View
Reset User Colors win.hide-user-colors <primary><shift>c
Fullscreen win.fullscreen F11 Zoom In win.zoom-in <primary>plus Zoom Out win.zoom-out <primary>minus
View Tool Bar win.view-toolbar View Status Bar win.view-statusbar
View Document Browser win.view-browser F9 View Chat win.view-chat <shift>F9 View Document User List win.view-document-user-list <primary>F9 View Chat User List win.view-chat-user-list <primary><shift>F9
_Highlight Mode None win.highlight-mode
gobby-0.6.0/code/resources/ui/connection-info-dialog.ui0000664000175000017500000000714014003367605017775 00000000000000 False 12 Connection Information False dialog False vertical 6 False end False False 0 True False 12 True False 6 GTK_ALIGN_START 0 0 True True in 200 80 True True 1 0 True 2 0 False True 1 gobby-0.6.0/code/resources/ui/connection-dialog.ui0000664000175000017500000001010214003367605017034 00000000000000 False 12 Connect To Server False dialog False vertical 6 False end False False 0 True False 6 6 True False 6 network-server 6 0 0 2 True False Please enter a host name with which to establish a connection. 1 0 2 True False _Remote Endpoint: True entry 1 1 True True True True 2 1 False True 1 gobby-0.6.0/code/resources/ui/browser-context-menu.ui0000664000175000017500000000344114003367605017557 00000000000000
_Remove browser.remove
_Disconnect From Server browser.disconnect _Connection Info... browser.connection-info _Create Account... browser.create-account
Create Do_cument... browser.create-document Create Director_y... browser.create-directory _Open Document... browser.open-document
_Permissions... browser.permissions D_elete browser.delete
gobby-0.6.0/code/resources/ui/toolbar.ui0000664000175000017500000001457414003367605015123 00000000000000 False True False win.new document-new True New False True True False win.open document-open True Open False True True False win.save document-save True Save False True True False True False win.undo edit-undo True Undo False True True False win.redo edit-redo True Redo False True True False True False win.cut edit-cut True Cut False True True False win.copy edit-copy True Copy False True True False win.paste edit-paste True Paste False True True False True False win.find edit-find True Find False True True False win.find-replace edit-find-replace True Find And Replace False True gobby-0.6.0/code/resources/ui/entry-dialog.ui0000664000175000017500000000525114003367605016047 00000000000000 False dialog False 12 False vertical 6 False end False False 0 True False 6 True False entry True 0 0 True True True True 1 0 False True 1 gobby-0.6.0/code/resources/ui/password-dialog.ui0000664000175000017500000001033514003367605016547 00000000000000 False 12 Password Required False dialog False vertical 6 False end False False 0 True False 6 6 True False 6 network-server 6 0 0 2 True False True 30 1 0 2 True False Server _Password: True password 1 1 True True True False True password 2 1 False True 1 gobby-0.6.0/COPYING0000664000175000017500000000140314003367605010577 00000000000000ISC License Copyright (c) 2008-2014, Armin Burgmeier Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. gobby-0.6.0/configure.ac0000664000175000017500000000735414003367605012045 00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT([gobby], [0.6.0], [crew@0x539.de]) AC_CONFIG_AUX_DIR([.]) AM_INIT_AUTOMAKE(1.9 check-news foreign subdir-objects) m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES]) AC_CONFIG_SRCDIR([code/window.hpp]) AC_CONFIG_HEADER([code/features.hpp]) # Extract host information. AC_CANONICAL_HOST # Checks for programs. AC_PROG_CXX AC_PROG_CC AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_RANLIB AM_PROG_CC_C_O AC_CACHE_SAVE # Recent versions of glib/gtkmm need c++11 support AX_CXX_COMPILE_STDCXX_11 ################################### # Check for Win32 ################################### AC_MSG_CHECKING([whether to enable WIN32 specific flags]) case "$host_os" in *mingw*) win32=true AC_MSG_RESULT([yes]) AC_CHECK_TOOL(WINDRES, windres) ;; *) win32=false AC_MSG_RESULT([no]) ;; esac AM_CONDITIONAL(WIN32, test x$win32 = xtrue) required_libs="libxml++-2.6 glibmm-2.4 >= 2.39.93 giomm-2.4 >= 2.39.93 libgsasl >= 0.2.21 gnutls >= 3.0.20 gtkmm-3.0 >= 3.6.0 gtksourceview-3.0 >= 3.0.0" ################################### # Check for libraries. ################################### PKG_CHECK_MODULES([gobby], [$required_libs]) PKG_CHECK_MODULES([infinote], [libinfinity-0.7 libinftext-0.7 libinfgtk-0.7 libinftextgtk-0.7]) AC_CACHE_SAVE ################################### # Glib i18n/gettext support. ################################### ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`" AM_GLIB_GNU_GETTEXT AM_GLIB_DEFINE_LOCALEDIR(GOBBY_LOCALEDIR) IT_PROG_INTLTOOL([0.35.0]) GETTEXT_PACKAGE=gobby05 AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["${GETTEXT_PACKAGE}"], [gettext domain]) ################################### # Help file building ################################### AC_ARG_ENABLE([docs], AS_HELP_STRING([--enable-docs], [Builds and installs the documentation [[default=yes]]]), [enable_docs=$withval], [enable_docs=yes]) if test "x$enable_docs" = "xyes"; then YELP_HELP_INIT AM_CONDITIONAL([HAVE_YELP], true) else AM_CONDITIONAL([HAVE_YELP], false) fi ################################### # GSettings ################################### GLIB_GSETTINGS ################################### # Output ################################### AC_OUTPUT([ Makefile m4/Makefile po/Makefile.in icons/Makefile icons/hicolor/Makefile icons/hicolor/48x48/Makefile icons/hicolor/48x48/apps/Makefile icons/hicolor/48x48/actions/Makefile icons/hicolor/48x48/status/Makefile icons/hicolor/scalable/Makefile icons/hicolor/scalable/apps/Makefile icons/hicolor/scalable/actions/Makefile icons/hicolor/scalable/status/Makefile icons/HighContrastLargePrint/Makefile icons/HighContrastLargePrint/48x48/Makefile icons/HighContrastLargePrint/48x48/apps/Makefile icons/HighContrastLargePrint/48x48/actions/Makefile icons/HighContrastLargePrint/scalable/Makefile icons/HighContrastLargePrint/scalable/apps/Makefile icons/HighContrastLargePrint/scalable/actions/Makefile icons/HighContrastLargePrintInverse/Makefile icons/HighContrastLargePrintInverse/48x48/Makefile icons/HighContrastLargePrintInverse/48x48/apps/Makefile icons/HighContrastLargePrintInverse/48x48/actions/Makefile icons/HighContrastLargePrintInverse/scalable/Makefile icons/HighContrastLargePrintInverse/scalable/apps/Makefile icons/HighContrastLargePrintInverse/scalable/actions/Makefile help/Makefile de.0x539.gobby.gschema.xml win32/gobby.iss ]) # vim:set et sw=2 ts=2: gobby-0.6.0/Makefile.am0000664000175000017500000000511014005503577011601 00000000000000SUBDIRS = m4 . icons po if HAVE_YELP SUBDIRS += help endif # Tell aclocal where to find `.m4' files. ACLOCAL_AMFLAGS = -I m4 dist_man_MANS = gobby-0.5.1 bin_PROGRAMS = gobby-0.5 noinst_HEADERS = gobby_0_5_SOURCES = BUILT_SOURCES = EXTRA_DIST = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = include code/Makefile.am include win32/Makefile.am gobby_0_5_LDADD = \ $(gobby_LIBS) \ $(infinote_LIBS) \ $(LIBS) if WIN32 gobby_0_5_LDADD += -lws2_32 gobby_0_5_LDFLAGS = \ -Wl,--enable-runtime-pseudo-reloc \ -mwindows \ win32/gobby.res endif # PRIVATE_ICONS_DIR is required by application.cpp to get access to the # private icons that are installed into prefix/share/gobby-0.5/icons instead # of prefix/share/icons. We also set PUBLIC_ICONS_DIR explicitely so that # we find the application icon if it is installed in a non-standard prefix. AM_CPPFLAGS = $(gobby_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code \ -DPRIVATE_ICONS_DIR=\""$(datadir)/gobby-0.5/icons"\" \ -DPUBLIC_ICONS_DIR=\""$(datadir)/icons"\" # .desktop file if !WIN32 desktopdir = $(datadir)/applications desktop_in_files = gobby-0.5.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) metainfodir = $(datadir)/metainfo metainfo_DATA = gobby-0.5.metainfo.xml endif gsettings_SCHEMAS = de.0x539.gobby.gschema.xml EXTRA_DIST += de.0x539.gobby.gschema.xml.in CLEANFILES += de.0x539.gobby.gschema.xml DISTCLEANFILES += de.0x539.gobby.gschema.xml MAINTAINERCLEANFILES += $(gsettings_SCHEMAS:.xml=.valid) @GSETTINGS_RULES@ clean-local: -rm -rf gobby-0.5.desktop @INTLTOOL_DESKTOP_RULE@ EXTRA_DIST += README.md # For the manual EXTRA_DIST += gobby-0.5.desktop.in gobby-0.5.metainfo.xml DISTCLEANFILES += gnome-doc-utils.make DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper MAINTAINERCLEANFILES += \ ChangeLog distclean-local: if test "$(srcdir)" = "."; then :; else \ rm -f ChangeLog; \ fi ChangeLog: $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \ (GIT_DIR=$(top_srcdir)/.git ./missing --run git log \ 6570cc49a6c2c29fe9cf4c85e3b74f133ae4c1f8..HEAD --stat=78) \ | fmt --split-only --width=78 > $@.tmp \ && cat $@.tmp ChangeLog.manual ChangeLog.pre-0.5 > $@ && $(RM) $@.tmp \ || ($(RM) $@.tmp; \ echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ (test -f $@ || echo git-log is required to generate this file >> $@)); \ else \ test -f $@ || \ (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ echo A git checkout and git-log is required to generate this file >> $@); \ fi .PHONY: ChangeLog gobby-0.6.0/de.0x539.gobby.gschema.xml.in0000664000175000017500000003731214003367605014571 00000000000000 'both' Toolbar Style Specifies how to display the tool bar. 'Monospace 12' Font The font that is used in the main editing area. 'classic' Style Scheme Specifies the GtkSourceView style scheme to be used for the main editing area. true Show Toolbar Whether or not to display the tool bar. true Show Status Bar Whether or not to display the status bar. true Show Document Browser Whether or not to display the document browser. true Show Chat Whether or not to show the chat pane. true Show Document User List Whether or not to show the list of participants in the currently open document. true Show Chat User List Whether or not to show the list of users currently participating in the chat. 8 Tab Width Number of spaces equivalent to one tabstop character. false Insert Spaces Instead of Tabs When pressing the tab key, insert the equivalent number of spaces instead of a tabstop character. true Automatic Indentation When inserting a new line, automatically indent the new line to the same level as the previous line. true Smart Home/End Keys When this is enabled, pressing the home key at the beginning of the line moves to the first non-whitespace character on that line. Same with the end key and the last non-whitespace character on the line. false Autosave Enabled If this is on, a copy of every open document is saved to disk periodically. This option only takes effect for documents that have been saved manually once before, such that a path where to store the document to is known. 10 Autosave Interval If autosave is enabled, this specifies the interval in milliseconds within which each document is saved to disk. (['enabled', 'time', 'interval'], false, 60, 5) Keepalive Settings Settings for sending keepalive probes to detect whether the connection is still alive. This is a tuple of 4 values. The first is an array of strings which can be either 'enabled', 'time', or 'interval'. The following three values are known as 'enabled', 'time' and 'interval', and they are only used if the corresponding flag is set in the first value, otherwise the system default settings are taken. The second value ('enabled') specifies whether keepalive probes should be sent or not, the thirh value ('time') specifies the time in seconds the connection has to be idle before sending the first keepalive probe, and the fourth value ('interval') specifies the time in seconds to send subsequent keepalive probes. true Trust the Default System CAs If true, trust the default system CAs. It is platform dependent where this CAs are obtained from, but on a Linux system it is typically from the file '/etc/ssl/certs/ca-certificates.crt'. '' Additionally Trusted CAs If this is not empty, specifies a file with additional trusted CA certificates in PEM format. If 'use-system-trust' is disabled, this is the only source of trusted CAs. 'prefer-tls' Security Policy Specifies whether transport layer security (TLS) should be used or not, also depending on whether the server offers this or not. true Authentication Enabled If this is true, the local computer authenticates itself with a certificate to remote hosts that support TLS. The certificate in specified in 'certificate-file' is used and acts either as a server certificate (for incoming connections) or a client certificate (for outgoing connections). '' Certificate A X.509 certificate (possibly a certificate chain), in PEM format, to be presented to the remote host for authentication of a TLS connection. '' Private Key The private key, in PEM format, for the certificate given in 'certificate-file'. The private key can, but does not have to be, in the same file. '' Name The name of the local user, as shown to other participants. If this is the empty string, Gobby will default to the name of the current unix user. -1 User Color A value between 0 and 1, specifying the color with which text that the local user writes is branded. If -1, Gobby will choose a random color. 1.0 User Color Transparency The transparency with which user colors are drawn. A value of 1.0 means fully opaque, while 0.0 is fully transparent (no user colors drawn). true Show Remote Cursors Whether or not to show the insertion cursors of remote users. true Show Remote Selections Whether or not to highlight text that is currently selected by remote users. true Show Remote Current Lines Whether to highlight the line in which remote users have the insertion cursor at the moment. true Show Remote Cursor Positions Whether to indicate the cursor position of remote users in the scrollbar. true Allow Remote Access Allow remote users to connect to this computer and modify documents stored on this computer. true Require Password Whether to ask for a password before allowing remote users to connect to this computer. '' Password The password that needs to be entered before being able to connect to this computer. This value is only used if the 'require-password' option is set. 6523 Port Number The TCP port number to listen on when allowing remote users to connect. true Save Local Documents Whether to save documents created on this computer so that when closing Gobby and opening it again the documents remain available. '' Host Directory The directory in which to store documents saved on this computer. This option only has an effect if the 'keep-local-documents' option is set. If this is the empty string, Gobby chooses a location within its configuration directory. 'word-char' Wrap Mode Specifies whether and how to wrap lines that do not fit on a single line of the screen. true Display Line Numbers Whether to display line numbers at the left hand side of the main editing area. true Highlight Current Line Whether to highlight the line that the insertion cursor is currently in. true Display Margin Whether to display a margin on the right hand side of the editing area, beyond a fixed number of fixed-width characters. 80 Margin Position The number of characters at which to display the right margin. This option only has any effect if the 'margin-display' option is set. true Highlight Matching Brackets Whether to highlight matching brackets when the insertion cursor is currently at either an opening or a closing bracket. [] Draw Spaces Whether to draw any whitespace, and if so, what kind of whitespace. 150 Document User List Width Width, in pixels, of the user list in the main editing area. 150 Chat User List Width Width, in pixels, of the user list in the chat area. false Run Whether Gobby has been run for the first time. gobby-0.6.0/README.md0000664000175000017500000001015314005500347011017 00000000000000# Gobby: First Contact ![Linux build](https://github.com/gobby/gobby/workflows/Linux%20build/badge.svg) ![Windows build](https://github.com/gobby/gobby/workflows/Windows%20build/badge.svg) ## Synopsis Gobby is a free collaborative editor. This means that it provides you with the possibility to edit files simultaneously with other users over a network. The platforms on which you could use Gobby are so far Microsoft Windows, Linux, Mac OS X and other Unix-like ones. Developed with the GTK+ toolkit it integrates nicely into the GNOME desktop environment if you want it to. ## Features - Realtime collaboration through encrypted connections (including PFS) - Each user has its own colour to be identified by others - Local group Undo - Group chat - Shows cursors and selections of remote users - Sidebar with all the others having joined the session - Syntax highlighting, auto indentation, configurable tab width - Multiple documents in one session - Zeroconf support (optional) - Unicode support - Internationalisation - Highly configurable dedicated server - Sophisticated Access Control Lists (ACLs) - Cross-platform: Microsoft Windows, Linux, Mac OS X, other flavours of Unix - Free software, licenced under the terms of the ISC license ## Requirements - libinfinity (0.7.x) - Glib (>= 2.40.0) - Glibmm (>= 2.40.0) - libxml++ (>= 2.6.0) - libgsasl (>= 0.2.21) - Gtkmm-3.0 (>= 3.6) - GtkSourceView-3.0 (>= 3.0) ## More information The development of Gobby is coordinated on github at . The primary distribution point is . ### How to report bugs Bugs should be files as issues on the github issue tracker at . ### How to get involved We urgently seek all kind of people who could help us in any way. Firstly we need documentation writers who could help us crafting a help file and some standalone documentation for the web. Secondly, if you are skilled in C/C++ programming, we could need helping hands with programming. A starting point could be [github issues](https://github.com/gobby/gobby.git). And last, but certainly not least, we need translators who get their hands at Gobby's string templates to get it localised. Thus more could use Gobby in their native language. Just contact us, if in doubt, for more details. There are also two mailing lists which should provide a mean of contact to other Gobby users and to the developers. - *obby-announce*: A moderated list used to announce new releases of Gobby and its foundation, libinfinity. To subscribe, please send an email with the topic "subscribe" to . A list archive is available at . - *obby-users*: Discussions about Gobby's usage and installation problems. The announcements are also posted there. To subscribe, please send an email with the topic "subscribe" to . A list archive is available at . ## Licensing Copyright (C) 2008-2015, Armin Burgmeier Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ## Development To get in contact with the developers, please use the obby-users mailing list mentioned above, or open an issue on github. To get the up-to-date Gobby code to hack on, use `git clone https://github.com/gobby/gobby.git`. Pull requests against our [GitHub repository](https://github.com/gobby/gobby) are appreciated. gobby-0.6.0/Makefile.in0000664000175000017500000024711514005504374011623 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_YELP_TRUE@am__append_1 = help bin_PROGRAMS = gobby-0.5$(EXEEXT) @WIN32_TRUE@am__append_2 = win32/gobby.res @WIN32_TRUE@am__append_3 = -lws2_32 subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(noinst_HEADERS) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = de.0x539.gobby.gschema.xml win32/gobby.iss CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(metainfodir)" PROGRAMS = $(bin_PROGRAMS) am__dirstamp = $(am__leading_dot)dirstamp am_gobby_0_5_OBJECTS = code/util/asyncoperation.$(OBJEXT) \ code/util/closebutton.$(OBJEXT) code/util/config.$(OBJEXT) \ code/util/file.$(OBJEXT) code/util/historyentry.$(OBJEXT) \ code/util/i18n.$(OBJEXT) code/util/serialize.$(OBJEXT) \ code/util/uri.$(OBJEXT) \ code/core/gobject/gobby-undo-manager.$(OBJEXT) \ code/core/applicationactions.$(OBJEXT) \ code/core/browser.$(OBJEXT) \ code/core/certificatemanager.$(OBJEXT) \ code/core/chatsessionview.$(OBJEXT) \ code/core/chattablabel.$(OBJEXT) \ code/core/closableframe.$(OBJEXT) \ code/core/connectionmanager.$(OBJEXT) \ code/core/credentialsgenerator.$(OBJEXT) \ code/core/documentinfostorage.$(OBJEXT) \ code/core/filechooser.$(OBJEXT) code/core/folder.$(OBJEXT) \ code/core/foldermanager.$(OBJEXT) \ code/core/huebutton.$(OBJEXT) \ code/core/knownhoststorage.$(OBJEXT) \ code/core/menumanager.$(OBJEXT) code/core/nodewatch.$(OBJEXT) \ code/core/noteplugin.$(OBJEXT) code/core/preferences.$(OBJEXT) \ code/core/selfhoster.$(OBJEXT) code/core/server.$(OBJEXT) \ code/core/sessionuserview.$(OBJEXT) \ code/core/sessionview.$(OBJEXT) code/core/statusbar.$(OBJEXT) \ code/core/tablabel.$(OBJEXT) \ code/core/textsessionuserview.$(OBJEXT) \ code/core/textsessionview.$(OBJEXT) \ code/core/textundogrouping.$(OBJEXT) \ code/core/texttablabel.$(OBJEXT) code/core/titlebar.$(OBJEXT) \ code/core/toolbar.$(OBJEXT) code/core/userjoin.$(OBJEXT) \ code/core/userlist.$(OBJEXT) code/core/windowactions.$(OBJEXT) \ code/operations/operations.$(OBJEXT) \ code/operations/operation-delete.$(OBJEXT) \ code/operations/operation-export-html.$(OBJEXT) \ code/operations/operation-new.$(OBJEXT) \ code/operations/operation-open.$(OBJEXT) \ code/operations/operation-open-multiple.$(OBJEXT) \ code/operations/operation-save.$(OBJEXT) \ code/operations/operation-subscribe-path.$(OBJEXT) \ code/dialogs/connection-dialog.$(OBJEXT) \ code/dialogs/connection-info-dialog.$(OBJEXT) \ code/dialogs/document-location-dialog.$(OBJEXT) \ code/dialogs/entry-dialog.$(OBJEXT) \ code/dialogs/find-dialog.$(OBJEXT) \ code/dialogs/goto-dialog.$(OBJEXT) \ code/dialogs/initial-dialog.$(OBJEXT) \ code/dialogs/open-location-dialog.$(OBJEXT) \ code/dialogs/password-dialog.$(OBJEXT) \ code/dialogs/preferences-dialog.$(OBJEXT) \ code/commands/file-tasks/task-export-html.$(OBJEXT) \ code/commands/file-tasks/task-new.$(OBJEXT) \ code/commands/file-tasks/task-open.$(OBJEXT) \ code/commands/file-tasks/task-open-file.$(OBJEXT) \ code/commands/file-tasks/task-open-location.$(OBJEXT) \ code/commands/file-tasks/task-open-multiple.$(OBJEXT) \ code/commands/file-tasks/task-save.$(OBJEXT) \ code/commands/file-tasks/task-save-all.$(OBJEXT) \ code/commands/application-commands.$(OBJEXT) \ code/commands/auth-commands.$(OBJEXT) \ code/commands/autosave-commands.$(OBJEXT) \ code/commands/browser-commands.$(OBJEXT) \ code/commands/browser-context-commands.$(OBJEXT) \ code/commands/edit-commands.$(OBJEXT) \ code/commands/file-commands.$(OBJEXT) \ code/commands/folder-commands.$(OBJEXT) \ code/commands/help-commands.$(OBJEXT) \ code/commands/subscription-commands.$(OBJEXT) \ code/commands/synchronization-commands.$(OBJEXT) \ code/commands/user-join-commands.$(OBJEXT) \ code/commands/view-commands.$(OBJEXT) \ code/application.$(OBJEXT) code/main.$(OBJEXT) \ code/window.$(OBJEXT) code/gobby-resources.$(OBJEXT) gobby_0_5_OBJECTS = $(am_gobby_0_5_OBJECTS) am__DEPENDENCIES_1 = gobby_0_5_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) gobby_0_5_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(gobby_0_5_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/code depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = code/$(DEPDIR)/application.Po \ code/$(DEPDIR)/gobby-resources.Po code/$(DEPDIR)/main.Po \ code/$(DEPDIR)/window.Po \ code/commands/$(DEPDIR)/application-commands.Po \ code/commands/$(DEPDIR)/auth-commands.Po \ code/commands/$(DEPDIR)/autosave-commands.Po \ code/commands/$(DEPDIR)/browser-commands.Po \ code/commands/$(DEPDIR)/browser-context-commands.Po \ code/commands/$(DEPDIR)/edit-commands.Po \ code/commands/$(DEPDIR)/file-commands.Po \ code/commands/$(DEPDIR)/folder-commands.Po \ code/commands/$(DEPDIR)/help-commands.Po \ code/commands/$(DEPDIR)/subscription-commands.Po \ code/commands/$(DEPDIR)/synchronization-commands.Po \ code/commands/$(DEPDIR)/user-join-commands.Po \ code/commands/$(DEPDIR)/view-commands.Po \ code/commands/file-tasks/$(DEPDIR)/task-export-html.Po \ code/commands/file-tasks/$(DEPDIR)/task-new.Po \ code/commands/file-tasks/$(DEPDIR)/task-open-file.Po \ code/commands/file-tasks/$(DEPDIR)/task-open-location.Po \ code/commands/file-tasks/$(DEPDIR)/task-open-multiple.Po \ code/commands/file-tasks/$(DEPDIR)/task-open.Po \ code/commands/file-tasks/$(DEPDIR)/task-save-all.Po \ code/commands/file-tasks/$(DEPDIR)/task-save.Po \ code/core/$(DEPDIR)/applicationactions.Po \ code/core/$(DEPDIR)/browser.Po \ code/core/$(DEPDIR)/certificatemanager.Po \ code/core/$(DEPDIR)/chatsessionview.Po \ code/core/$(DEPDIR)/chattablabel.Po \ code/core/$(DEPDIR)/closableframe.Po \ code/core/$(DEPDIR)/connectionmanager.Po \ code/core/$(DEPDIR)/credentialsgenerator.Po \ code/core/$(DEPDIR)/documentinfostorage.Po \ code/core/$(DEPDIR)/filechooser.Po \ code/core/$(DEPDIR)/folder.Po \ code/core/$(DEPDIR)/foldermanager.Po \ code/core/$(DEPDIR)/huebutton.Po \ code/core/$(DEPDIR)/knownhoststorage.Po \ code/core/$(DEPDIR)/menumanager.Po \ code/core/$(DEPDIR)/nodewatch.Po \ code/core/$(DEPDIR)/noteplugin.Po \ code/core/$(DEPDIR)/preferences.Po \ code/core/$(DEPDIR)/selfhoster.Po \ code/core/$(DEPDIR)/server.Po \ code/core/$(DEPDIR)/sessionuserview.Po \ code/core/$(DEPDIR)/sessionview.Po \ code/core/$(DEPDIR)/statusbar.Po \ code/core/$(DEPDIR)/tablabel.Po \ code/core/$(DEPDIR)/textsessionuserview.Po \ code/core/$(DEPDIR)/textsessionview.Po \ code/core/$(DEPDIR)/texttablabel.Po \ code/core/$(DEPDIR)/textundogrouping.Po \ code/core/$(DEPDIR)/titlebar.Po code/core/$(DEPDIR)/toolbar.Po \ code/core/$(DEPDIR)/userjoin.Po \ code/core/$(DEPDIR)/userlist.Po \ code/core/$(DEPDIR)/windowactions.Po \ code/core/gobject/$(DEPDIR)/gobby-undo-manager.Po \ code/dialogs/$(DEPDIR)/connection-dialog.Po \ code/dialogs/$(DEPDIR)/connection-info-dialog.Po \ code/dialogs/$(DEPDIR)/document-location-dialog.Po \ code/dialogs/$(DEPDIR)/entry-dialog.Po \ code/dialogs/$(DEPDIR)/find-dialog.Po \ code/dialogs/$(DEPDIR)/goto-dialog.Po \ code/dialogs/$(DEPDIR)/initial-dialog.Po \ code/dialogs/$(DEPDIR)/open-location-dialog.Po \ code/dialogs/$(DEPDIR)/password-dialog.Po \ code/dialogs/$(DEPDIR)/preferences-dialog.Po \ code/operations/$(DEPDIR)/operation-delete.Po \ code/operations/$(DEPDIR)/operation-export-html.Po \ code/operations/$(DEPDIR)/operation-new.Po \ code/operations/$(DEPDIR)/operation-open-multiple.Po \ code/operations/$(DEPDIR)/operation-open.Po \ code/operations/$(DEPDIR)/operation-save.Po \ code/operations/$(DEPDIR)/operation-subscribe-path.Po \ code/operations/$(DEPDIR)/operations.Po \ code/util/$(DEPDIR)/asyncoperation.Po \ code/util/$(DEPDIR)/closebutton.Po \ code/util/$(DEPDIR)/config.Po code/util/$(DEPDIR)/file.Po \ code/util/$(DEPDIR)/historyentry.Po \ code/util/$(DEPDIR)/i18n.Po code/util/$(DEPDIR)/serialize.Po \ code/util/$(DEPDIR)/uri.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; am__v_CXX_1 = CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; am__v_CXXLD_1 = SOURCES = $(gobby_0_5_SOURCES) DIST_SOURCES = $(gobby_0_5_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) DATA = $(desktop_DATA) $(metainfo_DATA) HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = m4 . icons po help am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ $(srcdir)/code/Makefile.am $(srcdir)/code/commands/Makefile.am \ $(srcdir)/code/commands/file-tasks/Makefile.am \ $(srcdir)/code/core/Makefile.am \ $(srcdir)/code/core/gobject/Makefile.am \ $(srcdir)/code/dialogs/Makefile.am \ $(srcdir)/code/operations/Makefile.am \ $(srcdir)/code/util/Makefile.am \ $(srcdir)/de.0x539.gobby.gschema.xml.in \ $(srcdir)/win32/Makefile.am $(top_srcdir)/code/features.hpp.in \ $(top_srcdir)/win32/gobby.iss.in AUTHORS COPYING ChangeLog \ NEWS TODO compile config.guess config.sub depcomp install-sh \ missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = m4 . icons po $(am__append_1) # Tell aclocal where to find `.m4' files. ACLOCAL_AMFLAGS = -I m4 dist_man_MANS = gobby-0.5.1 noinst_HEADERS = code/util/asyncoperation.hpp \ code/util/closebutton.hpp code/util/config.hpp \ code/util/defaultaccumulator.hpp code/util/file.hpp \ code/util/historyentry.hpp code/util/i18n.hpp \ code/util/serialize.hpp code/util/uri.hpp \ code/core/gobject/gobby-undo-manager.h \ code/core/applicationactions.hpp code/core/browser.hpp \ code/core/certificatemanager.hpp code/core/chatsessionview.hpp \ code/core/chattablabel.hpp code/core/closableframe.hpp \ code/core/connectionmanager.hpp \ code/core/credentialsgenerator.hpp \ code/core/documentinfostorage.hpp code/core/filechooser.hpp \ code/core/folder.hpp code/core/foldermanager.hpp \ code/core/menumanager.hpp code/core/huebutton.hpp \ code/core/knownhoststorage.hpp code/core/nodewatch.hpp \ code/core/noteplugin.hpp code/core/preferences.hpp \ code/core/selfhoster.hpp code/core/server.hpp \ code/core/sessionuserview.hpp code/core/sessionview.hpp \ code/core/statusbar.hpp code/core/tablabel.hpp \ code/core/textsessionuserview.hpp \ code/core/textsessionview.hpp code/core/textundogrouping.hpp \ code/core/texttablabel.hpp code/core/titlebar.hpp \ code/core/toolbar.hpp code/core/userjoin.hpp \ code/core/userlist.hpp code/core/windowactions.hpp \ code/operations/operations.hpp \ code/operations/operation-delete.hpp \ code/operations/operation-export-html.hpp \ code/operations/operation-new.hpp \ code/operations/operation-open.hpp \ code/operations/operation-open-multiple.hpp \ code/operations/operation-save.hpp \ code/operations/operation-subscribe-path.hpp \ code/dialogs/connection-dialog.hpp \ code/dialogs/connection-info-dialog.hpp \ code/dialogs/document-location-dialog.hpp \ code/dialogs/entry-dialog.hpp code/dialogs/find-dialog.hpp \ code/dialogs/goto-dialog.hpp code/dialogs/initial-dialog.hpp \ code/dialogs/open-location-dialog.hpp \ code/dialogs/password-dialog.hpp \ code/dialogs/preferences-dialog.hpp \ code/commands/file-tasks/task-export-html.hpp \ code/commands/file-tasks/task-new.hpp \ code/commands/file-tasks/task-open.hpp \ code/commands/file-tasks/task-open-file.hpp \ code/commands/file-tasks/task-open-location.hpp \ code/commands/file-tasks/task-open-multiple.hpp \ code/commands/file-tasks/task-save.hpp \ code/commands/file-tasks/task-save-all.hpp \ code/commands/application-commands.hpp \ code/commands/auth-commands.hpp \ code/commands/autosave-commands.hpp \ code/commands/browser-commands.hpp \ code/commands/browser-context-commands.hpp \ code/commands/edit-commands.hpp \ code/commands/file-commands.hpp \ code/commands/folder-commands.hpp \ code/commands/help-commands.hpp \ code/commands/subscription-commands.hpp \ code/commands/synchronization-commands.hpp \ code/commands/user-join-commands.hpp \ code/commands/view-commands.hpp code/application.hpp \ code/window.hpp code/gobby-resources.h gobby_0_5_SOURCES = code/util/asyncoperation.cpp \ code/util/closebutton.cpp code/util/config.cpp \ code/util/file.cpp code/util/historyentry.cpp \ code/util/i18n.cpp code/util/serialize.cpp code/util/uri.cpp \ code/core/gobject/gobby-undo-manager.c \ code/core/applicationactions.cpp code/core/browser.cpp \ code/core/certificatemanager.cpp code/core/chatsessionview.cpp \ code/core/chattablabel.cpp code/core/closableframe.cpp \ code/core/connectionmanager.cpp \ code/core/credentialsgenerator.cpp \ code/core/documentinfostorage.cpp code/core/filechooser.cpp \ code/core/folder.cpp code/core/foldermanager.cpp \ code/core/huebutton.cpp code/core/knownhoststorage.cpp \ code/core/menumanager.cpp code/core/nodewatch.cpp \ code/core/noteplugin.cpp code/core/preferences.cpp \ code/core/selfhoster.cpp code/core/server.cpp \ code/core/sessionuserview.cpp code/core/sessionview.cpp \ code/core/statusbar.cpp code/core/tablabel.cpp \ code/core/textsessionuserview.cpp \ code/core/textsessionview.cpp code/core/textundogrouping.cpp \ code/core/texttablabel.cpp code/core/titlebar.cpp \ code/core/toolbar.cpp code/core/userjoin.cpp \ code/core/userlist.cpp code/core/windowactions.cpp \ code/operations/operations.cpp \ code/operations/operation-delete.cpp \ code/operations/operation-export-html.cpp \ code/operations/operation-new.cpp \ code/operations/operation-open.cpp \ code/operations/operation-open-multiple.cpp \ code/operations/operation-save.cpp \ code/operations/operation-subscribe-path.cpp \ code/dialogs/connection-dialog.cpp \ code/dialogs/connection-info-dialog.cpp \ code/dialogs/document-location-dialog.cpp \ code/dialogs/entry-dialog.cpp code/dialogs/find-dialog.cpp \ code/dialogs/goto-dialog.cpp code/dialogs/initial-dialog.cpp \ code/dialogs/open-location-dialog.cpp \ code/dialogs/password-dialog.cpp \ code/dialogs/preferences-dialog.cpp \ code/commands/file-tasks/task-export-html.cpp \ code/commands/file-tasks/task-new.cpp \ code/commands/file-tasks/task-open.cpp \ code/commands/file-tasks/task-open-file.cpp \ code/commands/file-tasks/task-open-location.cpp \ code/commands/file-tasks/task-open-multiple.cpp \ code/commands/file-tasks/task-save.cpp \ code/commands/file-tasks/task-save-all.cpp \ code/commands/application-commands.cpp \ code/commands/auth-commands.cpp \ code/commands/autosave-commands.cpp \ code/commands/browser-commands.cpp \ code/commands/browser-context-commands.cpp \ code/commands/edit-commands.cpp \ code/commands/file-commands.cpp \ code/commands/folder-commands.cpp \ code/commands/help-commands.cpp \ code/commands/subscription-commands.cpp \ code/commands/synchronization-commands.cpp \ code/commands/user-join-commands.cpp \ code/commands/view-commands.cpp code/application.cpp \ code/main.cpp code/window.cpp code/gobby-resources.c BUILT_SOURCES = code/gobby-resources.h code/gobby-resources.c \ $(am__append_2) # For the manual EXTRA_DIST = $(resources) code/resources/gobby.gresources.xml \ win32/gobby.ico win32/gobby.rc de.0x539.gobby.gschema.xml.in \ README.md gobby-0.5.desktop.in gobby-0.5.metainfo.xml CLEANFILES = code/gobby-resources.h code/gobby-resources.c \ de.0x539.gobby.gschema.xml DISTCLEANFILES = de.0x539.gobby.gschema.xml gnome-doc-utils.make MAINTAINERCLEANFILES = $(gsettings_SCHEMAS:.xml=.valid) ChangeLog appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 resources = \ code/resources/ui/browser-context-menu.ui \ code/resources/ui/connection-dialog.ui \ code/resources/ui/connection-info-dialog.ui \ code/resources/ui/document-location-dialog.ui \ code/resources/ui/entry-dialog.ui \ code/resources/ui/find-dialog.ui \ code/resources/ui/goto-dialog.ui \ code/resources/ui/initial-dialog.ui \ code/resources/ui/menu.ui \ code/resources/ui/open-location-dialog.ui \ code/resources/ui/password-dialog.ui \ code/resources/ui/preferences-dialog.ui \ code/resources/ui/toolbar.ui gobby_0_5_LDADD = $(gobby_LIBS) $(infinote_LIBS) $(LIBS) \ $(am__append_3) @WIN32_TRUE@gobby_0_5_LDFLAGS = \ @WIN32_TRUE@ -Wl,--enable-runtime-pseudo-reloc \ @WIN32_TRUE@ -mwindows \ @WIN32_TRUE@ win32/gobby.res # PRIVATE_ICONS_DIR is required by application.cpp to get access to the # private icons that are installed into prefix/share/gobby-0.5/icons instead # of prefix/share/icons. We also set PUBLIC_ICONS_DIR explicitely so that # we find the application icon if it is installed in a non-standard prefix. AM_CPPFLAGS = $(gobby_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code \ -DPRIVATE_ICONS_DIR=\""$(datadir)/gobby-0.5/icons"\" \ -DPUBLIC_ICONS_DIR=\""$(datadir)/icons"\" # .desktop file @WIN32_FALSE@desktopdir = $(datadir)/applications @WIN32_FALSE@desktop_in_files = gobby-0.5.desktop.in @WIN32_FALSE@desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @WIN32_FALSE@metainfodir = $(datadir)/metainfo @WIN32_FALSE@metainfo_DATA = gobby-0.5.metainfo.xml gsettings_SCHEMAS = de.0x539.gobby.gschema.xml DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .cpp .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/code/Makefile.am $(srcdir)/code/util/Makefile.am $(srcdir)/code/core/Makefile.am $(srcdir)/code/core/gobject/Makefile.am $(srcdir)/code/operations/Makefile.am $(srcdir)/code/dialogs/Makefile.am $(srcdir)/code/commands/Makefile.am $(srcdir)/code/commands/file-tasks/Makefile.am $(srcdir)/win32/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(srcdir)/code/Makefile.am $(srcdir)/code/util/Makefile.am $(srcdir)/code/core/Makefile.am $(srcdir)/code/core/gobject/Makefile.am $(srcdir)/code/operations/Makefile.am $(srcdir)/code/dialogs/Makefile.am $(srcdir)/code/commands/Makefile.am $(srcdir)/code/commands/file-tasks/Makefile.am $(srcdir)/win32/Makefile.am $(am__empty): $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): code/features.hpp: code/stamp-h1 @test -f $@ || rm -f code/stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) code/stamp-h1 code/stamp-h1: $(top_srcdir)/code/features.hpp.in $(top_builddir)/config.status @rm -f code/stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status code/features.hpp $(top_srcdir)/code/features.hpp.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f code/stamp-h1 touch $@ distclean-hdr: -rm -f code/features.hpp code/stamp-h1 de.0x539.gobby.gschema.xml: $(top_builddir)/config.status $(srcdir)/de.0x539.gobby.gschema.xml.in cd $(top_builddir) && $(SHELL) ./config.status $@ win32/gobby.iss: $(top_builddir)/config.status $(top_srcdir)/win32/gobby.iss.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) code/util/$(am__dirstamp): @$(MKDIR_P) code/util @: > code/util/$(am__dirstamp) code/util/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) code/util/$(DEPDIR) @: > code/util/$(DEPDIR)/$(am__dirstamp) code/util/asyncoperation.$(OBJEXT): code/util/$(am__dirstamp) \ code/util/$(DEPDIR)/$(am__dirstamp) code/util/closebutton.$(OBJEXT): code/util/$(am__dirstamp) \ code/util/$(DEPDIR)/$(am__dirstamp) code/util/config.$(OBJEXT): code/util/$(am__dirstamp) \ code/util/$(DEPDIR)/$(am__dirstamp) code/util/file.$(OBJEXT): code/util/$(am__dirstamp) \ code/util/$(DEPDIR)/$(am__dirstamp) code/util/historyentry.$(OBJEXT): code/util/$(am__dirstamp) \ code/util/$(DEPDIR)/$(am__dirstamp) code/util/i18n.$(OBJEXT): code/util/$(am__dirstamp) \ code/util/$(DEPDIR)/$(am__dirstamp) code/util/serialize.$(OBJEXT): code/util/$(am__dirstamp) \ code/util/$(DEPDIR)/$(am__dirstamp) code/util/uri.$(OBJEXT): code/util/$(am__dirstamp) \ code/util/$(DEPDIR)/$(am__dirstamp) code/core/gobject/$(am__dirstamp): @$(MKDIR_P) code/core/gobject @: > code/core/gobject/$(am__dirstamp) code/core/gobject/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) code/core/gobject/$(DEPDIR) @: > code/core/gobject/$(DEPDIR)/$(am__dirstamp) code/core/gobject/gobby-undo-manager.$(OBJEXT): \ code/core/gobject/$(am__dirstamp) \ code/core/gobject/$(DEPDIR)/$(am__dirstamp) code/core/$(am__dirstamp): @$(MKDIR_P) code/core @: > code/core/$(am__dirstamp) code/core/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) code/core/$(DEPDIR) @: > code/core/$(DEPDIR)/$(am__dirstamp) code/core/applicationactions.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/browser.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/certificatemanager.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/chatsessionview.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/chattablabel.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/closableframe.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/connectionmanager.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/credentialsgenerator.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/documentinfostorage.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/filechooser.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/folder.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/foldermanager.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/huebutton.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/knownhoststorage.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/menumanager.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/nodewatch.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/noteplugin.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/preferences.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/selfhoster.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/server.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/sessionuserview.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/sessionview.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/statusbar.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/tablabel.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/textsessionuserview.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/textsessionview.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/textundogrouping.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/texttablabel.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/titlebar.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/toolbar.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/userjoin.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/userlist.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/core/windowactions.$(OBJEXT): code/core/$(am__dirstamp) \ code/core/$(DEPDIR)/$(am__dirstamp) code/operations/$(am__dirstamp): @$(MKDIR_P) code/operations @: > code/operations/$(am__dirstamp) code/operations/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) code/operations/$(DEPDIR) @: > code/operations/$(DEPDIR)/$(am__dirstamp) code/operations/operations.$(OBJEXT): code/operations/$(am__dirstamp) \ code/operations/$(DEPDIR)/$(am__dirstamp) code/operations/operation-delete.$(OBJEXT): \ code/operations/$(am__dirstamp) \ code/operations/$(DEPDIR)/$(am__dirstamp) code/operations/operation-export-html.$(OBJEXT): \ code/operations/$(am__dirstamp) \ code/operations/$(DEPDIR)/$(am__dirstamp) code/operations/operation-new.$(OBJEXT): \ code/operations/$(am__dirstamp) \ code/operations/$(DEPDIR)/$(am__dirstamp) code/operations/operation-open.$(OBJEXT): \ code/operations/$(am__dirstamp) \ code/operations/$(DEPDIR)/$(am__dirstamp) code/operations/operation-open-multiple.$(OBJEXT): \ code/operations/$(am__dirstamp) \ code/operations/$(DEPDIR)/$(am__dirstamp) code/operations/operation-save.$(OBJEXT): \ code/operations/$(am__dirstamp) \ code/operations/$(DEPDIR)/$(am__dirstamp) code/operations/operation-subscribe-path.$(OBJEXT): \ code/operations/$(am__dirstamp) \ code/operations/$(DEPDIR)/$(am__dirstamp) code/dialogs/$(am__dirstamp): @$(MKDIR_P) code/dialogs @: > code/dialogs/$(am__dirstamp) code/dialogs/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) code/dialogs/$(DEPDIR) @: > code/dialogs/$(DEPDIR)/$(am__dirstamp) code/dialogs/connection-dialog.$(OBJEXT): \ code/dialogs/$(am__dirstamp) \ code/dialogs/$(DEPDIR)/$(am__dirstamp) code/dialogs/connection-info-dialog.$(OBJEXT): \ code/dialogs/$(am__dirstamp) \ code/dialogs/$(DEPDIR)/$(am__dirstamp) code/dialogs/document-location-dialog.$(OBJEXT): \ code/dialogs/$(am__dirstamp) \ code/dialogs/$(DEPDIR)/$(am__dirstamp) code/dialogs/entry-dialog.$(OBJEXT): code/dialogs/$(am__dirstamp) \ code/dialogs/$(DEPDIR)/$(am__dirstamp) code/dialogs/find-dialog.$(OBJEXT): code/dialogs/$(am__dirstamp) \ code/dialogs/$(DEPDIR)/$(am__dirstamp) code/dialogs/goto-dialog.$(OBJEXT): code/dialogs/$(am__dirstamp) \ code/dialogs/$(DEPDIR)/$(am__dirstamp) code/dialogs/initial-dialog.$(OBJEXT): code/dialogs/$(am__dirstamp) \ code/dialogs/$(DEPDIR)/$(am__dirstamp) code/dialogs/open-location-dialog.$(OBJEXT): \ code/dialogs/$(am__dirstamp) \ code/dialogs/$(DEPDIR)/$(am__dirstamp) code/dialogs/password-dialog.$(OBJEXT): code/dialogs/$(am__dirstamp) \ code/dialogs/$(DEPDIR)/$(am__dirstamp) code/dialogs/preferences-dialog.$(OBJEXT): \ code/dialogs/$(am__dirstamp) \ code/dialogs/$(DEPDIR)/$(am__dirstamp) code/commands/file-tasks/$(am__dirstamp): @$(MKDIR_P) code/commands/file-tasks @: > code/commands/file-tasks/$(am__dirstamp) code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) code/commands/file-tasks/$(DEPDIR) @: > code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp) code/commands/file-tasks/task-export-html.$(OBJEXT): \ code/commands/file-tasks/$(am__dirstamp) \ code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp) code/commands/file-tasks/task-new.$(OBJEXT): \ code/commands/file-tasks/$(am__dirstamp) \ code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp) code/commands/file-tasks/task-open.$(OBJEXT): \ code/commands/file-tasks/$(am__dirstamp) \ code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp) code/commands/file-tasks/task-open-file.$(OBJEXT): \ code/commands/file-tasks/$(am__dirstamp) \ code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp) code/commands/file-tasks/task-open-location.$(OBJEXT): \ code/commands/file-tasks/$(am__dirstamp) \ code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp) code/commands/file-tasks/task-open-multiple.$(OBJEXT): \ code/commands/file-tasks/$(am__dirstamp) \ code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp) code/commands/file-tasks/task-save.$(OBJEXT): \ code/commands/file-tasks/$(am__dirstamp) \ code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp) code/commands/file-tasks/task-save-all.$(OBJEXT): \ code/commands/file-tasks/$(am__dirstamp) \ code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp) code/commands/$(am__dirstamp): @$(MKDIR_P) code/commands @: > code/commands/$(am__dirstamp) code/commands/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) code/commands/$(DEPDIR) @: > code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/application-commands.$(OBJEXT): \ code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/auth-commands.$(OBJEXT): code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/autosave-commands.$(OBJEXT): \ code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/browser-commands.$(OBJEXT): \ code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/browser-context-commands.$(OBJEXT): \ code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/edit-commands.$(OBJEXT): code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/file-commands.$(OBJEXT): code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/folder-commands.$(OBJEXT): \ code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/help-commands.$(OBJEXT): code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/subscription-commands.$(OBJEXT): \ code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/synchronization-commands.$(OBJEXT): \ code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/user-join-commands.$(OBJEXT): \ code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/commands/view-commands.$(OBJEXT): code/commands/$(am__dirstamp) \ code/commands/$(DEPDIR)/$(am__dirstamp) code/$(am__dirstamp): @$(MKDIR_P) code @: > code/$(am__dirstamp) code/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) code/$(DEPDIR) @: > code/$(DEPDIR)/$(am__dirstamp) code/application.$(OBJEXT): code/$(am__dirstamp) \ code/$(DEPDIR)/$(am__dirstamp) code/main.$(OBJEXT): code/$(am__dirstamp) \ code/$(DEPDIR)/$(am__dirstamp) code/window.$(OBJEXT): code/$(am__dirstamp) \ code/$(DEPDIR)/$(am__dirstamp) code/gobby-resources.$(OBJEXT): code/$(am__dirstamp) \ code/$(DEPDIR)/$(am__dirstamp) gobby-0.5$(EXEEXT): $(gobby_0_5_OBJECTS) $(gobby_0_5_DEPENDENCIES) $(EXTRA_gobby_0_5_DEPENDENCIES) @rm -f gobby-0.5$(EXEEXT) $(AM_V_CXXLD)$(gobby_0_5_LINK) $(gobby_0_5_OBJECTS) $(gobby_0_5_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f code/*.$(OBJEXT) -rm -f code/commands/*.$(OBJEXT) -rm -f code/commands/file-tasks/*.$(OBJEXT) -rm -f code/core/*.$(OBJEXT) -rm -f code/core/gobject/*.$(OBJEXT) -rm -f code/dialogs/*.$(OBJEXT) -rm -f code/operations/*.$(OBJEXT) -rm -f code/util/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@code/$(DEPDIR)/application.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/$(DEPDIR)/gobby-resources.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/$(DEPDIR)/window.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/application-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/auth-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/autosave-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/browser-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/browser-context-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/edit-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/file-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/folder-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/help-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/subscription-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/synchronization-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/user-join-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/$(DEPDIR)/view-commands.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/file-tasks/$(DEPDIR)/task-export-html.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/file-tasks/$(DEPDIR)/task-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/file-tasks/$(DEPDIR)/task-open-file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/file-tasks/$(DEPDIR)/task-open-location.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/file-tasks/$(DEPDIR)/task-open-multiple.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/file-tasks/$(DEPDIR)/task-open.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/file-tasks/$(DEPDIR)/task-save-all.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/commands/file-tasks/$(DEPDIR)/task-save.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/applicationactions.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/browser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/certificatemanager.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/chatsessionview.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/chattablabel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/closableframe.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/connectionmanager.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/credentialsgenerator.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/documentinfostorage.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/filechooser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/folder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/foldermanager.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/huebutton.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/knownhoststorage.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/menumanager.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/nodewatch.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/noteplugin.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/preferences.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/selfhoster.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/server.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/sessionuserview.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/sessionview.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/statusbar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/tablabel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/textsessionuserview.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/textsessionview.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/texttablabel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/textundogrouping.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/titlebar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/toolbar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/userjoin.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/userlist.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/$(DEPDIR)/windowactions.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/core/gobject/$(DEPDIR)/gobby-undo-manager.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/dialogs/$(DEPDIR)/connection-dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/dialogs/$(DEPDIR)/connection-info-dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/dialogs/$(DEPDIR)/document-location-dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/dialogs/$(DEPDIR)/entry-dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/dialogs/$(DEPDIR)/find-dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/dialogs/$(DEPDIR)/goto-dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/dialogs/$(DEPDIR)/initial-dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/dialogs/$(DEPDIR)/open-location-dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/dialogs/$(DEPDIR)/password-dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/dialogs/$(DEPDIR)/preferences-dialog.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/operations/$(DEPDIR)/operation-delete.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/operations/$(DEPDIR)/operation-export-html.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/operations/$(DEPDIR)/operation-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/operations/$(DEPDIR)/operation-open-multiple.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/operations/$(DEPDIR)/operation-open.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/operations/$(DEPDIR)/operation-save.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/operations/$(DEPDIR)/operation-subscribe-path.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/operations/$(DEPDIR)/operations.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/util/$(DEPDIR)/asyncoperation.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/util/$(DEPDIR)/closebutton.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/util/$(DEPDIR)/config.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/util/$(DEPDIR)/file.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/util/$(DEPDIR)/historyentry.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/util/$(DEPDIR)/i18n.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/util/$(DEPDIR)/serialize.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@code/util/$(DEPDIR)/uri.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCXX_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(desktopdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(desktopdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(desktopdir)'; $(am__uninstall_files_from_dir) install-metainfoDATA: $(metainfo_DATA) @$(NORMAL_INSTALL) @list='$(metainfo_DATA)'; test -n "$(metainfodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(metainfodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(metainfodir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(metainfodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(metainfodir)" || exit $$?; \ done uninstall-metainfoDATA: @$(NORMAL_UNINSTALL) @list='$(metainfo_DATA)'; test -n "$(metainfodir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(metainfodir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @case `sed 15q $(srcdir)/NEWS` in \ *"$(VERSION)"*) : ;; \ *) \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1;; \ esac $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(desktopdir)" "$(DESTDIR)$(metainfodir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f code/$(DEPDIR)/$(am__dirstamp) -rm -f code/$(am__dirstamp) -rm -f code/commands/$(DEPDIR)/$(am__dirstamp) -rm -f code/commands/$(am__dirstamp) -rm -f code/commands/file-tasks/$(DEPDIR)/$(am__dirstamp) -rm -f code/commands/file-tasks/$(am__dirstamp) -rm -f code/core/$(DEPDIR)/$(am__dirstamp) -rm -f code/core/$(am__dirstamp) -rm -f code/core/gobject/$(DEPDIR)/$(am__dirstamp) -rm -f code/core/gobject/$(am__dirstamp) -rm -f code/dialogs/$(DEPDIR)/$(am__dirstamp) -rm -f code/dialogs/$(am__dirstamp) -rm -f code/operations/$(DEPDIR)/$(am__dirstamp) -rm -f code/operations/$(am__dirstamp) -rm -f code/util/$(DEPDIR)/$(am__dirstamp) -rm -f code/util/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f code/$(DEPDIR)/application.Po -rm -f code/$(DEPDIR)/gobby-resources.Po -rm -f code/$(DEPDIR)/main.Po -rm -f code/$(DEPDIR)/window.Po -rm -f code/commands/$(DEPDIR)/application-commands.Po -rm -f code/commands/$(DEPDIR)/auth-commands.Po -rm -f code/commands/$(DEPDIR)/autosave-commands.Po -rm -f code/commands/$(DEPDIR)/browser-commands.Po -rm -f code/commands/$(DEPDIR)/browser-context-commands.Po -rm -f code/commands/$(DEPDIR)/edit-commands.Po -rm -f code/commands/$(DEPDIR)/file-commands.Po -rm -f code/commands/$(DEPDIR)/folder-commands.Po -rm -f code/commands/$(DEPDIR)/help-commands.Po -rm -f code/commands/$(DEPDIR)/subscription-commands.Po -rm -f code/commands/$(DEPDIR)/synchronization-commands.Po -rm -f code/commands/$(DEPDIR)/user-join-commands.Po -rm -f code/commands/$(DEPDIR)/view-commands.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-export-html.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-new.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-open-file.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-open-location.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-open-multiple.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-open.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-save-all.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-save.Po -rm -f code/core/$(DEPDIR)/applicationactions.Po -rm -f code/core/$(DEPDIR)/browser.Po -rm -f code/core/$(DEPDIR)/certificatemanager.Po -rm -f code/core/$(DEPDIR)/chatsessionview.Po -rm -f code/core/$(DEPDIR)/chattablabel.Po -rm -f code/core/$(DEPDIR)/closableframe.Po -rm -f code/core/$(DEPDIR)/connectionmanager.Po -rm -f code/core/$(DEPDIR)/credentialsgenerator.Po -rm -f code/core/$(DEPDIR)/documentinfostorage.Po -rm -f code/core/$(DEPDIR)/filechooser.Po -rm -f code/core/$(DEPDIR)/folder.Po -rm -f code/core/$(DEPDIR)/foldermanager.Po -rm -f code/core/$(DEPDIR)/huebutton.Po -rm -f code/core/$(DEPDIR)/knownhoststorage.Po -rm -f code/core/$(DEPDIR)/menumanager.Po -rm -f code/core/$(DEPDIR)/nodewatch.Po -rm -f code/core/$(DEPDIR)/noteplugin.Po -rm -f code/core/$(DEPDIR)/preferences.Po -rm -f code/core/$(DEPDIR)/selfhoster.Po -rm -f code/core/$(DEPDIR)/server.Po -rm -f code/core/$(DEPDIR)/sessionuserview.Po -rm -f code/core/$(DEPDIR)/sessionview.Po -rm -f code/core/$(DEPDIR)/statusbar.Po -rm -f code/core/$(DEPDIR)/tablabel.Po -rm -f code/core/$(DEPDIR)/textsessionuserview.Po -rm -f code/core/$(DEPDIR)/textsessionview.Po -rm -f code/core/$(DEPDIR)/texttablabel.Po -rm -f code/core/$(DEPDIR)/textundogrouping.Po -rm -f code/core/$(DEPDIR)/titlebar.Po -rm -f code/core/$(DEPDIR)/toolbar.Po -rm -f code/core/$(DEPDIR)/userjoin.Po -rm -f code/core/$(DEPDIR)/userlist.Po -rm -f code/core/$(DEPDIR)/windowactions.Po -rm -f code/core/gobject/$(DEPDIR)/gobby-undo-manager.Po -rm -f code/dialogs/$(DEPDIR)/connection-dialog.Po -rm -f code/dialogs/$(DEPDIR)/connection-info-dialog.Po -rm -f code/dialogs/$(DEPDIR)/document-location-dialog.Po -rm -f code/dialogs/$(DEPDIR)/entry-dialog.Po -rm -f code/dialogs/$(DEPDIR)/find-dialog.Po -rm -f code/dialogs/$(DEPDIR)/goto-dialog.Po -rm -f code/dialogs/$(DEPDIR)/initial-dialog.Po -rm -f code/dialogs/$(DEPDIR)/open-location-dialog.Po -rm -f code/dialogs/$(DEPDIR)/password-dialog.Po -rm -f code/dialogs/$(DEPDIR)/preferences-dialog.Po -rm -f code/operations/$(DEPDIR)/operation-delete.Po -rm -f code/operations/$(DEPDIR)/operation-export-html.Po -rm -f code/operations/$(DEPDIR)/operation-new.Po -rm -f code/operations/$(DEPDIR)/operation-open-multiple.Po -rm -f code/operations/$(DEPDIR)/operation-open.Po -rm -f code/operations/$(DEPDIR)/operation-save.Po -rm -f code/operations/$(DEPDIR)/operation-subscribe-path.Po -rm -f code/operations/$(DEPDIR)/operations.Po -rm -f code/util/$(DEPDIR)/asyncoperation.Po -rm -f code/util/$(DEPDIR)/closebutton.Po -rm -f code/util/$(DEPDIR)/config.Po -rm -f code/util/$(DEPDIR)/file.Po -rm -f code/util/$(DEPDIR)/historyentry.Po -rm -f code/util/$(DEPDIR)/i18n.Po -rm -f code/util/$(DEPDIR)/serialize.Po -rm -f code/util/$(DEPDIR)/uri.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-desktopDATA install-man install-metainfoDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f code/$(DEPDIR)/application.Po -rm -f code/$(DEPDIR)/gobby-resources.Po -rm -f code/$(DEPDIR)/main.Po -rm -f code/$(DEPDIR)/window.Po -rm -f code/commands/$(DEPDIR)/application-commands.Po -rm -f code/commands/$(DEPDIR)/auth-commands.Po -rm -f code/commands/$(DEPDIR)/autosave-commands.Po -rm -f code/commands/$(DEPDIR)/browser-commands.Po -rm -f code/commands/$(DEPDIR)/browser-context-commands.Po -rm -f code/commands/$(DEPDIR)/edit-commands.Po -rm -f code/commands/$(DEPDIR)/file-commands.Po -rm -f code/commands/$(DEPDIR)/folder-commands.Po -rm -f code/commands/$(DEPDIR)/help-commands.Po -rm -f code/commands/$(DEPDIR)/subscription-commands.Po -rm -f code/commands/$(DEPDIR)/synchronization-commands.Po -rm -f code/commands/$(DEPDIR)/user-join-commands.Po -rm -f code/commands/$(DEPDIR)/view-commands.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-export-html.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-new.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-open-file.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-open-location.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-open-multiple.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-open.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-save-all.Po -rm -f code/commands/file-tasks/$(DEPDIR)/task-save.Po -rm -f code/core/$(DEPDIR)/applicationactions.Po -rm -f code/core/$(DEPDIR)/browser.Po -rm -f code/core/$(DEPDIR)/certificatemanager.Po -rm -f code/core/$(DEPDIR)/chatsessionview.Po -rm -f code/core/$(DEPDIR)/chattablabel.Po -rm -f code/core/$(DEPDIR)/closableframe.Po -rm -f code/core/$(DEPDIR)/connectionmanager.Po -rm -f code/core/$(DEPDIR)/credentialsgenerator.Po -rm -f code/core/$(DEPDIR)/documentinfostorage.Po -rm -f code/core/$(DEPDIR)/filechooser.Po -rm -f code/core/$(DEPDIR)/folder.Po -rm -f code/core/$(DEPDIR)/foldermanager.Po -rm -f code/core/$(DEPDIR)/huebutton.Po -rm -f code/core/$(DEPDIR)/knownhoststorage.Po -rm -f code/core/$(DEPDIR)/menumanager.Po -rm -f code/core/$(DEPDIR)/nodewatch.Po -rm -f code/core/$(DEPDIR)/noteplugin.Po -rm -f code/core/$(DEPDIR)/preferences.Po -rm -f code/core/$(DEPDIR)/selfhoster.Po -rm -f code/core/$(DEPDIR)/server.Po -rm -f code/core/$(DEPDIR)/sessionuserview.Po -rm -f code/core/$(DEPDIR)/sessionview.Po -rm -f code/core/$(DEPDIR)/statusbar.Po -rm -f code/core/$(DEPDIR)/tablabel.Po -rm -f code/core/$(DEPDIR)/textsessionuserview.Po -rm -f code/core/$(DEPDIR)/textsessionview.Po -rm -f code/core/$(DEPDIR)/texttablabel.Po -rm -f code/core/$(DEPDIR)/textundogrouping.Po -rm -f code/core/$(DEPDIR)/titlebar.Po -rm -f code/core/$(DEPDIR)/toolbar.Po -rm -f code/core/$(DEPDIR)/userjoin.Po -rm -f code/core/$(DEPDIR)/userlist.Po -rm -f code/core/$(DEPDIR)/windowactions.Po -rm -f code/core/gobject/$(DEPDIR)/gobby-undo-manager.Po -rm -f code/dialogs/$(DEPDIR)/connection-dialog.Po -rm -f code/dialogs/$(DEPDIR)/connection-info-dialog.Po -rm -f code/dialogs/$(DEPDIR)/document-location-dialog.Po -rm -f code/dialogs/$(DEPDIR)/entry-dialog.Po -rm -f code/dialogs/$(DEPDIR)/find-dialog.Po -rm -f code/dialogs/$(DEPDIR)/goto-dialog.Po -rm -f code/dialogs/$(DEPDIR)/initial-dialog.Po -rm -f code/dialogs/$(DEPDIR)/open-location-dialog.Po -rm -f code/dialogs/$(DEPDIR)/password-dialog.Po -rm -f code/dialogs/$(DEPDIR)/preferences-dialog.Po -rm -f code/operations/$(DEPDIR)/operation-delete.Po -rm -f code/operations/$(DEPDIR)/operation-export-html.Po -rm -f code/operations/$(DEPDIR)/operation-new.Po -rm -f code/operations/$(DEPDIR)/operation-open-multiple.Po -rm -f code/operations/$(DEPDIR)/operation-open.Po -rm -f code/operations/$(DEPDIR)/operation-save.Po -rm -f code/operations/$(DEPDIR)/operation-subscribe-path.Po -rm -f code/operations/$(DEPDIR)/operations.Po -rm -f code/util/$(DEPDIR)/asyncoperation.Po -rm -f code/util/$(DEPDIR)/closebutton.Po -rm -f code/util/$(DEPDIR)/config.Po -rm -f code/util/$(DEPDIR)/file.Po -rm -f code/util/$(DEPDIR)/historyentry.Po -rm -f code/util/$(DEPDIR)/i18n.Po -rm -f code/util/$(DEPDIR)/serialize.Po -rm -f code/util/$(DEPDIR)/uri.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-desktopDATA \ uninstall-man uninstall-metainfoDATA uninstall-man: uninstall-man1 .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles am--refresh check check-am clean \ clean-binPROGRAMS clean-cscope clean-generic clean-local \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-hdr distclean-local distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-binPROGRAMS install-data \ install-data-am install-desktopDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-metainfoDATA install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-desktopDATA \ uninstall-man uninstall-man1 uninstall-metainfoDATA .PRECIOUS: Makefile code/gobby-resources.h: code/resources/gobby.gresources.xml glib-compile-resources $< \ --target=$@ --sourcedir=$(top_srcdir)/code/resources \ --c-name _gobby --generate-header code/gobby-resources.c: code/resources/gobby.gresources.xml $(resources) glib-compile-resources $< \ --target=$@ --sourcedir=$(top_srcdir)/code/resources \ --c-name _gobby --generate-source @WIN32_TRUE@win32/gobby.res: win32/gobby.rc @WIN32_TRUE@ $(WINDRES) -i win32/gobby.rc --input-format=rc -o win32/gobby.res -O coff @GSETTINGS_RULES@ clean-local: -rm -rf gobby-0.5.desktop @INTLTOOL_DESKTOP_RULE@ distclean-local: if test "$(srcdir)" = "."; then :; else \ rm -f ChangeLog; \ fi ChangeLog: $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \ (GIT_DIR=$(top_srcdir)/.git ./missing --run git log \ 6570cc49a6c2c29fe9cf4c85e3b74f133ae4c1f8..HEAD --stat=78) \ | fmt --split-only --width=78 > $@.tmp \ && cat $@.tmp ChangeLog.manual ChangeLog.pre-0.5 > $@ && $(RM) $@.tmp \ || ($(RM) $@.tmp; \ echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ (test -f $@ || echo git-log is required to generate this file >> $@)); \ else \ test -f $@ || \ (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ echo A git checkout and git-log is required to generate this file >> $@); \ fi .PHONY: ChangeLog # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/m4/0000775000175000017500000000000014005504730010140 500000000000000gobby-0.6.0/m4/ac_pkg_check_gtkmm.m40000664000175000017500000000033014003367605014104 00000000000000AC_DEFUN(PKG_CHECK_GTKMM, [ GTKMM_VER=0 PKG_CHECK_MODULES(GTKMM, gtkmm-2.4 >= 2.8.0, [ GTKMM_VER=28 ], [ PKG_CHECK_MODULES(GTKMM, gtkmm-2.4 >= 2.6.0) GTKMM_VER=26 ]) AC_SUBST(GTKMM_VER) ]) gobby-0.6.0/m4/ax_cxx_compile_stdcxx_11.m40000664000175000017500000000321214003367605015226 00000000000000# ============================================================================ # http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html # ============================================================================ # # SYNOPSIS # # AX_CXX_COMPILE_STDCXX_11([ext|noext], [mandatory|optional]) # # DESCRIPTION # # Check for baseline language coverage in the compiler for the C++11 # standard; if necessary, add switches to CXX and CXXCPP to enable # support. # # This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX # macro with the version set to C++11. The two optional arguments are # forwarded literally as the second and third argument respectively. # Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for # more information. If you want to use this macro, you also need to # download the ax_cxx_compile_stdcxx.m4 file. # # LICENSE # # Copyright (c) 2008 Benjamin Kosnik # Copyright (c) 2012 Zack Weinberg # Copyright (c) 2013 Roy Stogner # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov # Copyright (c) 2015 Paul Norman # Copyright (c) 2015 Moritz Klammler # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 17 AX_REQUIRE_DEFINED([AX_CXX_COMPILE_STDCXX]) AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [AX_CXX_COMPILE_STDCXX([11], [$1], [$2])]) gobby-0.6.0/m4/Makefile.am0000664000175000017500000000007714003367605012126 00000000000000m4macros = \ ac_pkg_check_gtkmm.m4 EXTRA_DIST = $(m4macros) gobby-0.6.0/m4/Makefile.in0000664000175000017500000003144714005503645012142 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = m4 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ m4macros = \ ac_pkg_check_gtkmm.m4 EXTRA_DIST = $(m4macros) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign m4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign m4/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/m4/ax_cxx_compile_stdcxx.m40000664000175000017500000003300014003367605014723 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html # =========================================================================== # # SYNOPSIS # # AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional]) # # DESCRIPTION # # Check for baseline language coverage in the compiler for the specified # version of the C++ standard. If necessary, add switches to CXX and # CXXCPP to enable support. VERSION may be '11' (for the C++11 standard) # or '14' (for the C++14 standard). # # The second argument, if specified, indicates whether you insist on an # extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. # -std=c++11). If neither is specified, you get whatever works, with # preference for an extended mode. # # The third argument, if specified 'mandatory' or if left unspecified, # indicates that baseline support for the specified C++ standard is # required and that the macro should error out if no mode with that # support is found. If specified 'optional', then configuration proceeds # regardless, after defining HAVE_CXX${VERSION} if and only if a # supporting mode is found. # # LICENSE # # Copyright (c) 2008 Benjamin Kosnik # Copyright (c) 2012 Zack Weinberg # Copyright (c) 2013 Roy Stogner # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov # Copyright (c) 2015 Paul Norman # Copyright (c) 2015 Moritz Klammler # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 4 dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro dnl (serial version number 13). AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl m4_if([$1], [11], [], [$1], [14], [], [$1], [17], [m4_fatal([support for C++17 not yet implemented in AX_CXX_COMPILE_STDCXX])], [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl m4_if([$2], [], [], [$2], [ext], [], [$2], [noext], [], [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true], [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], [$3], [optional], [ax_cxx_compile_cxx$1_required=false], [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) AC_LANG_PUSH([C++])dnl ac_success=no AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, ax_cv_cxx_compile_cxx$1, [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], [ax_cv_cxx_compile_cxx$1=yes], [ax_cv_cxx_compile_cxx$1=no])]) if test x$ax_cv_cxx_compile_cxx$1 = xyes; then ac_success=yes fi m4_if([$2], [noext], [], [dnl if test x$ac_success = xno; then for switch in -std=gnu++$1 -std=gnu++0x; do cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, $cachevar, [ac_save_CXX="$CXX" CXX="$CXX $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], [eval $cachevar=yes], [eval $cachevar=no]) CXX="$ac_save_CXX"]) if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then CXXCPP="$CXXCPP $switch" fi ac_success=yes break fi done fi]) m4_if([$2], [ext], [], [dnl if test x$ac_success = xno; then dnl HP's aCC needs +std=c++11 according to: dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf dnl Cray's crayCC needs "-h std=c++11" for switch in -std=c++$1 -std=c++0x +std=c++$1 "-h std=c++$1"; do cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, $cachevar, [ac_save_CXX="$CXX" CXX="$CXX $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], [eval $cachevar=yes], [eval $cachevar=no]) CXX="$ac_save_CXX"]) if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then CXXCPP="$CXXCPP $switch" fi ac_success=yes break fi done fi]) AC_LANG_POP([C++]) if test x$ax_cxx_compile_cxx$1_required = xtrue; then if test x$ac_success = xno; then AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.]) fi fi if test x$ac_success = xno; then HAVE_CXX$1=0 AC_MSG_NOTICE([No compiler with C++$1 support was found]) else HAVE_CXX$1=1 AC_DEFINE(HAVE_CXX$1,1, [define if the compiler supports basic C++$1 syntax]) fi AC_SUBST(HAVE_CXX$1) ]) dnl Test body for checking C++11 support m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 ) dnl Test body for checking C++14 support m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 ) dnl Tests for new features in C++11 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[ // If the compiler admits that it is not ready for C++11, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201103L #error "This is not a C++11 compiler" #else namespace cxx11 { namespace test_static_assert { template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; } namespace test_final_override { struct Base { virtual void f() {} }; struct Derived : public Base { virtual void f() override {} }; } namespace test_double_right_angle_brackets { template < typename T > struct check {}; typedef check single_type; typedef check> double_type; typedef check>> triple_type; typedef check>>> quadruple_type; } namespace test_decltype { int f() { int a = 1; decltype(a) b = 2; return a + b; } } namespace test_type_deduction { template < typename T1, typename T2 > struct is_same { static const bool value = false; }; template < typename T > struct is_same { static const bool value = true; }; template < typename T1, typename T2 > auto add(T1 a1, T2 a2) -> decltype(a1 + a2) { return a1 + a2; } int test(const int c, volatile int v) { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == false, ""); auto ac = c; auto av = v; auto sumi = ac + av + 'x'; auto sumf = ac + av + 1.0; static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == true, ""); return (sumf > 0.0) ? sumi : add(c, v); } } namespace test_noexcept { int f() { return 0; } int g() noexcept { return 0; } static_assert(noexcept(f()) == false, ""); static_assert(noexcept(g()) == true, ""); } namespace test_constexpr { template < typename CharT > unsigned long constexpr strlen_c_r(const CharT *const s, const unsigned long acc) noexcept { return *s ? strlen_c_r(s + 1, acc + 1) : acc; } template < typename CharT > unsigned long constexpr strlen_c(const CharT *const s) noexcept { return strlen_c_r(s, 0UL); } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("1") == 1UL, ""); static_assert(strlen_c("example") == 7UL, ""); static_assert(strlen_c("another\0example") == 7UL, ""); } namespace test_rvalue_references { template < int N > struct answer { static constexpr int value = N; }; answer<1> f(int&) { return answer<1>(); } answer<2> f(const int&) { return answer<2>(); } answer<3> f(int&&) { return answer<3>(); } void test() { int i = 0; const int c = 0; static_assert(decltype(f(i))::value == 1, ""); static_assert(decltype(f(c))::value == 2, ""); static_assert(decltype(f(0))::value == 3, ""); } } namespace test_uniform_initialization { struct test { static const int zero {}; static const int one {1}; }; static_assert(test::zero == 0, ""); static_assert(test::one == 1, ""); } namespace test_lambdas { void test1() { auto lambda1 = [](){}; auto lambda2 = lambda1; lambda1(); lambda2(); } int test2() { auto a = [](int i, int j){ return i + j; }(1, 2); auto b = []() -> int { return '0'; }(); auto c = [=](){ return a + b; }(); auto d = [&](){ return c; }(); auto e = [a, &b](int x) mutable { const auto identity = [](int y){ return y; }; for (auto i = 0; i < a; ++i) a += b--; return x + identity(a + b); }(0); return a + b + c + d + e; } int test3() { const auto nullary = [](){ return 0; }; const auto unary = [](int x){ return x; }; using nullary_t = decltype(nullary); using unary_t = decltype(unary); const auto higher1st = [](nullary_t f){ return f(); }; const auto higher2nd = [unary](nullary_t f1){ return [unary, f1](unary_t f2){ return f2(unary(f1())); }; }; return higher1st(nullary) + higher2nd(nullary)(unary); } } namespace test_variadic_templates { template struct sum; template struct sum { static constexpr auto value = N0 + sum::value; }; template <> struct sum<> { static constexpr auto value = 0; }; static_assert(sum<>::value == 0, ""); static_assert(sum<1>::value == 1, ""); static_assert(sum<23>::value == 23, ""); static_assert(sum<1, 2>::value == 3, ""); static_assert(sum<5, 5, 11>::value == 21, ""); static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); } // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function // because of this. namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } } // namespace cxx11 #endif // __cplusplus >= 201103L ]]) dnl Tests for new features in C++14 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[ // If the compiler admits that it is not ready for C++14, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201402L #error "This is not a C++14 compiler" #else namespace cxx14 { namespace test_polymorphic_lambdas { int test() { const auto lambda = [](auto&&... args){ const auto istiny = [](auto x){ return (sizeof(x) == 1UL) ? 1 : 0; }; const int aretiny[] = { istiny(args)... }; return aretiny[0]; }; return lambda(1, 1L, 1.0f, '1'); } } namespace test_binary_literals { constexpr auto ivii = 0b0000000000101010; static_assert(ivii == 42, "wrong value"); } namespace test_generalized_constexpr { template < typename CharT > constexpr unsigned long strlen_c(const CharT *const s) noexcept { auto length = 0UL; for (auto p = s; *p; ++p) ++length; return length; } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("x") == 1UL, ""); static_assert(strlen_c("test") == 4UL, ""); static_assert(strlen_c("another\0test") == 7UL, ""); } namespace test_lambda_init_capture { int test() { auto x = 0; const auto lambda1 = [a = x](int b){ return a + b; }; const auto lambda2 = [a = lambda1(x)](){ return a; }; return lambda2(); } } namespace test_digit_seperators { constexpr auto ten_million = 100'000'000; static_assert(ten_million == 100000000, ""); } namespace test_return_type_deduction { auto f(int& x) { return x; } decltype(auto) g(int& x) { return x; } template < typename T1, typename T2 > struct is_same { static constexpr auto value = false; }; template < typename T > struct is_same { static constexpr auto value = true; }; int test() { auto x = 0; static_assert(is_same::value, ""); static_assert(is_same::value, ""); return x; } } } // namespace cxx14 #endif // __cplusplus >= 201402L ]]) gobby-0.6.0/ChangeLog0000664000175000017500000117162414005504727011334 00000000000000commit 6ce877d00e29508acb4c93484feaba99dd9e2918 Author: Armin Burgmeier Date: Sun Jan 31 11:37:44 2021 +0100 Make dist fixes Makefile.am | 2 +- code/Makefile.am | 2 ++ help/Makefile.am | 2 -- 3 files changed, 3 insertions(+), 3 deletions(-) commit 2a492f910ed7cf2bda362612503c83d32ef80e21 Author: Armin Burgmeier Date: Sun Jan 31 11:31:06 2021 +0100 Remove gobby-0.5.xpm from distribution in Makefile.am The file does not exist anymore. Makefile.am | 4 ---- 1 file changed, 4 deletions(-) commit 9564cfbd0caf3a768786192d7d743566fd92ce54 Author: Armin Burgmeier Date: Sun Jan 31 11:26:47 2021 +0100 Update NEWS for 0.6.0 NEWS | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) commit 3838bdda6341b8cd9f45aa1488fe5a087f5d2a19 Author: Armin Burgmeier Date: Sun Jan 31 11:26:24 2021 +0100 Update po files and template code/resources/ui/menu.ui.h | 38 -- code/resources/ui/toolbar.ui.h | 10 - po/ca.po | 1395 ++++++++++++++++---------------------- po/de.po | 1319 +++++++++++++++-------------------- po/el_GR.po | 1315 +++++++++++++++-------------------- po/en_GB.po | 1309 +++++++++++++++-------------------- po/fr.po | 1318 +++++++++++++++-------------------- po/gobby05.pot | 885 +++++------------------- po/it_IT.po | 1392 ++++++++++++++++++------------------- po/ja.po | 1309 +++++++++++++++-------------------- po/pt_BR.po | 1226 +++++++++++++-------------------- po/zh_TW.po | 1330 ++++++++++++++++-------------------- 12 files changed, 5255 insertions(+), 7591 deletions(-) commit 9eca7bbab7c9dfaddb6d23874d8ebeb90b6433d3 Author: Armin Burgmeier Date: Sun Jan 31 11:06:44 2021 +0100 Remove initial "gobby.0x539.de" entry in the browser list Our "playground" server at that address is no longer running. code/core/knownhoststorage.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) commit b94e11c8569891feacd31c690d32d8a553c95d1e Author: Armin Burgmeier Date: Sun Jan 31 11:04:02 2021 +0100 Update dependencies and release archive in README file README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit 49bfd3c3aa82e6fe9b3d59c3455d7eb4b77379fc Author: Philipp Kern Date: Tue Dec 29 14:58:16 2020 +0100 gobby-0.5.xpm: Delete the pixmap as it is obsolete in FreeDesktop systems gobby-0.5.xpm | 403 -------------------------------------------------------- 1 file changed, 403 deletions(-) commit 2b39c7fd53094a69ed1dae5df776833d753a5ca5 Author: Philipp Kern Date: Sun Dec 27 15:21:39 2020 +0100 Update AppStream metadata to adhere to current spec (#187) Adhere to current AppStream spec and install the AppStream metadata into the new metainfo directory Makefile.am | 4 ++-- gobby-0.5.appdata.xml | 28 ---------------------------- gobby-0.5.metainfo.xml | 28 ++++++++++++++++++++++++++++ 3 files changed, 30 insertions(+), 30 deletions(-) commit 98b07eb99b9443dc9b6dd6eea913b5dcf8574a74 Author: Philipp Kern Date: Wed Dec 23 11:04:02 2020 +0100 menu.ui: Fix a typo in a comment code/resources/ui/menu.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5b82cc5774298935c9de41b437b707c15f4fa393 Author: Philipp Kern Date: Sun Dec 13 23:59:01 2020 +0100 Merge Linux CI based on GitHub Actions (#186) Add Linux workflow based on GitHub Actions .github/workflows/linux.yml | 76 +++++++++++++++++++++++++++++++++++++++++++ README.md | 3 +- 2 files changed, 78 insertions(+), 1 deletion(-) commit 6bea53d4fa510eda09be7c01f30facba13081f57 Author: Philipp Kern Date: Sun Dec 13 20:53:41 2020 +0100 Merge Windows CI based on GitHub Actions (#185) One build every Sunday as well as one build per commit, building a Windows 64bit installer .github/workflows/windows.yml | 251 ++++++++++++++++++++++++++++++++++++++++ .gitignore | 37 +++--- configure.ac | 2 + win32/gobby.iss.in | 29 +++++ 4 files changed, 301 insertions(+), 18 deletions(-) commit 295e697ac83c6638bc7c6f0498534b12278192c7 Merge: 5dd8a4f 6f34307 Author: Armin Burgmeier Date: Wed Dec 2 23:17:05 2020 +0100 Merge pull request #184 from junorouse/master Fix DoS #183 commit 5dd8a4f43f3fb48a8983e4ae8cfcc1977654f9ff Merge: d16519e 90d3aa5 Author: Armin Burgmeier Date: Wed Dec 2 23:15:46 2020 +0100 Merge pull request #174 from doraeric/master translate some chinese commit 6f34307bff645eb2935d82deee0119ec89866118 Author: junorouse Date: Mon Oct 19 10:06:40 2020 +0900 Fix NULL dereference triggered via dbus (#183) Instead of crashing, print the following warning message and ignore it when no current view exists. dbus should not be called when there is no document open. ** (gobby-0.5:78328): WARNING **: 10:01:05.468: No current view exists. code/commands/edit-commands.cpp | 56 ++++++++++++++++++++++++++++++++------- code/commands/view-commands.cpp | 5 +++- code/dialogs/goto-dialog.cpp | 11 ++++++-- 3 files changed, 59 insertions(+), 13 deletions(-) commit 90d3aa54991ac17299cab0e1c3580e5fd7fca5cd Author: doraeric Date: Wed Oct 31 14:49:52 2018 +0800 translate some chinese po/zh_TW.po | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) commit d16519e326ea8690981b7897954d8d3c6110ac9f Merge: ea4df27 6b52642 Author: Philipp Kern Date: Sun Aug 26 09:43:10 2018 +0200 Merge pull request #166 from lamby/remember-typo Correct "Remeber" → "Remember". commit 6b526420cfd02d25b3094bb5263081c3fc0753c4 Author: Chris Lamb Date: Sun Aug 5 15:27:23 2018 +0800 Correct "Remeber" → "Remember" arrow. code/resources/ui/preferences-dialog.ui | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ea4df27c9b6b885434797b0071ce198b23f9f63b Merge: dbdadfd 7490c27 Author: Philipp Kern Date: Tue Apr 3 23:58:49 2018 +0200 Merge pull request #159 from pkern/master Use yelp-tools instead of gtk-doc-utils. commit 7490c27d41c04eefe7ef34d7571ef4d22bcb9ab5 Author: Philipp Kern Date: Mon Apr 2 12:12:37 2018 +0200 Make yelp conditional on --enable-docs (default=yes). Makefile.am | 5 ++++- configure.ac | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) commit 6b21446b58768018077a0946b8c839bd2cc2fc20 Author: Philipp Kern Date: Mon Apr 2 12:09:22 2018 +0200 help/Makefile.am: fix tab/spaces inconsistency help/Makefile.am | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) commit dbdadfd00e361cce0e2dfe4cdae3e0766b0d0da3 Merge: 619ad7c 865095a Author: Armin Burgmeier Date: Sat Feb 10 10:14:33 2018 +0100 Merge pull request #158 from narcisgarcia/patch-1 Update ca.po commit 4f56eeb7b75cec90e2aad65a33484c7dc98ef84b Author: Philipp Kern Date: Sun Feb 4 12:58:42 2018 +0100 Update CI build environment to include yelp-tools. .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5733414e5fb0ea1ba5b74f313a6c89bb6508497c Author: Philipp Kern Date: Sat Feb 3 12:15:18 2018 +0100 Use yelp-tools instead of gtk-doc-utils. .gitignore | 1 - Makefile.am | 8 ++------ autogen.sh | 1 - code/commands/help-commands.cpp | 6 +----- configure.ac | 18 ++---------------- help/C/{gobby.xml => index.docbook} | 0 help/Makefile.am | 21 ++++++++++----------- 7 files changed, 15 insertions(+), 40 deletions(-) commit 865095a23c649f5ee454b83caf422d8cbcb326f2 Author: Narcis Garcia Date: Thu Jan 18 13:54:18 2018 +0100 Update ca.po Many strings corrected, many new strings translated. po/ca.po | 359 +++++++++++++++++++++++++++++++++---------------------------- 1 file changed, 196 insertions(+), 163 deletions(-) commit 619ad7c32802f81152e1c4533a41e9d5602d1cf1 Merge: 2ae81ae 7e1f948 Author: Philipp Kern Date: Sun Oct 29 14:38:12 2017 +0100 Merge pull request #152 from tyll/compilewarnings Fix some compile warnings commit 2ae81ae25a00fef6fcb7e03f1c3216b998e00845 Merge: a40dca8 f2411b8 Author: Philipp Kern Date: Sun Oct 29 14:34:21 2017 +0100 Merge pull request #153 from tyll/desktop-category Add suggested desktop category commit a40dca8a7fb143bbcf751950d22c5bfce72133f1 Merge: a2f9033 cab7a46 Author: Philipp Kern Date: Sun Oct 29 14:33:50 2017 +0100 Merge pull request #154 from tyll/https Use https in README commit cab7a46fc83a2007e2ec54d30ee3231068b1cfaf Author: Till Maas Date: Fri Oct 27 19:25:44 2017 +0200 Use https in README README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit f2411b83466da90cc96310da13eef30cbeff4463 Author: Till Maas Date: Fri Oct 27 19:18:17 2017 +0200 Add suggested desktop category https://standards.freedesktop.org/menu-spec/latest/apas02.html suggests to add the Utility category if TextEditor is used. gobby-0.5.desktop.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a2f90330b5944bd0cc220b935365fc8f26498e35 Author: Philipp Kern Date: Mon Oct 23 22:12:02 2017 +0200 Fix include directives to just include . Current gtksourceview throws a compiler warning if you include any of the individual include files rather than the combined one. Hence adjust the includes to fit. code/core/folder.hpp | 2 +- code/core/menumanager.cpp | 2 +- code/core/menumanager.hpp | 2 +- code/core/noteplugin.cpp | 2 +- code/core/preferences.hpp | 3 +-- code/core/textsessionview.cpp | 4 +--- code/dialogs/preferences-dialog.cpp | 3 +-- code/operations/operation-export-html.cpp | 2 +- code/operations/operation-open.cpp | 2 +- 9 files changed, 9 insertions(+), 13 deletions(-) commit 98037507e444d1ef30dca0297c8e9d273e362f97 Author: Philipp Kern Date: Mon Oct 23 22:11:26 2017 +0200 Add newly translatable units to POTFILES.in and drop non-existing ones. po/POTFILES.in | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) commit ab5df50bf83b3cbc93e65183673f87e50f670e35 Author: Philipp Kern Date: Mon Oct 23 22:10:21 2017 +0200 Set AC_CONFIG_AUX_DIR to the top-level source directory. AC_CONFIG_AUX_DIR defaults to .., which means that gnome-doc-tools.make is symlinked outside of the build tree by a current gnome-doc-prepare, which is unhelpful. Instead change it to the top-level source directory, which is also where other Makefiles already expected it. configure.ac | 1 + 1 file changed, 1 insertion(+) commit 7e1f94839f27fd4b5d7a46c28dc805c704e7e900 Author: Till Maas Date: Fri Oct 20 19:31:34 2017 +0200 Fix some compile warnings Remove some - unused variables - unused functions - reorder initializations code/core/gobject/gobby-undo-manager.c | 6 ------ code/core/nodewatch.hpp | 2 +- code/core/preferences.hpp | 2 +- code/core/userjoin.cpp | 1 - code/dialogs/initial-dialog.cpp | 20 -------------------- code/operations/operation-export-html.cpp | 2 +- code/operations/operation-new.hpp | 2 +- 7 files changed, 4 insertions(+), 31 deletions(-) commit e5c2d145d020e080c8612f80a3d123f3a024a13a Author: Armin Burgmeier Date: Sat Feb 4 19:42:30 2017 -0800 Fix setting of font preferences (#141) The standard pango font description output does not put the font family in quotation marks, and therefore for certain font family names, the generated CSS is invalid. Also, should the CSS parsing fails only print a warning instead of letting the exception crash the application. code/core/textsessionview.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) commit 562919bf4a7feec6b23b0b8ceab0e06824a948e5 Merge: ed1a6ae 1784d6f Author: Armin Burgmeier Date: Sat Oct 29 22:02:44 2016 -0700 Merge pull request #136 from pbrenna/it_IT-translation it_IT translation commit 1784d6f4bd16784c854e809e5543dfbf20ac24ad Author: Pietro Brenna Date: Fri Oct 28 11:49:17 2016 +0200 Updated ChangeLog po/ChangeLog | 5 +++++ 1 file changed, 5 insertions(+) commit 9c1312c22c3e01c5191fbe77f94426791b4db539 Author: Pietro Brenna Date: Fri Oct 28 11:44:59 2016 +0200 Added it_IT translation po/LINGUAS | 2 + po/it_IT.po | 1302 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1304 insertions(+) commit ed1a6ae4b0c64c529b6acb240f39165b7ffe8b2c Merge: fef067e 8d1af06 Author: Armin Burgmeier Date: Thu Jun 30 07:24:02 2016 -0700 Merge pull request #132 from waldyrious/patch-1 Add license title commit 8d1af06e037b7d7b9dd5d89f1136288ff3bfc4b5 Author: Waldir Pimenta Date: Thu Jun 30 09:41:23 2016 +0100 Add license title It's not strictly required, but it's useful metadata, and part of the recommended license template text (see http://choosealicense.com/licenses/isc/ and https://opensource.org/licenses/isc-license) COPYING | 2 ++ 1 file changed, 2 insertions(+) commit fef067e8f81246525cbc244a7771e4635782ac28 Author: Armin Burgmeier Date: Mon May 30 20:26:06 2016 -0700 Fix possible crash when opening popup menu on browser This could happen if the menu was right-clicked while the connection was being established, and then another right click would cause a crash. code/commands/browser-context-commands.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) commit 732a0df70ce65659f033141855b402bdf3a8e3a0 Author: Armin Burgmeier Date: Mon May 30 18:00:51 2016 -0700 Add missing giomm/menu.h include to browser-context-commands.cpp code/commands/browser-context-commands.cpp | 1 + 1 file changed, 1 insertion(+) commit 7234d70fbcd18b03f040e1d739e4713ad768d4e6 Author: Armin Burgmeier Date: Mon May 30 17:48:50 2016 -0700 Replace margin start/end with left/right While inferior, this does not require us to bump up the required GTK+ version to 3.12, which is not present on Ubuntu Trusty. code/core/statusbar.cpp | 15 +++++++-- code/resources/ui/connection-dialog.ui | 2 +- code/resources/ui/initial-dialog.ui | 14 ++++----- code/resources/ui/password-dialog.ui | 2 +- code/resources/ui/preferences-dialog.ui | 52 +++++++++++++++---------------- 5 files changed, 47 insertions(+), 38 deletions(-) commit 4d9ebf958214a50fe5bdccf7ff87c509fed208aa Author: Armin Burgmeier Date: Mon May 30 17:31:11 2016 -0700 Fix typo in header guard code/core/textsessionuserview.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit c4b24d10d625573ee932095145be97269e9f5717 Author: Armin Burgmeier Date: Mon May 30 17:23:58 2016 -0700 Remove no longer used configure flags from travis config .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 79cf3768a4ac443bd0eac450e678e60ff7c734df Author: Armin Burgmeier Date: Mon May 30 17:23:35 2016 -0700 Add C++11 macros into m4/ to fix the travis build m4/ax_cxx_compile_stdcxx.m4 | 562 +++++++++++++++++++++++++++++++++++++++ m4/ax_cxx_compile_stdcxx_11.m4 | 39 +++ 2 files changed, 601 insertions(+) commit 980b24215623095b3f1edc6365cb4ce8e1c9c57c Author: Philipp Kern Date: Mon May 30 23:35:54 2016 +0200 Travis CI: pull in libgnutls28-dev to build against gnutls 3.2 .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 87e9d6a1bda292ff26558b43a7b6f204951137d8 Author: Philipp Kern Date: Mon May 30 23:30:48 2016 +0200 Travis CI: restore original working directory after libinfinity build .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 4039bf050ce700e1a99f93dfec7a6ff490130c00 Author: Philipp Kern Date: Mon May 30 23:25:30 2016 +0200 Travis CI: select the trusty environment .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) commit 29489a7eec31e261f36758b8e843a84f7b33e9bf Author: Armin Burgmeier Date: Mon May 30 14:03:13 2016 -0700 Update TODO TODO | 2 -- 1 file changed, 2 deletions(-) commit 74e026208936b56b1cb0d243fb3ae76df131211e Author: Armin Burgmeier Date: Mon May 30 14:01:34 2016 -0700 Remove some artifacts of libunique usage code/window.hpp | 8 -------- 1 file changed, 8 deletions(-) commit 6286e3bab2ff171d6b021ad0d95389a022f93519 Author: Armin Burgmeier Date: Mon May 30 14:01:11 2016 -0700 Use std::unique_ptr instead of std::auto_ptr code/application.cpp | 4 ++-- code/application.hpp | 4 ++-- code/commands/application-commands.hpp | 2 +- code/commands/auth-commands.cpp | 2 +- code/commands/browser-commands.cpp | 11 ++++++----- code/commands/browser-context-commands.cpp | 20 ++++++++++---------- code/commands/browser-context-commands.hpp | 6 +++--- code/commands/edit-commands.hpp | 4 ++-- code/commands/file-commands.hpp | 6 +++--- code/commands/file-tasks/task-open-file.hpp | 4 ++-- code/commands/file-tasks/task-open-location.hpp | 4 ++-- code/commands/file-tasks/task-save-all.hpp | 2 +- code/commands/help-commands.hpp | 2 +- code/commands/user-join-commands.cpp | 21 ++++++++++++--------- code/commands/view-commands.hpp | 2 +- code/core/credentialsgenerator.cpp | 18 +++++++++--------- code/core/credentialsgenerator.hpp | 6 +++--- code/core/foldermanager.hpp | 2 +- code/core/huebutton.hpp | 2 +- code/core/selfhoster.hpp | 2 +- code/core/textsessionview.hpp | 2 +- code/core/userjoin.cpp | 4 ++-- code/core/userjoin.hpp | 4 ++-- code/dialogs/connection-dialog.cpp | 4 ++-- code/dialogs/connection-dialog.hpp | 2 +- code/dialogs/connection-info-dialog.cpp | 4 ++-- code/dialogs/connection-info-dialog.hpp | 2 +- code/dialogs/document-location-dialog.cpp | 4 ++-- code/dialogs/document-location-dialog.hpp | 2 +- code/dialogs/entry-dialog.cpp | 4 ++-- code/dialogs/entry-dialog.hpp | 2 +- code/dialogs/find-dialog.cpp | 4 ++-- code/dialogs/find-dialog.hpp | 2 +- code/dialogs/goto-dialog.cpp | 4 ++-- code/dialogs/goto-dialog.hpp | 2 +- code/dialogs/initial-dialog.cpp | 8 ++++---- code/dialogs/initial-dialog.hpp | 2 +- code/dialogs/open-location-dialog.cpp | 4 ++-- code/dialogs/open-location-dialog.hpp | 2 +- code/dialogs/password-dialog.cpp | 4 ++-- code/dialogs/password-dialog.hpp | 2 +- code/dialogs/preferences-dialog.cpp | 4 ++-- code/dialogs/preferences-dialog.hpp | 18 +++++++++--------- code/operations/operation-open.hpp | 4 ++-- code/util/asyncoperation.cpp | 6 +++--- code/util/asyncoperation.hpp | 4 ++-- code/util/config.hpp | 2 +- code/util/historyentry.hpp | 2 +- code/window.hpp | 2 +- 49 files changed, 119 insertions(+), 115 deletions(-) commit 044fdfbcfbaec7c9e3254f7374d93410b8ba6077 Author: Armin Burgmeier Date: Fri Dec 4 21:29:10 2015 -0800 Enable C++11 compilation While we don't use C++11 yet in the Gobby code, this is required to build against recent glibmm. configure.ac | 3 +++ 1 file changed, 3 insertions(+) commit 61077e46ece21dba5c11695e9e7888e3ed23aefc Author: Armin Burgmeier Date: Wed Dec 2 21:17:21 2015 -0800 Add HiDpiIcon and ModernToolkit kudos in appdata file As instructed by Richard Hughes (see http://www.mail-archive.com/obby-users@list.0x539.de/msg00380.html). gobby-0.5.appdata.xml | 44 ++++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) commit bf107c6c92da33ab20c26a7ddf55d6eb61e50af6 Merge: a20f2ec bf688e8 Author: Armin Burgmeier Date: Thu Sep 3 08:47:49 2015 -0400 Merge pull request #95 from michaelweghorn/fixTypoInTranslation Fix a typo in the German translation commit bf688e87ddb19e12ab10e1af33cc83889aaf6f09 Author: Michael Weghorn Date: Mon Aug 31 20:34:54 2015 +0200 Fix a typo in the German translation po/de.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit a20f2ec17d39a50ea6c7b9f0ea1d99a14ba2bac6 Author: Armin Burgmeier Date: Sat Jul 25 20:57:18 2015 -0400 Use non-recursive automake to compile the code (#78) .gitignore | 1 + Makefile.am | 44 +++++----- code/Makefile.am | 79 ++++++++---------- code/commands/Makefile.am | 66 +++++++-------- code/commands/file-tasks/Makefile.am | 44 ++++------ code/core/Makefile.am | 146 ++++++++++++++++----------------- code/core/gobject/Makefile.am | 13 +-- code/dialogs/Makefile.am | 52 +++++------- code/operations/Makefile.am | 44 ++++------ code/util/Makefile.am | 43 +++++----- configure.ac | 13 +-- win32/Makefile.am | 8 +- 12 files changed, 246 insertions(+), 307 deletions(-) commit 1e30522333782957b551b16a82cfa6e4033e0606 Author: Armin Burgmeier Date: Sun Jun 14 21:27:27 2015 -0400 Update TODO TODO | 2 -- 1 file changed, 2 deletions(-) commit c7d0591df7c520ba55e0e6d47a59d397afb7313b Author: Armin Burgmeier Date: Sun Jun 14 16:29:31 2015 -0400 Make statusbar error dialogs have a transient parent code/core/statusbar.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) commit 8a91b1e63555096b0b27d2d47c10ace7ccea5464 Author: Armin Burgmeier Date: Sun Jun 14 16:24:04 2015 -0400 Remove code/util/color.{hpp,cpp} Most of the functionality has already been replaced with gtk_hsv_to_rgb() and gtk_rgb_to_hsv() in the previous commit. code/core/userlist.cpp | 8 +- code/util/Makefile.am | 2 - code/util/color.cpp | 192 ----------------------------------------------- code/util/color.hpp | 33 -------- 4 files changed, 4 insertions(+), 231 deletions(-) commit 8fe040accfcfe0893f5ebeb34801c9bbfe35d785 Author: Armin Burgmeier Date: Sun Jun 14 15:45:42 2015 -0400 Remove usage of deprecated GdkColor Replace by Gdk::RGBA where appropriate. code/core/huebutton.cpp | 18 +++++-- code/core/textsessionview.cpp | 32 ++++-------- code/core/texttablabel.cpp | 24 ++++++--- code/dialogs/initial-dialog.cpp | 4 +- code/dialogs/preferences-dialog.cpp | 14 ++---- code/operations/operation-export-html.cpp | 78 +++++++++++++++++------------ code/util/config.cpp | 34 ------------- code/util/config.hpp | 22 -------- 8 files changed, 92 insertions(+), 134 deletions(-) commit d55eadce0441ede961e3fc7454926545ea791ae8 Author: Armin Burgmeier Date: Sun Jun 14 15:18:08 2015 -0400 Replace gtk_widget_modify_font() by CSS gtk_widget_modify_font() is deprecated in favor of CSS. code/core/textsessionview.cpp | 25 ++++++++++++++++++------- code/core/textsessionview.hpp | 2 ++ 2 files changed, 20 insertions(+), 7 deletions(-) commit 0cc2b33a86e4dc52f513162527d495d758321f8a Author: Armin Burgmeier Date: Tue Jun 9 21:55:15 2015 -0400 Update TODO TODO | 2 -- 1 file changed, 2 deletions(-) commit 8870118751ca047cb271fb1774384f88631e5960 Author: Armin Burgmeier Date: Tue Jun 9 21:53:56 2015 -0400 Migrate password dialog to XML UI format code/Makefile.am | 1 + code/commands/auth-commands.cpp | 11 ++-- code/dialogs/password-dialog.cpp | 70 ++++++++++++---------- code/dialogs/password-dialog.hpp | 21 +++---- code/resources/gobby.gresources.xml | 1 + code/resources/ui/password-dialog.ui | 103 +++++++++++++++++++++++++++++++++ 6 files changed, 160 insertions(+), 47 deletions(-) commit 6f7d5df49a9b0f4a5584c6b057cfd366a8ba258f Author: Armin Burgmeier Date: Tue Jun 9 21:33:50 2015 -0400 Take into account initial browser items on SASL setup This fixes password authorization for pinned browser items. code/commands/auth-commands.cpp | 21 ++++++++++++++++++++- code/core/connectionmanager.cpp | 14 +++++++++++--- 2 files changed, 31 insertions(+), 4 deletions(-) commit 23903d6e9f7b09f517e4ba864f71ac63634fc818 Author: Armin Burgmeier Date: Tue Jun 9 21:33:40 2015 -0400 Take into account non-browser items in FolderManager initialization code/core/foldermanager.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) commit 635c7fdbec7195e7404b59f2f835a44acd2559ba Author: Armin Burgmeier Date: Tue Jun 9 19:55:10 2015 -0400 Migrate OpenLocationDialog to XML UI format code/Makefile.am | 1 + code/commands/file-tasks/task-open-location.cpp | 17 ++--- code/commands/file-tasks/task-open-location.hpp | 2 +- code/dialogs/open-location-dialog.cpp | 36 +++++------ code/dialogs/open-location-dialog.hpp | 12 ++-- code/resources/gobby.gresources.xml | 1 + code/resources/ui/open-location-dialog.ui | 77 +++++++++++++++++++++++ code/util/historyentry.cpp | 19 ++++++ code/util/historyentry.hpp | 2 + 9 files changed, 134 insertions(+), 33 deletions(-) commit 0a63ed319e9a659fd3d43541a2b425ecebd07db5 Author: Armin Burgmeier Date: Tue Jun 9 19:55:00 2015 -0400 Make toolbar use Gtk::Grid instead of Gtk::Box code/core/toolbar.cpp | 5 +++-- code/core/toolbar.hpp | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) commit 04625111c795897a9bd11ed8552a48cb4d69fef2 Author: Armin Burgmeier Date: Mon Jun 8 21:01:01 2015 -0400 Migrate PreferencesDialog to XML UI format code/Makefile.am | 1 + code/commands/application-commands.cpp | 6 +- code/dialogs/preferences-dialog.cpp | 958 +++++++------------- code/dialogs/preferences-dialog.hpp | 263 +++--- code/resources/gobby.gresources.xml | 1 + code/resources/ui/preferences-dialog.ui | 1382 +++++++++++++++++++++++++++++ code/util/Makefile.am | 16 +- code/util/groupframe.cpp | 44 - code/util/groupframe.hpp | 38 - 9 files changed, 1843 insertions(+), 866 deletions(-) commit adfef7db2e08c1ec4aea0256ed63fb4bf02f11e1 Author: Armin Burgmeier Date: Sun Jun 7 21:41:24 2015 -0400 Updated copyright years for 2015 code/application.cpp | 2 +- code/commands/application-commands.cpp | 2 +- code/commands/auth-commands.cpp | 2 +- code/commands/autosave-commands.cpp | 2 +- code/commands/browser-commands.cpp | 2 +- code/commands/browser-context-commands.cpp | 2 +- code/commands/edit-commands.cpp | 2 +- code/commands/file-commands.cpp | 2 +- code/commands/file-tasks/task-export-html.cpp | 2 +- code/commands/file-tasks/task-new.cpp | 2 +- code/commands/file-tasks/task-open-file.cpp | 2 +- code/commands/file-tasks/task-open-location.cpp | 2 +- code/commands/file-tasks/task-open-multiple.cpp | 2 +- code/commands/file-tasks/task-open.cpp | 2 +- code/commands/file-tasks/task-save-all.cpp | 2 +- code/commands/file-tasks/task-save.cpp | 2 +- code/commands/folder-commands.cpp | 2 +- code/commands/help-commands.cpp | 4 ++-- code/commands/subscription-commands.cpp | 2 +- code/commands/synchronization-commands.cpp | 2 +- code/commands/user-join-commands.cpp | 2 +- code/commands/view-commands.cpp | 2 +- code/core/applicationactions.cpp | 2 +- code/core/browser.cpp | 2 +- code/core/certificatemanager.cpp | 2 +- code/core/chatsessionview.cpp | 2 +- code/core/chattablabel.cpp | 2 +- code/core/closableframe.cpp | 2 +- code/core/connectionmanager.cpp | 2 +- code/core/credentialsgenerator.cpp | 2 +- code/core/documentinfostorage.cpp | 2 +- code/core/filechooser.cpp | 2 +- code/core/folder.cpp | 2 +- code/core/foldermanager.cpp | 2 +- code/core/gobject/gobby-undo-manager.c | 2 +- code/core/gobject/gobby-undo-manager.h | 2 +- code/core/huebutton.cpp | 2 +- code/core/knownhoststorage.cpp | 2 +- code/core/menumanager.cpp | 2 +- code/core/nodewatch.cpp | 2 +- code/core/noteplugin.cpp | 2 +- code/core/preferences.cpp | 2 +- code/core/selfhoster.cpp | 2 +- code/core/server.cpp | 2 +- code/core/sessionuserview.cpp | 2 +- code/core/sessionview.cpp | 2 +- code/core/statusbar.cpp | 2 +- code/core/tablabel.cpp | 2 +- code/core/textsessionuserview.cpp | 2 +- code/core/textsessionview.cpp | 2 +- code/core/texttablabel.cpp | 2 +- code/core/textundogrouping.cpp | 2 +- code/core/titlebar.cpp | 2 +- code/core/toolbar.cpp | 2 +- code/core/userjoin.cpp | 2 +- code/core/userlist.cpp | 2 +- code/core/windowactions.cpp | 2 +- code/dialogs/connection-dialog.cpp | 2 +- code/dialogs/connection-info-dialog.cpp | 2 +- code/dialogs/document-location-dialog.cpp | 2 +- code/dialogs/entry-dialog.cpp | 2 +- code/dialogs/find-dialog.cpp | 2 +- code/dialogs/goto-dialog.cpp | 2 +- code/dialogs/initial-dialog.cpp | 2 +- code/dialogs/open-location-dialog.cpp | 2 +- code/dialogs/password-dialog.cpp | 2 +- code/dialogs/preferences-dialog.cpp | 2 +- code/main.cpp | 2 +- code/operations/operation-delete.cpp | 2 +- code/operations/operation-export-html.cpp | 2 +- code/operations/operation-new.cpp | 2 +- code/operations/operation-open-multiple.cpp | 2 +- code/operations/operation-open.cpp | 2 +- code/operations/operation-save.cpp | 2 +- code/operations/operation-subscribe-path.cpp | 2 +- code/operations/operations.cpp | 2 +- code/util/asyncoperation.cpp | 2 +- code/util/closebutton.cpp | 2 +- code/util/color.cpp | 2 +- code/util/config.cpp | 2 +- code/util/file.cpp | 2 +- code/util/groupframe.cpp | 2 +- code/util/historyentry.cpp | 2 +- code/util/i18n.cpp | 2 +- code/util/serialize.cpp | 2 +- code/util/uri.cpp | 2 +- code/window.cpp | 2 +- 87 files changed, 88 insertions(+), 88 deletions(-) commit 59d96ec3c9fc582a9eebd66d31040a5bd716e0de Author: Armin Burgmeier Date: Wed Jun 3 23:14:45 2015 -0400 Migrate InitialDialog to XML UI format code/Makefile.am | 1 + code/core/huebutton.cpp | 28 ++- code/core/huebutton.hpp | 8 +- code/dialogs/initial-dialog.cpp | 376 +++++++--------------------- code/dialogs/initial-dialog.hpp | 72 ++---- code/dialogs/preferences-dialog.cpp | 2 +- code/resources/gobby.gresources.xml | 1 + code/resources/ui/initial-dialog.ui | 449 ++++++++++++++++++++++++++++++++++ code/window.cpp | 6 +- 9 files changed, 595 insertions(+), 348 deletions(-) commit 9076b9cdf536247be40f4d070b32fb88f703224a Author: Armin Burgmeier Date: Wed Jun 3 21:51:03 2015 -0400 Migrate ConnectionInfoDialog to XML UI format code/Makefile.am | 1 + code/commands/browser-context-commands.cpp | 2 +- code/dialogs/connection-info-dialog.cpp | 210 +++++++++++++++----------- code/dialogs/connection-info-dialog.hpp | 18 ++- code/resources/gobby.gresources.xml | 1 + code/resources/ui/connection-info-dialog.ui | 90 +++++++++++ 6 files changed, 222 insertions(+), 100 deletions(-) commit 9d44e5d95c1c9cc54315eb765478640491f27a83 Author: Armin Burgmeier Date: Tue Jun 2 22:52:23 2015 -0400 Migrate DocumentLocationDialog to XML UI format code/Makefile.am | 1 + code/commands/file-commands.cpp | 6 +- code/dialogs/document-location-dialog.cpp | 111 +++++++++++++----------- code/dialogs/document-location-dialog.hpp | 23 ++--- code/resources/gobby.gresources.xml | 1 + code/resources/ui/document-location-dialog.ui | 106 ++++++++++++++++++++++ 6 files changed, 181 insertions(+), 67 deletions(-) commit d6c34ddf05a9dc6ea736a1ad4a2e2e0ad9a63cbd Author: Armin Burgmeier Date: Mon Jun 1 21:59:41 2015 -0400 Migrate FindDialog to XML UI format code/Makefile.am | 1 + code/commands/edit-commands.cpp | 4 +- code/dialogs/find-dialog.cpp | 140 ++++++++++++---------------- code/dialogs/find-dialog.hpp | 37 ++++---- code/resources/gobby.gresources.xml | 1 + code/resources/ui/find-dialog.ui | 168 ++++++++++++++++++++++++++++++++++ 6 files changed, 253 insertions(+), 98 deletions(-) commit aea6220f06016bb99630d43ff549f2efa0282dd2 Author: Armin Burgmeier Date: Mon Jun 1 10:27:29 2015 -0400 Migrate GotoDialog to XML UI format code/Makefile.am | 1 + code/commands/edit-commands.cpp | 2 +- code/dialogs/goto-dialog.cpp | 71 +++++++++++++++--------------- code/dialogs/goto-dialog.hpp | 19 ++++---- code/resources/gobby.gresources.xml | 1 + code/resources/ui/connection-dialog.ui | 1 + code/resources/ui/goto-dialog.ui | 75 ++++++++++++++++++++++++++++++++ 7 files changed, 124 insertions(+), 46 deletions(-) commit 8f8c1fd9c71925d7f34316d2111e8370174a7ec2 Author: Armin Burgmeier Date: Mon Jun 1 09:59:44 2015 -0400 Migrate ConnectionDialog to a UI XML file code/Makefile.am | 1 + code/commands/file-commands.cpp | 2 +- code/dialogs/connection-dialog.cpp | 46 +++++++-------- code/dialogs/connection-dialog.hpp | 20 +++---- code/resources/gobby.gresources.xml | 5 +- code/resources/ui/connection-dialog.ui | 98 ++++++++++++++++++++++++++++++++ code/resources/ui/entry-dialog.ui | 2 +- 7 files changed, 133 insertions(+), 41 deletions(-) commit 03cc4ccfe2c987a9e890e4c832fcf95fff986662 Author: Armin Burgmeier Date: Sun May 31 20:41:25 2015 -0400 Load EntryDialog from XML UI file code/Makefile.am | 5 +- code/commands/browser-context-commands.cpp | 2 +- code/dialogs/entry-dialog.cpp | 44 +++++++++-------- code/dialogs/entry-dialog.hpp | 18 ++++--- code/resources/gobby.gresources.xml | 1 + code/resources/ui/entry-dialog.ui | 70 ++++++++++++++++++++++++++++ 6 files changed, 111 insertions(+), 29 deletions(-) commit c67f603afb161d8a0b72b223b855719f733f7404 Author: Armin Burgmeier Date: Sun May 31 17:48:56 2015 -0400 Replace GtkBox by GtkGrid code/core/browser.cpp | 19 +++++++++++-------- code/core/browser.hpp | 7 +++---- code/core/chatsessionview.cpp | 5 +++-- code/core/closableframe.cpp | 27 ++++++++++++++------------- code/core/closableframe.hpp | 4 ++-- code/core/sessionview.cpp | 31 +++++++++++++++++-------------- code/core/sessionview.hpp | 7 +++---- code/core/tablabel.cpp | 14 +++++++------- code/core/tablabel.hpp | 5 ++--- code/core/textsessionview.cpp | 4 +++- code/core/texttablabel.cpp | 3 ++- code/core/userlist.cpp | 4 +++- code/core/userlist.hpp | 4 ++-- code/window.cpp | 11 ++++++----- code/window.hpp | 2 +- 15 files changed, 79 insertions(+), 68 deletions(-) commit c6961f6ed91377e50c04fcf8a8ca12ea79220b4f Author: Armin Burgmeier Date: Sat May 30 18:00:31 2015 -0400 Replace GtkBox by GtkGrid in status bar Also get rid of its embedded GtkStatusbar widget, which derives from GtkBox internally, and did not provide any useful functionality anyway. code/core/statusbar.cpp | 62 +++++++++++++++++++++++++++++++---------------- code/core/statusbar.hpp | 9 +++---- 2 files changed, 44 insertions(+), 27 deletions(-) commit 3d6b7ff5a8e33afbeae0395d759a725daea4823a Author: Armin Burgmeier Date: Tue May 26 21:39:40 2015 -0400 Add an option to use default system CAs (#70) This allows us to get rid of shipping a list of trusted CAs with Gobby on Windows, which might get outdated after a while. Bump the GnuTLS dependency to 3.0.20. code/core/certificatemanager.cpp | 22 ++++++++++++++++++---- code/core/certificatemanager.hpp | 2 +- code/core/preferences.cpp | 30 ++---------------------------- code/core/preferences.hpp | 3 ++- code/dialogs/preferences-dialog.cpp | 32 +++++++++++++++++++++++++++----- code/dialogs/preferences-dialog.hpp | 5 +++++ configure.ac | 2 +- de.0x539.gobby.gschema.xml.in | 11 ++++++++--- 8 files changed, 64 insertions(+), 43 deletions(-) commit 666112e14e89fbac56c90994351f9b0c40dd819f Author: Armin Burgmeier Date: Tue May 26 20:58:57 2015 -0400 Don't attempt to start the self hoster if authentication is not enabled It would create an inconsistent configuration where no certificate is set, but TLS is active. code/core/selfhoster.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 37287af1d1c37abc9192e45dbfe0d22ada5a654e Author: Armin Burgmeier Date: Tue May 26 20:52:11 2015 -0400 Remove the option not to generate a certificate in the initial dialog This was broken already before, since it would need the security policy to be set to only-unsecured, which is not possible from within the Gobby UI. We don't want to make it available, because otherwise it would also disable TLS for outgoing connections. Having two different settings for incoming and outgoing connections seems messy, so we simply always generate a certificate. code/dialogs/initial-dialog.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) commit 3414a8511638fe447084af57e52680ae64b3fe39 Author: Armin Burgmeier Date: Mon May 25 11:48:08 2015 -0400 Use GSettings for storage and retrieval of preferences The config.xml file is still read and overwrites any values supplied by GSettings. However, once the file has been read it is deleted automatically. This allows smooth transition from the config.xml-based configuration to the GSettings-based one. In the next-to-next release, we can then remove the config.xml code completely. .gitignore | 3 +- Makefile.am | 15 +- TODO | 3 +- code/application.cpp | 12 +- code/core/folder.cpp | 10 +- code/core/folder.hpp | 4 + code/core/preferences.cpp | 273 +++++++------------- code/core/preferences.hpp | 534 ++++++++++++++++++++++++++++++++++++++-- code/util/config.cpp | 2 +- code/util/config.hpp | 2 +- code/window.cpp | 15 +- configure.ac | 8 + de.0x539.gobby.gschema.xml.in | 304 +++++++++++++++++++++++ 13 files changed, 955 insertions(+), 230 deletions(-) commit d4d601761ed3094af29f0d7bed1e62c803227e68 Author: Armin Burgmeier Date: Sat May 23 23:54:26 2015 -0400 Add a dialog to show connection parameters (#65) code/commands/browser-context-commands.cpp | 32 ++- code/commands/browser-context-commands.hpp | 3 + code/dialogs/Makefile.am | 2 + code/dialogs/connection-info-dialog.cpp | 307 +++++++++++++++++++++++++++ code/dialogs/connection-info-dialog.hpp | 111 ++++++++++ code/resources/ui/browser-context-menu.ui | 4 + 6 files changed, 457 insertions(+), 2 deletions(-) commit a2874c81fe5ef065709aeac65625e29ac0a7f5d9 Author: Armin Burgmeier Date: Fri May 22 19:20:52 2015 -0400 Add "gobby.0x539.de" browser entry the first time gobby is started code/core/knownhoststorage.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit dae8aabb6f6925086bb9d48902e77f10cb894f25 Author: Armin Burgmeier Date: Fri May 22 19:12:12 2015 -0400 Remember connection parameters across processes (#54) When Gobby starts up, it shows connections that were available last time, so that one can just double click on the entry in the browser to establish a connection instead of typing the hostname again. code/core/Makefile.am | 34 +++--- code/core/knownhoststorage.cpp | 252 +++++++++++++++++++++++++++++++++++++++ code/core/knownhoststorage.hpp | 40 +++++++ code/window.cpp | 1 + code/window.hpp | 2 + 5 files changed, 313 insertions(+), 16 deletions(-) commit b79a37d0586e3e9f16b4a3a97bf5bc409dfbde15 Author: Armin Burgmeier Date: Fri May 22 17:58:06 2015 -0400 Allow to add connections to the browser that's don't connect immediately code/core/browser.cpp | 20 +++++++++++--------- code/core/browser.hpp | 14 ++++++++------ code/core/connectionmanager.cpp | 20 ++++++++++++-------- code/core/connectionmanager.hpp | 11 ++++++++--- code/operations/operation-subscribe-path.cpp | 4 ++-- 5 files changed, 41 insertions(+), 28 deletions(-) commit 97dad636ba289dfd5e751f9748cac49cb771b54c Author: Armin Burgmeier Date: Fri May 22 17:55:48 2015 -0400 Take notice of initial folders in FolderManager and BrowserCommands This keeps things consistent if browsers were added before the object itself is constructed. code/commands/browser-commands.cpp | 28 ++++++++++++++++++++++++++++ code/core/foldermanager.cpp | 20 ++++++++++++++++++++ 2 files changed, 48 insertions(+) commit c20e3507ea38ddd3c80dc86a8d9212634b2c6ad4 Author: Armin Burgmeier Date: Tue May 19 21:56:50 2015 -0400 Update README.md file (#55) README.md | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) commit 1df4c0013f5a089d76e263e1fe1b6b0ef199f6ac Author: Armin Burgmeier Date: Sun May 17 18:40:12 2015 -0400 Fix the build code/core/gobject/gobby-undo-manager.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 5f77fd6ffca5daac643f73639563d4b98061e6a7 Author: Armin Burgmeier Date: Sat May 16 18:21:41 2015 -0400 Allow help files not to be built/installed (#62) code/commands/help-commands.cpp | 4 ++++ configure.ac | 18 ++++++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) commit c89ee9fca2a1d8bbb3eb7d3ce8b40bfbc800bfab Author: Armin Burgmeier Date: Sun May 10 17:15:04 2015 -0400 Construct browser context menu via GMenu and GtkBuilder TODO | 1 - code/Makefile.am | 3 +- code/commands/browser-context-commands.cpp | 382 +++++++++++---------------- code/commands/browser-context-commands.hpp | 39 ++- code/core/nodewatch.cpp | 20 +- code/core/nodewatch.hpp | 2 + code/resources/gobby.gresources.xml | 1 + code/resources/ui/browser-context-menu.ui | 47 ++++ 8 files changed, 251 insertions(+), 244 deletions(-) commit 44b9d4e1753478c14989ca98a16ee9bd382c631b Author: Armin Burgmeier Date: Wed May 6 21:52:45 2015 -0400 Implement GtkSourceUndoManager interface This allows to carry out our collaborative undo actions via the normal GtkSourceView API. It gets us rid of some hacks, and it enables the Undo/Redo context menu items of the GtkSourceView. Makefile.am | 1 + TODO | 7 - code/core/Makefile.am | 2 + code/core/gobject/Makefile.am | 10 + code/core/gobject/gobby-undo-manager.c | 410 +++++++++++++++++++++++++++++++ code/core/gobject/gobby-undo-manager.h | 69 ++++++ code/core/noteplugin.cpp | 5 - code/core/textsessionview.cpp | 11 + code/core/textsessionview.hpp | 4 +- code/core/textundogrouping.hpp | 4 +- code/operations/operation-open.cpp | 4 - code/window.cpp | 12 - configure.ac | 1 + 13 files changed, 508 insertions(+), 32 deletions(-) commit a82c3985a13e54b3ac3da807d6049941172ab51b Author: Armin Burgmeier Date: Sat May 2 22:11:06 2015 -0400 Reduce glibmm minimum version to 2.39.93 Instead of 2.40.0. This makes gobby work on Ubuntu 14.04 (LTS). See also #56. configure.ac | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 7b6451975aec87d52b472a91480e83cc6d39811b Author: Timo Vanwynsberghe Date: Sat May 2 18:08:49 2015 +0200 Fix running on GTK 3.10 The file resources/ui/toolbar.ui lacks an id attribute for most object elements. Prior to GTK 3.11.2 they were required and so Gobby fails to start. https://bugzilla.gnome.org/show_bug.cgi?id=712553 http://ftp.gnome.org/pub/gnome/sources/gtk+/3.11/gtk+-3.11.2.news code/resources/ui/toolbar.ui | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) commit fe28c7a28213d8f3571625c2304f64c052159939 Author: Armin Burgmeier Date: Sun Feb 22 17:22:18 2015 -0500 Replace the header class by GMenu TODO | 5 + code/Makefile.am | 3 +- code/application.cpp | 64 ++- code/application.hpp | 5 - code/commands/Makefile.am | 2 + code/commands/application-commands.cpp | 67 ++++ code/commands/application-commands.hpp | 57 +++ code/commands/edit-commands.cpp | 133 +++---- code/commands/edit-commands.hpp | 20 +- code/commands/file-commands.cpp | 70 ++-- code/commands/file-commands.hpp | 12 +- code/commands/help-commands.cpp | 42 +- code/commands/help-commands.hpp | 8 +- code/commands/view-commands.cpp | 233 ++++++----- code/commands/view-commands.hpp | 15 +- code/core/Makefile.am | 14 +- code/core/applicationactions.cpp | 25 ++ code/core/applicationactions.hpp | 39 ++ code/core/header.cpp | 642 ------------------------------- code/core/header.hpp | 143 ------- code/core/menumanager.cpp | 127 ++++++ code/core/menumanager.hpp | 45 +++ code/core/toolbar.cpp | 55 +++ code/core/toolbar.hpp | 43 +++ code/core/windowactions.cpp | 68 ++++ code/core/windowactions.hpp | 68 ++++ code/resources/gobby.gresources.xml | 3 +- code/resources/menu/appmenu.ui | 17 - code/resources/ui/menu.ui | 213 ++++++++++ code/resources/ui/menu.ui.h | 38 ++ code/resources/ui/toolbar.ui | 170 ++++++++ code/resources/ui/toolbar.ui.h | 10 + code/window.cpp | 31 +- code/window.hpp | 16 +- configure.ac | 26 +- po/POTFILES.in | 11 +- update-potfiles | 6 + 37 files changed, 1367 insertions(+), 1179 deletions(-) commit 51a44f4636b12a7c745a77d2f53316ebd4c3ed86 Author: Armin Burgmeier Date: Sun Jan 25 19:37:23 2015 -0500 Add simple application menu TODO | 1 + code/.gitignore | 2 ++ code/Makefile.am | 22 ++++++++++++++-- code/application.cpp | 48 ++++++++++++++++++++++++++++++++--- code/application.hpp | 5 +++- code/commands/edit-commands.cpp | 21 +++++++++------ code/commands/edit-commands.hpp | 1 + code/resources/gobby.gresources.xml | 5 ++++ code/resources/menu/appmenu.ui | 17 +++++++++++++ code/window.cpp | 12 ++++++--- code/window.hpp | 9 ++++--- 11 files changed, 121 insertions(+), 22 deletions(-) commit 917c40d56cfcefbf18db91bcc2e4789a17ef66e4 Author: Philipp Kern Date: Wed Jan 7 00:29:25 2015 +0100 Travis CI: install correct build-deps for libinfinity using trusty .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 4576a1e3d209b79c51fa804ac7f0ebc712800277 Author: Philipp Kern Date: Tue Dec 23 09:22:11 2014 +0100 Register Gobby as infinote URI handler. (#14) gobby-0.5.desktop.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 53e165eb5bd677be9206f57f2e62168646bafd58 Author: Jérôme Carretero Date: Tue Nov 18 22:47:35 2014 -0500 core: header: add basic file/edit accelerators For some reason they were gone. code/core/header.cpp | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) commit def08b24aeb440bbf3fe39bf2b184f10141513b6 Author: Philipp Kern Date: Sat Oct 18 22:00:40 2014 +0200 Take multiple files on the command-line when called by DEs. We claim that we support text/plain but the desktop file did not actually state how we accept them. Explicitly request a list of files. gobby-0.5.desktop.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 39723197222c3e0f878e2edd12b5261465b16431 Author: Armin Burgmeier Date: Thu Oct 16 16:20:48 2014 -0400 Fix use-after-free on unsuccessful user join code/core/userjoin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 5fc7baff385147b214fd56c6f33cb4465a28db1c Author: zaitor Date: Thu Oct 16 17:21:05 2014 +0200 Add missing return Without this return false statement, rpmlint complains while building the package code/commands/browser-commands.cpp | 5 +++++ 1 file changed, 5 insertions(+) commit fd756e38dddef1ccf4083c51341a9329a4932995 Author: Armin Burgmeier Date: Thu Oct 9 13:23:32 2014 -0400 Use length-independent string compare for password check Thanks to Jann Horn for pointing this out. code/commands/auth-commands.cpp | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) commit aa9b3ae7075f61d919996260f56935db09ad7c83 Author: Armin Burgmeier Date: Tue Sep 16 21:25:55 2014 -0400 Remove a C-ism code/core/texttablabel.cpp | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) commit b45408c84ac1a2506e6f6aa665150896f1daba95 Author: Armin Burgmeier Date: Tue Sep 16 21:13:54 2014 -0400 Remove all use of stock icons in favor of icon names TODO | 2 +- code/commands/auth-commands.cpp | 8 +-- code/commands/browser-context-commands.cpp | 65 ++++++++----------- code/commands/file-commands.cpp | 6 +- code/commands/file-tasks/task-open-location.cpp | 7 +-- code/core/browser.cpp | 1 - code/core/chattablabel.cpp | 1 - code/core/filechooser.cpp | 10 +-- code/core/header.cpp | 77 +++++++++++++---------- code/core/huebutton.cpp | 9 +-- code/core/statusbar.cpp | 18 +++--- code/core/texttablabel.cpp | 2 - code/dialogs/connection-dialog.cpp | 4 +- code/dialogs/document-location-dialog.cpp | 6 +- code/dialogs/find-dialog.cpp | 8 +-- code/dialogs/goto-dialog.cpp | 9 +-- code/dialogs/initial-dialog.cpp | 3 +- code/dialogs/password-dialog.cpp | 8 +-- code/dialogs/preferences-dialog.cpp | 3 +- 19 files changed, 111 insertions(+), 136 deletions(-) commit 94f83da3421a74788c05ade7f1b8512881a1bc57 Author: Armin Burgmeier Date: Tue Sep 16 18:29:13 2014 -0400 Free Gtk::CloseButton of deprecated API usage code/util/closebutton.cpp | 39 ++++++++++++++++++--------------------- code/util/closebutton.hpp | 3 --- 2 files changed, 18 insertions(+), 24 deletions(-) commit 8787a4b8317512361a79baf109b779373377b4c6 Author: Armin Burgmeier Date: Tue Sep 16 15:46:54 2014 -0400 Apply user intensity directly on startup code/core/textsessionview.cpp | 2 ++ 1 file changed, 2 insertions(+) commit fd03b0e62c88c3a9e3d39dd02316ba46ef19ec70 Author: Armin Burgmeier Date: Tue Sep 16 15:45:59 2014 -0400 Rename on_style_updated in TextSessionView In order to avoid conflict with the on_style_updated() virtual function: the default signal handler of the TextSessionView's style-updated signal. code/core/textsessionview.cpp | 4 ++-- code/core/textsessionview.hpp | 9 +++++---- 2 files changed, 7 insertions(+), 6 deletions(-) commit 97928fd808d72f6a3538f5d048e481176d843ad8 Author: Armin Burgmeier Date: Mon Sep 15 22:02:52 2014 -0400 Replace stock items registered by IconManager by icon names Other stock items are going to replaced by icon names in a future commit. Makefile.am | 1 - code/Makefile.am | 11 +++-- code/application.cpp | 10 ++++- code/commands/Makefile.am | 2 +- code/commands/file-tasks/Makefile.am | 2 +- code/commands/help-commands.cpp | 5 +-- code/commands/help-commands.hpp | 5 +-- code/core/Makefile.am | 12 +----- code/core/chattablabel.cpp | 5 +-- code/core/closableframe.cpp | 5 ++- code/core/closableframe.hpp | 2 +- code/core/header.cpp | 5 +-- code/core/iconmanager.cpp | 73 ---------------------------------- code/core/iconmanager.hpp | 49 ----------------------- code/core/sessionuserview.cpp | 3 +- code/core/tablabel.cpp | 25 +++++++----- code/core/tablabel.hpp | 5 ++- code/core/texttablabel.cpp | 2 +- code/core/userlist.cpp | 52 +++++++++++++++++------- code/core/userlist.hpp | 2 + code/dialogs/Makefile.am | 2 +- code/dialogs/initial-dialog.cpp | 3 +- code/dialogs/initial-dialog.hpp | 4 +- code/operations/Makefile.am | 2 +- code/util/Makefile.am | 2 +- code/window.cpp | 12 ++---- code/window.hpp | 3 -- 27 files changed, 98 insertions(+), 206 deletions(-) commit 4cc5c1868a2a8db8cfb334772c1f60d4e149b88f Author: Armin Burgmeier Date: Mon Sep 15 21:07:12 2014 -0400 Use Gio::File instead of uris in operations and file-tasks TODO | 1 - code/application.cpp | 9 ++++---- code/commands/autosave-commands.cpp | 4 +++- code/commands/browser-context-commands.cpp | 8 +++---- code/commands/file-commands.cpp | 4 +++- code/commands/file-tasks/task-export-html.cpp | 2 +- code/commands/file-tasks/task-open-file.cpp | 21 +++++++++--------- code/commands/file-tasks/task-open-multiple.cpp | 12 ++++------- code/commands/file-tasks/task-open-multiple.hpp | 9 ++++---- code/commands/file-tasks/task-open.cpp | 2 +- code/commands/file-tasks/task-save-all.cpp | 4 +++- code/commands/file-tasks/task-save.cpp | 2 +- code/operations/operation-export-html.cpp | 18 ++++++---------- code/operations/operation-export-html.hpp | 5 ++--- code/operations/operation-open-multiple.cpp | 26 ++++++++++------------- code/operations/operation-open-multiple.hpp | 7 +++--- code/operations/operation-open.cpp | 7 +++--- code/operations/operation-open.hpp | 5 ++--- code/operations/operation-save.cpp | 12 +++-------- code/operations/operation-save.hpp | 6 +++--- code/operations/operations.cpp | 17 +++++++-------- code/operations/operations.hpp | 10 ++++----- code/window.cpp | 23 ++++++-------------- code/window.hpp | 3 +-- 24 files changed, 90 insertions(+), 127 deletions(-) commit 57d17856584c2968afd3ffedbecf1ba5641ea629 Author: Armin Burgmeier Date: Sun Sep 14 22:09:32 2014 -0400 Make Gobby use Gtk::Application This removes the dependency on libunique for single-process behaviour. More functionality provided by GtkApplication will be made use of in future commits. TODO | 5 +- code/Makefile.am | 5 +- code/application.cpp | 230 +++++++++++++++++++++++++++++++++ code/application.hpp | 55 ++++++++ code/main.cpp | 339 +++---------------------------------------------- code/window.cpp | 200 ++++------------------------- code/window.hpp | 52 +------- configure.ac | 29 +---- 8 files changed, 347 insertions(+), 568 deletions(-) commit 222e4377da23636ae91509688a92b11c13aa5b82 Author: Armin Burgmeier Date: Thu Sep 11 14:34:04 2014 -0400 Enable TCP keepalives (#11) This commit makes use of the new TCP keepalive functionality in libinfinity. The settings are stored in the preferences, however there is no user interface to change the keepalive settings. However, they can be changed in the Gobby configuration file. code/core/connectionmanager.cpp | 44 +++++++++++++++++++++++++++++++++++++++ code/core/connectionmanager.hpp | 1 + code/core/preferences.cpp | 29 ++++++++++++++++++++++++-- code/core/preferences.hpp | 15 +++++++++++-- code/core/selfhoster.cpp | 6 +++++- code/core/server.cpp | 25 ++++++++++++++++++++++ code/core/server.hpp | 4 ++++ 7 files changed, 119 insertions(+), 5 deletions(-) commit 5c0e4e4cd287897e079b2d45c30b264f38b9910c Author: Armin Burgmeier Date: Thu Sep 11 14:33:57 2014 -0400 Adapt to modified libinfinity API code/commands/auth-commands.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) commit 31e282ef9f69dfa0b7bf0ac4526c2c0bebc9d7b8 Author: Armin Burgmeier Date: Fri Sep 5 17:46:28 2014 -0400 Don't draw additional border around folder widgets Otherwise the chat entry widget looks very squeezed code/core/folder.cpp | 1 + 1 file changed, 1 insertion(+) commit 62dcfc8436cdf2b7c9195f3a61131ad1f3191d62 Author: Armin Burgmeier Date: Tue Sep 2 21:21:32 2014 -0400 Update requirements in README README.md | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) commit 0906fd3e0610f78d1d1bd189987bcdaf5ba48720 Author: Armin Burgmeier Date: Tue Sep 2 21:19:44 2014 -0400 Adapt to the API change in inf_text_gtk_buffer_set_fade This simplifies the code, since we do not need to determine the background color anymore before we can set the alpha value. code/core/textsessionview.cpp | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) commit 3ad6e1c7ddae4b9ed8dcc103807c1756c2130d10 Author: Armin Burgmeier Date: Sat Aug 30 21:37:47 2014 -0400 Adapt to libinfinity API change code/core/noteplugin.cpp | 2 ++ 1 file changed, 2 insertions(+) commit d6d06dab1a854c514f13f3249ec29db28ef921f1 Author: Philipp Kern Date: Sat Aug 30 08:52:47 2014 -0700 Revert "Travis CI: initialize root's login shell to get a proper PATH" This reverts commit bb4638e1bfba7485eb0fc43778ee21ef974f5dc7. .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 9715e2634591469c230d2eb02dca9b06e1e8cb2a Merge: 7f32e47 74cedda Author: Armin Burgmeier Date: Sat Aug 30 09:05:01 2014 -0400 Merge pull request #12 from tyll/executable Remove executable flag from main.cpp commit 74ceddacf323a618cc40bdf56a85d3410d8a0715 Author: Till Maas Date: Sat Aug 30 09:10:09 2014 +0200 Remove executable flag from main.cpp code/main.cpp | 0 1 file changed, 0 insertions(+), 0 deletions(-) commit 7f32e471ba0e9856b2c19905a304b3a92c61bbaf Author: Philipp Kern Date: Fri Aug 29 01:34:27 2014 +0200 Makefile.am: ship the new markdown formatted README Makefile.am | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit 56e21e8215c56e2ebec454505ce2ae8e4cf5439b Author: Philipp Kern Date: Fri Aug 29 01:17:41 2014 +0200 code/core/textsessionview.cpp: remove a double include code/core/textsessionview.cpp | 2 -- 1 file changed, 2 deletions(-) commit 5bbe5bbad1f7c869ea5aaaa9536455470d91c9d2 Author: Philipp Kern Date: Tue Aug 26 15:30:38 2014 -0700 Travis CI: set CC with full path .travis.yml | 2 ++ 1 file changed, 2 insertions(+) commit bb4638e1bfba7485eb0fc43778ee21ef974f5dc7 Author: Philipp Kern Date: Tue Aug 26 15:19:31 2014 -0700 Travis CI: initialize root's login shell to get a proper PATH This is based on https://github.com/travis-ci/travis-ci/issues/2607 which apparently broke clang availability as root. .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 34e94f9a461c5a2f6d9b57a5354b6f2f0ddcdcf3 Author: Philipp Kern Date: Tue Aug 26 15:11:14 2014 -0700 Travis CI: try to preserve envvars when installing libinfinity .travis.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit c4da59931bf7d739da3271ad39463657fdc90411 Author: Armin Burgmeier Date: Sun Aug 24 12:32:24 2014 -0400 Remove support for GTK+ 2.x TODO | 13 +- code/commands/help-commands.cpp | 6 - code/commands/view-commands.cpp | 3 +- code/core/browser.cpp | 3 +- code/core/browser.hpp | 2 +- code/core/closableframe.cpp | 3 +- code/core/folder.hpp | 3 +- code/core/iconmanager.cpp | 10 +- code/core/iconmanager.hpp | 12 +- code/core/statusbar.cpp | 23 +--- code/core/statusbar.hpp | 4 +- code/core/tablabel.cpp | 25 +--- code/core/textsessionview.cpp | 38 ++---- code/core/textsessionview.hpp | 14 +- code/core/texttablabel.cpp | 9 -- code/core/texttablabel.hpp | 5 - code/core/userlist.cpp | 10 +- code/dialogs/document-location-dialog.cpp | 7 +- code/dialogs/entry-dialog.cpp | 4 +- code/dialogs/find-dialog.cpp | 17 ++- code/dialogs/goto-dialog.cpp | 3 +- code/dialogs/initial-dialog.cpp | 19 ++- code/dialogs/open-location-dialog.cpp | 3 +- code/dialogs/open-location-dialog.hpp | 2 +- code/dialogs/preferences-dialog.cpp | 27 ++-- code/util/Makefile.am | 1 - code/util/closebutton.cpp | 5 - code/util/closebutton.hpp | 7 - code/util/gtk-compat.hpp | 203 ---------------------------- code/util/historyentry.cpp | 26 ++-- code/util/historyentry.hpp | 9 +- code/window.cpp | 3 +- configure.ac | 29 +--- 33 files changed, 105 insertions(+), 443 deletions(-) commit 36c7f71ae457e58f72cae6ef38080e612110cadc Author: Armin Burgmeier Date: Sat Aug 23 15:20:59 2014 -0400 Post-release bump to 0.6.0 README.md | 2 +- configure.ac | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) commit 58aaa15f12da6be896d89230bb8d21e9bd51e533 Author: Armin Burgmeier Date: Sat Aug 23 14:57:36 2014 -0400 Release Gobby 0.5.0 NEWS | 13 +++++++++++++ configure.ac | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) commit 04185b75a3780dc5188c5ed622536ba912237978 Author: Armin Burgmeier Date: Sat Aug 23 14:56:48 2014 -0400 Add the appdata file to the distribution Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit eed2e97f7a87677732f13acbdd3b0a6a5438d1c0 Author: Armin Burgmeier Date: Sat Aug 23 14:06:51 2014 -0400 Update translations for 0.5.0 release po/ca.po | 680 ++++++++++++++++++++++++++++-------------------------- po/de.po | 688 +++++++++++++++++++++++++++++-------------------------- po/el_GR.po | 687 ++++++++++++++++++++++++++++-------------------------- po/en_GB.po | 685 ++++++++++++++++++++++++++++-------------------------- po/fr.po | 686 ++++++++++++++++++++++++++++-------------------------- po/gobby05.pot | 635 +++++++++++++++++++++++++------------------------- po/ja.po | 685 ++++++++++++++++++++++++++++-------------------------- po/pt_BR.po | 640 ++++++++++++++++++++++++++------------------------- po/zh_TW.po | 679 ++++++++++++++++++++++++++++-------------------------- 9 files changed, 3124 insertions(+), 2941 deletions(-) commit 667627d48b515c63fd003b31744afda86d1575fd Author: Armin Burgmeier Date: Fri Aug 22 11:36:36 2014 -0400 Avoid unnecessary preferences update on GtkFileChooserButton initialization code/dialogs/preferences-dialog.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit c3a097eaf43b2db995ca345577de9214794ac5e3 Author: Armin Burgmeier Date: Fri Aug 22 11:36:27 2014 -0400 Leave some space between statusbar icon and text code/core/statusbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f600761fc97b3028476f2970012b73c817354393 Author: Armin Burgmeier Date: Fri Aug 22 11:34:52 2014 -0400 Don't show the same statusbar message more than once code/core/statusbar.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 399c9e27ebab04718da1220c7dc4eeb12d8c16db Author: Armin Burgmeier Date: Tue Aug 19 23:04:14 2014 -0400 Replace name resolver by the one in libinfinity This way we also support SRV records. code/core/browser.cpp | 48 ++++++- code/core/browser.hpp | 7 +- code/core/connectionmanager.cpp | 179 ++++++++++++++++++------- code/core/connectionmanager.hpp | 50 +++++-- code/operations/operation-subscribe-path.cpp | 154 +++++++++------------ code/operations/operation-subscribe-path.hpp | 19 ++- code/util/Makefile.am | 2 - code/util/resolv.cpp | 152 --------------------- code/util/resolv.hpp | 47 ------- 9 files changed, 288 insertions(+), 370 deletions(-) commit e03b694c82277f8afdafbadebb6c496d64575856 Author: Armin Burgmeier Date: Sun Aug 17 22:28:01 2014 -0400 Don't show "Create Account" option for local servers Local servers do not support creating an account anyway, and since the 0 account ID is used to check the permission, taking away the permission for all ACL sheets is not detected. code/commands/browser-context-commands.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit fc1ae99cb083f45cc8dbe1e0948558d085e2a476 Author: Armin Burgmeier Date: Wed Aug 13 22:02:39 2014 -0400 Adapt to recent InfAclAccount API changes in libinfinity code/commands/browser-context-commands.cpp | 11 +++++++---- code/core/userjoin.cpp | 4 +++- 2 files changed, 10 insertions(+), 5 deletions(-) commit 10afee1813bbebc03c8b5acba61dbba862d620a1 Author: Armin Burgmeier Date: Sun Aug 10 22:32:37 2014 -0400 Add a TODO item about using gsettings for preferences TODO | 1 + 1 file changed, 1 insertion(+) commit 31d38ac02d4ee4f727c1d5b86e594c1078a949c4 Author: Armin Burgmeier Date: Sat Aug 9 23:30:10 2014 -0400 Update some links in the help file help/C/gobby.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 662f59dad8bde6f091ebd239b89fd5fa0ec97792 Author: Armin Burgmeier Date: Thu Aug 7 22:46:46 2014 -0400 Small README.md updates README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit f578497e895b1005b09c4b7e5c301f4b45d15453 Author: Armin Burgmeier Date: Thu Aug 7 15:25:25 2014 -0400 Add support for local chat notes code/core/browser.cpp | 1 + code/core/noteplugin.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++- code/core/noteplugin.hpp | 1 + 3 files changed, 60 insertions(+), 1 deletion(-) commit 62109968f3b64e4a203d3ee650d7f4ccd2fe4de6 Author: Armin Burgmeier Date: Thu Aug 7 13:30:36 2014 -0400 Prevent session closure of local documents when opening preferences dialog The reason for the problem was that the "selection-changed" signal of GtkFileChooserButton is first emitted with the home directory and then again with the actual initial value. This caused the storage of the InfdDirectory to be reset temporarily. In principle, this can be fixed by using the "file-set" signal instead. However, a signal emission is missing when selecting an entry from the combo box instead of the file dialog. This was only fixed in GTK+ 3.10 or later. Therefore, a workaround is implemented which uses the "selection-changed" signal but ignores it until it was first emitted with the initial value. code/dialogs/preferences-dialog.cpp | 25 ++++---------------- code/dialogs/preferences-dialog.hpp | 43 ++++++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 24 deletions(-) commit 048a4f220aaaba34c23d7206fe94e48f67c1e55c Author: Armin Burgmeier Date: Thu Aug 7 10:48:02 2014 -0400 TextTabLabel: Make sure the modification character is always available Otherwise m_dot_char remains '\0' when on_style_updated() is not called since the widget is created, truncating the generated markup and provoking a warning message. code/core/texttablabel.cpp | 54 ++++++++++++++++++++++++-------------------- code/core/texttablabel.hpp | 1 + 2 files changed, 31 insertions(+), 24 deletions(-) commit 6c4ccbf50bf679b6bc1590bac67d3af0b1525f51 Author: Armin Burgmeier Date: Thu Aug 7 10:37:19 2014 -0400 Fix a crash when subscribing to a local document that has remote subscriptions This crash is strange since it happens in gtk_source_buffer_set_style_scheme() when the TextSessionView object is created. There is one subtle difference to the other two cases: * Subscribing to a remote document * Subscribing to a local document that has no remote subscriptions which is that the GtkSourceBuffer is newly created; while if there are remote subscriptions, then the buffer exists already and the style scheme is set on a buffer that is already in use for a while. Now, I don't see why this would produce a crash. I have moved the setting of the style scheme further up, before the buffer is connected to the GtkSourceView, and the problem seems to be gone. However, I suspect a deeper problem down in GTK+ somewhere... code/core/textsessionview.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 0322bb70fabbf4429aa774114d5a8bedd246e2b2 Author: Armin Burgmeier Date: Thu Aug 7 09:55:22 2014 -0400 Hide local chat when only the local user has joined code/commands/browser-commands.cpp | 305 +++++++++++++++++++++---- code/commands/browser-commands.hpp | 7 +- code/commands/user-join-commands.cpp | 35 ++- code/commands/user-join-commands.hpp | 3 +- code/core/foldermanager.cpp | 12 +- code/core/foldermanager.hpp | 8 +- code/operations/operation-new.cpp | 2 +- code/operations/operation-open.cpp | 2 +- code/operations/operation-subscribe-path.cpp | 5 +- code/window.cpp | 2 +- 10 files changed, 312 insertions(+), 69 deletions(-) commit 5f9ab02e2986f93a4b630d01708b7441dcdff3ad Author: Armin Burgmeier Date: Wed Aug 6 18:46:25 2014 -0400 Split the userjoin code into two classes The class in core/ is responsible for joining a user into a session and keeping track of the request, while the class in commands/ is responsible for triggering it at the right time and the user interface. code/commands/user-join-commands.cpp | 446 +++++++++++---------------------- code/commands/user-join-commands.hpp | 6 + code/core/Makefile.am | 2 + code/core/userjoin.cpp | 248 ++++++++++++++++++ code/core/userjoin.hpp | 110 ++++++++ 5 files changed, 511 insertions(+), 301 deletions(-) commit 7ef6c4783e399134c7576aa55e46cb5f21da359c Author: Armin Burgmeier Date: Wed Aug 6 14:03:02 2014 -0400 Add fullscreen option This allows to make the window fullscreen. By default all the clutter (additional bars and frames) are removed, but they can be activated again in the fullscreen mode. code/commands/view-commands.cpp | 108 ++++++++++++++++++++++++++++++++++++-- code/commands/view-commands.hpp | 12 +++-- code/core/header.cpp | 9 ++++ code/core/header.hpp | 1 + code/main.cpp | 45 +++++++++------- code/window.cpp | 2 +- 6 files changed, 149 insertions(+), 28 deletions(-) commit 2d7ec3af79cdbb7cbffa770c0f08054b9865b95f Author: Armin Burgmeier Date: Mon Aug 4 22:43:54 2014 -0400 Change the license of Gobby from GPL to ISC All contributors agreed to the license change: * Philipp Kern * Benjamin Herr * Gabríel Arthúr Pétursson AUTHORS | 24 +- COPYING | 352 +--------------------- README.md | 24 +- code/commands/auth-commands.cpp | 23 +- code/commands/auth-commands.hpp | 23 +- code/commands/autosave-commands.cpp | 23 +- code/commands/autosave-commands.hpp | 23 +- code/commands/browser-commands.cpp | 23 +- code/commands/browser-commands.hpp | 23 +- code/commands/browser-context-commands.cpp | 23 +- code/commands/browser-context-commands.hpp | 23 +- code/commands/edit-commands.cpp | 23 +- code/commands/edit-commands.hpp | 23 +- code/commands/file-commands.cpp | 25 +- code/commands/file-commands.hpp | 25 +- code/commands/file-tasks/task-export-html.cpp | 23 +- code/commands/file-tasks/task-export-html.hpp | 23 +- code/commands/file-tasks/task-new.cpp | 23 +- code/commands/file-tasks/task-new.hpp | 23 +- code/commands/file-tasks/task-open-file.cpp | 23 +- code/commands/file-tasks/task-open-file.hpp | 23 +- code/commands/file-tasks/task-open-location.cpp | 23 +- code/commands/file-tasks/task-open-location.hpp | 23 +- code/commands/file-tasks/task-open-multiple.cpp | 23 +- code/commands/file-tasks/task-open-multiple.hpp | 23 +- code/commands/file-tasks/task-open.cpp | 23 +- code/commands/file-tasks/task-open.hpp | 23 +- code/commands/file-tasks/task-save-all.cpp | 23 +- code/commands/file-tasks/task-save-all.hpp | 23 +- code/commands/file-tasks/task-save.cpp | 23 +- code/commands/file-tasks/task-save.hpp | 23 +- code/commands/folder-commands.cpp | 23 +- code/commands/folder-commands.hpp | 23 +- code/commands/help-commands.cpp | 57 ++-- code/commands/help-commands.hpp | 23 +- code/commands/subscription-commands.cpp | 23 +- code/commands/subscription-commands.hpp | 23 +- code/commands/synchronization-commands.cpp | 23 +- code/commands/synchronization-commands.hpp | 23 +- code/commands/user-join-commands.cpp | 23 +- code/commands/user-join-commands.hpp | 23 +- code/commands/view-commands.cpp | 23 +- code/commands/view-commands.hpp | 23 +- code/core/browser.cpp | 23 +- code/core/browser.hpp | 23 +- code/core/certificatemanager.cpp | 23 +- code/core/certificatemanager.hpp | 23 +- code/core/chatsessionview.cpp | 23 +- code/core/chatsessionview.hpp | 23 +- code/core/chattablabel.cpp | 23 +- code/core/chattablabel.hpp | 23 +- code/core/closableframe.cpp | 23 +- code/core/closableframe.hpp | 23 +- code/core/connectionmanager.cpp | 23 +- code/core/connectionmanager.hpp | 23 +- code/core/credentialsgenerator.cpp | 23 +- code/core/credentialsgenerator.hpp | 23 +- code/core/documentinfostorage.cpp | 23 +- code/core/documentinfostorage.hpp | 23 +- code/core/filechooser.cpp | 23 +- code/core/filechooser.hpp | 23 +- code/core/folder.cpp | 23 +- code/core/folder.hpp | 23 +- code/core/foldermanager.cpp | 23 +- code/core/foldermanager.hpp | 23 +- code/core/header.cpp | 25 +- code/core/header.hpp | 25 +- code/core/huebutton.cpp | 23 +- code/core/huebutton.hpp | 23 +- code/core/iconmanager.cpp | 23 +- code/core/iconmanager.hpp | 23 +- code/core/nodewatch.cpp | 23 +- code/core/nodewatch.hpp | 23 +- code/core/noteplugin.cpp | 23 +- code/core/noteplugin.hpp | 23 +- code/core/preferences.cpp | 23 +- code/core/preferences.hpp | 23 +- code/core/selfhoster.cpp | 23 +- code/core/selfhoster.hpp | 23 +- code/core/server.cpp | 23 +- code/core/server.hpp | 23 +- code/core/sessionuserview.cpp | 23 +- code/core/sessionuserview.hpp | 23 +- code/core/sessionview.cpp | 23 +- code/core/sessionview.hpp | 23 +- code/core/statusbar.cpp | 23 +- code/core/statusbar.hpp | 23 +- code/core/tablabel.cpp | 23 +- code/core/tablabel.hpp | 23 +- code/core/textsessionuserview.cpp | 23 +- code/core/textsessionuserview.hpp | 23 +- code/core/textsessionview.cpp | 23 +- code/core/textsessionview.hpp | 23 +- code/core/texttablabel.cpp | 23 +- code/core/texttablabel.hpp | 23 +- code/core/textundogrouping.cpp | 23 +- code/core/textundogrouping.hpp | 23 +- code/core/titlebar.cpp | 23 +- code/core/titlebar.hpp | 23 +- code/core/userlist.cpp | 23 +- code/core/userlist.hpp | 23 +- code/dialogs/connection-dialog.cpp | 23 +- code/dialogs/connection-dialog.hpp | 23 +- code/dialogs/document-location-dialog.cpp | 23 +- code/dialogs/document-location-dialog.hpp | 23 +- code/dialogs/entry-dialog.cpp | 23 +- code/dialogs/entry-dialog.hpp | 23 +- code/dialogs/find-dialog.cpp | 23 +- code/dialogs/find-dialog.hpp | 23 +- code/dialogs/goto-dialog.cpp | 23 +- code/dialogs/goto-dialog.hpp | 23 +- code/dialogs/initial-dialog.cpp | 23 +- code/dialogs/initial-dialog.hpp | 23 +- code/dialogs/open-location-dialog.cpp | 23 +- code/dialogs/open-location-dialog.hpp | 23 +- code/dialogs/password-dialog.cpp | 23 +- code/dialogs/password-dialog.hpp | 23 +- code/dialogs/preferences-dialog.cpp | 23 +- code/dialogs/preferences-dialog.hpp | 23 +- code/main.cpp | 23 +- code/operations/operation-delete.cpp | 23 +- code/operations/operation-delete.hpp | 23 +- code/operations/operation-export-html.cpp | 23 +- code/operations/operation-export-html.hpp | 23 +- code/operations/operation-new.cpp | 23 +- code/operations/operation-new.hpp | 23 +- code/operations/operation-open-multiple.cpp | 23 +- code/operations/operation-open-multiple.hpp | 23 +- code/operations/operation-open.cpp | 23 +- code/operations/operation-open.hpp | 23 +- code/operations/operation-save.cpp | 23 +- code/operations/operation-save.hpp | 23 +- code/operations/operation-subscribe-path.cpp | 23 +- code/operations/operation-subscribe-path.hpp | 23 +- code/operations/operations.cpp | 23 +- code/operations/operations.hpp | 23 +- code/util/asyncoperation.cpp | 23 +- code/util/asyncoperation.hpp | 23 +- code/util/closebutton.cpp | 23 +- code/util/closebutton.hpp | 23 +- code/util/color.cpp | 23 +- code/util/color.hpp | 23 +- code/util/config.cpp | 23 +- code/util/config.hpp | 23 +- code/util/defaultaccumulator.hpp | 23 +- code/util/file.cpp | 23 +- code/util/file.hpp | 23 +- code/util/groupframe.cpp | 23 +- code/util/groupframe.hpp | 23 +- code/util/gtk-compat.hpp | 23 +- code/util/historyentry.cpp | 23 +- code/util/historyentry.hpp | 23 +- code/util/i18n.cpp | 23 +- code/util/i18n.hpp | 23 +- code/util/resolv.cpp | 23 +- code/util/resolv.hpp | 23 +- code/util/serialize.cpp | 23 +- code/util/serialize.hpp | 23 +- code/util/uri.cpp | 23 +- code/util/uri.hpp | 23 +- code/window.cpp | 23 +- code/window.hpp | 23 +- help/C/gobby.xml | 9 +- help/gobby.omf.in | 2 +- 164 files changed, 1655 insertions(+), 2455 deletions(-) commit 23909f98e75491f206acc2368ecaf2311f5e8004 Author: Armin Burgmeier Date: Mon Aug 4 22:26:08 2014 -0400 Update README.md and remove outdated HACKING file HACKING | 10 ---------- README.md | 11 +++++------ 2 files changed, 5 insertions(+), 16 deletions(-) commit a32edc7f39eec4aab42132b1d999a289c2debb31 Author: Philipp Kern Date: Sun Jul 27 22:51:56 2014 +0200 Initial conversion of README to Markdown. Convert README to Markdown for better visibility on GitHub's repository viewer. Not all content has been updated to reflect reality yet (especially with relation to GitHub), but dependencies have been adjusted, pull requests are mentioned and Travis CI status is displayed. README | 136 --------------------------------------------------------- README.md | 114 +++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 2 +- 3 files changed, 115 insertions(+), 137 deletions(-) commit 9a23b8590ce8edd73bf55f6b9e6173c9893149df Author: Philipp Kern Date: Sun Jul 27 22:24:51 2014 +0200 Travis CI: gtk-doc-tools needs to be present even if unused .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit aec24f929a4ed00961fe6a96b8e6c3f9294321a7 Author: Philipp Kern Date: Sun Jul 27 22:22:58 2014 +0200 Add Travis CI configuration. libinfinity needs to be built from master first, as gobby's HEAD can require features that are not yet found in the Debian packages. This also means that gobby's build state depends on libinfinity's because there is no easy way to fetch the last green build of another build from within Travis CI. .travis.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit de7e1f0d9e7e8380217b924cd6148569e76147d7 Author: Armin Burgmeier Date: Mon Jul 21 17:26:40 2014 +0200 Add Ctrl++ and Ctrl+- shortcuts to increase or decrease font size code/commands/view-commands.cpp | 23 ++++++++++++++++++++++ code/commands/view-commands.hpp | 3 ++- code/core/header.cpp | 18 ++++++++++++++++++ code/core/header.hpp | 2 ++ code/dialogs/preferences-dialog.cpp | 27 +++----------------------- code/dialogs/preferences-dialog.hpp | 36 +++++++++++++++++++++++++++++++++++ 6 files changed, 84 insertions(+), 25 deletions(-) commit 294d4eca95a2dce711b42154e269dc9ae05fe3fb Author: Armin Burgmeier Date: Thu Jul 17 15:02:54 2014 +0200 Show text beside icons when GTK_TOOLBAR_STYLE_BOTH_HORIZ is chosen (github #1) code/core/header.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit 1cead9bcfd7549fbd089fb9371f1640cfe364171 Author: Armin Burgmeier Date: Thu Jul 17 14:41:28 2014 +0200 Store an additional newline at the end of the document when saving (github #3) Also, when opening a file, don't load the trailing newline if there is one. The behavior is now equivalent to gedit's. code/operations/operation-open.cpp | 13 +++++++++++++ code/operations/operation-save.cpp | 16 +++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) commit ac16fa465c2b2d28be8b86d9241497b26bd3fe1f Author: Armin Burgmeier Date: Wed Jul 16 16:39:26 2014 +0200 Pick up changed certificate credentials for existing connections The credentials change will become effective after disconnecting + reconnecting. code/core/connectionmanager.cpp | 75 ++++++++++++++++++++++++++++++++++++--- code/core/connectionmanager.hpp | 32 +++++++++++++++++ 2 files changed, 102 insertions(+), 5 deletions(-) commit 61290efd342c40dfa18030fa3a0264cb40600c29 Author: Armin Burgmeier Date: Mon Jul 14 18:44:54 2014 +0200 Make sure statusbar is initialized for all objects higher up the stack code/window.cpp | 6 +++--- code/window.hpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) commit c6d3cc7099bcb8d9af6371ae43aa2432e56f7e43 Author: Armin Burgmeier Date: Sun Jul 13 16:55:20 2014 +0200 Adapt to changed InfTextFilesystemFormat API code/core/noteplugin.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) commit d85ebeef6bc173c1a643589be8fcca0211231bbf Author: Armin Burgmeier Date: Sat Jul 12 21:13:14 2014 +0200 Update translation templates and po files po/POTFILES.in | 5 + po/ca.po | 2182 +++++++++++++++++++++++++++++++++++++----------------- po/de.po | 815 ++++++++++++++------ po/el_GR.po | 816 ++++++++++++++------ po/en_GB.po | 814 ++++++++++++++------ po/fr.po | 804 +++++++++++++------- po/gobby05.pot | 760 +++++++++++++------ po/ja.po | 814 ++++++++++++++------ po/pt_BR.po | 834 ++++++++++++++------- po/zh_TW.po | 904 +++++++++++++++------- 10 files changed, 6133 insertions(+), 2615 deletions(-) commit 52d473aa61538acaa40d68afc088da09dfaa1a5f Author: vitorlobo Date: Fri Jul 11 12:06:30 2014 -0300 pt_BR translated po/LINGUAS | 1 + po/pt_BR.po | 944 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 945 insertions(+) commit 8bdeea8323357034ca529de3278647674ac9e074 Author: Armin Burgmeier Date: Sat Jul 5 23:04:57 2014 +0200 Add account creation dialog This adds a UI for creating a new account at the server. This creates a client certificate which can be used to login to the new account. At the moment, this requires re-connection to the server. code/commands/browser-context-commands.cpp | 275 +++++++++++++++++++++++++-- code/commands/browser-context-commands.hpp | 27 ++- code/window.cpp | 5 +- 3 files changed, 291 insertions(+), 16 deletions(-) commit cb75957ffd8601abc94c42f329e78e1632996899 Author: Armin Burgmeier Date: Wed Jul 2 22:23:10 2014 +0200 Fix a crash when subscription fails in OperationSubscribePath code/operations/operation-subscribe-path.cpp | 6 +++--- code/operations/operation-subscribe-path.hpp | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) commit b14cc8db839782d5075d89bdbc6522dc5e25f32b Merge: d3b99d2 e51352c Author: Armin Burgmeier Date: Mon Jun 30 20:20:39 2014 +0200 Merge commit 'e51352ce1b080dcacc3945de64dc0b34c7e9ffef' Conflicts: code/core/browser.cpp commit e51352ce1b080dcacc3945de64dc0b34c7e9ffef Author: Gabríel Arthúr Pétursson Date: Mon Jun 23 13:06:27 2014 +0000 Ability to remove disconnected servers from the document browser code/commands/browser-context-commands.cpp | 30 ++++++++++++++++++++++++++++ code/commands/browser-context-commands.hpp | 1 + code/core/browser.cpp | 11 ++++++++++ code/core/browser.hpp | 1 + code/core/connectionmanager.cpp | 6 ++++++ code/core/connectionmanager.hpp | 2 ++ 6 files changed, 51 insertions(+) commit fe7387ad98f82984ab7eb6792fc25e3a3a1b964c Author: Gabríel Arthúr Pétursson Date: Mon Jun 23 05:29:30 2014 +0000 Split Browser::get_selected into _browser and _iter variants code/commands/browser-context-commands.cpp | 5 ++++- code/core/browser.cpp | 24 ++++++++++++++++++------ code/core/browser.hpp | 3 ++- 3 files changed, 24 insertions(+), 8 deletions(-) commit d3b99d2a3cf213b7c96ca4e3235af8ec54a3761c Author: Armin Burgmeier Date: Mon Jun 30 12:27:00 2014 +0200 Fix memory leak in Browser::get_selected() code/core/browser.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 0b1ce8e55e37502e15bcf2207c3d5e582400597d Author: Gabríel Arthúr Pétursson Date: Sun Jun 22 12:10:37 2014 +0000 Browser::get_selected incorrectly returns true on failure code/commands/browser-context-commands.cpp | 5 ----- code/core/browser.cpp | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) commit 3c48c84d06a2b8d95d7d90eb96891b5cdf681873 Author: Gabríel Arthúr Pétursson Date: Thu Jun 12 23:00:41 2014 +0000 Wrong property was loaded for the show_remote_cursors preference code/core/preferences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f2432321bcc2cf1881c9d2b5b4e8dc20edfaab01 Author: Gabríel Arthúr Pétursson Date: Thu Jun 12 19:31:02 2014 +0000 Smart home/end toggles between the start/end of the line and the first/last character code/core/textsessionview.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 72a8df0652232da57e0532f7202d81f53784fd34 Author: Armin Burgmeier Date: Thu May 15 18:05:39 2014 +0200 Remove unused variable code/commands/browser-context-commands.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 27416b66568a07b424dd3c958bc0c332b5dfa5d7 Author: Armin Burgmeier Date: Thu May 15 18:03:55 2014 +0200 Server: Always set security policy to no-tls if no credentials are given code/core/server.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ff6fb2a59dc5730adfcf5d9e1a0be32d16739417 Author: Armin Burgmeier Date: Sun May 4 13:54:19 2014 +0200 Adapt to API changes in inf-cert-util code/core/certificatemanager.cpp | 4 ++-- code/core/credentialsgenerator.cpp | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) commit c82bb97df895053c256f6c1f3171a7db0f1f2bea Author: Armin Burgmeier Date: Sun Apr 27 22:35:21 2014 +0200 Fix ancestor check in NodeWatch code/core/nodewatch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6be6c634efbae465f9c981a49edf1068a6fc19e7 Author: Jérôme Carretero Date: Tue Apr 22 09:35:34 2014 +0200 Fix include of a non-existing file libinfinity/client/infc-explore-request.h does no longer exist, since the InfRequestResult transition. code/core/documentinfostorage.cpp | 2 -- 1 file changed, 2 deletions(-) commit 7e89ed566c83011134cc5402f1936c379ade6d21 Author: Philipp Kern Date: Sun Apr 13 16:53:22 2014 +0200 Fix compilation with GtkSourceView 3.8. Patch by Andreas Henriksson ; Debian bug #718524 code/core/textsessionview.cpp | 2 ++ 1 file changed, 2 insertions(+) commit ebee76ac74427aaac0c044c1301524df8a2e2239 Author: Philipp Kern Date: Sun Apr 13 16:51:01 2014 +0200 Add missing include to fix compilation with recent toolchains. Patch by Daniel T Chen ; Debian bug #736347. code/dialogs/preferences-dialog.cpp | 1 + 1 file changed, 1 insertion(+) commit 5ca37221f9320cdc0a931b7a59d96c05cd7ac053 Author: Armin Burgmeier Date: Sun Mar 30 09:22:02 2014 +0200 Fix an assertion failure when a subscription fails code/commands/browser-commands.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) commit 0872bd045be70770ad773cbcb849555b316c6e4b Author: Armin Burgmeier Date: Fri Feb 28 16:35:15 2014 +0100 Adapt to simplification of InfRequest API code/commands/browser-commands.cpp | 12 ++++++-- code/commands/user-join-commands.cpp | 12 +++++--- code/core/documentinfostorage.cpp | 4 +-- code/core/documentinfostorage.hpp | 4 +-- code/core/nodewatch.cpp | 2 +- code/core/nodewatch.hpp | 4 +-- code/operations/operation-delete.cpp | 5 ++-- code/operations/operation-delete.hpp | 11 ++++---- code/operations/operation-new.cpp | 2 +- code/operations/operation-new.hpp | 11 ++++++-- code/operations/operation-open.cpp | 2 +- code/operations/operation-open.hpp | 11 ++++++-- code/operations/operation-subscribe-path.cpp | 39 +++++++++----------------- code/operations/operation-subscribe-path.hpp | 21 ++++++++------ 14 files changed, 74 insertions(+), 66 deletions(-) commit d0acc2931dfd3ff967d8bfcaaaffc0e0c057cf26 Author: Armin Burgmeier Date: Mon Feb 24 22:33:23 2014 +0100 Make sure to keep the same entry only once in the history entry This fixed bug #615. code/util/historyentry.cpp | 52 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 9 deletions(-) commit e85109184b847a6183370d52a56aa4e9540f55be Author: Armin Burgmeier Date: Fri Feb 14 19:28:44 2014 +0100 Fix a crash when a subscription fails code/commands/browser-commands.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit dcb78e601f080714afbf0bf4236a1cc890ce3ac7 Author: Armin Burgmeier Date: Sun Feb 9 17:45:03 2014 +0100 Fix background color query for textview In GTK+ 3, one needs to modify the style context before querying the color. There does not seem to be much documentation on this stuff around. I looked it up in the GtkTextView source code, hoping this remains a safe thigh to do in the future. code/core/textsessionview.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 5d5cd6a945a4b88933fd318734867bd925fccd2d Author: Armin Burgmeier Date: Sun Feb 9 17:07:46 2014 +0100 Fix the build and some style issues with GTK+ 3 code/core/textsessionview.cpp | 36 ++++++++++++++++++++++++++++++++++- code/core/textsessionview.hpp | 9 +++++++++ code/dialogs/initial-dialog.hpp | 2 ++ code/dialogs/preferences-dialog.hpp | 1 + code/util/closebutton.cpp | 4 ++++ code/util/closebutton.hpp | 6 ++++++ code/util/groupframe.cpp | 1 + code/util/gtk-compat.hpp | 11 +++++++++++ code/util/uri.cpp | 4 ++++ 9 files changed, 73 insertions(+), 1 deletion(-) commit 8dc3ef46a98f9a93ee60db99e50e41aa541f5073 Author: Armin Burgmeier Date: Mon Jan 27 09:15:43 2014 +0100 Fix a crash when creating a new directory code/operations/operation-new.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit 7b1bf412bb9d8a25f2097ddbfb94da921ffcedae Author: Armin Burgmeier Date: Mon Jan 27 09:06:18 2014 +0100 Adapt to libinfinity API change The InfBrowser::unsubscribe-session signal now has an additional parameter. code/core/foldermanager.cpp | 3 ++- code/core/foldermanager.hpp | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) commit fa1c8a3d46c074d725dd8d3978062203894a59d0 Author: Armin Burgmeier Date: Fri Jan 24 12:16:24 2014 +0100 Remove the SelfHosting item from the TODO list This has essentially been implemented. TODO | 2 -- 1 file changed, 2 deletions(-) commit 22190ab7983ac2bb78b44127c4b04ad1516bebc2 Author: Armin Burgmeier Date: Fri Jan 24 12:07:28 2014 +0100 Close session on server side when removed from document tree code/core/foldermanager.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) commit 00e67a8a8373dbf02711cf7d1d576212a0f12bb6 Author: Armin Burgmeier Date: Fri Jan 24 10:15:11 2014 +0100 Fix the default value for keep-local-documents code/core/preferences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ae70678344bd4382f1588ad39b0029a793e84c3a Author: Armin Burgmeier Date: Thu Jan 23 21:18:17 2014 +0100 Fix memory corruption when node requests finish immediately code/commands/user-join-commands.cpp | 5 +++-- code/operations/operation-new.cpp | 9 ++++++--- code/operations/operation-open.cpp | 5 +++-- 3 files changed, 12 insertions(+), 7 deletions(-) commit b444d681cc831ebb51ab785c70ce9643c93cc9f9 Author: Armin Burgmeier Date: Wed Jan 22 18:21:15 2014 +0100 Get communication manager from connection manager in OperationOpen Previously OperationOpen got it from a call to InfcBrowser, which does not work anymore now that the browser can also be a InfdDirectory. We could of course make a branching here, but this way it is a more generic solution. code/core/browser.hpp | 3 +++ code/operations/operation-open.cpp | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) commit 8de335b2a902d4b42bcacf748dfbcd03e24ccaa6 Author: Armin Burgmeier Date: Wed Jan 22 12:11:30 2014 +0100 Unregister signal handlers in TitleBar destructor This fixes a crash when Gobby is closed while a session is still open. The titlebar is destructed first, but does not unregister its signal handlers. It is therefore called again later in the destruction sequence when all sessions are closed even though it does not exist anymore. code/core/titlebar.cpp | 5 +++++ code/core/titlebar.hpp | 1 + 2 files changed, 6 insertions(+) commit f2acf902f70f2da0f7dd388dcdd51f0d73b7f0df Author: Armin Burgmeier Date: Wed Jan 22 10:44:46 2014 +0100 Correctly handle user leave for self-hosted sessions code/commands/user-join-commands.cpp | 46 ++++++++++++++++++++++++++++++++++ code/core/folder.cpp | 4 --- 2 files changed, 46 insertions(+), 4 deletions(-) commit f43a2bfe67b7b87050bb528472a17d08fe377615 Author: Armin Burgmeier Date: Tue Jan 21 22:45:25 2014 +0100 Add a document to the folder on click when it is already subscribed Before we asserted that this could never happen. Indeed for the client case this would never happen, but for the server case we can be subscribed to a document when another client is subscribed. code/commands/browser-commands.cpp | 3 +-- code/operations/operation-subscribe-path.cpp | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) commit 2a5a758c5e47138f6c226f41d245e2b04dd5b219 Author: Armin Burgmeier Date: Tue Jan 21 16:10:07 2014 +0100 Refactor the folder management Introduce a new class FolderManager which takes care of TextFolder and ChatFolder. The FolderManager can be used to add new documents into the appropriate folder, and it provides add/remove signals that give access to the session proxy. This allows UserJoinCommands to use the proxy only relying on core objects, and it allows creating documents only for those subscriptions that were requested by the local client. code/commands/autosave-commands.cpp | 10 +- code/commands/autosave-commands.hpp | 4 +- code/commands/browser-commands.cpp | 125 ++++++--- code/commands/browser-commands.hpp | 24 +- code/commands/edit-commands.cpp | 2 +- code/commands/edit-commands.hpp | 4 +- code/commands/file-commands.cpp | 41 +-- code/commands/file-commands.hpp | 11 +- code/commands/file-tasks/task-save-all.cpp | 2 +- code/commands/file-tasks/task-save.cpp | 2 +- code/commands/folder-commands.cpp | 7 +- code/commands/folder-commands.hpp | 5 +- code/commands/subscription-commands.cpp | 270 +++--------------- code/commands/subscription-commands.hpp | 92 +------ code/commands/synchronization-commands.cpp | 30 +- code/commands/synchronization-commands.hpp | 15 +- code/commands/user-join-commands.cpp | 56 ++-- code/commands/user-join-commands.hpp | 22 +- code/commands/view-commands.cpp | 4 +- code/commands/view-commands.hpp | 8 +- code/core/Makefile.am | 2 + code/core/folder.cpp | 24 +- code/core/folder.hpp | 8 +- code/core/foldermanager.cpp | 365 +++++++++++++++++++++++++ code/core/foldermanager.hpp | 131 +++++++++ code/core/sessionuserview.hpp | 3 +- code/core/statusbar.cpp | 2 +- code/core/statusbar.hpp | 4 +- code/core/titlebar.cpp | 2 +- code/core/titlebar.hpp | 4 +- code/dialogs/find-dialog.cpp | 2 +- code/dialogs/find-dialog.hpp | 4 +- code/dialogs/goto-dialog.cpp | 2 +- code/dialogs/goto-dialog.hpp | 4 +- code/operations/operation-new.cpp | 5 + code/operations/operation-open.cpp | 7 + code/operations/operation-save.cpp | 8 +- code/operations/operation-save.hpp | 3 +- code/operations/operation-subscribe-path.cpp | 27 +- code/operations/operation-subscribe-path.hpp | 8 +- code/operations/operations.cpp | 16 +- code/operations/operations.hpp | 18 +- code/window.cpp | 28 +- code/window.hpp | 6 +- 44 files changed, 858 insertions(+), 559 deletions(-) commit ef150a606b37334b12c0496c064b0322f7585df7 Author: Armin Burgmeier Date: Mon Jan 20 16:15:18 2014 +0100 Adapt to libinfinity API change the request parameter has been introudced to the "node-added", "node-removed" and "subscribe-session" signals. code/commands/browser-commands.cpp | 4 +--- code/commands/subscription-commands.cpp | 3 ++- code/commands/subscription-commands.hpp | 6 ++++-- code/core/documentinfostorage.cpp | 7 ++++--- code/core/documentinfostorage.hpp | 6 ++++-- code/core/nodewatch.cpp | 3 ++- code/core/nodewatch.hpp | 6 ++++-- 7 files changed, 21 insertions(+), 14 deletions(-) commit 79c166cafbb3504c1fac12bd5d9ce469f6955e02 Author: Armin Burgmeier Date: Sun Jan 19 20:58:08 2014 +0100 Assign hostname from g_get_host_name() for served sessions This fixes a crash when subscribing to a self-hosted document locally. code/commands/subscription-commands.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) commit b706f5e8c87d6a1744e896870cf603b68260dec8 Author: Armin Burgmeier Date: Sun Jan 19 19:05:19 2014 +0100 Register a InfdNotePlugin for the SelfHoster's InfdDirectory code/core/browser.cpp | 23 +++++--- code/core/browser.hpp | 2 +- code/core/noteplugin.cpp | 101 +++++++++++++++++++++++++++++------ code/core/noteplugin.hpp | 6 ++- code/operations/operation-new.cpp | 2 +- code/operations/operation-open.cpp | 2 +- 6 files changed, 108 insertions(+), 28 deletions(-) commit bc3f41c2f9552cba616cf22aa2b4cd4748aeae56 Author: Armin Burgmeier Date: Fri Jan 17 23:35:23 2014 +0100 Make document info storage work with InfdDirectory browsers code/core/documentinfostorage.cpp | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) commit 2c7f50747b7ede631a1a86e6b6dd51aa8bcaaeeb Author: Armin Burgmeier Date: Fri Jan 17 21:30:51 2014 +0100 Simplify NodeWatch, and make it work for InfdDirectory nodes Instead of watching InfcBrowser:connection and InfXmlConnection:status, simply watch InfBrowser:status code/core/nodewatch.cpp | 102 ++++++++-------------------------------------- code/core/nodewatch.hpp | 24 +++-------- 2 files changed, 23 insertions(+), 103 deletions(-) commit f492abfacbb10c354bb3362feef01952ac0fea57 Author: Armin Burgmeier Date: Fri Jan 17 12:47:31 2014 +0100 Adapt to the "set-browser" change in the libinfgtk API code/commands/auth-commands.cpp | 17 +++++++++----- code/commands/auth-commands.hpp | 14 +++++++----- code/commands/browser-commands.cpp | 24 ++++++++----------- code/commands/browser-commands.hpp | 7 +++--- code/commands/subscription-commands.cpp | 17 ++++++-------- code/commands/subscription-commands.hpp | 7 +++--- code/core/browser.cpp | 7 +++--- code/core/browser.hpp | 8 ++++--- code/core/documentinfostorage.cpp | 38 ++++++++++++------------------- code/core/documentinfostorage.hpp | 8 ++++--- 10 files changed, 73 insertions(+), 74 deletions(-) commit 5e4ee41047f00f20e2c8415f2eb0c861169de206 Author: Armin Burgmeier Date: Thu Jan 16 19:42:36 2014 +0100 Show the local directory in the browser widget code/core/browser.cpp | 7 +++++++ code/core/browser.hpp | 1 + code/core/selfhoster.hpp | 1 + code/window.cpp | 3 +++ 4 files changed, 12 insertions(+) commit 0b70f5bc6a1c7d2a36050475fd5e570d9443c948 Author: Armin Burgmeier Date: Thu Jan 16 19:42:21 2014 +0100 Browser: Set the note plugins only for InfcBrowser Eventually we need to also set plugins for our InfdDirectory. I plan to re-use the code from infinoted's note plugin for this, by moving it to libinftext. code/core/browser.cpp | 12 ++++++++---- code/core/browser.hpp | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) commit 90cf3039c400f45f79e14cb0ffc4dff28be6adc9 Author: Armin Burgmeier Date: Thu Jan 16 18:17:00 2014 +0100 Require "://" instead of ":" for URI scheme recognization Otherwise a string such as localhost:6524 would be parsed as host 6524 with scheme localhost, instead of scheme infinote and host localhost. code/util/uri.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2d5f4432b9d689756dbbdb567c8aba80a6fb4ccd Author: Armin Burgmeier Date: Thu Jan 16 18:16:48 2014 +0100 Fix a crash due to an uninitialized variable code/operations/operation-subscribe-path.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit c2ffef7e907d58640f58d1d81c0216f597ecff15 Author: Armin Burgmeier Date: Thu Jan 16 17:50:45 2014 +0100 Change a string in the preferences dialog code/dialogs/preferences-dialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f4193e88d2e3266f2e9b83b8becba1ddffac4654 Author: Armin Burgmeier Date: Thu Jan 16 17:17:26 2014 +0100 Check client passwords when specified in preferences code/commands/auth-commands.cpp | 52 ++++++++++- code/commands/auth-commands.hpp | 4 + code/core/connectionmanager.cpp | 3 +- code/core/selfhoster.cpp | 177 +++++++++++++++++++++++++++++--------- code/core/selfhoster.hpp | 18 +++- code/core/server.cpp | 36 +++++++- code/core/server.hpp | 8 +- code/window.cpp | 6 +- code/window.hpp | 13 ++- 9 files changed, 262 insertions(+), 55 deletions(-) commit ac62878a62b7174b383bdeb478920be8d52b514f Author: Armin Burgmeier Date: Wed Jan 15 10:12:35 2014 +0100 Add Gobby::SelfHoster This class manages a local InfdDirectory that it allows remote connections to access. code/core/Makefile.am | 2 + code/core/selfhoster.cpp | 199 +++++++++++++++++++++++++++++++++++++++++++++ code/core/selfhoster.hpp | 71 ++++++++++++++++ code/core/server.cpp | 4 +- code/core/statusbar.cpp | 3 +- code/window.cpp | 3 + code/window.hpp | 3 + 7 files changed, 282 insertions(+), 3 deletions(-) commit d0fe633ab26ec80458baab5cf36e15fee805e566 Author: Armin Burgmeier Date: Wed Jan 15 17:21:03 2014 +0100 Add the Gobby::ConnectionManager class This class manages the InfIo, InfCommunicationManager, InfXmppManager and InfDiscoveryAvahi objects. It allows to share these objects between the browser and the selfhoster without one of them depending on the other. code/commands/auth-commands.cpp | 8 +- code/commands/auth-commands.hpp | 2 + code/core/Makefile.am | 2 + code/core/browser.cpp | 156 +++------------------- code/core/browser.hpp | 31 +---- code/core/connectionmanager.cpp | 176 +++++++++++++++++++++++++ code/core/connectionmanager.hpp | 88 +++++++++++++ code/operations/operation-subscribe-path.hpp | 1 + code/window.cpp | 6 +- code/window.hpp | 2 +- 10 files changed, 304 insertions(+), 168 deletions(-) commit bd1fbfda0e5fa23bcf65449113f5a65b8f19c0a7 Author: Armin Burgmeier Date: Wed Jan 15 10:35:43 2014 +0100 Write Diffie-Hellman parameters to disk code/core/certificatemanager.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit aac5c52fc0041dd95ab2920b0d9b319fb8283eb1 Author: Armin Burgmeier Date: Wed Jan 15 10:12:10 2014 +0100 Add another modernization TODO item TODO | 1 + 1 file changed, 1 insertion(+) commit 2379bae61c303270f2dd84fbd27c7d8f12db6df1 Author: Armin Burgmeier Date: Wed Jan 15 10:11:28 2014 +0100 Add the Gobby::Server class This class will be used by the self-hosting functionality to run a TCP server which accepts incoming connections. code/core/Makefile.am | 2 + code/core/server.cpp | 248 ++++++++++++++++++++++++++++++++++++++++++++++++ code/core/server.hpp | 67 +++++++++++++ 3 files changed, 317 insertions(+) commit c8901681360e60a9182eb84da628e6163331294a Author: Armin Burgmeier Date: Wed Jan 15 10:09:17 2014 +0100 Add functionality to generate keys and certificates in the preferences dialog And also make it work in the welcome dialog. code/commands/edit-commands.cpp | 12 +- code/commands/edit-commands.hpp | 6 +- code/dialogs/initial-dialog.cpp | 153 +++++++++++++++++++++++-- code/dialogs/initial-dialog.hpp | 6 + code/dialogs/preferences-dialog.cpp | 207 +++++++++++++++++++++++++++++++--- code/dialogs/preferences-dialog.hpp | 126 ++++++++++++++++++++- code/window.cpp | 8 +- 7 files changed, 480 insertions(+), 38 deletions(-) commit 88de42e77275687a395b2e4ad488cb188a8df4d8 Author: Armin Burgmeier Date: Wed Jan 15 10:05:05 2014 +0100 Add functionality to set private keys and certificates programmatically code/core/certificatemanager.cpp | 273 +++++++++++++++++++++++++++++++------ code/core/certificatemanager.hpp | 23 +++- 2 files changed, 253 insertions(+), 43 deletions(-) commit e65a28f246cf58904db18f6e2332912671585511 Author: Armin Burgmeier Date: Wed Jan 15 10:03:29 2014 +0100 Replace keygen.cpp by credentialsgenerator.cpp The latter also has functions to generate Diffie-Hellman parameters and self-signed certificates. code/core/Makefile.am | 2 + code/core/credentialsgenerator.cpp | 208 +++++++++++++++++++++++++++++++++++ code/core/credentialsgenerator.hpp | 62 +++++++++++ code/util/Makefile.am | 2 - code/util/keygen.cpp | 90 --------------- code/util/keygen.hpp | 42 ------- 6 files changed, 272 insertions(+), 134 deletions(-) commit eafb37d4ad16fb8f1543c2e15bd66239ac9527be Author: Armin Burgmeier Date: Mon Jan 13 22:02:55 2014 +0100 Add DH params support to CertificateManager code/core/certificatemanager.cpp | 55 ++++++++++++++++++++++++++++++++++++-- code/core/certificatemanager.hpp | 6 +++++ 2 files changed, 59 insertions(+), 2 deletions(-) commit 220013dbd948cc0a30bcd04579537872d28c46fe Author: Armin Burgmeier Date: Sat Jan 4 17:47:49 2014 +0100 Add 2014 to copyright years AUTHORS | 4 ++-- README | 2 +- code/commands/auth-commands.cpp | 2 +- code/commands/auth-commands.hpp | 2 +- code/commands/autosave-commands.cpp | 2 +- code/commands/autosave-commands.hpp | 2 +- code/commands/browser-commands.cpp | 2 +- code/commands/browser-commands.hpp | 2 +- code/commands/browser-context-commands.cpp | 2 +- code/commands/browser-context-commands.hpp | 2 +- code/commands/edit-commands.cpp | 2 +- code/commands/edit-commands.hpp | 2 +- code/commands/file-tasks/task-export-html.cpp | 2 +- code/commands/file-tasks/task-export-html.hpp | 2 +- code/commands/file-tasks/task-new.cpp | 2 +- code/commands/file-tasks/task-new.hpp | 2 +- code/commands/file-tasks/task-open-file.cpp | 2 +- code/commands/file-tasks/task-open-file.hpp | 2 +- code/commands/file-tasks/task-open-location.cpp | 2 +- code/commands/file-tasks/task-open-location.hpp | 2 +- code/commands/file-tasks/task-open-multiple.cpp | 2 +- code/commands/file-tasks/task-open-multiple.hpp | 2 +- code/commands/file-tasks/task-open.cpp | 2 +- code/commands/file-tasks/task-open.hpp | 2 +- code/commands/file-tasks/task-save-all.cpp | 2 +- code/commands/file-tasks/task-save-all.hpp | 2 +- code/commands/file-tasks/task-save.cpp | 2 +- code/commands/file-tasks/task-save.hpp | 2 +- code/commands/folder-commands.cpp | 2 +- code/commands/folder-commands.hpp | 2 +- code/commands/help-commands.cpp | 4 ++-- code/commands/help-commands.hpp | 2 +- code/commands/subscription-commands.cpp | 2 +- code/commands/subscription-commands.hpp | 2 +- code/commands/synchronization-commands.cpp | 2 +- code/commands/synchronization-commands.hpp | 2 +- code/commands/user-join-commands.cpp | 2 +- code/commands/user-join-commands.hpp | 2 +- code/commands/view-commands.cpp | 2 +- code/commands/view-commands.hpp | 2 +- code/core/browser.cpp | 2 +- code/core/browser.hpp | 2 +- code/core/certificatemanager.cpp | 2 +- code/core/certificatemanager.hpp | 2 +- code/core/chatsessionview.cpp | 2 +- code/core/chatsessionview.hpp | 2 +- code/core/chattablabel.cpp | 2 +- code/core/chattablabel.hpp | 2 +- code/core/closableframe.cpp | 2 +- code/core/closableframe.hpp | 2 +- code/core/documentinfostorage.cpp | 2 +- code/core/documentinfostorage.hpp | 2 +- code/core/filechooser.cpp | 2 +- code/core/filechooser.hpp | 2 +- code/core/folder.cpp | 2 +- code/core/folder.hpp | 2 +- code/core/huebutton.cpp | 2 +- code/core/huebutton.hpp | 2 +- code/core/iconmanager.cpp | 2 +- code/core/iconmanager.hpp | 2 +- code/core/nodewatch.cpp | 2 +- code/core/nodewatch.hpp | 2 +- code/core/noteplugin.cpp | 2 +- code/core/noteplugin.hpp | 2 +- code/core/preferences.cpp | 2 +- code/core/preferences.hpp | 2 +- code/core/sessionuserview.cpp | 2 +- code/core/sessionuserview.hpp | 2 +- code/core/sessionview.cpp | 2 +- code/core/sessionview.hpp | 2 +- code/core/statusbar.cpp | 2 +- code/core/statusbar.hpp | 2 +- code/core/tablabel.cpp | 2 +- code/core/tablabel.hpp | 2 +- code/core/textsessionuserview.cpp | 2 +- code/core/textsessionuserview.hpp | 2 +- code/core/textsessionview.cpp | 2 +- code/core/textsessionview.hpp | 2 +- code/core/texttablabel.cpp | 2 +- code/core/texttablabel.hpp | 2 +- code/core/textundogrouping.cpp | 2 +- code/core/textundogrouping.hpp | 2 +- code/core/titlebar.cpp | 2 +- code/core/titlebar.hpp | 2 +- code/core/userlist.cpp | 2 +- code/core/userlist.hpp | 2 +- code/dialogs/connection-dialog.cpp | 2 +- code/dialogs/connection-dialog.hpp | 2 +- code/dialogs/document-location-dialog.cpp | 2 +- code/dialogs/document-location-dialog.hpp | 2 +- code/dialogs/entry-dialog.cpp | 2 +- code/dialogs/entry-dialog.hpp | 2 +- code/dialogs/find-dialog.cpp | 2 +- code/dialogs/find-dialog.hpp | 2 +- code/dialogs/goto-dialog.cpp | 2 +- code/dialogs/goto-dialog.hpp | 2 +- code/dialogs/initial-dialog.cpp | 2 +- code/dialogs/initial-dialog.hpp | 2 +- code/dialogs/open-location-dialog.cpp | 2 +- code/dialogs/open-location-dialog.hpp | 2 +- code/dialogs/password-dialog.cpp | 2 +- code/dialogs/password-dialog.hpp | 2 +- code/dialogs/preferences-dialog.cpp | 2 +- code/dialogs/preferences-dialog.hpp | 2 +- code/main.cpp | 2 +- code/operations/operation-delete.cpp | 2 +- code/operations/operation-delete.hpp | 2 +- code/operations/operation-export-html.cpp | 2 +- code/operations/operation-export-html.hpp | 2 +- code/operations/operation-new.cpp | 2 +- code/operations/operation-new.hpp | 2 +- code/operations/operation-open-multiple.cpp | 2 +- code/operations/operation-open-multiple.hpp | 2 +- code/operations/operation-open.cpp | 2 +- code/operations/operation-open.hpp | 2 +- code/operations/operation-save.cpp | 2 +- code/operations/operation-save.hpp | 2 +- code/operations/operation-subscribe-path.cpp | 2 +- code/operations/operation-subscribe-path.hpp | 2 +- code/operations/operations.cpp | 2 +- code/operations/operations.hpp | 2 +- code/util/asyncoperation.cpp | 2 +- code/util/asyncoperation.hpp | 2 +- code/util/closebutton.cpp | 2 +- code/util/closebutton.hpp | 2 +- code/util/color.cpp | 2 +- code/util/color.hpp | 2 +- code/util/config.cpp | 2 +- code/util/config.hpp | 2 +- code/util/defaultaccumulator.hpp | 2 +- code/util/file.cpp | 2 +- code/util/file.hpp | 2 +- code/util/groupframe.cpp | 2 +- code/util/groupframe.hpp | 2 +- code/util/gtk-compat.hpp | 2 +- code/util/historyentry.cpp | 2 +- code/util/historyentry.hpp | 2 +- code/util/i18n.cpp | 2 +- code/util/i18n.hpp | 2 +- code/util/keygen.cpp | 2 +- code/util/keygen.hpp | 2 +- code/util/resolv.cpp | 2 +- code/util/resolv.hpp | 2 +- code/util/serialize.cpp | 2 +- code/util/serialize.hpp | 2 +- code/util/uri.cpp | 2 +- code/util/uri.hpp | 2 +- code/window.cpp | 2 +- code/window.hpp | 2 +- 149 files changed, 151 insertions(+), 151 deletions(-) commit 767e12564e18fc4313f87c8b6acf65021e6d14af Author: Armin Burgmeier Date: Sat Dec 28 14:19:42 2013 +0100 Adapt to latest libinfinity API change code/commands/browser-commands.cpp | 52 +++-- code/commands/browser-commands.hpp | 19 ++ code/commands/browser-context-commands.cpp | 16 +- code/commands/file-tasks/task-open-multiple.cpp | 8 +- code/commands/file-tasks/task-open-multiple.hpp | 11 +- code/commands/user-join-commands.cpp | 32 +-- code/operations/operation-delete.cpp | 51 +++-- code/operations/operation-delete.hpp | 11 +- code/operations/operation-export-html.cpp | 37 ++-- code/operations/operation-export-html.hpp | 4 + code/operations/operation-new.cpp | 71 ++++--- code/operations/operation-new.hpp | 5 +- code/operations/operation-open-multiple.cpp | 83 +++++--- code/operations/operation-open-multiple.hpp | 10 +- code/operations/operation-open.cpp | 69 ++++--- code/operations/operation-open.hpp | 6 +- code/operations/operation-save.cpp | 29 +-- code/operations/operation-save.hpp | 3 + code/operations/operation-subscribe-path.cpp | 234 ++++++++++++++-------- code/operations/operation-subscribe-path.hpp | 9 +- code/operations/operations.cpp | 60 +++--- code/operations/operations.hpp | 13 +- 22 files changed, 506 insertions(+), 327 deletions(-) commit 469ed7546eaedc453d5c6eaa3c4b659cda849035 Author: Armin Burgmeier Date: Sun Nov 10 22:22:36 2013 +0100 Add appdata information (#611) Thanks to Till Maas who provided the file in the RedHat bugtracker: https://bugzilla.redhat.com/show_bug.cgi?id=1025924 Makefile.am | 3 +++ gobby-0.5.appdata.xml | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) commit d9d5c9533de1be8e8e3b580f9078178f90bd5faf Author: Armin Burgmeier Date: Mon Aug 12 11:27:17 2013 +0200 Fix a crash switching between disconnected documents This resulted from the switch to the InfBrowser interface in libinfinity. The InfBrowser::unsubscribe-signal is now also emitted on disconnection or when the corresponding browser node is removed and the session was subscribed. However, this does not mean that we were unsubscribed from the session itself. For the latter, we watch InfSession::notify::subscription-group, which we now use as the only means for detecting unsubscription. Previously, it could happen that InfBrowser::unsubscribe-session was emitted in which case we removed the signal handler for InfSession::notify::subscription-group, but did not reset the active user from the session view, and then switching to the document lead to a crash. code/commands/subscription-commands.cpp | 36 ++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 13 deletions(-) commit 2650acbe938378fe78446309226458b48dd97b6f Author: Armin Burgmeier Date: Mon Aug 12 10:56:20 2013 +0200 Add support for chat session inside the directory structure code/commands/subscription-commands.cpp | 30 ++++++++++++++++++++++---- code/core/browser.cpp | 8 ++++--- code/core/browser.hpp | 2 -- code/core/chattablabel.cpp | 20 +++++++++++++---- code/core/chattablabel.hpp | 4 +++- code/core/folder.cpp | 3 ++- code/core/noteplugin.cpp | 36 ++++++++++++++++++++++++++----- code/core/noteplugin.hpp | 1 + code/window.cpp | 4 +--- 9 files changed, 85 insertions(+), 23 deletions(-) commit fec95739eafb9ba21fa1aa42b8c095288d3ca60f Author: Armin Burgmeier Date: Sun Aug 11 15:13:03 2013 +0200 Adapt for libinfinity API changes code/commands/user-join-commands.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 77a2d63711f5966fab8bbf5caca98cf1b446ae21 Author: Armin Burgmeier Date: Tue Aug 6 12:03:03 2013 +0200 Handle gracefully the case when a document is not allowed to be edited code/commands/subscription-commands.cpp | 6 +- code/commands/subscription-commands.hpp | 3 +- code/commands/synchronization-commands.cpp | 4 +- code/commands/synchronization-commands.hpp | 4 +- code/commands/user-join-commands.cpp | 128 +++++++++++++++++--------- code/commands/user-join-commands.hpp | 10 +- code/core/nodewatch.cpp | 29 ++++-- code/core/nodewatch.hpp | 7 +- code/operations/operation-open-multiple.cpp | 2 +- code/operations/operation-open.cpp | 2 +- 10 files changed, 133 insertions(+), 62 deletions(-) commit b7aff1fafceb717fa5527c2b936e1c9f8e8792fb Author: Armin Burgmeier Date: Thu Aug 1 12:34:40 2013 +0200 Add some modernization items on the TODO list, for post-0.5 TODO | 5 +++++ 1 file changed, 5 insertions(+) commit 18ddc57c781bb85efc72131112c0ab79431e6650 Author: Armin Burgmeier Date: Thu Aug 1 12:34:21 2013 +0200 Add a function to asynchronously create a private key code/util/Makefile.am | 2 ++ code/util/keygen.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ code/util/keygen.hpp | 42 +++++++++++++++++++++++ 3 files changed, 134 insertions(+) commit 72a8c3550e956092c551c0ef4751e3cc8d72614b Author: Armin Burgmeier Date: Wed Jul 31 17:56:28 2013 +0200 Close context menu dialogs when the corresponding browser node disappears code/commands/browser-context-commands.cpp | 1 - code/core/nodewatch.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) commit e37d37d3096d879cdf32eee5edd03458ec0a4e58 Author: Armin Burgmeier Date: Wed Jul 31 08:13:26 2013 +0200 Do not expand the path explicitly in Browser::set_selected() This is already done by inf_gtk_browser_view_set_selected(), which is called by Browser::set_selected() to do the actual job. code/core/browser.cpp | 6 ------ 1 file changed, 6 deletions(-) commit 598ed2a7cfb44083c877b165b021c7c376a4321e Author: Armin Burgmeier Date: Wed Jul 31 08:12:42 2013 +0200 Add a context menu item to show the permissions dialog This allows to view and modify the ACL for a node, if corresponding permissions are granted. code/commands/browser-context-commands.cpp | 118 +++++++++++++++++++-------- code/commands/browser-context-commands.hpp | 14 ++-- 2 files changed, 88 insertions(+), 44 deletions(-) commit 2dd456346a84ced9ff94429eca920858fbb94aa4 Author: Armin Burgmeier Date: Wed Jul 31 08:09:48 2013 +0200 UserList: Make sure a user name is visible when the user is known code/core/userlist.cpp | 1 + 1 file changed, 1 insertion(+) commit 918a6ca7973c53e118ff0916043299207dc01abd Author: Armin Burgmeier Date: Fri Jul 26 16:17:23 2013 +0200 Add GroupFrame class, replacing Group in preferencesDialog code/dialogs/preferences-dialog.cpp | 24 ----------------- code/dialogs/preferences-dialog.hpp | 50 ++++++++++++++--------------------- code/util/Makefile.am | 2 ++ code/util/groupframe.cpp | 46 ++++++++++++++++++++++++++++++++ code/util/groupframe.hpp | 41 ++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+), 54 deletions(-) commit 09f044ad8d5d7c2461cfe6c209ba6f8f8910433a Author: Armin Burgmeier Date: Mon Jul 22 15:19:46 2013 +0200 Wait for connection to finish before finishing OperationSubscribePath This also simplifies the code a bit. code/operations/operation-subscribe-path.cpp | 30 ++++++++++---------------- 1 file changed, 11 insertions(+), 19 deletions(-) commit 8593d003e59a8d78ec91e7dd4812e6488f282b65 Author: Armin Burgmeier Date: Sun Jul 21 20:56:00 2013 +0200 Open infinote:// URLs given on the command line code/main.cpp | 1 - code/window.cpp | 29 +++++++++++++++++++++-------- code/window.hpp | 2 +- 3 files changed, 22 insertions(+), 10 deletions(-) commit 5a93cdcc39d59198816076acbcc4e2ef1d708320 Author: Armin Burgmeier Date: Sun Jul 21 17:21:40 2013 +0200 Use OperationSubscribePath for direct connection handling This simplifies the code in the Browser class a bit, and does exactly the same thing. Also, it enables a new feature which is to write the full path to a document on the remote server into the direct connection field, and Gobby then tries to subscribe to the document. code/commands/browser-commands.cpp | 13 +++- code/commands/browser-commands.hpp | 7 +- code/commands/file-commands.cpp | 4 +- code/core/browser.cpp | 90 ++++---------------------- code/core/browser.hpp | 33 ++-------- code/operations/operation-subscribe-path.cpp | 68 +++++++++++++++---- code/operations/operations.cpp | 19 +++++- code/window.cpp | 3 +- code/window.hpp | 2 +- 9 files changed, 110 insertions(+), 129 deletions(-) commit f4ad2067eb5bd1004c503e215ca6d4cfa9def870 Author: Armin Burgmeier Date: Sun Jul 21 16:52:22 2013 +0200 Add OperationSubscribePath code/core/browser.cpp | 30 +- code/operations/Makefile.am | 6 +- code/operations/operation-subscribe-path.cpp | 415 +++++++++++++++++++++++++ code/operations/operation-subscribe-path.hpp | 104 +++++++ code/operations/operations.cpp | 25 +- code/operations/operations.hpp | 18 +- code/util/uri.cpp | 35 +++ code/util/uri.hpp | 5 + code/window.cpp | 2 +- 9 files changed, 630 insertions(+), 10 deletions(-) commit 8a6feb58e958e3fc528cdc6c7889bfe97efa988e Author: Armin Burgmeier Date: Sun Jul 21 12:15:13 2013 +0200 Extend the Browser public API a bit, to be able to add a connection directly This would work in principle already by just calling inf_gtk_browser_store_add_connection(), but via the browser API it is made sure that the connection is also registered in the XMPP manager. code/core/browser.cpp | 344 ++++++++++++++++++++++-------------------------- code/core/browser.hpp | 6 +- code/util/Makefile.am | 6 +- code/util/uri.cpp | 83 ++++++++++++ code/util/uri.hpp | 33 +++++ 5 files changed, 280 insertions(+), 192 deletions(-) commit 972dcb8836281e3c3eff89a42dfc035c53ef45d4 Author: Armin Burgmeier Date: Thu Jul 18 11:02:53 2013 +0200 Show certificate or key load errors in preferences dialog code/commands/edit-commands.cpp | 8 +++--- code/commands/edit-commands.hpp | 4 ++- code/core/certificatemanager.hpp | 2 -- code/dialogs/preferences-dialog.cpp | 48 ++++++++++++++++++++++++++++++++--- code/dialogs/preferences-dialog.hpp | 15 +++++++++-- code/window.cpp | 2 +- 6 files changed, 67 insertions(+), 12 deletions(-) commit 1f7b98f5d8d45c612e80bcec19bec8961506b532 Author: Armin Burgmeier Date: Wed Jul 17 17:38:12 2013 +0200 Fix a memory leak in CertificateManager code/core/certificatemanager.cpp | 1 + 1 file changed, 1 insertion(+) commit d1ab9030c505fb0c6f6d094c133e450351915537 Author: Armin Burgmeier Date: Wed Jul 17 14:59:14 2013 +0200 Move Preferences and CertificateManager instantiation to main() code/main.cpp | 14 ++++++++++---- code/window.cpp | 17 ++++++++--------- code/window.hpp | 10 ++++++---- 3 files changed, 24 insertions(+), 17 deletions(-) commit 15fbe0cf08ae7ff3ab74aa8b562c2f97bbaccc93 Author: Armin Burgmeier Date: Wed Jul 17 14:14:45 2013 +0200 Add the CertificateManager class This class manages the certificate credentials for authentication with client side certificates and for a server certificate to show to clients in the upcoming selfhosting feature. It also manages the list of trusted CAs. code/core/Makefile.am | 2 + code/core/browser.cpp | 34 +++--- code/core/browser.hpp | 11 +- code/core/certificatemanager.cpp | 229 +++++++++++++++++++++++++++++++++++++ code/core/certificatemanager.hpp | 91 +++++++++++++++ code/window.cpp | 6 +- code/window.hpp | 1 + 7 files changed, 354 insertions(+), 20 deletions(-) commit d3b263b277c0116df21dfc55c7576a3b278b79f6 Author: Armin Burgmeier Date: Mon Apr 22 21:49:59 2013 +0200 Implement new security options in preferences dialog code/dialogs/preferences-dialog.cpp | 73 ++++++++++++++++++++++++++++++++++- code/dialogs/preferences-dialog.hpp | 14 +++++++ 2 files changed, 86 insertions(+), 1 deletion(-) commit 34a89fc29039f6c5fce513a7e980a067f2319c47 Author: Armin Burgmeier Date: Sun Apr 21 22:35:13 2013 +0200 Add options for self hosting in user pane of preferences dialog code/core/preferences.cpp | 5 + code/core/preferences.hpp | 1 + code/dialogs/initial-dialog.cpp | 6 +- code/dialogs/preferences-dialog.cpp | 184 +++++++++++++++++++++++++++------- code/dialogs/preferences-dialog.hpp | 24 ++++- 5 files changed, 176 insertions(+), 44 deletions(-) commit e342e741ba799bcd280ec6b5a327b4993d809f8f Author: Armin Burgmeier Date: Sat Apr 20 18:36:38 2013 +0200 Add self hosting options into initial dialog code/dialogs/initial-dialog.cpp | 267 +++++++++++++++++++++++++++++++++++--- code/dialogs/initial-dialog.hpp | 33 ++++- 2 files changed, 278 insertions(+), 22 deletions(-) commit 39ca86173eabc9d839ca5680a6c5cb7e981fd8b4 Author: Armin Burgmeier Date: Sat Apr 20 18:36:15 2013 +0200 Add new preferences for self hosting code/core/preferences.cpp | 32 +++++++++++++++++++++++++++----- code/core/preferences.hpp | 11 ++++++++++- 2 files changed, 37 insertions(+), 6 deletions(-) commit 1e832f3c62363f6d859c7d69471102153f00ce92 Author: Armin Burgmeier Date: Tue Jul 16 19:44:48 2013 +0200 Fix FSF address in COPYING file Bug report #609, http://gobby.0x539.de/trac/ticket/609 COPYING | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) commit 7419121794423039a720cbfd816f9bfc16c8955e Author: Armin Burgmeier Date: Tue Jul 16 19:34:07 2013 +0200 Fix compilation with recent versions of gcc Patch by till, http://gobby.0x539.de/trac/ticket/604 code/core/header.cpp | 1 + code/core/textsessionview.cpp | 3 +++ code/operations/operation-export-html.cpp | 1 + 3 files changed, 5 insertions(+) commit 3835bea8f8b3c9263af290dab0fc209e496c0cbf Author: Armin Burgmeier Date: Tue Jul 16 19:30:17 2013 +0200 Fix compilation with clang Patch by jhowarth, http://gobby.0x539.de/trac/ticket/600 code/util/config.hpp | 92 +++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 46 deletions(-) commit 4aa8065e96603c57c09de7967b3a5c58cc73bd0e Author: Armin Burgmeier Date: Tue Jul 16 17:39:32 2013 +0200 Add 2013 to the copyright years code/commands/auth-commands.cpp | 2 +- code/commands/auth-commands.hpp | 2 +- code/commands/autosave-commands.cpp | 2 +- code/commands/autosave-commands.hpp | 2 +- code/commands/browser-commands.cpp | 2 +- code/commands/browser-commands.hpp | 2 +- code/commands/browser-context-commands.cpp | 2 +- code/commands/browser-context-commands.hpp | 2 +- code/commands/edit-commands.cpp | 2 +- code/commands/edit-commands.hpp | 2 +- code/commands/file-tasks/task-export-html.cpp | 2 +- code/commands/file-tasks/task-export-html.hpp | 2 +- code/commands/file-tasks/task-new.cpp | 2 +- code/commands/file-tasks/task-new.hpp | 2 +- code/commands/file-tasks/task-open-file.cpp | 2 +- code/commands/file-tasks/task-open-file.hpp | 2 +- code/commands/file-tasks/task-open-location.cpp | 2 +- code/commands/file-tasks/task-open-location.hpp | 2 +- code/commands/file-tasks/task-open-multiple.cpp | 2 +- code/commands/file-tasks/task-open-multiple.hpp | 2 +- code/commands/file-tasks/task-open.cpp | 2 +- code/commands/file-tasks/task-open.hpp | 2 +- code/commands/file-tasks/task-save-all.cpp | 2 +- code/commands/file-tasks/task-save-all.hpp | 2 +- code/commands/file-tasks/task-save.cpp | 2 +- code/commands/file-tasks/task-save.hpp | 2 +- code/commands/folder-commands.cpp | 2 +- code/commands/folder-commands.hpp | 2 +- code/commands/help-commands.cpp | 4 ++-- code/commands/help-commands.hpp | 2 +- code/commands/subscription-commands.cpp | 2 +- code/commands/subscription-commands.hpp | 2 +- code/commands/synchronization-commands.cpp | 2 +- code/commands/synchronization-commands.hpp | 2 +- code/commands/user-join-commands.cpp | 2 +- code/commands/user-join-commands.hpp | 2 +- code/commands/view-commands.cpp | 2 +- code/commands/view-commands.hpp | 2 +- code/core/browser.cpp | 2 +- code/core/browser.hpp | 2 +- code/core/chatsessionview.cpp | 2 +- code/core/chatsessionview.hpp | 2 +- code/core/chattablabel.cpp | 2 +- code/core/chattablabel.hpp | 2 +- code/core/closableframe.cpp | 2 +- code/core/closableframe.hpp | 2 +- code/core/documentinfostorage.cpp | 2 +- code/core/documentinfostorage.hpp | 2 +- code/core/filechooser.cpp | 2 +- code/core/filechooser.hpp | 2 +- code/core/folder.cpp | 2 +- code/core/folder.hpp | 2 +- code/core/huebutton.cpp | 2 +- code/core/huebutton.hpp | 2 +- code/core/iconmanager.cpp | 2 +- code/core/iconmanager.hpp | 2 +- code/core/nodewatch.cpp | 2 +- code/core/nodewatch.hpp | 2 +- code/core/noteplugin.cpp | 2 +- code/core/noteplugin.hpp | 2 +- code/core/preferences.cpp | 2 +- code/core/preferences.hpp | 2 +- code/core/sessionuserview.cpp | 2 +- code/core/sessionuserview.hpp | 2 +- code/core/sessionview.cpp | 2 +- code/core/sessionview.hpp | 2 +- code/core/statusbar.cpp | 2 +- code/core/statusbar.hpp | 2 +- code/core/tablabel.cpp | 2 +- code/core/tablabel.hpp | 2 +- code/core/textsessionuserview.cpp | 2 +- code/core/textsessionuserview.hpp | 2 +- code/core/textsessionview.cpp | 2 +- code/core/textsessionview.hpp | 2 +- code/core/texttablabel.cpp | 2 +- code/core/texttablabel.hpp | 2 +- code/core/textundogrouping.cpp | 2 +- code/core/textundogrouping.hpp | 2 +- code/core/titlebar.cpp | 2 +- code/core/titlebar.hpp | 2 +- code/core/userlist.cpp | 2 +- code/core/userlist.hpp | 2 +- code/dialogs/connection-dialog.cpp | 2 +- code/dialogs/connection-dialog.hpp | 2 +- code/dialogs/document-location-dialog.cpp | 2 +- code/dialogs/document-location-dialog.hpp | 2 +- code/dialogs/entry-dialog.cpp | 2 +- code/dialogs/entry-dialog.hpp | 2 +- code/dialogs/find-dialog.cpp | 2 +- code/dialogs/find-dialog.hpp | 2 +- code/dialogs/goto-dialog.cpp | 2 +- code/dialogs/goto-dialog.hpp | 2 +- code/dialogs/initial-dialog.cpp | 2 +- code/dialogs/initial-dialog.hpp | 2 +- code/dialogs/open-location-dialog.cpp | 2 +- code/dialogs/open-location-dialog.hpp | 2 +- code/dialogs/password-dialog.cpp | 2 +- code/dialogs/password-dialog.hpp | 2 +- code/dialogs/preferences-dialog.cpp | 2 +- code/dialogs/preferences-dialog.hpp | 2 +- code/main.cpp | 2 +- code/operations/operation-delete.cpp | 2 +- code/operations/operation-delete.hpp | 2 +- code/operations/operation-export-html.cpp | 2 +- code/operations/operation-export-html.hpp | 2 +- code/operations/operation-new.cpp | 2 +- code/operations/operation-new.hpp | 2 +- code/operations/operation-open-multiple.cpp | 2 +- code/operations/operation-open-multiple.hpp | 2 +- code/operations/operation-open.cpp | 2 +- code/operations/operation-open.hpp | 2 +- code/operations/operation-save.cpp | 2 +- code/operations/operation-save.hpp | 2 +- code/operations/operations.cpp | 2 +- code/operations/operations.hpp | 2 +- code/util/asyncoperation.cpp | 2 +- code/util/asyncoperation.hpp | 2 +- code/util/closebutton.cpp | 2 +- code/util/closebutton.hpp | 2 +- code/util/color.cpp | 2 +- code/util/color.hpp | 2 +- code/util/config.cpp | 2 +- code/util/config.hpp | 2 +- code/util/defaultaccumulator.hpp | 2 +- code/util/file.cpp | 2 +- code/util/file.hpp | 2 +- code/util/gtk-compat.hpp | 2 +- code/util/historyentry.cpp | 2 +- code/util/historyentry.hpp | 2 +- code/util/i18n.cpp | 2 +- code/util/i18n.hpp | 2 +- code/util/resolv.cpp | 2 +- code/util/resolv.hpp | 2 +- code/util/serialize.cpp | 2 +- code/util/serialize.hpp | 2 +- code/window.cpp | 2 +- code/window.hpp | 2 +- 137 files changed, 138 insertions(+), 138 deletions(-) commit b8bcd51c7681b9397527cdacb6bd78f90d156083 Author: Armin Burgmeier Date: Tue Jul 16 16:33:07 2013 +0200 Adapt gobby to the API changes in libinfinity code/commands/browser-commands.cpp | 5 ++--- code/operations/operation-new.cpp | 3 ++- code/operations/operation-open.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) commit bfd20c847dcc38d7947d726ed2b70b0922852673 Author: Armin Burgmeier Date: Tue Jun 25 09:56:56 2013 +0200 Fix a possible crash when adding a user to the userlist A crash could happen if the cell data func was called before the user object was set in the row of the list store. A cleaner way to avoid this would be to atomically create the row and set the data, using gtk_list_store_insert_with_values(), but this API is not wrapped in gtkmm. Many thanks to Rainer Rehak for reporting this! (http://permalink.gmane.org/gmane.network.obby.user/411) code/core/userlist.cpp | 68 +++++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 24 deletions(-) commit 75c4c15a7aaf3e9fd3ed5faa16b75021d2242c53 Author: Armin Burgmeier Date: Thu Jun 27 08:57:16 2013 +0200 Fix a crash when gobby is invoked with invalid UTF-8 on the command line Conflicts: ChangeLog.pre-0.5 src/main.cpp code/main.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit 8c5050b964a9b06e00b13d0a52a0fc11736945f1 Author: Armin Burgmeier Date: Wed May 1 20:41:10 2013 +0200 Add AsyncOperation class, use it for hostname resolution code/core/browser.cpp | 13 +++-- code/core/browser.hpp | 20 ++++--- code/util/Makefile.am | 2 + code/util/asyncoperation.cpp | 104 +++++++++++++++++++++++++++++++++ code/util/asyncoperation.hpp | 68 ++++++++++++++++++++++ code/util/resolv.cpp | 128 +++++++++++++++++++---------------------- code/util/resolv.hpp | 18 +++--- 7 files changed, 260 insertions(+), 93 deletions(-) commit fc73c71249a2364454ff28537b2f238bb29cc3da Author: Armin Burgmeier Date: Sun Apr 14 12:21:37 2013 +0200 Use InfBrowser instead of InfcBrowser; adapt to libinfinity API changes code/commands/browser-commands.cpp | 175 +++++++++------ code/commands/browser-commands.hpp | 17 +- code/commands/browser-context-commands.cpp | 257 +++++++++++----------- code/commands/browser-context-commands.hpp | 16 +- code/commands/file-tasks/task-new.cpp | 4 +- code/commands/file-tasks/task-open-multiple.cpp | 4 +- code/commands/file-tasks/task-open.cpp | 4 +- code/commands/subscription-commands.cpp | 133 ++++++----- code/commands/subscription-commands.hpp | 51 ++--- code/commands/synchronization-commands.cpp | 4 +- code/commands/synchronization-commands.hpp | 4 +- code/commands/user-join-commands.cpp | 109 ++++----- code/commands/user-join-commands.hpp | 6 +- code/core/browser.cpp | 44 ++-- code/core/browser.hpp | 6 +- code/core/documentinfostorage.cpp | 46 ++-- code/core/documentinfostorage.hpp | 37 ++-- code/core/nodewatch.cpp | 34 +-- code/core/nodewatch.hpp | 20 +- code/dialogs/document-location-dialog.cpp | 19 +- code/dialogs/document-location-dialog.hpp | 2 +- code/operations/operation-delete.cpp | 38 ++-- code/operations/operation-delete.hpp | 25 +-- code/operations/operation-new.cpp | 49 +++-- code/operations/operation-new.hpp | 27 +-- code/operations/operation-open-multiple.cpp | 4 +- code/operations/operation-open-multiple.hpp | 4 +- code/operations/operation-open.cpp | 60 ++--- code/operations/operation-open.hpp | 27 +-- code/operations/operations.cpp | 20 +- code/operations/operations.hpp | 20 +- 31 files changed, 643 insertions(+), 623 deletions(-) commit c07e248aeffc3f1ccea96a9ae6bc401f779d29c8 Author: Armin Burgmeier Date: Tue May 28 21:23:51 2013 +0200 Add a slider to change the intesity of user colors code/core/preferences.cpp | 2 ++ code/core/preferences.hpp | 1 + code/core/textsessionview.cpp | 18 ++++++++++++++++++ code/core/textsessionview.hpp | 1 + code/dialogs/preferences-dialog.cpp | 35 +++++++++++++++++++++++++++++++++++ code/dialogs/preferences-dialog.hpp | 5 +++++ 6 files changed, 62 insertions(+) commit 46b4c2c22a889734a6d9cd545c7fcb36f544fd1e Author: Armin Burgmeier Date: Mon Apr 22 16:55:16 2013 +0200 Auto-generate the ChangeLog from git ChangeLog => ChangeLog.manual | 0 Makefile.am | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+) 2012-12-04 Philipp Kern * po/LINGUAS: * po/ca.po: Add Catalan translation, thanks to Jordi Mallach. 2012-04-30 Philipp Kern * gobby-0.5.1: Fix a grammar mistake. 2012-04-29 Armin Burgmeier * code/commands/autosave-commands.cpp: * code/commands/folder-commands.cpp: * code/commands/user-join-commands.cpp: * code/core/filechooser.cpp: * code/core/folder.cpp: * code/core/header.cpp: * code/core/preferences.cpp: * code/core/statusbar.cpp: * code/core/textsessionview.cpp: * code/dialogs/initial-dialog.cpp: * code/dialogs/preferences-dialog.cpp: * code/operations/operation-open.cpp: * code/operations/operation-open.hpp: * code/operations/operation-save.hpp: Add some missing glibmm includes that are no longer pulled in by gtkmm since recent gtkmm3 versions. 2012-03-18 Philipp Kern * code/util/gtk-compat.hpp: Fix the call of Gtk3's gtk-widget-render-icon-pixbuf, which is allowed to return NULL if the stock icon does not exist. Guard it with MISSING_IMAGE. 2012-03-18 Philipp Kern * configure.ac: Support the new libinfinity library names built against Gtk3. 2011-10-25 Philipp Kern * configure.ac: drop AM_MAINTAINER_MODE 2011-08-07 Philipp Kern * code/core/browser.cpp: * code/core/browser.hpp: * code/util/historyentry.cpp: * code/util/historyentry.hpp: Make direct connection host name entry field accessible. (#570) 2011-07-30 Philipp Kern * code/core/documentinfostorage.cpp: * code/core/folder.cpp: * code/util/config.cpp: * code/util/file.cpp: create directories with mode 0700 (Debian bug #636015) 2011-04-03 Philipp Kern * *.cpp, *.hpp: adjusted the address of the Free Software Foundation to match the current one 2011-03-27 Armin Burgmeier * configure.ac: Post-release bump to 0.4.95, require libinfinity-0.6. * README: Update dependencies list. 2011-03-27 Armin Burgmeier * === Released 0.4.94 === * README: * NEWS: Update for release. 2011-03-27 Armin Burgmeier * configure.ac: Use unique-3.0 when compiling against GTK+ 3.0. 2011-01-30 Armin Burgmeier * code/commands/subscription-commands.cpp (on_notify_connection): Don't show the info text if session's state is not RUNNING. In that case the connection was unset in SYNCHRONIZING state in which case synchronization-commands will set a more specific error message. 2011-01-30 Armin Burgmeier * code/core/folder.cpp (remove_document): Don't call inf_session_close() if the session is already closed. This can happen if the session synchronization fails. 2011-01-29 Armin Burgmeier * all source files: Add 2011 to copyright years. 2011-01-29 Armin Burgmeier * code/core/textsessionview.cpp (get_cursor_position): Fix a compiler warning. 2011-01-29 Armin Burgmeier * code/core/textsessionuserview.hpp: * code/core/textsessionuserview.cpp: * code/core/Makefile.am: Add the InfTextSessionUserView class which handles scrolling to a remote user's cursor when double-clicking it in the user list. * code/core/userlist.hpp: * code/core/userlist.cpp: Add the user_activated signal. * code/core/folder.cpp: Create a TextSessionUserView for text sessions. 2011-01-29 Armin Burgmeier * code/core/sessionuserview.hpp: Fix the include guard. 2011-01-29 Armin Burgmeier * code/util/gtk-compat.hpp: Add a wrapper for Gtk::IconSet which is now used by a RefPtr in gtkmm 3. * code/core/iconmanager.hpp: * code/core/iconmanager.cpp: Adapt for that. * code/core/textsessionview.hpp: * code/operations/operations.hpp: * code/operations/operation-export-html.cpp: Rearrange some include directives to avoid including gtkmm headers after Xlib headers, which causes trouble because of common Xlib #defines such as None, Window or Status. 2011-01-24 Armin Burgmeier * code/util/gtk-compat.cpp: Fix a crash when connecting to a server with GTK+ 2. 2011-01-23 Armin Burgmeier * code/util/gtk-compat.hpp: * code/util/historyentry.hpp: * code/util/historyentry.cpp: * code/util/Makefile.am: * code/core/browser.cpp: * code/core/closableframe.cpp: * code/core/folder.hpp: * code/core/folder.cpp: * code/core/preferences.cpp: * code/core/sessionuserview.cpp: * code/core/statusbar.cpp: * code/core/tablabel.cpp: * code/core/texttablabel.hpp: * code/core/texttablabel.cpp: * code/core/userlist.cpp: * code/dialogs/document-location-dialog.cpp: * code/dialogs/entry-dialog.cpp: * code/dialogs/find-dialog.cpp: * code/dialogs/goto-dialog.cpp: * code/dialogs/initial-dialog.cpp: * code/dialogs/open-location-dialog.cpp: * code/dialogs/preferences-dialog.cpp: * code/operations/operation-export-html.cpp: * code/operations/operation-save.cpp: * code/commands/browser-context-commands.cpp: * code/commands/edit-commands.cpp: * code/commands/help-commands.cpp: * code/commands/user-join-commands.cpp: * code/commands/view-commands.cpp: * code/window.cpp: * code/main.cpp: * configure.ac: Add a --with-gtk3 switch to Gobby and adapt the code so that it compiles with gtkmm-3. If GTK 3 is enabled then the --with-unique switch is ignored. Eventually we need to port that code to GtkApplication. 2010-12-25 Armin Burgmeier * code/core/browser.hpp: * code/core/browser.cpp: * code/commands/auth-commands.hpp: * code/commands/auth-commands.cpp: Adapt to latest API changes in libinfinity, show password dialog asynchronously. 2010-09-21 Armin Burgmeier * code/commands/browser-context-commands.hpp: * code/commands/browser-context-commands.cpp: Add a "Disconnect from Server" option to the context menu (#542). 2010-09-21 Armin Burgmeier * code/core/preferences.hpp: * code/core/preferences.cpp: Add preferences options for showing remote cursors, selections, current lines and cursor positions in the scrollbar. * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Apply the new settings on the underlying objects. * code/dialogs/preferences-dialog.hpp: * code/dialogs/preferences-dialog.cpp: Add the new options to the preferences dialog. 2010-06-04 Armin Burgmeier * code/core/texttablabel.hpp: * code/core/texttablabel.cpp: Adapt for a recent API change in InfTextBuffer. 2010-03-02 Armin Burgmeier * gobby-0.5.desktop.in: Added GenericName and X-GNOME-FullName fields, changed Name to be just Gobby. Bug #528. 2010-02-25 Armin Burgmeier * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Show remote users' position in scrollbar using InfTextGtkViewport. 2010-02-14 Benjamin Herr * code/dialogs/password-dialog.cpp: * code/operations/operation-delete.cpp: * code/operations/operation-new.cpp: * code/operations/operation-open.cpp: * code/operations/operation-save.cpp: Added quotation marks in messages including file paths or document names. * code/operations/operation-export-html.cpp: Quotations marks as above, also moved a comment so it shows up in .po files. * code/commands/help-commands.cpp: Updated FSF address in GPL, added Michael Frey to translation credits. 2010-02-13 Armin Burgmeier * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Add a InfTextGtkView, to show remote cursors. 2010-02-12 Armin Burgmeier * all source files: Added 2010 to copyright years. 2010-02-09 Benjamin Herr * code/commands/auth-commands.hpp: * code/commands/auth-commands.cpp: Handle _TRY_AGAIN errors, do the whole retrying thing properly. 2010-01-31 Benjamin Herr , Armin Burgmeier * code/commands/auth-commands.cpp: Adapt to the removal of the user-authenticated signal, instead query detailed SASL error using inf_xmpp_connection_get_sasl_error(). 2009-01-27 Benjamin Herr * code/commands/auth-commands.cpp: Display errors from the InfPostAuthenticationError domain properly instead of a generic "unknown error". 2009-12-23 Armin Burgmeier * code/core/folder.hpp: * code/core/folder.cpp: Added get_document(). * code/commands/file-tasks/task-save-all.cpp (run): Use it, instead of (wrongly) iterating the folder's documents by itself, fixing "Save All". Bug #519. 2009-12-19 Armin Burgmeier * configure.ac: Post-release bump to 0.4.94, require libinfinity-0.5. * README: Update dependencies list. 2009-12-19 Armin Burgmeier * === Released 0.4.93 === * README: * NEWS: Update for release. 2009-12-19 Armin Burgmeier * code/core/browser.cpp (compare_func): Don't use result when it is uninitialized. 2009-12-19 Armin Burgmeier * configure.ac: * Makefile.am: Don't require gnome-doc-utils do be available, build without documentation if they are not, such as on Windows. 2009-12-19 Armin Burgmeier * code/dialogs/preferences-dialog.cpp: Don't add GTK_SOURCE_DRAW_SPACES_NBSP when showing flags since this does not exist in GtkSourceView 2.4.0 yet (which we require). We may it add later when we bump the GtkSourceView dependency. 2009-12-19 Armin Burgmeier * code/dialogs/password-dialog.hpp: * code/dialogs/connection-dialog.hpp: Include , to fix the build with gtkmm 2.12. 2009-12-19 Armin Burgmeier * code/core/browser.cpp: Sort top-level items by name. 2009-12-18 Armin Burgmeier * help/C/gobby.xml: Mention Shift+Ctrl+C shortcut for color reset. 2009-12-18 Armin Burgmeier * code/core/header.hpp: * code/core/header.cpp: Added a reset user color item to the view menu. * code/commands/view-commands.hpp: * code/commands/view-commands.cpp: Added corresponding functionality, using inf_text_gtk_buffer_show_user_colors(). Bug #211. 2009-12-16 Armin Burgmeier * Makefile.am: Added gobby-0.5.desktop.in to EXTRA_DIST. * help/C/gobby.xml: Added dummy items for referenced sections, so that the XML validates. This fixes make distcheck. 2009-12-16 Armin Burgmeier * Makefile.am: Don't install the .desktop file on Windows. 2009-12-15 Armin Burgmeier * code/dialogs/password-dialog.cpp: Fix spacings. 2009-12-15 Benjamin Herr * code/commands/file-commands.hpp: * code/commands/file-commands.cpp: * code/core/header.hpp: * code/core/header.cpp: * code/dialogs/Makefile.am: Added a File menu action to connect to a server, equivalent to the existing Direct Connection entry. 2009-12-15 Benjamin Herr * code/commands/Makefile.am: * code/commands/auth-commands.hpp: * code/commands/auth-commands.cpp: * code/core/browser.hpp: * code/core/browser.cpp: * code/dialogs/Makefile.am: * code/dialogs/password-dialog.hpp: * code/dialogs/password-dialog.cpp: * code/window.hpp: * code/window.cpp: Added support for SASL PLAIN authentication, prompting the user for a password upon connection. 2009-12-15 Benjamin Herr * configure.ac: Enable optional AM_SILENT_RULES. 2009-12-14 Armin Burgmeier * README: Update IRC channel, updated dependencies. 2009-12-14 Armin Burgmeier * code/commands/browser-context-commands.cpp (on_populate_popup): Don't crash when right-clicking on a browser item whose connection is currently being established. 2009-12-14 Armin Burgmeier * code/commands/browser-commands.cpp (on_notify_status): Close network connection when server does not send initial welcome message. 2009-12-10 Benjamin Herr * code/commands/browser-context-commands.cpp: Do not try to create context menu popup for directories that are not in working order. Fixes a crash when rightclicking disconnected browser entries. 2009-12-10 Benjamin Herr * code/core/browser.cpp: Use new inf_tcp_connection_new() function instead of manually creating a GObject. 2009-12-07 Armin Burgmeier * code/commands/browser-commands.hpp: * code/commands/browser-commands.cpp: Simplified the code a bit using the new InfcBrowser "status" property. 2009-12-05 Armin Burgmeier * code/core/textundogrouping.hpp: * code/core/textundogrouping.cpp: * code/core/Makefile.am: Added a thin wrapper around InfTextUndoGrouping which also encloses GtkTextBuffer's user actions into an undo group. * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Instantiate an undo group when an active user is set. * code/commands/edit-commands.cpp: Undo multiple requests according to the document's undo grouping. 2009-12-03 Gabríel A. Pétursson * code/commands/help-commands.cpp: Added translator credits. 2009-12-03 Gabríel A. Pétursson * code/dialogs/find-dialog.cpp: Fixed a spelling error. 2009-12-02 Gabríel A. Pétursson * code/window.cpp: * code/core/statusbar.hpp: * code/core/statusbar.cpp: Do not show the statusbar's grip handle while the window is maximized. 2009-12-02 Armin Burgmeier * code/commands/edit-commands.cpp: Adapt to another libinfinity API change: inf_adopted_session_undo() and inf_adopted_session_redo() have a new guint parameter. 2009-12-01 Armin Burgmeier * code/core/chattablabel.hpp: * code/core/chattablabel.cpp: * code/core/Makefile.am: Added a tab label for the chat tabs. * code/core/folder.cpp: Make use of it for new chat sessions. 2009-12-01 Armin Burgmeier * code/core/tablabel.hpp: * code/core/tablabel.cpp: Removed all text-specific functionality from TabLabel. * code/core/texttablabel.hpp: * code/core/texttablabel.cpp: * code/core/Makefile.am: Readded it to TextTagTabel which derives from TabLabel. * code/core/folder.cpp: Create a TextTabLabel for text documents. 2009-12-01 Gabríel A. Pétursson * code/core/statusbar.cpp: Do not display documents' status on the status bar when there are no documents open. 2009-12-01 Gabríel A. Pétursson * code/core/statusbar.hpp: * code/core/statusbar.cpp: Display the overwrite status on the status bar. 2009-11-30 Armin Burgmeier * code/core/noteplugin.cpp: * code/operations/operation-open.cpp: Adapt to recent API change in libinfinity: inf_text_session_new() and InfcNotePlugin's session_new() now take a InfSessionStatus parameter. 2009-11-30 Armin Burgmeier * code/commands/folder-commands.cpp (constructor): Fixed a comparison of signed vs. unsigned compiler warning. 2009-11-30 Armin Burgmeier * code/commands/subscription-commands.cpp (on_notify_connection): Also reset the active user for chat sessions. This prevents a crash when changing to a chat session tab which belongs to a closed chat session. 2009-11-21 Armin Burgmeier * code/core/sessionview.hpp: * code/core/sessionview.cpp: * code/core/chatsessionview.hpp: * code/core/chatsessionview.cpp: * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Moved get_active_user and the active-user-changed signal to the base class. * code/commands/folder-commands.hpp: * code/commands/folder-commands.cpp: Make this work with chat sessions. * code/dialogs/find-dialog.hpp: * code/dialogs/find-dialog.cpp: * code/commands/edit-commands.hpp: * code/commands/edit-commands.cpp: Adapt for changed active-user-changed signal signature. * code/window.hpp: * code/window.cpp: Renamed commands member variables to have _commands as suffix, not as prefix, and added a folder commands for the chat folder. 2009-11-21 Philipp Kern * help/C/gobby.xml: document Editor settings a bit more 2009-11-21 Philipp Kern * code/dialogs/preferences-dialog.cpp: fix en_UK-ism 2009-11-21 Philipp Kern * help/C/gobby.xml: add shortcuts 2009-11-17 Philipp Kern * help/C/gobby.xml: point to the new IRC channel on Freenode 2009-11-17 Armin Burgmeier * code/window.hpp: * code/window.cpp: Switch to text when chat pane is hidden while it had focus, and give it focus if it is shown and nothing else has focus already. 2009-11-17 Armin Burgmeier * code/core/chatsessionview.hpp: Added get_chat(). * code/window.hpp: * code/window.cpp: Added Ctrl+M and Ctrl+Shift+M shortcuts to easily jump between chat and document. 2009-11-17 Armin Burgmeier * code/core/closableframe.hpp: * code/core/closableframe.cpp: Add set_allow_visible(). * code/core/preferences.hpp: * code/core/preferences.cpp: Added settings for chat visibility and chat userlist visibility and width. * code/core/folder.cpp: Use different preference settings for document userlist visibility and chat userlist visibility. * code/core/iconmanager.hpp: * code/core/iconmanager.cpp: Added stock chat icon. * code/core/header.hpp: * code/core/header.cpp: Added "View Chat" and "View Chat User List" menu items and actions. * code/commands/view-commands.hpp: * code/commands/view-commands.cpp: Implemented functionality for the new actions. * code/window.hpp: * code/window.cpp: Pass chat frame and folder to view-commands. 2009-11-17 Armin Burgmeier * code/util/color.hpp: * code/util/color.cpp: Fixed return type of rgb_to_hsv() and hsv_to_rgb(). 2009-11-15 Armin Burgmeier * code/core/userlist.hpp: * code/core/userlist.cpp: Added set_show_disconnected(). * code/core/sessionuserview.hpp: * code/core/sessionuserview.cpp: Added a show_disconnected parameter in the constructor. * code/core/folder.cpp: Don't show disconnected users for chat sessions. 2009-11-15 Gabríel A. Pétursson * code/commands/help-commands.cpp: Updated the about dialog. 2009-11-11 Benjamin Herr * code/core/textsessionview.hpp: * code/core/textsessionview.bpp: On style change, use new libinfinity functionality to adjust user colour saturation/value. The formulas used might not be optimal, so there is room for improvement. 2009-11-10 Benjamin Herr * code/core/statusbar.cpp: Manually add a "Close" button to the status bar message dialog because RESPONSE_CLOSE seems to add a "Cancel" button instead for some people (Gabríel). 2009-11-10 Gabríel A. Pétursson * code/commands/browser-context-commands.hpp: * code/commands/browser-context-commands.cpp: Fixed an assertion error. 2009-11-09 Benjamin Herr , Armin Burgmeier * code/core/statusbar.hpp: * code/core/statusbar.cpp: Readded timeout mechanism into status bar message functions. * code/dialogs/find-dialog.cpp: Readded timeout for status bar messages so that they would actually disappear at some point. 2009-11-09 Benjamin Herr , Armin Burgmeier * code/core/statusbar.cpp: Changed "OK" back to "Close" in status bar error message popup dialog. 2009-11-09 Benjamin Herr , Armin Burgmeier * code/core/statusbar.cpp: Made status bar error message popup dialog non-modal. 2009-11-09 Gabríel A. Pétursson , Armin Burgmeier * code/core/preferences.hpp: * code/core/preferences.cpp: Added scheme_id preference option to appearance. * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Set GtkSourceView style scheme according to selected scheme ID. * code/dialogs/preferences-dialog.hpp: * code/dialogs/preferences-dialog.cpp: Add a list to choose one's favoured style scheme to the appearance tab. 2009-11-09 Benjamin Herr * code/core/statusbar.cpp: * code/core/statusbar.hpp: Add hide_message that only removes a message widget without removing the (then-null) pointer from the m_list. hide_message can be called multiple times, thus avoiding the crash when an info message was removed twice. 2009-11-09 Benjamin Herr * code/core/statusbar.cpp: * code/core/statusbar.hpp: Minor refactoring to the status bar message change. Also made more stuff a detail of StatusBar::Message. 2009-11-08 Armin Burgmeier * code/commands/browser-commands.hpp: * code/commands/browser-commands.cpp: Initiate a subscription to a server's chat upon connection. * code/commands/subscription-commands.hpp: * code/commands/subscription-commands.cpp: Create a ChatSessionView in the bottom pane in case of a chat subscription. * code/commands/user-join-commands.cpp: Do a chat user join for chat sessions. * code/core/folder.hpp: * code/core/folder.cpp: Added a hide_single_tab option. * code/window.cpp: Adapt to changed folder and browser-commands constructors. 2009-11-08 Armin Burgmeier * code/commands/subscription-commands.hpp: * code/commands/subscription-commands.cpp: New class handling session subscriptions. * code/commands/synchronization-commands.hpp: * code/commands/synchronization-commands.cpp: New class handling session synchronization. * code/commands/user-join-commands.hpp: * code/commands/user-join-commands.cpp: New class handling user join. * code/commands/browser-commands.hpp: * code/commands/browser-commands.cpp: Removed the functionality that has been moved to the classes mentioned above. * code/commands/Makfile.am: Add the new files to the build. * code/window.hpp: * code/window.cpp: Instantiante the new classes. 2009-11-08 Armin Burgmeier * code/core/chatsessionview.hpp: * code/core/chatsessionview.cpp: Added a SessionView-deriving class to show a chat session. * code/core/Makefile.am: Added the new files to the build. * code/core/folder.hpp: * code/core/folder.cpp: Added add_chat_session, renamed add_document to add_text_session. * code/commands/browser-commands.cpp: Use add_text_session instead of add_document. * code/window.hpp: * code/window.cpp: Added a bottom pane for the chat. 2009-10-25 Armin Burgmeier * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Added TextSessionView, a SessionView-deriving class showing a InfTextSession. * code/core/docwindow.hpp: * code/core/docwindow.cpp: Removed. * code/core/Makefile.am: Adapted the build. * code/core/sessionview.hpp: * code/core/sessionview.cpp: Added path & hostname to SessionView. * code/core/folder.hpp: * code/core/folder.cpp: * code/core/statusbar.hpp: * code/core/statusbar.cpp: * code/core/tablabel.hpp: * code/core/tablabel.cpp: * code/core/titlebar.hpp: * code/core/titlebar.cpp: * code/core/userlist.cpp: * code/dialogs/find-dialog.hpp: * code/dialogs/find-dialog.cpp: * code/dialogs/goto-dialog.hpp: * code/dialogs/goto-dialog.cpp: * code/operations/operation-export-html.hpp: * code/operations/operation-export-html.cpp: * code/operations/operation-save.hpp: * code/operations/operation-save.cpp: * code/operations/operations.hpp: * code/operations/operations.cpp: * code/commands/autosave-commands.hpp: * code/commands/autosave-commands.cpp: * code/commands/browser-commands.cpp: * code/commands/edit-commands.hpp: * code/commands/edit-commands.cpp: * code/commands/file-commands.hpp: * code/commands/file-commands.cpp: * code/commands/folder-commands.hpp: * code/commands/folder-commands.cpp: * code/commands/view-commands.hpp: * code/commands/view-commands.cpp: * code/commands/file-tasks/task-export-html.hpp: * code/commands/file-tasks/task-export-html.cpp: * code/commands/file-tasks/task-save-all.hpp: * code/commands/file-tasks/task-save-all.cpp: * code/commands/file-tasks/task-save.hpp: * code/commands/file-tasks/task-save.cpp: * code/window.cpp: Adapt for the DocWindow->TextSessionView API change. 2009-10-18 Armin Burgmeier * code/core/sessionview.hpp: * code/core/sessionview.cpp: Added SessionView base class which will replace DocWindow soon. * code/core/sessionuserview.hpp: * code/core/sessionuserview.cpp: Added SessionUserView, a wrapper around SessionView with a userlist next to it. * code/core/Makefile.am: Added the new files to the build. 2009-10-23 Armin Burgmeier * code/core/userlist.hpp: * code/core/userlist.cpp: Made UserList work with non-InfText users. * code/core/docwindow.cpp: Only pass InfUserTable to the userlist, not the whole session. 2009-11-09 Gabríel A. Pétursson * code/commands/browser-commands.cpp: * code/commands/file-tasks/task-open.cpp: * code/core/browser.cpp: * code/core/statusbar.cpp: * code/core/statusbar.hpp: * code/dialogs/find-dialog.cpp: * code/operations/operation-delete.cpp: * code/operations/operation-export-html.cpp: * code/operations/operation-new.cpp: * code/operations/operation-open-multiple.cpp: * code/operations/operation-open.cpp: * code/operations/operation-save.cpp: Minor refactoring. Added detailed status bar error messages. 2009-11-07 Armin Burgmeier * code/commands/browser-context-commands.cpp (on_open_response): Use OperationOpenMultiple instead of mulitple OperationOpens, so that the documents are opened one after the other, not all at once. 2009-11-07 Gabríel A. Pétursson * code/commands/browser-context-commands.cpp: * code/commands/file-tasks/task-open-file.hpp: * code/commands/file-tasks/task-open-file.cpp: Added the ability to upload multiple files simultaneously. 2009-11-07 Armin Burgmeier * AUTHORS: Updated. 2009-11-07 Gabríel A. Pétursson * code/commands/file-commands.cpp: * code/core/browser.hpp: * code/core/browser.cpp: Alphabetical sorting of directory and file names. 2009-11-06 Armin Burgmeier * code/commands/folder-commands.cpp: Avoid a crash if the connection goes down before the activation timeout fired, i.e. right after changing a tab. 2009-11-01 Armin Burgmeier * configure.ac: Require glibmm-2.4 >= 2.18.0 and giomm-2.4 >= 2.18.0 to make sure overwriting files works when saving. See also bug #471. 2009-11-01 Benjamin Herr * code/core/preferences.hpp: * code/core/preferences.cpp: Added view.whitespace_display option. * code/dialogs/preferences-dialog.hpp: * code/dialogs/preferences-dialog.cpp: Added a corresponding widget to the View pane in the preferences dialog. * code/core/docwindow.hpp: * code/core/docwindow.cpp: Honor the setting. * configure.ac: Require gtksourceview-2.0 >= 2.4 since gtk_source_view_set_draw_spaces() is available only since this version. 2009-10-31 Armin Burgmeier * code/Makefile.am: Pass both public and private icon paths to the code. * code/core/iconmanager.cpp: Add both to the icon search path. This fixes lookup of the application icon if gobby is installed in a non-standard prefix. 2009-10-26 Armin Burgmeier * code/core/userlist.cpp (sort_func): Sort the user list case-insensitively. 2009-10-26 Armin Burgmeier * code/operations/operation-open.cpp (constructor): Also disable GtkSourceView's Undo for sync'ed-in sessions. Otherwise the user was able to press Ctrl+Z in a newly opened document to trigger GtkSourceView (global) Undo when local group Undo is not available (such as right after document creation). 2009-10-26 Armin Burgmeier * code/commands/browser-commands.cpp (on_subscribe_session): Use the remote-hostname of the InfXmppConnection of the browser instead of the root entry name of the browser model as hostname passed to the DocWindow. This is currently used in the exported HTML's footer. 2009-10-25 Armin Burgmeier , Benjamin Herr * code/operations/operation-export-html.hpp: * code/operations/operation-export-html.cpp: * code/operations/Makefile.am: Added an operation which exports a document to a XHTML document. * code/operations/operations.hpp: * code/operations/operations.cpp: Added export_html() functio. * code/core/header.hpp: * code/core/header.cpp: Added a menu entry for exporting a document to HTML. * code/core/folder.hpp: * code/core/folder.cpp: * code/core/docwindow.hpp: * code/core/docwindow.cpp: * code/commands/browser-commands.cpp: Store path on remote host and its hostname in the DocWindow. * code/commands/file-tasks/task-export-html.hpp: * code/commands/file-tasks/task-export-html.cpp: * code/commands/file-tasks/Makefile.am: Added a task for HTML export showing a file chooser dialog for the user to select a location to export to. * code/commands/file-commands.hpp: * code/commands/file-commands.cpp: Start the task when the user activates the corresponding action defined in Header. 2009-10-24 Armin Burgmeier * icons/hicolor/scalable/status/user-color-indicator.svg: Removed blur, so that rsvg renders it correctly. * icons/hicolor/scalable/Makefile.am: * icons/hicolor/48x48/Makefile.am: * icons/hicolor/48x48/status/Makefile.am: * icons/hicolor/scalable/status/Makefile.am: * configure.ac: Added the new item to the build system. * code/util/color.hpp: * code/util/color.cpp: Added public rgb_to_hsv() and hsv_to_rgb() functions. * code/core/iconmanager.hpp: * code/core/iconmanager.cpp: Added a stock item for the user color indicator. * code/core/userlist.cpp: Show the user color indicator for the user color instead of a boring monochromatic square. 2009-10-24 Benjamin Herr * icons/hicolor/48x48/status/user-color-indicator.png: * icons/hicolor/scalable/status/user-color-indicator.svg: Added fancier icon to display the user colors in the user list. Not actually implemented. 2009-10-06 Armin Burgmeier * code/core/docwindow.cpp: Restore the "highlight matching brackets" option correctly from the preferences. Bug #470. 2009-09-14 Armin Burgmeier * code/commands/file-tasks/task-open-multiple.hpp: Added an include to fix the build. Bug #469. 2009-09-09 Armin Burgmeier * code/window.cpp (on_message_received): Don't leak the uris vector when an exception is thrown. 2009-09-09 Benjamin Herr * code/window.cpp: * code/window.hpp: * code/main.cpp: Also send hostnames given with --connect to an already running instance of gobby (via libunique). 2009-09-08 Benjamin Herr * code/core/browser.hpp: * code/core/browser.cpp: * code/window.hpp: * code/window.cpp: * code/main.cpp: Added --connect=HOSTNAME command line flag to connect to the given hostnames on startup. 2009-08-30 Armin Burgmeier * configure.ac: Require glib-2.18, as replacing existing files while saving does not work with lower versions. * README: Added the new dependency to the README. 2009-08-30 Armin Burgmeier * README: Updated the text, parts of it were still from when we used darcs (Nicolás Alvarez). 2009-08-29 Armin Burgmeier * update-potfiles: Fixed path of the desktop file, and use --binary-file=without-matches instead of a checking for the string 'matches', so that it also works in non-english environments (Nicolás Alvarez). 2009-06-05 Philipp Kern * gobby-0.5.desktop.in: fix icon to not specify the extension, which is discouraged by the icon theme specification 2009-06-03 Armin Burgmeier * code/core/header.cpp: Replace localized section string by a numerical ID for the action names of the various language sections, to prevent a crash when starting Gobby on a Japanese system. Based on a patch by Takahiro Sunaga. 2009-05-26 Armin Burgmeier * code/core/browser.hpp: * code/core/browser.cpp: Changed the HistoryEntry to a HistoryComboBoxEntry, so that we have a dropdown list for recently used hosts. Bug #451. 2009-05-17 Philipp Kern * help/C/gobby.xml: ported content from the old readme to the help file 2009-05-16 Armin Burgmeier * code/commands/file-tasks/task-open.hpp: Include to make sure Gio::File is known. * code/commands/file-tasks/task-open.cpp: Removed an unused variable. 2009-05-16 Armin Burgmeier * docs/: Removed. This was outdated anyway. It should be updated and merged into the new DocBook help in help/. See also #448. 2009-05-16 Armin Burgmeier * Makefile.am: Don't define EXTRA_DIST twice. 2009-05-16 Armin Burgmeier * help/C/gobby.xml: Fixed Gobby command line invocation instruction: The executable is called gobby-0.5, not gobby. 2009-05-16 Armin Burgmeier * code/core/tablabel.cpp: Use gdk_color_to_string instead of Gdk::Color::to_string so that Gobby continues to compile with gtkmm 2.12. Bug #447 (Philipp Kern). 2009-05-12 Philipp Kern * code/dialogs/initial-dialog.cpp: match menuchoice style with manual 2009-05-12 Philipp Kern * configure.ac: get rid of WITH_GNOME, as it is currently unused 2009-05-12 Philipp Kern * autogen.sh: let autogen fail if some command is not available or returns with a failure 2009-05-11 Philipp Kern * code/core/header.cpp: use F1 for HelpContents, instead of the stock Ctrl-H 2009-05-11 Philipp Kern * code/core/header.hpp: * code/core/header.cpp: add HelpContents action * code/commands/help-commands.hpp: * code/commands/help-commands.cpp: invoke help through gtk_show_uri 2009-05-10 Philipp Kern * help/C/gobby.xml: initial manual draft, still pretty empty * help/Makefile.am: * Makefile.am: * autogen.sh: * configure.ac: use gnome-doc-utils as specified in their manual * help/C/figures/main_window.png: * help/C/figures/preferences_appearance.png: * help/C/figures/preferences_editor.png: * help/C/figures/preferences_security.png: * help/C/figures/preferences_user.png: * help/C/figures/preferences_view.png: add an initial set of screenshots (main window and preference panes) 2009-05-10 Philipp Kern * contrib/gobby-0.5.desktop.in: moved to the toplevel * Makefile.am: install the .desktop file unconditionally (i.e. not only WITH_GNOME) * contrib/*: removed 2009-05-03 Armin Burgmeier , Benjamin Herr * configure.ac: Added a --with-unique configure option, require unique-1.0 if set. * code/core/nodewatch.hpp: * code/core/nodewatch.cpp: Accept a const InfcBrowserIter, and changed the signature of get_browser_iter() to return the BrowserIter instead of setting a reference parameter. * code/operations/operation-new.cpp: * code/operations/operation-new.hpp: * code/operations/operation-open.cpp: * code/operations/operation-open.hpp: * code/operations/operation-delete.cpp: * code/operations/operation-delete.hpp: Accept a const InfcBrowserIter in the constructor. * code/operations/operation-open-multiple.hpp: * code/operations/operation-open-multiple.cpp: Added an operation which opens multiple files into the same directory. This is nothing which can't be achieved by creating multiple OperationOpen operations, but it creates the documents one-after-the-other, and therefore does not clutter the statusbar, plus it queries the display name of a file automatically to use as document name, if no document name is given explicitely. * code/operations/operations.hpp: * code/operations/operations.cpp: Accept a const InfcBrowserIter for most operations, added the create_documents() method which creates an OperationOpenMultiple. * code/commands/file-commands.hpp: Make set_task() public. We should later make a separate class for managing the file tasks. * code/dialogs/document-location-dialog.hpp: * code/dialogs/document-location-dialog.cpp: Added a multiple document mode to load multiple files. This basically hides the document name entry. * code/commands/file-tasks/task-new.cpp: * code/commands/file-tasks/task-open.cpp: Explicitely set single document mode on the document location dialog. * code/commands/file-tasks/task-open-multiple.hpp: * code/commands/file-tasks/task-open-multiple.cpp: Added a new task to open multiple files. This shows a document location dialog in multiple document mode and launches an OperationOpenMultiple when the user is done with the dialog. * code/commands/file-tasks/task-save-all.cpp: Added a TODO comment about splitting parts of this into an OperationSaveAll. * code/window.hpp: * code/window.cpp: Take command line arguments in the constructor, and open documents passed on the command line using a TaskOpenMultiple. If unique support is enabled, then react on incoming messages and activate the application window, or open files received in a message. * code/main.cpp: Added a --new-instance command line option. If not set and compiled with unique support, and if another instance is already running, then send a message to the running instance and exit. * Makefile.am: * code/Makefile.am: * code/util/Makefile.am: * code/core/Makefile.am: * code/dialogs/Makefile.am: * code/operations/Makefile.am: * code/commands/Makefile.am: * code/commands/file-tasks/Makefile.am: Added compiler and linker flags for unique, added the new files to the build. * code/commands/autosave-commands.cpp: Fixed two compiler warnings. 2009-05-01 Armin Burgmeier * code/core/nodewatch.hpp: * code/core/nodewatch.cpp: Removed the model from NodeWatch, instead connect to browser's connection's notify::status to detect disconnection. * code/commands/browser-context-commands.cpp: Adapt. 2008-05-01 Armin Burgmeier * gobby-0.5.xpm: Added a 32x32 XPM of the gobby icon. * Makefile.am: Distribute it. 2009-04-28 Benjamin Herr * code/commands/file-tasks/task-open.cpp: Do not delay reporting errors in Gobby::TaskOpen::run() anymore, since signal_finished will already be connected to. 2009-04-27 Armin Burgmeier * code/dialogs/document-location-dialog.cpp: Removed operator== for two GtkTextIters, as it is not used anymore. We are forced to compare TextPaths anyway. 2009-04-27 Armin Burgmeier * code/commands/file-tasks/task-save.cpp: Initialize m_running to false in constructor, and set m_running to true in run(). 2009-04-27 Benjamin Herr * code/commands/file-commands.cpp: * code/commands/file-commands.hpp: * code/commands/file-tasks/task-new.cpp: * code/commands/file-tasks/task-new.hpp: * code/commands/file-tasks/task-open-file.cpp: * code/commands/file-tasks/task-open-file.hpp: * code/commands/file-tasks/task-open-location.cpp: * code/commands/file-tasks/task-open-location.hpp: * code/commands/file-tasks/task-open.cpp: * code/commands/file-tasks/task-open.hpp: * code/commands/file-tasks/task-save-all.cpp: * code/commands/file-tasks/task-save-all.hpp: * code/commands/file-tasks/task-save.cpp: * code/commands/file-tasks/task-save.hpp: Split most of all Task constructors into a separate run() member function that is called by FileCommands::set_task after resetting its current task. This ensures that a new task only gets to mess with stuff after the old one's destructor has been run. 2009-04-26 Armin Burgmeier * README: * configure.ac: Post-release bump to 0.4.93, require libfinity-0.4. 2009-04-26 Armin Burgmeier * === Released 0.4.92 === * README: * NEWS: Update for release. 2009-04-25 Armin Burgmeier * code/core/tablabel.hpp: * code/core/tablabel.cpp: Added a fallback chain for the dot character if the current font doesn't support the pencil glyph. 2009-04-24 Armin Burgmeier * code/main.cpp: Changed locale lookup directory on Windows from lib/locale to share/locale. 2009-04-24 Armin Burgmeier * configure.ac: Changed PACKAGE name back to gobby. * icons/HighContrastLargePrint/48x48/actions/Makefile.am: * icons/HighContrastLargePrint/scalable/actions/Makefile.am: * icons/HighContrastLargePrintInverse/48x48/actions/Makefile.am: * icons/HighContrastLargePrintInverse/scalable/actions/Makefile.am: * icons/hicolor/48x48/actions/Makefile.am: * icons/hicolor/scalable/actions/Makefile.am: * code/core/Makefile.am: Use $(datadir)/gobby-0.5 instead of $(pkgdatadir), so we still install the private icons into a separate directory. 2009-04-22 Benjamin Herr * code/core/tablabel.hpp: * code/core/tablabel.cpp: Display pencil icons in user hue for each user that has edited a document since it was last viewed (Bug #66 by Mattis Manzel). 2009-04-20 Benjamin Herr * code/commands/file-tasks/task-new.cpp: Removed spurious semicolon. 2009-04-20 Armin Burgmeier * code/core/browser.cpp: * code/core/documentinfostorage.cpp: * code/dialogs/open-location-dialog.cpp: * code/main.cpp: * code/util/file.cpp: * code/util/file.hpp: * configure.ac: Store config in Glib::get_user_config_dir() everywhere instead of only on Win32 (Bug #437 by Cristian Klein). 2009-04-20 Armin Burgmeier * configure.ac: Adapt to libinfinity becoming parallel-installable. 2009-02-28 Armin Burgmeier * code/operations/operation-save.cpp: When saving files, don't write almost every line twice if the first line is empty. 2009-02-26 Armin Burgmeier * code/util/resolv.cpp: Added include to fix the build on Free BSD. Bug #431. Patch by Romain Tartière. 2009-02-14 Armin Burgmeier * code/util/config.hpp: * code/util/config.cpp: Added ParentEntry::has_value(). * code/core/preferences.cpp: Added /etc/ssl/certs/ca-certificates.crt as default value for the trust-file, if the file exists. 2009-02-03 Armin Burgmeier * code/operations/operation-save.cpp: Make sure terminating newline characters are saved correctly. 2009-02-02 Armin Burgmeier * pixmaps/: Removed the pixmaps directory. The pixmaps are now installed as icons, to respect theme settings. * contrib/artwork/: Removed as well, since all artwork is now contained in icons/ anyway. * contrib/Makefile.am: * Makefile.am: Adapt for the removal of the above directories. * icons/hicolor/48x48/actions/chat.png: * icons/hicolor/48x48/actions/document-list.png: * icons/hicolor/48x48/actions/user-list.png: * icons/hicolor/48x48/actions/Makefile.am: * icons/hicolor/48x48/Makefile.am: * icons/hicolor/scalable/actions/chat.svg: * icons/hicolor/scalable/actions/document-list.svg: * icons/hicolor/scalable/actions/user-list.svg: * icons/hicolor/scalable/actions/Makefile.am: * icons/hicolor/scalable/Makefile.am: Added previous pixmaps as icons, so they are themeable. * icons/HighContrastLargePrintInverse/48x48/actions/chat.png: * icons/HighContrastLargePrintInverse/48x48/actions/document-list.png: * icons/HighContrastLargePrintInverse/48x48/actions/user-list.png: * icons/HighContrastLargePrintInverse/48x48/actions/Makefile.am: * icons/HighContrastLargePrintInverse/48x48/apps/gobby.png: * icons/HighContrastLargePrintInverse/48x48/Makefile.am: * icons/HighContrastLargePrintInverse/scalable/actions/chat.svg: * icons/HighContrastLargePrintInverse/scalable/actions/document-list.svg: * icons/HighContrastLargePrintInverse/scalable/actions/user-list.svg: * icons/HighContrastLargePrintInverse/scalable/actions/Makefile.am: * icons/HighContrastLargePrintInverse/scalable/apps/gobby.svg: * icons/HighContrastLargePrintInverse/scalable/Makefile.am: Added corresponding HCLPI icons (thanks Tom). * icons/HighContrastLargePrint/48x48/actions/chat.png: * icons/HighContrastLargePrint/48x48/actions/document-list.png: * icons/HighContrastLargePrint/48x48/actions/user-list.png: * icons/HighContrastLargePrint/48x48/actions/Makefile.am: * icons/HighContrastLargePrint/48x48/apps/gobby.png: * icons/HighContrastLargePrint/48x48/apps/Makefile.am: * icons/HighContrastLargePrint/48x48/Makefile.am: * icons/HighContrastLargePrint/scalable/actions/chat.svg: * icons/HighContrastLargePrint/scalable/actions/document-list.svg: * icons/HighContrastLargePrint/scalable/actions/user-list.svg: * icons/HighContrastLargePrint/scalable/actions/Makefile.am: * icons/HighContrastLargePrint/scalable/apps/gobby.svg: * icons/HighContrastLargePrint/scalable/apps/Makefile.am: * icons/HighContrastLargePrint/scalable/Makefile.am: * icons/HighContrastLargePrint/Makefile.am: Added corresponding HCLP icons (again, thanks Tom). * icons/Makefile.am: Descend into HigtContrastLargePrint subdirectory. * code/core/iconmanager.hpp: * code/core/iconmanager.cpp: Load icons from icon name instead of directly from their path, added priate icons directory to icon theme search path. * code/util/Makefile.am: * code/core/Makefile.am: * code/dialogs/Makefile.am: * code/operations/Makefile.am: * code/commands/file-tasks/Makefile.am: * code/commands/Makefile.am: * code/Makefile.am: Removed APPICON_DIR and PIXMAPS_DIR definitions, as these are no longer required. * configure.ac: Generate newly added Makefiles, changed package name to gobby-0.5, so that the private icons end up in their own directory, parallel-installable with the 0.4 line. 2009-02-01 Armin Burgmeier * code/dialogs/find-dialog.hpp: * code/dialogs/goto-dialog.hpp: * code/dialogs/preferences-dialog.hpp: * code/dialogs/entry-dialog.hpp: * code/dialogs/document-location-dialog.hpp: * code/dialogs/open-location-dialog.hpp: * code/dialogs/initial-dialog.hpp: * code/dialogs/find-dialog.cpp: * code/dialogs/goto-dialog.cpp: * code/dialogs/preferences-dialog.cpp: * code/dialogs/entry-dialog.cpp: * code/dialogs/document-location-dialog.cpp: * code/dialogs/open-location-dialog.cpp: * code/dialogs/initial-dialog.cpp: * code/dialogs/Makefile.am: Added hyphens into the file names, to stay consistent with other code files, such as commands/ or operations/. * code/commands/file-tasks/task-open-location.hpp: * code/commands/browser-context-commands.hpp: * code/commands/edit-commands.hpp: * code/commands/file-commands.hpp: * code/window.hpp: Adapt #include directives. 2009-02-01 Armin Burgmeier * code/commands/file-tasks/task-new.hpp: * code/commands/file-tasks/task-open.hpp: * code/commands/file-tasks/task-open-file.hpp: * code/commands/file-tasks/task-open-location.hpp: * code/commands/file-tasks/task-save.hpp: * code/commands/file-tasks/task-save-all.hpp: * code/commands/file-tasks/task-new.cpp: * code/commands/file-tasks/task-open.cpp: * code/commands/file-tasks/task-open-file.cpp: * code/commands/file-tasks/task-open-location.cpp: * code/commands/file-tasks/task-save.cpp: * code/commands/file-tasks/task-save-all.cpp: * code/commands/file-tasks/Makefile.am: Splitted the tasks which were defined in code/commands/file-commands.cpp into multiple files. * code/commands/file-commands.hpp: * code/commands/file-commands.cpp: Adapt accordingly. * code/commands/Makefile.am: Descend into file-tasks subdirectory. * Makefile.am: Link against the new tasks. * configure.ac: Create the new Makefiles. 2009-01-30 Armin Burgmeier * code/util/resolv.cpp: Removed the _WIN32_WINNT #define which is no longer required now that we use for getaddrinfo support. 2009-01-30 Armin Burgmeier * icons/HighContrastLargePrintInverse/48x48/Makefile.am: * icons/HighContrastLargePrintInverse/48x48/apps/Makefile.am: * icons/HighContrastLargePrintInverse/48x48/apps/gobby.png: * icons/HighContrastLargePrintInverse/scalable/Makefile.am: * icons/HighContrastLargePrintInverse/scalable/apps/Makefile.am: * icons/HighContrastLargePrintInverse/scalable/apps/gobby.svg: * icons/hicolor/48x48/Makefile.am: * icons/hicolor/48x48/apps/Makefile.am: * icons/hicolor/48x48/apps/gobby.png: * icons/hicolor/scalable/Makefile.am: * icons/hicolor/scalable/apps/Makefile.am: * icons/hicolor/scalable/apps/gobby.svg: * configure.ac: Added context ("apps") to icons directory structure. 2009-01-30 Armin Burgmeier * code/util/resolv.cpp: Include the header file on Windows to support Windows 2000. Bug #425. 2009-01-16 Armin Burgmeier * code/commands/file-commands.cpp: Don't use Gtk::FileChooser::get_file(), so that we don't require gtkmm 2.14. 2009-01-16 Armin Burgmeier * code/commands/file-commands.cpp: Marked a string for localization. 2009-01-15 Armin Burgmeier * all source files: Added 2009 to copyright years. 2009-01-04 Armin Burgmeier * configure.ac: Post-release bump to 0.4.92. 2009-01-04 Armin Burgmeier * === Released 0.4.91 === * NEWS: Update for release. 2009-01-04 Armin Burgmeier * code/core/window.cpp: Re-enable shortcuts for Undo and Redo. These have been accidentally disabled when pasting text in the "Direct Connection" entry has been fixed. 2009-01-04 Armin Burgmeier * code/core/docwindow.hpp: * code/core/docwindow.cpp: Show a tooltip when hovering over text, saying what user wrote the hovered text. 2009-01-04 Armin Burgmeier * code/core/window.hpp: * code/core/window.cpp: Fixed pasting text into the direct connection entry when having open a document. Before, the text was pasted into the document even though the entry was focused. We use the same workaround as gedit. 2009-01-04 Armin Burgmeier * code/core/folder.cpp: Re-enable Ctrl+Alt+PgDown/Ctrl+Alt+PgUp to cycle between tabs. * code/core/docwindow.cpp: Added a TODO comment about using a single UserList widget for all documents. 2009-01-04 Armin Burgmeier * code/core/statusbar.hpp: * code/core/statusbar.cpp: Added an invalid_handle() function, so other code can keep around invalid message handles, and fixed invalid memory access when a document was removed. * code/commands/browser-context-commands.cpp: Added a TODO comment about using file-tasks for common operations. * code/commands/file-commands.cpp: Query file info asynchronously, to avoid UI hangs when opening unresponsive remote files. 2009-01-03 Armin Burgmeier * code/util/historyentry.hpp: * code/util/historyentry.cpp: Added HistoryComboBoxEntry, which allows to select the history entries via a combo box. * code/dialogs/openlocationdialog.hpp: * code/dialogs/openlocationdialog.cpp: Use a HistoryComboBoxEntry instead of a simple GtkEntry. * code/dialogs/entrydialog.cpp: Don't use Gtk::Entry::get_text_length() since this is available only since gtkmm 2.14, but we require only 2.12. 2009-01-03 Armin Burgmeier * code/dialogs/openlocationdialog.hpp: * code/dialogs/openlocationdialog.cpp: * code/dialogs/Makefile.am: Added a dialog which queries the user for an URI to open. * code/core/header.hpp: * code/core/header.cpp: Added an "Open Location" menu item. * code/commands/file-commands.hpp: * code/commands/file-commands.cpp: Handle the "Open Location" menu item, fixed deinitialization order. * code/window.cpp: Pass statusbar to file commands. * code/operations/operation-open.cpp: Added error handling for the initial read_async operation. 2009-01-02 Armin Burgmeier * code/util/historyentry.hpp: * code/util/historyentry.cpp: * code/util/Makefile.am: Added a HistoryEntry class which allows scrolling through past entries in a GtkEntry, optionally saving and restoring the history from/to disk. * code/core/browser.hpp: * code/core/browser.cpp: Use a history entry for the hostname entry. 2008-12-31 Armin Burgmeier * code/core/preferences.hpp: * code/core/preferences.cpp: Added autosave_enabled and autosave_interval properties. * code/dialogs/preferencesdialog.hpp: * code/dialogs/preferencesdialog.cpp: Added the two preferences to the user interface. * code/commands/autosave-commands.hpp: * code/commands/autosave-commands.cpp: * code/commands/Makefile.am: Implemented autosave. * code/window.hpp: * code/window.cpp: Instantiate AutosaveCommands. * code/commands/file-commands.cpp: Added a TODO comment about defaulting to CRLF on Windows. 2008-12-31 Armin Burgmeier * code/operations/operations.hpp: * code/operations/operations.cpp: Added a begin_save_operation signal, and added a boolean parameter to base operation's finished signal which indicates whether the operation was performed successfully or not. Removed the remove() function, and added finish() and fail() instead. * code/operations/operation-open.hpp: Derive from sigc::trackable. * code/operations/operation-save.hpp: * code/operations/operation-save.cpp: Added get_document(), get_start_time() and derive from sigc::trackable, adapt to finish() and fail(). * code/operations/operation-new.cpp: * code/operations/operation-open.cpp: * code/operations/operation-delete.cpp: Adapt to finish() and fail(). 2008-12-30 Armin Burgmeier * code/operations/operations.hpp: * code/operations/operations.cpp: Added signal_finished to the operation base class, and the various functions creating operations now return them. * code/operations/operation-save.cpp: Fixed a typo in a comment. 2008-12-29 Armin Burgmeier * code/window.hpp: * code/window.cpp: Changed (de)initialization order so that browser is freed after folder. This is required to avoid a warning when an InfSession holds a reference to a connection (such as during synchronization) and Gobby is closed. 2008-12-28 Armin Burgmeier * configure.ac: Require libinfinity >= 0.2. 2008-12-28 Armin Burgmeier * code/core/browser.cpp: * code/core/noteplugin.cpp: * code/operations/operation-open.cpp: Adapt to libinfinity's new communication API. 2008-12-23 Philipp Kern * configure.ac: separate infinote pkg-config from those determining if all libraries needed for Gobby's user interface are present, allowing easier and separate overrides of them * Makefile.am: * code/Makefile.am: * code/commands/Makefile.am: * code/core/Makefile.am: * code/dialogs/Makefile.am: * code/operations/Makefile.am: * code/util/Makefile.am: use AM_CPPFLAGS for everything instead of specialized per-target CPPFLAGS entries 2008-12-23 Philipp Kern * code/Makefile.am: * code/commands/Makefile.am: * code/core/Makefile.am: * code/dialogs/Makefile.am: * code/operations/Makefile.am: * code/util/Makefile.am: Include top-level CFLAGS. 2008-12-19 Armin Burgmeier * po/fr.po: Changed application name to "Editeur collaboratif Gobby" to meet French Gnome standard. 2008-12-19 Armin Burgmeier * po/fr.po: Added translation for the desktop file (Bug #415, Pascal Kreyer). 2008-12-19 Armin Burgmeier * po/de.po: Removed dash from application name, as other GNOME programs do. 2008-12-17 Armin Burgmeier * icons/hicolor/48x48/gobby-0.5.png: * icons/hicolor/48x48/Makefile.am: * icons/hicolor/Makefile.am: Added fixed-size version of gobby icon. * icons/HighContrastLargePrintInverse/48x48/gobby-0.5.png: * icons/HighContrastLargePrintInverse/48x48/Makefile.am: * icons/hicolor/Makefile.am: Added fixed-size version of HCLPI gobby icon. * configure.ac: Generate the new Makefiles. 2008-12-17 Armin Burgmeier * contrib/artwork/gobby.svg: Centered the gobby icon into the document. * code/core/iconmanager.hpp: * code/core/iconmanager.cpp: Removed the gobby icon pixbuf. * code/dialogs/initialdialog.cpp: * code/commands/help-commands.cpp: * code/main.cpp: Lookup the gobby icon by its icon name. * pixmaps/gobby-0.5.png: Deleted. * icons/hicolor/scalable/gobby-0.5.svg: Added scalable gobby icon. * icons/hicolor/scalable/Makefile.am: Install it into a proper location. * icons/hicolor/Makefile.am: Run update-icon-cache on hicolor theme after (un)intall. * icons/HighContrastLargePrintInverse/scalable/gobby-0.5.svg: Added scalable gobby icon for HCLPI theme (Thomas Glatt, Bug #413). * icons/HighContrastLargePrintInverse/scalable/Makefile.am: Install it. * icons/HighContrastLargePrintInverse/Makefile.am: Run update-icon-cache on HighContrastLargePrintInverse after (un)install. * Makefile.am: Decend into the icons/ subdir. * pixmaps/Makefile.am: Don't install gobby-0.5.png to share/pixmaps anymore. * configure.ac: Generate the new Makefiles. 2008-11-23 Armin Burgmeier * configure.ac: Post-release bump to 0.4.91. 2008-11-23 Armin Burgmeier * contrib/Makefile.am: Always add gobby-0.5.desktop.in to the distribution. 2008-11-23 Armin Burgmeier * Makefile.am: Add a dummy C++ file to nondistributed sources, to cause C++ linking. Bug #399, Markus Wanjura. 2008-11-23 Armin Burgmeier * code/core/browser.cpp: Added include, required on Mac OS X. Bug #399, Markus Wanjura. 2008-11-23 Armin Burgmeier * code/util/i18n.hpp: Added definition for N_. * code/operations/operation-open.cpp: Made 8bit encoding used for auto detection translatable, so that locales with other default 8bit encodings than iso-8859-1 get better results for auto detection. 2008-11-23 Armin Burgmeier * contrib/gobby-0.5.desktop: Removed. * contrib/gobby-0.5.desktop.in: Added, marking name and comment for translation. * contrib/Makefile.am: Generate contrib/gobby-0.5.desktop from contrib/gobby-0.5.desktop.in via intltool. This allows the desktop file to be translated via po files. Bug #396, based on a patch from Takao Fujiwara. * autogen.sh: Run intltoolize. * configure.ac: Require intltool. * update-potfiles: Added contrib/gobby-0.5.desktop.in to list of files scanned for translatable strings. 2008-11-09 Armin Burgmeier * code/commands/edit-commands.cpp: Scroll to cursor after cut or paste. 2008-11-05 Armin Burgmeier * code/commands/edit-commands.cpp: Added a (hopefully) temporary hack to set the cursor position to the place where a Undo/Redo has occurred. This stopped to work with the latest changes in libinfinity (which in turn fix other caret stuff, such as no longer moving the caret around on block indent/unindent, or allowing to paste text over a selected area). This can be properly implemented as soon as libinfinity supports caret-aware requests. 2008-10-18 Armin Burgmeier * code/core/browser.cpp: * code/core/header.cpp: Use standard capitalization for control labels. Bug #223 (Matthew Paul Thomas). 2008-10-18 Armin Burgmeier * code/main.cpp: Set localedir relative to Gobby executable on Windows, so i18n is properly relocatable. 2008-10-18 Armin Burgmeier * === Released 0.4.90 === 2008-10-17 Armin Burgmeier * contrib/gobby-0.5.desktop: Fixed icon file name. 2008-10-16 Armin Burgmeier * code/Makefile.am: * code/commands/Makefile.am: * code/core/Makefile.am: * code/dialogs/Makefile.am: * code/operations/Makefile.am: * code/util/Makefile.am: Fix `make distcheck' by using -I$(top_srcdir) instead of a relative path such as -I.. Also, changed pixmapdir to $(datadir)/pixmaps/gobby-0.5. * pixmaps/Makefile.am: * pixmaps/gobby-0.5.png: Moved from pixmaps/gobby.png. * contrib/Makefile.am: * contrib/gobby-0.5.desktop: Moved from gobby.desktop. * configure.ac: Changed GETTEXT_PACKAGE from gobby to gobby05. * code/core/iconmanager.cpp: Load gobby-0.5.png for the Gobby logo instead of gobby.png. 2008-10-16 Armin Burgmeier * NEWS: Update for release. 2008-10-16 Armin Burgmeier * all source files: Changed description in GPL header since Gobby is no longer libobby driven. Also changed Copyright holder to me and Copyright date to 2008 since 99% of the code was written by me in 2008. 2008-10-16 Armin Burgmeier * contrib/gobby.desktop: Launch the correct executable, added a "(0.5)" to the description to differentiate it from a previous parallel-installed version. 2008-10-16 Armin Burgmeier * code/commands/browser-commands.cpp (on_synchronization_failed): Remove the entry from the session map directly instead of waiting for session closure, otherwise the error message is overwritten with a useless (and incorrent) 'The connection to the publisher has been lost' one. 2008-10-15 Armin Burgmeier * code/core/browser.hpp: * code/core/browser.cpp: Adapt to libinfinity API change, INFINOTE_HAVE_AVAHI has been renamed to LIBINFINITY_HAVE_AVAHI. 2008-10-15 Armin Burgmeier * code/core/Makefile.am: Added appicondir and pixmapdir back, so that installed pixmaps can be found. * code/util/resolv.cpp: Set all fields in getaddrinfo hint, otherwise the Win32 implementation of getaddrinfo produces an error. * code/core/browser.cpp: Commented-out the device name to device index translation for %dev syntax on Windows. It won't be available for now. * code/core/iconmanager.cpp: Don't load save-all.svg since GTK+ on Win32 has no SVG loader by defualt. Also, locate pixbufs using the non-deprecated g_win32_get_package_installation_directory_of_module function. * code/core/statusbar.cpp: Added code that undefs ERROR, because this is used in an enum, and seems to be defined somewhere in a Windows header. * code/dialogs/preferencesdialog.cpp: Don't set current folder of host directory file chooser (which is not shown currently anyway), because this could produce an error message if the directory does not exist. * code/operations/operation-open.cpp: * code/operations/operation-save.cpp: Use the C g_iconv API instead of Glib::IConv::iconv, because iconv is a define to libiconv on Windows, but Glib::IConv::libiconv does not exist. * Makefile.am: Fixed linking order, link to stdc++ and ws2_32 on Windows. * win32/gobby.rc: Fixed path to gobby.res file. 2008-10-15 Armin Burgmeier * po/LINGUAS: Added LINGUAS file that lists all languages. This seems to be required for `make dist'. * configure.ac: Use the po/LINGUAS file to set the ALL_LINGUAS variable. 2008-10-14 Armin Burgmeier * code/main.cpp: Call inf_init() instead of initializing gnutls and the GObject type system directly. 2008-10-14 Armin Burgmeier * code/commands/browser-commands.cpp: Fixed a typo in a string. 2008-10-14 Armin Burgmeier * code/commands/folder-commands.cpp: Only wake inactive users when the corresponding document is the currently active one. This fixes a crash when text has was selected in an inactive document and the selection is erased by selecting something elsewhere. 2008-10-13 Armin Burgmeier * code/core/titlebar.hpp: * code/core/titlebar.cpp: * code/core/Makefile.am: Added a new class that handles what is displayed in the titel bar of the Gobby window. * code/window.hpp: * code/window.cpp: Instantiate a TitleBar. * code/core/documentinfostorage.hpp: Added a superflous TODO comment. 2008-10-13 Armin Burgmeier * code/commands/browser-commands.hpp: * code/commands/browser-commands.cpp: * code/operations/operation-open.cpp: * code/operations/operation-save.cpp: Set the modified flag upon opening or saving a document correctly. * code/core/tablabel.hpp: * code/core/tablabel.cpp: Show the modify flag in the tab. 2008-10-12 Armin Burgmeier * code/operations/operation-open.cpp: Fixed double unref of IO object. * code/core/browser.cpp: Added a TODO comment about initial root node expansion for direct connections. 2008-10-11 Armin Burgmeier * code/core/tablabel.hpp: * code/core/tablabel.cpp: * code/core/Makefile.am: Added TabLabel to this extra source file, make color of tab label red on activity, and grey when the document is being synchronized or the connection has been lost. * code/core/tablabel.cpp: Removed the TabLabel class in the anonymous namespace, use the one introduced above instead. 2008-10-10 Armin Burgmeier * code/core/filechooser.cpp: Allow selecting non-local files in Gobby's filechooser. * code/commands/file-commands.cpp: * code/commands/browser-context-commands.cpp: Query the display name when opening a file, to use as document title. FileChooser::get_filename() does not work for non-local files. 2008-10-09 Armin Burgmeier * code/core/iconmanager.cpp: Removed the Save All icon from display, because it does not fit to the "Save" icon for Toolbar and Menu sizes. * code/core/header.cpp: Remove Save All icon from the toolbar. Items without icons look ugly and the toolbar, and there is a shortcut for quick access. 2008-10-09 Armin Burgmeier * code/util/file.hpp: * code/util/file.cpp: Added the config_filename() function. * code/core/browser.cpp: * code/core/documentinfostorage.cpp: * code/main.cpp: Make use of that function to access config files. * code/window.cpp: Give initial focus to browser. 2008-10-09 Armin Burgmeier * configure.ac: Renamed the `OSX' define to `PLATFORM_OSX', and added `PLATFORM_OSX_NATIVE' when running with the quartz GDK target. * code/core/header.cpp: Adapt, only use ige-mac-integration when running natively on OS X. 2008-10-09 Armin Burgmeier * code/: Moved from src/. * code/commands/browser-commands.hpp: * code/commands/browser-context-commands.hpp: * code/commands/edit-commands.hpp: * code/commands/file-commands.hpp: * code/commands/folder-commands.hpp: * code/commands/help-commands.hpp: * code/commands/view-commands.hpp: * code/core/browser.hpp: * code/core/closableframe.hpp: * code/core/documentinfostorage.hpp: * code/core/docwindow.hpp: * code/core/filechooser.hpp: * code/core/folder.hpp: * code/core/header.hpp: * code/core/huebutton.hpp: * code/core/iconmanager.hpp: * code/core/nodewatch.hpp: * code/core/noteplugin.hpp: * code/core/preferences.hpp: * code/core/statusbar.hpp: * code/core/userlist.hpp: * code/dialogs/documentlocationdialog.hpp: * code/dialogs/entrydialog.hpp: * code/dialogs/finddialog.hpp: * code/dialogs/gotodialog.hpp: * code/dialogs/initialdialog.hpp: * code/dialogs/preferencesdialog.hpp: * code/operations/operation-delete.hpp: * code/operations/operation-new.hpp: * code/operations/operation-open.hpp: * code/operations/operation-save.hpp: * code/operations/operations.hpp: * code/util/closebutton.hpp: * code/util/color.hpp: * code/util/config.hpp: * code/util/defaultaccumulator.hpp: * code/util/file.hpp: * code/util/i18n.hpp: * code/util/resolv.hpp: * code/util/serialize.hpp: * code/features.hpp: * code/window.hpp: Moved from inc/. * code/commands/Makefile.am: * code/operations/Makefile.am: * code/dialogs/Makefile.am: * code/core/Makefile.am: * code/util/Makefile.am: * code/Makefile.am: * Makefile.am: * configure.ac: Adapt to the new build structure. 2008-10-09 Armin Burgmeier * src/Makefile.am: Rename the gobby binary to gobby-0.5, to support parallel installation with gobby 0.4. 2008-10-09 Armin Burgmeier * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Added the scroll_to_cursor_position() function. * src/commands/edit-commands.cpp: Scroll to cursor position on Undo or Redo. 2008-10-08 Armin Burgmeier * src/core/folder.cpp: Emit document_changed with NULL document after the last document has been removed, not before, so get_current_document() yields the correct result. * inc/commands/edit-commands.hpp: * src/commands/edit-commands.cpp: Don't rely on m_current_document being valid until on_document_changed() was called. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Make "New" and "Open" actions insensitive when there is no entry in the Document Browser. 2008-10-08 Armin Burgmeier * src/core/browser.cpp: Adapt to infinote API changes. 2008-10-01 Armin Burgmeier * src/util/config.cpp: Renamed the root config from gobby_config to gobby-config. 2008-09-30 Armin Burgmeier * src/commands/folder-commands.cpp: Added another assertion to be able to better track another problem with users becoming active without having the document selected in the notebook. 2008-09-22 Armin Burgmeier * src/commands/folder-commands.cpp: Flush pending user requests before setting user inactive, to avoid the user becoming active again due to a delayed caret movement. 2008-09-22 Armin Burgmeier * src/core/preferences.cpp: Fixed writing the insert-tabs-instead-of-spaces option to the config file. 2008-09-22 Armin Burgmeier * src/core/huebutton.cpp: Fix button ordering. 2008-09-21 Armin Burgmeier * src/main.cpp: Display version information on -v. 2008-09-21 Armin Burgmeier * src/core/docwindow.cpp: Make sure author tags have lower priority than GtkSourceView tags. 2008-09-21 Armin Burgmeier * src/window.cpp: Set main window role. 2008-09-21 Armin Burgmeier * inc/dialogs/preferenceswindow.hpp: Don't notify option if the newly selected option is the same as the already selected one. 2008-09-21 Armin Burgmeier * src/commands/file-fommands.cpp: Use document title as initial filename for Save dialog if no URI is available in info storage. 2008-09-21 Armin Burgmeier * src/commands/view-commands.cpp: Set "View Userlist" insensitive if no document is open. 2008-09-21 Armin Burgmeier * inc/core/browser.hpp: * src/core/browser.cpp: Support hostname:port%device syntax for direct connections, to be able to establish IPv6 link-local connections directly. 2008-09-18 Armin Burgmeier * update-potfiles: Added a small script to generate the po/POTFILES.in. It is simple, but enough for our needs. 2008-09-18 Armin Burgmeier * src/commands/browser-commands.cpp: * src/commands/browser-context-commands.cpp: * src/core/browser.cpp: * src/core/header.cpp: * src/operations/operation-delete.cpp: * src/operations/operation-new.cpp: * src/operations/operation-open.cpp: * src/operations/operation-save.cpp: Changed all "…" character in strings to "...". Gedit does the same, and xgettext does not accept … without complaining. Translators can still choose to translate "..." to "…". 2008-09-18 Armin Burgmeier * inc/util/encoding.hpp: * inc/core/encodingselector.hpp: * inc/dragdrop.hpp: * src/util/encoding.cpp: * src/core/encodingselector.cpp: * src/dragdrop.cpp: Removed. These remained from Gobby 0.4 but were never used in 0.5. * inc/util/Makefile.am: * inc/core/Makefile.am: * inc/Makefile.am: * src/util/Makefile.am: * src/core/Makefile.am: * src/Makefile.am: Removed the files from the build. * inc/window.hpp: Removed includes including those files. 2008-09-18 Armin Burgmeier * inc/dialogs/preferencesdialogs.hpp: * src/dialogs/preferencesdialogs.cpp: Added a security page. * inc/core/browser.hpp: * src/core/browser.cpp: Set discovery's security policy and certificate manager's trust file from preferences. 2008-09-18 Armin Burgmeier * src/core/preferencesdialog.cpp: Use a Gtk::SizeGroup to align the "User name" and "User color" labels correctly. 2008-09-18 Armin Burgmeier * configure.ac: Added a new define, GOBBY_CONFIGDIR, that specifies where Gobby shall store it's configuration files (preferences, known documents, known hosts) * inc/core/preferences.hpp: * src/core/preferences.cpp: Added a security section with trust file and security-policy entries, changed serialise to serialize for consistency. * src/window.cpp: Call preferences.serialize instead of serialise. * src/core/browser.cpp: Use the security policy to create new XMPP connections. Honor GOBBY_CONFIGDIR for known hosts file. * src/core/documentinfostorage: Honor GOBBY_CONFIGDIR for known documents file. * src/main.cpp: Honor GOBBY_CONFIGDIR for config file. 2008-09-17 Armin Burgmeier * src/Makefile.am: * src/commands/Makefile.am: * src/core/Makefile.am: * src/dialogs/Makefile.am: * src/operations/Makefile.am: * src/util/Makefile.am: Removed LOCALE_DIR definition from compiler command line. * configure.ac: Use AM_GLIB_DEFINE_LOCALEDIR instead. * src/main.cpp: Use GOBBY_LOCALEDIR instead of LOCALE_DIR. 2008-09-17 Armin Burgmeier * inc/core/browser.hpp: * src/core/browser.cpp: Instantiate a InfGtkCertificateManager, to handle server certificates. 2008-09-17 Armin Burgmeier * src/commands/view-commands.cpp: Fix usage of an uninitialized variable. 2008-09-13 Armin Burgmeier * src/core/browser.cpp: Adapt to infinote API change. 2008-09-11 Armin Burgmeier * inc/core/closableframe.hpp: * src/core/closableframe.cpp: Added title and icon for the frame. * src/core/docwindow.cpp: * src/window.cpp: Set title and icon for userlist and browser. 2008-09-11 Armin Burgmeier * pixmaps/chat.png: Removed. * pixmaps/Makefile.am: Removed chat.png from distribution. * inc/core/iconmanager.hpp: * src/core/iconmanager.cpp: Removed chat icon. * src/commands/help-commands.cpp: Added Thomas Glatt to artists because he designed the Gobby logo. 2008-09-11 Armin Burgmeier * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Added a boolean parameter to set_info() that specifies whether the info box can be closed by the user. * src/commands/browser-commands.cpp: Make persistent error infos closable, but not temporary synchronization infos. 2008-09-11 Armin Burgmeier * inc/core/closableframe.hpp: * src/core/closableframe.cpp: Added a new widget, derived from Gtk::Frame, that shows a close button in the upper right corner, for the frame to be closed. * inc/core/Makefile.am: * src/core/Makefile.am: Added the new files to the build. * inc/core/preferences.hpp: * src/core/preferences.cpp: Added show_browser and show_userlist options. * inc/window.hpp: * src/window.cpp: * src/core/docwindow.cpp: Use a ClosableFrame for the browser and userlist, respectively. * src/core/browser.cpp: Removed the border_width. It is now applied by the ClosableFrame. If border_width is desired in certain situations, then it can still be called from elsewhere. * inc/core/header.hpp: * src/core/header.cpp: Added "Show Document Browser" and "Show Userlist" items to the View menu. * inc/commands/view-commands.hpp: * src/commands/view-commands.cpp: Implemented functionality for these (by setting the preference options). 2008-09-11 Armin Burgmeier * inc/util/closebutton.hpp: * src/util/closebutton.cpp: Added CloseButton class that provides an as-small-as-possible GtkButton with a close icon on it. * inc/util/Makefile.am: * src/util/Makefile.am: Added new files to the build. * src/core/folder.cpp: Use CloseButton on the tabs. 2008-09-10 Armin Burgmeier * src/core/userlist.cpp: Fixed userlist sorting, sometimes unavailable users were shown above available ones. 2008-09-10 Armin Burgmeier * src/commands/folder-commands.cpp: Fix a warning when the connection to the server has been lost while being subscribed to a document. 2008-09-10 Armin Burgmeier * src/window.cpp: Keep browser pane at a fixed width. 2008-09-10 Armin Burgmeier * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Fixed an endless loop when the userlist is forcefully resized. 2008-09-10 Armin Burgmeier * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Change user color in running session on preferences color change. 2008-09-10 Armin Burgmeier * src/dialogs/preferencesdialog.cpp: Use notify::color instead of signal_color_set on ColorButton, because ColorButton::set_color (as used by HueButton) odes not emit the latter. 2008-09-10 Armin Burgmeier * inc/core/userlist.hpp: * src/core/userlist.cpp: Watch notify::hue instead of notify::color on InfTextUser for user color changes. InfTextUser::color does not exist. 2008-09-09 Armin Burgmeier * inc/core/huebutton.hpp: * src/core/huebutton.cpp: Added HueButton widget which is similar to Gtk::ColorButton but launches a InfTextGtkHueChooser instead of a GtkColorSelector on click. * inc/core/Makefile.am: * src/core/Makefile.am: Add the new files to the build. * inc/dialogs/initialdialog.hpp: * inc/dialogs/preferencesdialog.hpp: * src/dialogs/initialdialog.cpp: * src/dialogs/preferencesdialog.cpp: Use HueButton instead of ColorButton for user color selection. 2008-09-08 Armin Burgmeier * inc/core/header.hpp: * src/core/header.cpp: Added FileClose action and menu item. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Handle it. 2008-09-08 Armin Burgmeier * src/core/folder.cpp: Make tabs reorderable. 2008-09-08 Armin Burgmeier * inc/core/preferences.hpp: * src/core/preferences.cpp: Added userlist_width property. * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Honor it by making sure the userlist always has the width specified in the preferences, and update preferences when the user resizes the user list. * inc/core/folder.hpp: * src/core/folder.cpp: Make Preferences nonconst, so DocWindow can store the current userlist width in it. * src/window.cpp: Increase default window size to 800x600. 2008-09-08 Armin Burgmeier * inc/util/color.hpp: * src/util/color.cpp: Added hue_to_gdk_color(). * inc/core/userlist.hpp: * src/core/userlist.cpp: Added a new widget that displays all users in a session. * inc/core/Makefile.am: * src/core/Makefile.am: Added new files to the build. * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Show userlist in a right pane. * src/core/folder.cpp (remove_document): Keep the session alive until the corresponding page has been removed from the folder. 2008-09-07 Armin Burgmeier * inc/commands/folder-commands.hpp: * src/commands/folder-commands.cpp: Added FolderCommands class, setting user status according to currently activated document in folder. * src/core/folder.cpp: Make sure signal_document_added is emitted before the first emission of signal_document_changed for the new document. * inc/window.hpp: * src/window.cpp: Instantiate FolderCommands. * inc/commands/Makefile.am: * src/commands/Makefile.am: Added new files to the build. 2008-08-27 Armin Burgmeier * src/commands/browser-commands.cpp: Set initial status depending on whether the document is currently displayed in the folder. * src/operations/operation-open.cpp: Set initial status of user in the document to inactive. 2008-08-26 Armin Burgmeier * src/core/noteplugin.cpp: Adapt to libinfinity API change (user_data parameter to InfcNotePlugin callback functions). 2008-08-25 Armin Burgmeier * src/operations/operation-open.cpp: Fixed a typo in a comment. 2008-08-24 Armin Burgmeier * inc/core/nodewatch.hpp: * src/core/nodewatch.cpp: Added a class that watches a node in a InfcBrowser and emits a signal when it is removed. * inc/dialogs/entrydialog.hpp: * src/dialogs/entrydialog.cpp: Added a class that shows a dialog with an entry, to prompt the user for a string to enter. * inc/operations/operation-delete.hpp: * src/operations/operation-delete.cpp: Added an operation that deletes a node. * inc/core/browser.hpp: * src/core/browser.cpp: Added get_view(). * inc/operations/operation-new.hpp: * src/operations/operation-new.cpp: Allow this to create a directory, via a boolean parameter. * inc/operations/operations.hpp: * src/operations/operations.cpp: Added delete_node() and create_directory(). * src/core/documentinfostorage.cpp (on_node_removed): Don't require the removed node to be in our map. * inc/commands/browser-context-commands.hpp: * src/commands/browser-context-commands.cpp: Added a class that shows a context menu for the left browser pane, allowing the user to create or remove nodes. * inc/window.hpp: * src/window.cpp: Instantiate a BrowserContextCommands object. * inc/core/Makefile.am: * inc/dialogs/Makefile.am: * inc/operations/Makefile.am: * inc/commands/Makefile.am: * src/core/Makefile.am: * src/dialogs/Makefile.am: * src/operations/Makefile.am: * src/commands/Makefile.am: Added the new files to the build. 2008-08-24 Armin Burgmeier * inc/core/filechooser.hpp: * src/core/filechooser.cpp: Added a new class that manages a "current folder uri" which specifies at which location the filechooser has been used the last time. This is used as default location for newly opened file chooser dialogs. * inc/core/Makefile.am: * src/core/Makefile.am: Add the new files to the build. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Use this when showing open or save dialogs. * inc/window.hpp: * src/window.cpp: Instantiate a FileChooser, pass to FileCommands. 2008-08-24 Armin Burgmeier * inc/core/browser.hpp: * src/core/browser.cpp: Added the get_selected() and set_selected() methods, using the new inf_gtk_browser_view_set_selected(). * src/commands/browser-commands.cpp: When subscribing to a session, then change the BrowserView selection to the corresponding note, and give focus to the DocWindow, so the user can start typing immediately. 2008-08-14 Armin Burgmeier * src/commands/browser-commands.cpp: Removed an obsolete TODO item. * inc/core/folder.hpp: * src/core/folder.cpp: Automatically record every session to ~/.infinote-records, to be able to reproduce errors that occur somewhere in the session. 2008-08-13 Armin Burgmeier * src/core/header.cpp: Don't show hidden languages for syntax highlighting. 2008-07-23 Armin Burgmeier * src/commands/view-commands.cpp: Block signal_language_changed while closing last document, to avoid a crash in the handler 2008-07-16 Armin Burgmeier * inc/core/header.hpp: * src/core/header.cpp: Added lookup_language_action() to lookup a languagu action by the GtkSourceLanguage. * inc/commands/view-commands.hpp: * src/commands/view-commands.cpp: Switch the language of the current document if the user chooses another language in the menu, and make the menu reflect the language for the current document. * inc/commands/help-commands.hpp: * src/commands/help-commands.cpp: Implemented the About option. * inc/commands/Makefile.am: * src/commands/Makefile.am: Added help-commands to the build. * inc/window.hpp: * src/window.cpp: Instantiate HelpCommands. 2008-07-14 Armin Burgmeier * configure.in: Require giomm 2.16.4 since this contains a bugfix that allows overwriting files when saving. 2008-07-12 Armin Burgmeier * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Join with an alternative user name if the preferred one is already in use. 2008-07-11 Armin Burgmeier * inc/commands/view-commands.hpp: * src/commands/view-commands.cpp: Implemented View Toolbar and View Statusbar. * inc/commands/Makefile.am: * src/commands/Makefile.am: Add the new files to the build. * inc/core/folder.hpp: * src/core/folder.cpp: Added a const version of get_current_document(). * inc/core/statusbar.hpp: * src/core/statusbar.cpp: Added display of current line and column. * src/core/header.cpp: Hide toolbar initially if the show_toolbar preference is not set. * inc/window.hpp: * src/window.cpp: Instantiate ViewCommands. 2008-07-04 Armin Burgmeier * inc/core/toolwindow.hpp: * src/core/toolwindow.cpp: Removed. ToolWindow is no longer used. * inc/core/Makefile.am: * src/core/Makefile.am: Adjusted build files. 2008-07-04 Armin Burgmeier * inc/dialogs/gotodialog.hpp: * src/dialogs/gotodialog.cpp: Redesigned GotoDialog, and limit maximum line number to the line count of the current document. * inc/commands/edit-commands.hpp: * src/commands/edit-commands.cpp: Show GotoDialog and PreferencesDialog when the corresponding actions have been activated. * inc/dialogs/finddialog.hpp: * src/dialogs/finddialog.cpp: Added a destructor disconnecting from the active_user_changed signal of the current document. * src/core/header.cpp: Added mnemonics for a few menu items. * src/util/file.cpp: Fixed endless recursion in create_directory_with_parents(). 2008-07-03 Armin Burgmeier * inc/commands/edit-commands.hpp: * src/commands/edit-commands.cpp: Take a StatusBar in constructor to hand to find dialog, implemented find and replace. * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Changed set_selection paramaters from const Gtk::TextIter& to const GtkTextIter* since we are using the C API of GtkTextBuffer. * src/dialogs/gotodialog.cpp: Adapt to API change in DocWindow. * inc/dialogs/finddialog.hpp: * src/dialogs/finddialog.cpp: Changed FindDialog to better meet the GNOME HIG, added "Wrap around" option, inherit from Gtk::Dialog instead of Gobby::ToolWindow. * src/core/header.cpp: Add a horizontal ellipsis to all menu items that open dialogs. * src/dialogs/initialdialog.cpp: Call Gtk::Dialog constructor with parent instead of default constructor. * src/window.cpp: Pass statusbar to EditCommands. 2008-07-03 Armin Burgmeier * inc/commands/edit-commands.hpp: * src/commands/edit-commands.cpp: Implemented Cut/Copy/Paste functionality. * src/core/folder.cpp: Emit signal_document_changed when the last document is about to be removed before the document has actually been removed, so that signal handlers that still have a reference to the last document can still make use of it. * src/core/header.cpp: Added a shortcut (L) for Save All, as in gedit. 2008-07-02 Armin Burgmeier * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Added the active_user_changed signal and the get_active_user() function. * src/core/header.cpp: Added shortcuts for Undo and Redo. * src/core/noteplugin.cpp: Disable GtkSourceView Undo/Redo system by calling gtk_source_buffer_begin_non_undoable_action() without ever ending that non-undoable action. * inc/commands/edit-commands.hpp: * src/commands/edit-commands.cpp: New class handling the commands in the Edit submenu. For now Undo and Redo are implemented. * inc/window.hpp: * src/window.cpp: Instantiate EditCommands. * inc/commands/Makefile.am: * src/commands/Makefile.am: Added new files to build. 2008-06-29 Armin Burgmeier * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Cleaned up the code a bit, implemented save all. * src/core/folder.cpp: Emit document_changed with NULL argument in case the last document has been removed. 2008-06-28 Armin Burgmeier * pixmaps/save-all.svg: * pixmaps/Makefile.am: Added icon for the save all menu item, contributed by Benjamin Herr * inc/core/iconmanager.hpp: * src/core/iconmanager.cpp: Add it to the icon manager. * src/core/header.cpp: Add it to the menu. * src/commands/file-commands.cpp: Fix a crash when unsubscribing from a session after having opened the file chooser to save a file. 2008-06-28 Armin Burgmeier * inc/core/documentinfostorage.hpp: * src/core/documentinfostorage.cpp: Moved from operations/documentinfostorage.[hc]pp. Also added the get_key() method and added overloads of get_info and set_info that take a key instead of browser and iter. * inc/operations/operation-open.hpp: Fixed include of documentinfostorage.hpp. * inc/operations/operation-save.hpp: * src/operations/operation-save.cpp: Implemented saving of documents. This currently does refuse to overwrite existing files due to a bug in giomm, see http://bugzilla.gnome.org/show_bug.cgi?id=540656. * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Store a storage info key, so that on save the corresponding info can be updated. * inc/core/folder.hpp: * src/core/folder.cpp: Pass a correct storage info key to newly created documents. * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Pass a storage info key to the folder when a new document is opened because of a new subscription. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Implemented save and save as functionality. * inc/operations/operations.hpp: * src/operations/operations.cpp: Added save_document(). * src/window.cpp: Pass info storage to browser and file commands. * inc/core/Makefile.am: * inc/operations/Makefile.am: * src/core/Makefile.am: * src/operations/Makefile.am: Add new and moved files to build. 2008-06-28 Armin Burgmeier * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Set info text in DocWindow and make the document readonly when the connection to the publisher has been lost. * src/core/docwindow.cpp: Allow user to be NULL in set_active_user(). * src/core/folder.cpp: Set icon in tab label when the connection to the document's publisher has been lost. 2008-06-27 Armin Burgmeier * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Make sure subscription progress is only shown for sessions that are synchronized, not for sync-ins. * inc/core/preferences.hpp: Removed the non-const operator Type& since it allows changing the Properties content without notification. Also added get() in analogy to set(). * inc/operations/operation-open.hpp: * src/operations/operation-open.cpp: Take a Preferences in the constructor, add a user to the session before synchronizing it to the server so that we can start editing the document before the synchronization is complete. * inc/operations/operations.hpp: * src/operations/operations.cpp: * src/window.cpp: Pass the Preferences object to OperationOpen. * src/operations/operation-new.cpp: Automatically Subscribe to newly created documents. 2008-06-27 Armin Burgmeier * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Watch synchronization and join user for every session subscribed to, not only sessions that have been subscribed to by the BrowserCommands. * src/core/folder.cpp: Fixed a typo in a comment 2008-06-25 Yarek Tyshchenko (Merged from master): * configure.ac: Require ige-mac-integration when Gobby is compiled natively on OS X. * src/core/header.cpp: Integrate the menu bar into the main OS X menu bar. 2008-06-22 Armin Burgmeier * src/operations/documentinfostorage.cpp: Added return value for load_document, fixed storage of "root" node (was in top-level instead of ), * src/operations/operation-open.cpp: Added a TODO comment to remmove memmove. 2008-06-22 Armin Burgmeier * inc/operations/documentinfostorage.hpp: * src/operations/documentinfostorage.cpp: Disconnect from the set-browser signal handler on destruction. 2008-06-21 Armin Burgmeier * inc/util/file.hpp: * src/util/file.cpp: * inc/util/Makefile.am: * src/util/Makefile.am: Added file.hpp/.cpp containing utility functions to deal with the filesystem. Currently, a function that creates a directory and all its parent if necessary is implemented. * inc/util/config.hpp: * src/util/config.cpp: Make use of that function in the destructor. * inc/util/resolv.hpp: Include since we use std::auto_ptr<>. * inc/operations/documentinfostorage.hpp: * src/operations/documentinfostorage.cpp: Added class that stores local information on known documents such as the local location, the encoding and the eol style. * inc/operations/operation-open.hpp: * src/operations/operation-open.cpp: Implemented opening documents from files, via giomm. * inc/operations/Makefile.am: * src/operations/Makefile.am: Add the new source files to the build. * inc/operations/operations.hpp: * src/operations/operations.cpp: Added encoding parameter to create_document(), added DocumentInfoStorage member. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Added functionlity for the Open menu item. * inc/window.hpp: * src/window.cpp: Instantiate a DocumentInfoStorage, pass to Operations. * src/main.cpp: Initialize giomm. * configure.ac: Added giomm as a dependency. 2008-05-19 Armin Burgmeier * inc/Makefile.am: * inc/operations/Makefile.am: * inc/operations/operation-new.hpp: * inc/operations/operations.hpp: * src/Makefile.am: * src/operations/Makefile.am: * src/operations/operation-new.cpp: * src/operations/operations.cpp: Added Operation subsystem, handling tracking of asynchronous operations. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Make use of OperationNew to create new documents. * inc/window.hpp: * src/window.cpp: Instantate an Operations object, pass to FileCommands. * configure.ac: * Makefile.am: Create new makefiles, link libgobby-operations.h. 2008-05-18 Armin Burgmeier * inc/core/Makefile.am: * src/core/Makefile.am: * inc/core/noteplugin.hpp: * src/core/noteplugin.cpp: Added text plugin as a public global constant. * src/window.cpp: Adapt. 2008-05-18 Armin Burgmeier * src/dialogs/documentlocationdialog.cpp: Initially refilter the InfGtkBrowserModelFilter, otherwise previously explored nodes are always visible. * src/commands/file-commands.cpp: Adapt to the new infinote API in infc_browser_add_note(). 2008-05-09 Armin Burgmeier * inc/dialogs/documentlocationdialog.hpp: * src/dialogs/documentlocationdialog.cpp: Only allow ACCEPT response when a subdirectory is selected, filter all nodes but subdirectories. * src/commands/file-commands.cpp: Hide DocumentLocationDialog after usage. 2008-05-09 Armin Burgmeier * inc/util/Makefile.am: * inc/util/color.hpp: * inc/util/config.hpp: * inc/util/defaultaccumulator.hpp: * inc/util/encoding.hpp: * inc/util/i18n.hpp: * inc/util/resolv.hpp: * inc/util/serialize.hpp: * inc/core/Makefile.am: * inc/core/browser.hpp: * inc/core/docwindow.hpp: * inc/core/encodingselector.hpp: * inc/core/folder.hpp: * inc/core/header.hpp: * inc/core/iconmanager.hpp: * inc/core/preferences.hpp: * inc/core/statusbar.hpp: * inc/core/toolwindow.hpp: * inc/dialogs/Makefile.am: * inc/dialogs/finddialog.hpp: * inc/dialogs/gotodialog.hpp: * inc/dialogs/initialdialog.hpp: * inc/dialogs/preferencesdialog.hpp: * inc/commands/Makefile.am: * inc/commands/browser-commands.hpp: * inc/window.hpp: * inc/Makefile.am: * src/util/Makefile.am: * src/util/color.cpp: * src/util/config.cpp: * src/util/encoding.cpp: * src/util/i18n.cpp: * src/util/resolv.cpp: * src/util/serialize.cpp: * src/core/Makefile.am: * src/core/browser.cpp: * src/core/docwindow.cpp: * src/core/encodingselector.cpp: * src/core/folder.cpp: * src/core/header.cpp: * src/core/iconmanager.cpp: * src/core/preferences.cpp: * src/core/statusbar.cpp: * src/core/toolwindow.cpp: * src/dialogs/Makefile.am: * src/dialogs/finddialog.cpp: * src/dialogs/gotodialog.cpp: * src/dialogs/initialdialog.cpp: * src/dialogs/preferencesdialog.cpp: * src/commands/Makefile.am: * src/commands/browser-commands.cpp: * src/dragdrop.cpp: * src/main.cpp: * src/window.cpp: * src/Makefile.am: * Makefile.am: * configure.ac: Reordered file hierarchy, fixing includes. * inc/dialogs/documentlocationdialog.hpp: * src/dialogs/documentlocationdialog.cpp: Added a dialog allowing the user to select on which directory and server to create a document. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Added functionality for File/New using the new dialog. 2008-04-20 Armin Burgmeier * inc/browser.hpp: * src/browser.cpp: Adapt to new infinote API by using InfGtkBrowserStore instead of InfGtkBrowserModel. 2008-04-20 Armin Burgmeier * src/browser.cpp: Fixed a format string (%1 instead of %0). 2008-04-13 Armin Burgmeier * inc/docwindow.hpp: * src/docwindow.cpp: Added DocWindow::set_active_user(). * src/folder.cpp: Show icon in the tab representing the current subscription state. * src/commands/browser-commands.cpp: Set active user after user join. 2008-04-13 Armin Burgmeier * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Track synchronization, perform a user join after synchronization, show error and status messages. * inc/docwindow.hpp: * src/docwindow.cpp: Implemented DocWindow::set_info() and DocWindow::unset_info(). * src/folder.cpp: Changed Folder::lookup_document() to use a PageList and an iterator instead of traversing the list by index. * src/window.cpp: Pass the preferences to the BrowserCommands because it needs to find the name for the user to join. 2008-04-12 Armin Burgmeier * inc/commands/browser-commands.hpp: * inc/commands/Makefile.am * src/commands/browser-commands.cpp: * src/commands/Makefile.am: Added functionality to subscribe to a session. * inc/Makefile.am: * src/Makefile.am: Recurse into the commands subdirectory. * Makefile.am: Link src/commands/libgobby-commands.a * configure.ac: Create inc/commands/Makefile.am and src/commands/Makefile.am. * inc/folder.hpp: * src/folder.cpp: Added switch_to_document(), make close button in tab label look correct. * src/header.cpp: Rename label for save all menu item from "Save all" to "Save All". * src/docwindow.cpp: Make the window non-editable by default. We make it editable later when a local user has joined. * inc/window.hpp: * src/window.cpp: Added BrowserCommands object. 2008-04-12 Armin Burgmeier * contrib/gobby-0.0.20050522.ebuild: * contrib/artwork/chat.svg: * test/test_document.cpp: Removed, these are outdated. * inc/default_accumulator.hpp: * inc/serialize.hpp: * src/serialize.cpp: Added. These are basically copies from net6, but in the Gobby namespace. * inc/i18n.hpp: * src/i18n.cpp: Moved from inc/common.hpp or src/common.cpp, respectively. * inc/application_state.hpp: * inc/buffer_def.hpp: * inc/chat.hpp: * inc/colorsel.hpp: * inc/historyentry.hpp: * inc/document.hpp: * inc/document_settings.hpp: * inc/entrydialog.hpp: * inc/fileentry.hpp: * inc/gselector.hpp: * inc/hostdialog.hpp: * inc/hostprogressdialog.hpp: * inc/ipc.hpp: * inc/joindialog.hpp: * inc/joinprogressdialog.hpp: * inc/logview.hpp: * inc/passworddialog.hpp: * inc/progressdialog.hpp: * inc/regex.hpp: * inc/togglewindow.hpp: * inc/unix.hpp: * src/application_state.cpp: * src/buffer_def.cpp: * src/chat.cpp: * src/colorsel.cpp: * src/document.cpp: * src/document_settings.cpp: * src/entrydialog.cpp: * src/fileentry.cpp: * src/gselector.cpp: * src/historyentry.cpp: * src/hostdialog.cpp: * src/hostprogressdialog.cpp: * src/ipc.cpp: * src/joindialog.cpp: * src/joinprogressdialog.cpp: * src/logview.cpp: * src/passworddialog.cpp: * src/preferencesdialog.cpp: * src/progressdialog.cpp: * src/regex.cpp: * src/togglewindow.cpp: * src/unix.cpp: Removed. They are no longer required for infinote, or at least not in a such way that a complete rewrite would not be easier anyway. * inc/config.hpp: * inc/dragdrop.hpp: * inc/encoding.hpp: * inc/finddialog.hpp: * inc/folder.hpp: * inc/statusbar.hpp: * inc/window.hpp: * src/browser.cpp: * src/config.cpp: * src/dragdrop.cpp: * src/encoding.cpp: * src/encoding_selector.cpp: * src/finddialog.cpp: * src/folder.cpp: * src/gotodialog.cpp: * src/header.cpp: * src/icon.cpp: * src/initialdialog.cpp: * src/main.cpp: * src/resolv.cpp: * src/statusbar.cpp: * src/window.cpp: Removed any occurences of net6/obby stuff, replaced by equivalent functionality if possible. * po/POTFILES.in: Removed source files, added a TODO comment to readd them as soon as the required files are ready. * Makefile.am: * contrib/Makefile.am: * contrib/artwork/Makefile.am: * inc/Makefile.am: * pixmaps/Makefile.am: * src/Makefile.am: * win32/Makefile.am: Hierarchical build instead of only a top-level Makefile.am, so that each Makefile.am is smaller and easier to use. * configure.ac: Remove dependency on net6 and obby. 2008-04-12 Armin Burgmeier * src/preferences.cpp: Changed default value for homeend_smart to false. * inc/resolv.hpp: * src/resolv.cpp: Changed signature of callbacks to include the ResolvHandle. * inc/browser.hpp: * src/browser.cpp: Added resolv map to correctly cancel pending resolvs on destruction. * inc/statusbar.hpp: * src/statusbar.cpp: Correctly remove the timeout connection on destruction of a statusbar message. * inc/folder.hpp: * inc/docwindow.hpp: * src/folder.cpp: * src/docwindow.cpp: Changed Folder and DocWindow to be used with InfTextSession instead of obby::local_document_info. * inc/window.hpp: * src/finddialog.cpp: * src/gotodialog.cpp: * src/window.cpp: Adapted to Folder and DocWindow changes. 2008-03-13 Armin Burgmeier * inc/statusbar.hpp: * src/statusbar.cpp: Removed old functionality, add methods to add and remove status messages. * inc/window.hpp: * inc/window.cpp: Adapt. 2008-03-09 Armin Burgmeier * inc/documentlist.hpp: * inc/userlist.hpp: * src/documentlist.cpp: * src/userlist.cpp: * Makefile.am: Removed. * inc/preferences.hpp: * src/preferences.cpp: Added show_toolbar and show_statusbar preferences. * inc/initialdialog.hpp: Added missing include (gtkmm/image.h). * inc/header.hpp: * src/header.cpp: Redesign menu/toolbar to better match common editors. * inc/window.hpp: * src/folder.cpp: * src/window.cpp: Adapt to above changes, current UI disfunctional. 2008-03-06 Armin Burgmeier * inc/resolv.hpp: * src/resolv.cpp: Code to asynchronously resolve host names. * inc/browser.hpp: * src/browser.cpp: Added Browser class that shows remote directories to browse (via InfGtkBrowserView), and that allows to create direct connections. * inc/window.hpp: * src/window.cpp: Show browser in a sidepane to the left, remove chat. * src/initialdialog.cpp: Set window title. * Makefile.am: Added browser.{h,c}pp and resolv.{h,c}pp * configure.ac: Depend on infinote. 2008-03-03 Armin Burgmeier * inc/initialdialog.hpp: * src/initialdialog.cpp: * Makefile.am: Added an initial welcome dialog. * inc/window.hpp: * src/window.cpp: Show initial dialog the first time gobby is started. 2008-03-03 Armin Burgmeier * inc/preferencesdialog.hpp: * src/preferencesdialog.cpp: Store chosen preferences. * inc/preferences.hpp: Add Preferences::Option::set for convenience. * inc/colorutil.hpp: * src/colorutil.cpp: * Makefile.am: Added colorutil containing some utility functions to handle colors. 2008-03-02 Armin Burgmeier * configure.ac: Require at least gtkmm 2.12, drop gtksourceview1 support, post-branch bump to 0.4.90. * inc/preferences.hpp: * src/preferences.cpp: Removed options not required for infinote, added user preferences page. * inc/preferencesdialog.hpp: * src/preferencesdialog.cpp: Adapted and redesigned preferences dialog to better meet the Gnome HIG. Currently disfunctional. * inc/header.hpp: * inc/folder.hpp: * inc/docwindow.hpp: * inc/window.hpp: * src/header.cpp: * src/folder.cpp: * src/chat.cpp: * src/togglewindow.cpp: * src/docwindow.cpp: * src/window.cpp: Adapt. 2008-01-31 Armin Burgmeier * src/config.cpp: File test before loading XML file, this seems to crash on Windows otherwise. 2008-01-24 Philipp Kern * src/header.cpp: * src/preferences.cpp: * src/preferencesdialog.cpp: * src/unix.cpp: Fix build failures with g++-4.3 (thanks to Matthias Klose) 2008-01-20 Armin Burgmeier * src/preferences.cpp: * src/preferencesdialog.cpp: * src/header.cpp: Don't crash when no GtkSourceView languages are installed. 2008-01-03 Philipp Kern * contrib/gobby.desktop: adhere to the freedesktop.org Desktop Entry Specification v1.0 2008-01-01 Armin Burgmeier * src/preferencesdialog.cpp: Add some spacing to the document management option group. 2008-01-01 Philipp Kern * configure.ac: bump version to 0.4.6 * NEWS: documented the changes 2008-01-01 Philipp Kern * po/pt_BR.po, po/pl.po, po/ko.po: added new translations from Rosetta * po/*.po: translation roundup fetched from Rosetta * configure.ac: add pt_BR, pl and ko 2008-01-01 Philipp Kern * configure.ac: bump obby dependency to 0.4.5 to get IPv6 autodiscovery 2007-12-16 Armin Burgmeier * src/toolwindow.hpp: * src/toolwindow.cpp: Hide on escape. 2007-11-27 Armin Burgmeier * src/docwindow.cpp: Enable indentation-on-tab in gtksourceview1 * configure.in: Require gtksourceview >= 1.8. 2007-10-14 Armin Burgmeier * inc/preferencesdialog.hpp: * src/preferencesdialog.cpp: Don't use the tooltip for the smart home/end option when gtkmm was built without deprecated API. * src/logview.cpp: Replaced scroll_to_mark by scroll_to because the former is deprecated. * src/docwindow.cpp: Fix gtksourceview1 build. 2007-09-30 Benjamin Herr * src/window.cpp: Make sure that the two buttons on the confirmation dialog when exiting gobby with a session running do not have the same mnemonics. 2007-09-20 Philipp Kern * src/ipc.cpp: added unistd.h to the list of includes to ease porting to OpenBSD 2007-09-17 Armin Burgmeier * src/preferencesdialog.cpp: * src/header.cpp: * src/docwindow.cpp: * src/preferences.cpp: Adapted to latest (and final) GtkSourceView2 API. 2007-08-27 Armin Burgmeier * src/historyentry.cpp: Avoid Gtk::Entry::set_text() because it seems to crash on Vista. Use Gtk::Editable::delete_text and Gtk::Editable::insert_text instead. 2007-08-27 Armin Burgmeier * src/window.cpp: Make sure not to try to send an unsubscription request twice. 2007-08-18 Armin Burgmeier * src/icon.cpp: Win32 build fix. 2007-08-18 Philipp Kern * inc/window.hpp: * src/window.cpp: do not close document if `save as' is cancelled [fixes #288] 2007-08-18 Philipp Kern * NEWS: * configure.ac: bump version to 0.4.5 and document the changes 2007-08-12 Armin Burgmeier * src/window.cpp: Set IO channel encoding to "" when saving files because we do the necessary conversion ourselves before saving. This fixes saving non-UTF-8 encoded files. * src/icon.cpp: Convert pixmap paths to UTF-8 on windows, allowing gobby to run inside paths containing non-ASCII characters. * src/preferences.cpp: Include features.hpp for correct gtksourceview2 detection. 2007-08-05 Philipp Kern * Place a `Save' button instead of a plain `OK' button in the `Save file' dialog and set it as the default response. 2007-07-22 Philipp Kern * Fix compilation with GtkSourceView 1 2007-07-22 Philipp Kern * New Swedish translation by Daniel Nylander [fixes #282] 2007-07-09 Philipp Kern * src/main.cpp: bugfix to use IPC by default 2007-07-09 Philipp Kern * inc/joindialog.hpp: * src/joindialog.cpp: add support for IPv6 autodiscovery 2007-07-09 Armin Burgmeier * src/preferencesdialog.cpp: * src/header.cpp: * src/docwindow.cpp: * src/preferences.cpp: Adjusted for gtksourceview2 API changes. 2007-06-16 Philipp Kern * configure.ac: fixed POSIX compliance 2007-06-16 Philipp Kern * po/POTFILES.in: add more source files to be scanned for strings to be translated * po/gobby.pot: update, mainly line numbers * po/ca.po: * po/pt.po: * po/es.po: * po/fr.po: * po/de.po: * po/sv.po: * po/zh_CN.po: translation roundup: new line numbers, some strings changed by Rosetta contributors * configure.ac: * po/it.po: * po/ru.po: new translations imported from Rosetta * NEWS: documented new translations 2007-06-15 Philipp Kern * NEWS: * configure.ac: bump version to 0.4.4 and document the changes * mkinstalldirs: removed from the repository, is symlinked through autogen.sh 2007-06-15 Philipp Kern * src/finddialog.cpp: * src/window.cpp: * src/statusbar.cpp: * src/folder.cpp: * src/document.cpp: * src/preferencesdialog.cpp: * src/main.cpp: * src/header.cpp: * src/docwindow.cpp: * src/preferences.cpp: * inc/window.hpp: * inc/document.hpp: * inc/header.hpp: * inc/docwindow.hpp: * inc/preferences.hpp: * inc/documentlist.hpp: fixed the indentation from two spaces to one tab and removed some cruft 2007-06-13 Philipp Kern * src/chat.cpp: use Gtk::Entry::delete_text(...) instead of Gtk::Entry::set_text(""); the latter crashes on Windows Vista 2007-06-12 Armin Burgmeier * src/documentlist.cpp: fixed a bug related to the document list's selection (clear the selection in obby_start) [fixes #271] 2007-05-27 Armin Burgmeier * inc/sourceview: * src/sourceview: * Makefile.am: Remove hand-coded GtkSourceView wrappers. * configure.ac: Added --with-gtksourceview2 configure option. * src/finddialog.cpp: * src/window.cpp: * src/statusbar.cpp: * src/folder.cpp: * src/document.cpp: * src/preferencesdialog.cpp: * src/main.cpp: * src/header.cpp: * src/docwindow.cpp: * src/preferences.cpp: * src/gotodialog.cpp: * inc/window.hpp: * inc/folder.hpp: * inc/document.hpp: * inc/preferencesdialog.hpp: * inc/header.hpp: * inc/docwindow.hpp: * inc/preferences.hpp: Support GtkSourceview2, use GtkSourceView C API directly. 2007-05-10 Benjamin Herr * inc/documentlist.hpp: * src/documentlist.cpp: sort document list alphabetically 2007-04-23 Philipp Kern * src/togglewindow.cpp: ToggleWindow needs UTILITY hints in any case * src/toolwindow.cpp: use DIALOG unconditionally on every ToolWindow 2007-04-23 Philipp Kern * src/toolwindow.cpp: use DIALOG hint on *nix, UTILITY on Win32 * src/window.cpp: copyright notice renewed 2007-04-16 Armin Burgmeier * src/chat.cpp: Reintroduce user tags in chat which got accidentaly lost in revision [1515]. 2007-04-15 Armin Burgmeier * src/joindialog.cpp: Don't allow selection in the error case, use a single column for both icon and text. Make the dialog resizable. 2007-04-15 Philipp Kern * src/joindialog.cpp: failure handling for exceptions thrown by discover 2007-04-14 Armin Burgmeier * src/joindialog.cpp: Only access the currently selected row to set the content of the host and port entries when there actually is a selected row. 2007-04-14 Armin Burgmeier * inc/joindialog.hpp: * src/joindialog.cpp: Take a obby::zeroconf_base instead of obby::zeroconf, do not install timer when using avahi as zeroconf backend. * inc/window.hpp: * src/window.cpp: Use Glib mainloop for avahi zeroconf backend, otherwise poll it every 1500 milliseconds. 2007-04-14 Philipp Kern * configure.ac, Makefile.am: check for Avahi in obby and link against avahi-glib if Avahi proper is used for Zeroconf support; provide an additional define WITH_AVAHI for usage within the code 2007-04-09 Armin Burgmeier * inc/folder.hpp: * src/folder.cpp: Added a select_document() function that selects the page that shows the given document. * src/userlist.cpp: * src/documentlist.cpp: Make use of it. 2007-04-09 Philipp Kern * src/window.cpp: * inc/documentlist.hpp: * src/documentlist.cpp: allow the same in the document list 2007-04-09 Philipp Kern * inc/window.hpp: * src/window.cpp: pass a folder object to the user list * inc/userlist.hpp: * src/userlist.cpp: doubleclicks on already subscribed documents now cause the document to be selected 2007-04-09 Philipp Kern * configure.ac: bump version to 0.4.3 * NEWS: note down usability improvements in 0.4.3 2007-04-09 Philipp Kern * src/window.cpp: do not show tabs if only one document present [fixes #220] 2007-04-08 Philipp Kern * src/preferencesdialog.cpp: add toolbar setting for "text besides icon" * src/header.cpp: set important flags of the actions according to the sensitivity 2007-04-08 Philipp Kern * src/window.cpp: * src/chat.cpp: set urgency hint on window only when chat widget is visible [fixes #256] 2007-04-07 Philipp Kern * inc/userlist.hpp: * src/userlist.hpp: allow doubleclicks on documents in the userlist to subscribe to them [fixes #225] 2007-04-07 Philipp Kern * inc/document_settings.hpp: signals now pass a non-const LocalDocumentInfo reference * inc/window.hpp: * src/window.cpp: automatically opened tabs should not grab the focus [finally fixes #232] 2007-04-07 Philipp Kern * inc/document_settings.hpp: * src/document_settings.cpp: add a flag whether the document was opened automatically or not 2007-04-02 Philipp Kern * src/window.cpp: * inc/preferences.hpp: * src/preferences.cpp: * inc/preferencesdialog.hpp: * src/preferencesdialog.cpp: add new configuration option to open new remotely-created documents automatically [fixes #232] 2007-04-02 Philipp Kern * src/window.cpp: Mention avahi-daemon in failure message. 2007-03-27 Philipp Kern * src/window.cpp: Output an error to the console if the zeroconf daemon is unavailable instead of displaying an annoying message box. 2007-03-27 Philipp Kern * src/preferences.cpp: Fix some mime types. It seems that they are inconsistent over different distributions, at least the fixed ones are commonly changed. 2007-03-24 Armin Burgmeier * inc/window.hpp: * src/window.cpp: Focus find and goto dialogs always when the corresponding actions are triggered. Also do not load them at startup but as soon as they are required, to improve startup time [fixes #251]. 2007-03-21 Armin Burgmeier * src/chat.cpp: Do not print an incoming message as much times as its number of lines, but only once. 2007-02-25 Armin Burgmeier * src/window.cpp: Open output file to save a document with Glib::IOChannel instead of std::ofstream to get correct conversion of filename encoding from glib. 2007-02-25 Armin Burgmeier * src/ipc.cpp: Define _WIN32_WINNT to get HWND_MESSAGE API. 2007-02-25 Philipp Kern * NEWS, configure.in: Bump version to 0.4.2 and document important changes. 2007-01-02 Philipp Kern Moved GlobalUnlock further downwards (The pointer is only guaranteed to point to the right place within GlobalLock and GlobalUnlock, thus it might point to an invalid memory block. [Michael Walter]) 2006-12-31 Armin Burgmeier Accept absolute file names for IPC [fixes #237] 2006-11-08 Armin Burgmeier Keep viewport position on remote operations 2006-11-04 Armin Burgmeier Allow subscribing by double click on document list 2006-11-04 Armin Burgmeier Libtool stuff 2006-11-04 Armin Burgmeier Do not set modified flag when opening a local file [fixes #214] 2006-10-26 Philipp Kern Put the urgency hint into the preferences dialog 2006-09-05 Philipp Kern MingW compilation fix: windres now detected by autoconf 2006-09-05 Philipp Kern MingW compilation fix 2006-08-27 Philipp Kern Updated ChangeLog for release 2006-08-27 Philipp Kern Bump version to 0.4.1 2006-08-21 Armin Burgmeier Load pixmaps from pixmaps/ if not found in PIXMAPS_DIR 2006-08-21 Philipp Kern Move the PNGs out of contrib/artwork into pixmaps 2006-08-21 Philipp Kern Remove inline pixmaps and use the external graphics in any case 2006-08-17 Philipp Kern Removed Gobby::Atomic, no longer needed 2006-08-17 Philipp Kern Translation roundup 2006-08-17 Philipp Kern Updated the manual page 2006-08-16 Philipp Kern Bump version to 0.4.0rc4 and depend on obby-0.4.0rc4 or higher 2006-08-16 Armin Burgmeier Preselect line in GotoDialog 2006-08-16 Armin Burgmeier Do not allow self-highlighting 2006-08-15 Philipp Kern Updated NEWS 2006-08-14 Philipp Kern Moved the contents of the View menu to Edit 2006-08-14 Armin Burgmeier Set type hint of tool windows to UTILITY 2006-08-11 Armin Burgmeier Renamed disable-ipc to new-instance 2006-08-08 Armin Burgmeier Made statusbar more standard-compliant 2006-08-08 Armin Burgmeier Added --join and --disable-ipc command line options 2006-08-08 Armin Burgmeier Set urgency hint when chat messages arrive 2006-08-08 Philipp Kern Save user-modified palettes in the configuration [fixes #181] 2006-08-07 Philipp Kern Updated ChangeLog for release 2006-08-07 Philipp Kern Bumped version to 0.4.0rc3 2006-08-07 Philipp Kern Strictened the build-dependency on obby-0.4.0rc3 2006-06-16 Philipp Kern GCC 3.3 compile fixes 2006-06-15 Philipp Kern Do not crash when threads are already initialised 2006-06-07 Philipp Kern Replace "Shows up" by "Displays" 2006-06-07 Philipp Kern Updated ChangeLog for release 2006-06-06 Philipp Kern Depend on obby >= 0.4.0rc2; bump version to 0.4.0rc2 2006-06-07 Armin Burgmeier Fix SEGV caused by wrong usage of Gtk::AccelKey [fixes #163] 2006-06-04 Philipp Kern Translation roundup; new Catalan translation, thanks to Jordi Mallach 2006-06-04 Philipp Kern Bumped gobby.pot to reflect the current source code locations 2006-05-07 Philipp Kern Add document test to the `make check' testrunner 2006-05-07 Armin Burgmeier Added append tests 2006-05-07 Armin Burgmeier Added support for obby::text::npos to Document::erase and Document::get_slice 2006-05-07 Armin Burgmeier Added Document test 2006-05-07 Armin Burgmeier Added Document::clear() 2006-05-06 Philipp Kern Check for substrings in Win32 detection 2006-04-24 Armin Burgmeier Added contrib/artwork/doclist.png to EXTRA_DIST [fixes #152] 2006-04-19 Philipp Kern Add a man page for Gobby 2006-04-16 Philipp Kern Do not depend on JoinDialog creation on invokation 2006-04-15 Philipp Kern Check for a generic zeroconf target in obby 2006-04-15 Philipp Kern Expand the artists' credits 2006-04-11 Philipp Kern Updated ChangeLog for release 2006-04-10 Armin Burgmeier src/gselector.cpp: Added idle call in timout handler. This is a workaround for a possible bug in glib: A connection to Glib::signal_io is not triggered without waking up the main loop once more. 2006-04-10 Philipp Kern Enable URL support on Mac OS X 2006-04-10 Philipp Kern Updates to INSTALL 2006-04-10 Philipp Kern Little wrapping issue in translation 2006-04-10 Philipp Kern Reorder the PKG_CHECK_MODULES calls 2006-04-09 Armin Burgmeier Use Gobby's color selection palette in JoinProgressDialog color prompt 2006-04-09 Armin Burgmeier Fixed a thread-related issue that could cause a SEGV on connection loss 2006-04-01 Armin Burgmeier Inherit Document from sigc::trackable 2006-03-31 Philipp Kern gtk-connect does not work on buttons on Mac; reason unknown 2006-03-31 Philipp Kern Update version to 0.4.0rc1 2006-03-31 Philipp Kern Some kind of translation roundup, very limited 2006-03-30 Philipp Kern Empty the TODO for now 2006-03-31 Philipp Kern Updated README 2006-03-30 Armin Burgmeier Align info labels in preferences dialog to the left 2006-03-30 Armin Burgmeier Set priority of user tags lower than GtkSourceView's bracket highlighting tag 2006-03-30 Armin Burgmeier Initialize gnome-vfs correctly 2006-03-30 Armin Burgmeier Link http URLs in LogView when compiled --with-gnome [fixes #80] 2006-03-30 Philipp Kern Include the stat header 2006-03-30 Armin Burgmeier Fixed config class 2006-03-29 Armin Burgmeier Fixed Config::ParentEntry::supply_value 2006-03-29 Philipp Kern Depend on gnome-vfs-2.0 when compiled with GNOME support 2006-03-29 Armin Burgmeier Refactored Config class 2006-03-28 Armin Burgmeier Print remove command errors to chat 2006-03-28 Armin Burgmeier Use default context in ipc.cpp 2006-03-28 Armin Burgmeier Avoid unnecessary compiler warnings 2006-03-27 Armin Burgmeier Added timeout capability to GSelector, enable keepalives [fixes #131] 2006-03-25 Armin Burgmeier Added document list item 2006-03-25 Armin Burgmeier Remember position of tool windows 2006-03-25 Armin Burgmeier set initially given font name in Font::set when font selector is never realized 2006-03-25 Armin Burgmeier Send command line parameters only to other gobbys owned by the same user 2006-03-25 Armin Burgmeier Win32 IPC using hidden windows 2006-03-25 Armin Burgmeier Changed another occurence of obby-0.3 in configure script 2006-03-25 Philipp Kern Depend on net6-1.3 and obby-0.4 2006-03-25 Armin Burgmeier Pass command line parameters to remote Gobby instanc 2006-03-24 Philipp Kern Bump version to 0.3.99 to avoid confusion with final versions 2006-03-24 Armin Burgmeier Do not explictely request encryption, this is done by obby 2006-03-24 Armin Burgmeier Pack statusbar frames without space 2006-03-24 Armin Burgmeier Some fixes to JoinProgressDialog 2006-03-24 Philipp Kern Cosmetic changes to remove the references to RSA 2006-02-08 Benjamin Herr fixed possible out-of-bounds condition in convert2unix 2006-03-20 Armin Burgmeier Protect GSelector by a mutex 2006-03-17 Philipp Kern Initial NEWS section for 0.4.0 2006-03-19 Armin Burgmeier Send chat messages beginning with '/' as command 2006-03-19 Armin Burgmeier Activate goto button when pressing enter 2006-03-17 Philipp Kern We're in 2006 2006-03-17 Armin Burgmeier Reenabled user color change (has been dropped accidently) 2006-03-17 Armin Burgmeier Replaced DefaultDialog by Gtk::Dialog::set_default_response [fixes #117] 2006-03-15 Armin Burgmeier Use Gtk::Statusbar instead of Gtk::Frame for status bar 2006-03-15 Armin Burgmeier Added toggle button to hide chat [fixes #134] 2006-03-15 Armin Burgmeier Added chat icon by Benjamin Herr 2006-03-15 Armin Burgmeier Added font selection to preferences [fixes #123] 2006-03-14 Armin Burgmeier Implemented EncodingSelector::remove_text for compatibility with gtkmm < 2.8 2006-03-14 Armin Burgmeier Reopen host/join dialog after hosting/joining failed [fixes #130] 2006-03-10 Armin Burgmeier Show suffixed name in window title and document list [fixes #111] 2006-03-10 Armin Burgmeier Removed "Connection is now encrypted" debug message 2006-03-10 Armin Burgmeier Hide mime type column in file preferences page 2006-03-10 Armin Burgmeier Added mnemonics to main menu bar 2006-03-10 Armin Burgmeier Removed remaining references to mimemap 2006-03-09 Armin Burgmeier Ctrl+Alt+PgDown/Up shifts document [fixes #112] 2006-03-09 Armin Burgmeier Added filelist to preferences 2006-03-08 Armin Burgmeier Replaced mime map by file list in preferences 2006-03-07 Armin Burgmeier Disable OK button in password dialog when passwords do not match 2006-03-07 Armin Burgmeier Added application state frags controlling header sensitivity 2006-03-06 Armin Burgmeier Do not allow subscriptions to non-UTF-8-encoded documents 2006-03-06 Armin Burgmeier Store original encoding in document settings [fixes #65] 2006-03-05 Armin Burgmeier Added encoding selection in file chooser 2006-03-05 Armin Burgmeier Do not delete buffer after session closure, allow saving of closed sessions 2006-03-02 Philipp Kern Transform the ok button into a host one in the host dialog 2006-03-02 Philipp Kern Use a connect button instead of ok in the join dialog 2006-02-28 Armin Burgmeier Introduced document settings to store document's original encoding 2006-02-28 Armin Burgmeier Send UTF-8 as encoding 2006-02-26 Armin Burgmeier Disable subscribe button when subscription request has been sent [fixes #126] 2006-02-24 Armin Burgmeier alt+n switches tabs 2006-02-23 Armin Burgmeier Restored left gravity cursor on remote insert 2006-02-23 Armin Burgmeier Gobby seems to work now, but still needs further testing 2006-02-22 Armin Burgmeier Made Gobby compile again - does still not work 2006-02-19 Armin Burgmeier Adjusted GSelector to new selector principle 2006-02-14 Philipp Kern Experimental patch for client-initiated encryption 2006-02-06 Armin Burgmeier Replaced buffer wrappers by GSelector 2006-02-03 Armin Burgmeier Added obby/document.hpp include since it is heavily decoupled from obby itself 2006-02-02 Armin Burgmeier Changed buffer wrapper to match obby's new_net() 2006-01-30 Armin Burgmeier Temporary adjustments for document template parameter in document info 2006-01-29 Armin Burgmeier Temporary adjustments to document type template in obby::document_info 2006-01-26 Armin Burgmeier Changes for new net6 IO conditions 2006-01-11 Trac TODO updated 2006-01-07 Trac TODO updated 2005-12-31 Trac TODO updated 2005-12-13 Trac TODO updated 2005-12-11 Trac TODO updated 2005-12-10 Philipp Kern Forgot to translate at least one string 2005-12-08 Philipp Kern Translation roundup 2005-12-07 Philipp Kern Armin spotted the problem with encodings in the chat window 2005-11-24 Philipp Kern Translation roundup 2005-11-24 Philipp Kern Require net6-1.2 >= 1.2.1 2005-11-23 Trac TODO updated 2005-11-22 Armin Burgmeier Removed covariant returns from buffer wrapper 2005-11-21 Armin Burgmeier Do not crash if empty config is found 2005-11-20 Philipp Kern Search for obby in the paths specified by pkg-config 2005-11-20 Armin Burgmeier Give initial focus to close button in close confirmation dialog 2005-11-19 Armin Burgmeier Updated README and AUTHORS 2005-11-19 Armin Burgmeier Atomic write failed if the destination directory was not on the same device as the temporary directory, use normal write 2005-11-19 Trac TODO updated 2005-11-18 Armin Burgmeier Added icon.cpp to POTFILES.in 2005-11-18 Armin Burgmeier net6::gettext_package usage 2005-11-17 Armin Burgmeier documentlist.cpp was missing in POTFILES.in 2005-11-17 Armin Burgmeier Need to link against this for OLE Drag+Drop to work 2005-11-17 Armin Burgmeier Fixed a bug in Win32 Drag+Drop 2005-11-17 Armin Burgmeier Added find- and goto dialog to POTFILES.in 2005-11-17 Armin Burgmeier Goto line Dialog [fixes #79] 2005-11-17 Philipp Kern Protect the unpublish call 2005-11-17 Armin Burgmeier Adjusted Automake.am 2005-11-17 Armin Burgmeier Introduces ToggleWindow 2005-11-17 Armin Burgmeier Win32 Drag+Drop support [fixes #71] 2005-11-17 Trac TODO updated 2005-11-16 Armin Burgmeier Use WINDOW_TYPE_HINT_UTILITY for FindDialog as well 2005-11-16 Armin Burgmeier Set WINDOW_TYPE_HINT_UTILITY window_hint for tool windows 2005-11-16 Armin Burgmeier Fixed last dependency on 2005-11-16 Armin Burgmeier Format time string according to current locale 2005-11-15 Armin Burgmeier Win32 build fixes 2005-11-15 Philipp Kern Updated NEWS 2005-11-15 Philipp Kern Translation roundup 2005-11-15 Armin Burgmeier Win32 fixes in ProgressDialog's threading concept 2005-11-15 Armin Burgmeier Prompt when the user wants to exit Gobby and a session is still open [fixes #93] 2005-11-15 Armin Burgmeier Some UI fixes 2005-11-15 Armin Burgmeier Removed dependency on GNU regex library 2005-11-15 Armin Burgmeier Working FindDialog, removed regex support 2005-11-14 Philipp Kern String correction 2005-11-13 Armin Burgmeier Find dialog works better, but some regex stuff still does not work 2005-11-13 Philipp Kern Bugfix, transmit the value correctly 2005-11-13 Philipp Kern Remember the window positions 2005-11-13 Armin Burgmeier Non-working FindDialog 2005-11-13 Philipp Kern Moved the config from window to main 2005-11-13 Philipp Kern Expand online users by default 2005-11-13 Armin Burgmeier Added missing documentlist files 2005-11-13 Trac TODO updated 2005-11-13 Armin Burgmeier Added document list, only subscribed document are shown in folder 2005-11-12 Philipp Kern Added userlist image 2005-11-12 Armin Burgmeier Precreate Gobby icon 2005-11-12 Armin Burgmeier Removed empty paned from window 2005-11-12 Armin Burgmeier Added user list as tool window 2005-11-11 Armin Burgmeier Changed user list icons 2005-11-11 Armin Burgmeier Fixed a synchronisation loss when resubscribing to a document 2005-11-11 Armin Burgmeier Implemented tree-based userlist 2005-11-09 Trac TODO updated 2005-11-07 Armin Burgmeier Made folder scrollable, decreases minimum width if many tabs are open 2005-11-07 Armin Burgmeier Initialise colour selection dialog with button's current colour in Gobby::ColorButton 2005-11-07 Armin Burgmeier Userlist using TreeView; currently disfunctional! 2005-11-07 Trac TODO updated 2005-11-06 Armin Burgmeier Update title bar correctly upon reconnection [fixes #92] 2005-11-06 Armin Burgmeier Atomic write for documents, do not append newline on write [fixes #91] 2005-11-06 Armin Burgmeier Use a left-gravity cursor on remote insert operations [fixes #84] 2005-11-06 Philipp Kern Added translator credits and link to Rosetta 2005-11-05 Armin Burgmeier pre-select the save button in close confirmation dialog 2005-11-05 Armin Burgmeier Close document just unsubscribes from the document [fixes #83] 2005-11-05 Armin Burgmeier Fixed a German translation error 2005-11-05 Armin Burgmeier Show a close confirmation dialog according to GNOME HIG [fixes #105] 2005-11-05 Armin Burgmeier Convert resulting filename to utf8 in FileEntry 2005-11-05 Armin Burgmeier Added overwrite confirmation if gtkmm is >= 2.8 2005-11-05 Trac TODO updated 2005-11-04 Armin Burgmeier Set Gobby::Icon::gobby as default window icon 2005-11-04 Armin Burgmeier Fixed a memleak in the GtkSourceView wrapper 2005-11-04 Armin Burgmeier Adjustments for inc_flags/exc_flags 2005-11-04 Philipp Kern Allow to join servers with port numbers < 1024 2005-11-03 Armin Burgmeier Fixed another bug in configure.in 2005-11-03 Armin Burgmeier Fixed GTKMM-2.8 check 2005-11-03 Armin Burgmeier Allow to change name/colour directly if it is already in use [Scott Baker] 2005-11-03 Philipp Kern Added a check for Gtkmm's version (untested) 2005-11-03 Armin Burgmeier Do not use IPv6 when hosting a session 2005-11-03 Armin Burgmeier Patched Gobby for new obby::colour class 2005-11-03 Armin Burgmeier LogView::log takes optionally timestamp 2005-11-03 Philipp Kern Changed one translated string 2005-11-03 Philipp Kern Added Swedish translation, thanks to Daniel Nylander 2005-11-02 Armin Burgmeier Patched Gobby for new obby chat class 2005-11-02 Armin Burgmeier Updated translation po/pot files 2005-10-28 Armin Burgmeier Patched set_selection to take Gtk::TextIter and scroll to selected position 2005-10-28 Benjamin Herr Added GNU regex wrappers (not used yet because they suck at unicode) 2005-10-27 Armin Burgmeier Added Gobby::Document::set_selection 2005-10-29 Trac TODO updated 2005-10-21 Armin Burgmeier Temporary menu entry for saving a session [fixes #20] 2005-10-15 Trac TODO updated 2005-10-09 Armin Burgmeier Session to restore may be given in HostDialog 2005-10-09 Armin Burgmeier Introduces FileEntry 2005-10-09 Armin Burgmeier Removed trailing semicolon after namespace 2005-10-09 Trac TODO updated 2005-10-08 Trac TODO updated 2005-10-08 Trac TODO updated 2005-10-07 Philipp Kern Wrap the lines in the chat window [fixes #99] 2005-10-07 Philipp Kern Escape special characters in document title [fixes #101] 2005-10-07 Philipp Kern Translation roundup 2005-10-07 Philipp Kern Show current connection status in statusbar 2005-10-07 Trac TODO updated 2005-10-05 Philipp Kern Fixed thread creation issues 2005-10-05 Philipp Kern Compile fix by const_casting for g_atomic_int_get 2005-10-05 Trac TODO updated 2005-10-04 Armin Burgmeier Do not block when connecting to a remote host 2005-10-04 Armin Burgmeier Added Atomic class for Atomic boolean operations 2005-10-04 Armin Burgmeier Adjusted buffer wrappers to buffer's reusability 2005-10-01 Philipp Kern Do not show disconnected users as joined in chat 2005-10-01 Philipp Kern Make connected flag in userlist dependend on the user's value 2005-09-29 Trac TODO updated 2005-09-22 Michael Walter Added #include to to avoid being included later. 2005-09-22 Michael Walter Compile fix (m_client -> m_net.reset). 2005-09-22 Michael Walter Added missing return statement. 2005-09-22 Michael Walter Unicode fixes (was calling generic version with ASCII/ANSI strings). 2005-09-20 Armin Burgmeier Fixed usages of user_table's iterator for non-templated user_table 2005-09-19 Trac TODO updated 2005-09-17 Armin Burgmeier Fixed a crash on client-side connection loss 2005-09-15 Philipp Kern Removed pending changes and revision from the status bar 2005-09-15 Philipp Kern Opened new 0.3.x tree 2005-09-15 Philipp Kern Depend on net6-1.2 and obby-0.3 2005-09-15 Armin Burgmeier Avoid useless thread in JoinProgressDialog 2005-09-15 Armin Burgmeier Two additional checks concerning subscription 2005-09-15 Philipp Kern Added 0.3.0 NEWS item 2005-09-05 Philipp Kern Added a NEWS item to reflect the line encoding patch 2005-09-02 Philipp Kern Updated NEWS to reflect more changes 2005-09-14 Armin Burgmeier Adjustments to jupiter-using obby 2005-09-13 Trac TODO updated 2005-09-07 Armin Burgmeier Some more const-correctness 2005-09-06 Armin Burgmeier Adjusted buffer wrapper because peer has been renamed to user in net6 2005-07-28 Armin Burgmeier Fixed SEGV on win32 when creating/joining a session 2005-09-05 Philipp Kern Removed obsolete TODO items 2005-09-05 Trac TODO updated 2005-09-04 Philipp Kern Convert all different line encodings to UNIX ones 2005-09-02 Philipp Kern Added 0.2.1 and 0.2.2 to version history 2005-09-01 Armin Burgmeier Disable Glib's implicit charset conversion to the current locale 2005-08-31 Philipp Kern Fixed most unknown file extensions, added some more 2005-08-21 Philipp Kern Made the JoinDialog vbox non-conditional 2005-08-27 Trac TODO updated 2005-08-25 Armin Burgmeier net6::client::conn is now auto_ptr TODO updated 2005-08-23 Trac TODO updated 2005-08-18 Philipp Kern Updated AUTHORS to list contributors and translators 2005-08-18 Philipp Kern Added Spanish translation, thanks to Mario Palomo 2005-08-15 Trac TODO updated 2005-08-13 Trac TODO updated 2005-08-07 Trac TODO updated 2005-08-05 Philipp Kern Allow to open documents as unowned text, thanks to Ben Levitt [fixes #52] 2005-08-05 Trac TODO updated 2005-08-03 Trac TODO updated 2005-08-02 Philipp Kern Non-empty documents are flagged modified [ref #72] 2005-07-31 Trac TODO updated 2005-07-29 Philipp Kern Updated ChangeLog for release 2005-07-29 Trac TODO updated 2005-07-28 Philipp Kern Updated German translation 2005-07-28 Philipp Kern Updates from `make update-po' 2005-07-28 Armin Burgmeier Win32 build fix 2005-07-27 Armin Burgmeier Some fixes for buffer_wrappers 2005-07-27 Armin Burgmeier Fixed POTFILES.in for new io/ subdir 2005-07-27 Armin Burgmeier Emit content_changed signal in insert/erase_after [fixes #64] 2005-07-27 Armin Burgmeier Queried the cached subscribe value instead of requesting it from obby::document_info [fixes #63] 2005-07-27 Armin Burgmeier Moved buffer_wrapper to io/ subdir, enhanced portabaility 2005-07-27 Philipp Kern The last missing French string 2005-07-27 Philipp Kern Updated French translation by Peer Janssen 2005-07-27 Trac TODO updated 2005-07-26 Philipp Kern Better Win32 network handling announced 2005-07-26 Philipp Kern Added a readme and an installation guide [fixes #51] 2005-07-26 Philipp Kern Initialise the colour selection dialog with the current user colour 2005-07-26 Armin Burgmeier Column returns the real column of the text not just the nth character 2005-07-26 Armin Burgmeier User highlighting when name is mentioned in chat [fixes #6] 2005-07-26 Armin Burgmeier Prompt before closing modified documents 2005-07-26 Armin Burgmeier Save host/port settings into new config keys 2005-07-26 Armin Burgmeier Switch to tabs newly opened [fixes #27] 2005-07-26 Armin Burgmeier Connected/Subscribed flags in user list (fixes #12) 2005-07-25 Armin Burgmeier Check for valid UTF-8 after converting 2005-07-25 Armin Burgmeier Try to convert files with other encodings to UTF-8 [fixes #43] 2005-07-25 Philipp Kern Colourised tab labels [fixes #59] 2005-07-25 Philipp Kern Merged host and join dialog data just again, with separated ports and hostnames 2005-07-25 Philipp Kern Added more dots to the menu items 2005-07-25 Armin Burgmeier Format string adjustments 2005-07-25 Trac TODO updated 2005-07-24 Philipp Kern Depend on obby's 0.2.x API 2005-07-24 Philipp Kern Improved the Zeroconf handling 2005-07-24 Armin Burgmeier Added Window::get_current_document 2005-07-24 Armin Burgmeier Do not allow empty document names 2005-07-24 Armin Burgmeier Removed useless preferences_changed delegate 2005-07-24 Armin Burgmeier Update cursor position display in statusbar by remote changes 2005-07-24 Armin Burgmeier Modified flag [fixes #25] 2005-07-24 Philipp Kern Translation roundup 2005-07-24 Armin Burgmeier Added PasswordDialog 2005-07-24 Armin Burgmeier Corrections to file handling 2005-07-24 Armin Burgmeier Added toolbar settings into preferences [fixes #32] 2005-07-23 Philipp Kern Added some release notes directly to the sources 2005-07-23 Philipp Kern Adjusted the Zeroconf usage 2005-07-23 Armin Burgmeier First attempt to allow opening files by dropping them on a document, doesn't work. 2005-07-23 Armin Burgmeier Drag+Drop of files into open Gobby session 2005-07-23 Philipp Kern Set colour implemented 2005-07-21 Armin Burgmeier UNDO: Use 'session' config key for both client and host 2005-07-23 Armin Burgmeier No fixed size for the send button 2005-07-23 Armin Burgmeier Removed debug log 2005-07-23 Armin Burgmeier Colour presets [fixes #36] Thanks tom! :D 2005-07-23 Philipp Kern Use a tooltip instead of an expanded label 2005-07-23 Armin Burgmeier Smart home/end preference 2005-07-23 Armin Burgmeier Re-arranged status bar 2005-07-22 Armin Burgmeier Some more preferences 2005-07-23 Trac TODO updated 2005-07-22 Armin Burgmeier typo in preferences dialog fixed 2005-07-22 Armin Burgmeier Local preferences, syntax submenu 2005-07-22 Armin Burgmeier Fixed some messup 2005-07-22 Philipp Kern Fixed just another conflict 2005-07-22 Philipp Kern A cleanup patch to fix hundreds of conflicts 2005-07-22 Philipp Kern Changed the GtkSourceView dependency to a hard one 2005-07-22 Armin Burgmeier Fixed conflict caused by phil's security page 2005-07-22 Armin Burgmeier Introduced working preferences, some are missing 2005-07-22 Philipp Kern Added a Security stub to the preferences dialog sources 2005-07-21 Philipp Kern Changes to the About dialog 2005-07-21 Armin Burgmeier Small UI fixes 2005-07-21 Armin Burgmeier First preferences dialog approach 2005-07-21 Philipp Kern Used ngettext one time, updated templates a bit 2005-07-21 Armin Burgmeier Changes by libtool 2005-07-21 Armin Burgmeier Use 'session' config key for both client and host 2005-07-21 Philipp Kern Use the right directory to look for pixmaps 2005-07-21 Armin Burgmeier Small adjustments to net6 API change 2005-07-21 Trac TODO updated 2005-07-20 Armin Burgmeier Connect synchoniously to the server, would cause too much trouble otherwise 2005-07-20 Armin Burgmeier Gtk::manage dynamically allocated widgets 2005-07-20 Armin Burgmeier Fixed SEGV on connection error 2005-07-20 Armin Burgmeier Initialize Threading system in main() 2005-07-20 Armin Burgmeier Close icons in tab labels [ref #32] 2005-07-20 Armin Burgmeier Display current document in title bar 2005-07-19 Armin Burgmeier Progress dialogs 2005-07-18 Philipp Kern Added dependency on gthread-2.0, versioned one on net6 2005-07-17 Armin Burgmeier User authentication stuff 2005-07-15 Armin Burgmeier Global password 2005-07-15 Trac TODO updated 2005-07-03 Trac TODO updated 2005-07-01 Trac TODO updated 2005-06-30 Philipp Kern Highlight chat messages with the own nickname [fixes #6] 2005-06-30 Philipp Kern Pass the current session buffer to all client widgets 2005-06-25 Trac TODO updated 2005-06-24 Philipp Kern Removed two unnecessary includes from src/buffer_wrapper.cpp 2005-06-24 Philipp Kern French translation reviewed by Mohammed Adnene Trojette 2005-06-24 Philipp Kern Updated translation files 2005-06-24 Philipp Kern Updated German translation, still not fully completed 2005-06-23 Philipp Kern Catch-all update of the gettext stuff 2005-06-23 Philipp Kern Added French translation of Peer Janssen [fixes #50] 2005-06-23 Armin Burgmeier Fixes for changed obby record API 2005-06-17 Trac TODO updated 2005-06-16 Philipp Kern Removed autogen.sh, it is superseded by autoreconf 2005-06-16 Philipp Kern Return a const char pointer from gettext 2005-06-15 Philipp Kern Added word wrapping 2005-06-15 Armin Burgmeier Replace all non-ascii characters in UI XML [fixes #44] 2005-06-14 Philipp Kern One new string to translate, updated debconf template 2005-06-14 Philipp Kern Added missing conditionals related to GtkSourceView 2005-06-14 Philipp Kern Gobby depends on obby 0.2.0 or higher 2005-06-14 Armin Burgmeier Using obby::format_string instead of std::stringstream 2005-06-14 Armin Burgmeier Enable highlighting when subscribed 2005-06-14 Trac TODO updated 2005-06-13 Armin Burgmeier Adjustments for synchronisation on request. The core feature seems to work. The user interface, however, may be discussed and changed later on. This is just a first try to test the feature and to make Gobby compile with it. 2005-06-13 Trac TODO updated 2005-06-12 Trac TODO updated 2005-06-10 Philipp Kern Preliminary, but working Zeroconf support [ref #17] 2005-06-09 Philipp Kern Revised the German translation 2005-06-09 Philipp Kern Corrected AE color to BE colour 2005-06-09 Trac TODO updated 2005-06-08 Trac TODO updated 2005-06-07 Armin Burgmeier Adjusted code for changes user flags in libobby 2005-06-07 Philipp Kern Modified history by adding the missing 0.1.1 NEWS entry 2005-06-07 Philipp Kern Added dependency on Automake 1.9; added missing NEWS check 2005-06-07 Trac TODO updated 2005-06-06 Philipp Kern Ship gobby.desktop in the distribution 2005-06-06 Armin Burgmeier Adjusted for net6's error code transmission (#16) 2005-06-06 Armin Burgmeier Better win32 network implementation [fixes #2] 2005-06-05 Trac TODO updated 2005-06-04 Philipp Kern Updated ChangeLog for release 2005-06-04 Armin Burgmeier Fixed a segfault which occured sometimes when closing documents 2005-06-04 Armin Burgmeier Introduced DefaultDialog to allow to press Enter in dialogs 2005-06-04 Armin Burgmeier Show up user-colourising text immediately [fixes #22] 2005-06-04 Philipp Kern Removed the useless ENABLE_NLS check as we hard-depend on gettext 2005-06-04 Philipp Kern Translated missing strings into German 2005-06-04 Armin Burgmeier Use another default color as black [fixes #34] 2005-06-04 Armin Burgmeier Remove entities in on_folder_tab_switched 2005-06-04 Armin Burgmeier A much better fix for #24 2005-06-04 Philipp Kern Updated the gettext template and the German translation 2005-06-04 Armin Burgmeier Removed Umlauts from Language file names to build valid XML, renamed Document to View in menu 2005-06-04 Armin Burgmeier Update user colour in key press event handler if possible [fixes #24] If someone copied a part of the buffer, the tags applied to it were copied, too. If he pasted it then, the insert-text signal handler could not remove those tags because they were not yet applied. So it ended up in having to user colour tags applied to the new range of text: The one from the user who pasted the text and the one from the user who wrote the original text. This is solved by adding tags followed by a key press event not anymore in the insert-text event handler but in the key press event handler, which is called later, when the pasted tag already has been applied. Then, it may be removed and the one and only user colour tag can be set. 2005-06-03 Philipp Kern Use "n unsynced change(s)" instead of "in sync" 2005-06-03 Benjamin Herr Fixed my messup fixing the chat multiline handling 2005-06-03 Trac TODO updated 2005-06-02 Trac TODO updated 2005-06-02 Trac TODO updated 2005-06-02 Trac TODO updated 2005-06-02 Trac TODO updated 2005-06-02 Philipp Kern Merging the multi-line chat fixes 2005-05-31 Benjamin Herr Splitting up received lines of chat by newlines, added todo items 2005-06-02 Armin Burgmeier Menu to switch the syntax colouring scheme [fixes #4] 2005-06-01 Armin Burgmeier Option to disable line numbers [fixes #7] 2005-06-01 Armin Burgmeier Show revision and sync state in statusbar [fixes #13] 2005-06-01 Armin Burgmeier Fixed some errors caused by recent libobby API changes 2005-05-30 Armin Burgmeier Set correct notebook tab after startup 2005-05-29 Armin Burgmeier Use of local_buffer instead of dynamic casts [ref #9] 2005-05-29 Armin Burgmeier Initialise size of paned widgets [fixes #5] 2005-05-29 Armin Burgmeier Allow the user to save documents after connection loss [fixes #1] 2005-05-29 Armin Burgmeier Disable close and save buttons if no more documents are open 2005-05-28 Armin Burgmeier Send lines separately in chat 2005-05-26 Philipp Kern Changed the desktop item's name to be a bit more compilant 2005-05-26 Armin Burgmeier Segfault fixed some time ago... 2005-05-22 Philipp Kern Ebuild change: Depend on gtksourceview, use GNOME integration 2005-05-21 Philipp Kern Load icon from file when compiled --with-gnome 2005-05-21 Philipp Kern Resized the 128x128 XPM to 32x32 2005-05-20 Philipp Kern Added missing assert include 2005-05-20 Philipp Kern Added build-dependency on net6-1.0 2005-05-19 Philipp Kern configure now detects the presence of GtkSourceView automatically 2005-05-19 Philipp Kern Makefile.am had a wrong conditional statement 2005-05-15 Philipp Kern Serious bug exploited, po/ permission-related build fix 2005-05-15 Philipp Kern Added GNOME integration 2005-05-11 Philipp Kern Added gzip'ed XPM version of the Gobby logo 2005-05-10 Armin Burgmeier Fixed a segfault which occured sometimes on the exit 2005-05-08 Armin Burgmeier Shuffled some files around, fixed non-gtksourceview build [phil] 2005-05-08 Armin Burgmeier WIN32 build fix (resource files build correctly) [phil] 2005-05-08 Armin Burgmeier gobby resource file until autotools are able to build it 2005-05-08 Armin Burgmeier Sized gobby.ico to 48x48 Bigger icons just waste memory on windows, they will never be shown in their full size. 2005-05-08 Philipp Kern Try to build gobby.res from top-level Makefile.am 2005-05-08 Philipp Kern Use Automake for win32/ subdirectory 2005-05-08 Philipp Kern Fixed make dist 2005-05-08 Philipp Kern Delocalised two error strings 2005-05-08 Philipp Kern po reflect new line numbers within the source files 2005-05-08 Philipp Kern Include contrib/ and win32/ in make dist 2005-05-08 Philipp Kern Added more WIN32 build stuff 2005-05-07 Philipp Kern Suppress the console window in favour of a real GUI application 2005-05-07 Armin Burgmeier Win32 does not have localtime_r We do not need thread safety anyway... 2005-05-07 Armin Burgmeier make dist requires ChangeLog... 2005-05-07 Armin Burgmeier win32 resource file for the gobby icon 2005-05-07 Armin Burgmeier User colourising 2005-05-07 Armin Burgmeier Added keyboard shortcuts 2005-05-07 Armin Burgmeier Moved language manager to folder 2005-05-07 Armin Burgmeier Replaced _ macro by an inline function 2005-05-07 Armin Burgmeier Separate mime map 2005-05-06 Armin Burgmeier StatusBar showing cursor position and current language 2005-05-06 Philipp Kern Added more TODO items 2005-05-05 Philipp Kern Made the TODO list more readable 2005-05-05 Philipp Kern A missing shell call produced build errors 2005-05-05 Philipp Kern Set scripts executable and use a partial checkout in the ebuild 2005-05-05 Philipp Kern Added missing po/Makefile.in.in 2005-05-05 Philipp Kern Gobby i18n, German translation added 2005-05-05 Philipp Kern Ignore more intermediate files 2005-05-05 Philipp Kern Added mkinstalldirs from Autotools 2005-05-05 Armin Burgmeier auto* updated some auto-generated files... 2005-05-05 Armin Burgmeier Gobby sends positions now in bytes and no longer in characters. libobby takes all positions in bytes to having not to care about different encodings. 2005-05-04 Philipp Kern Display a Gtk::MessageDialog on an unhandled exception 2005-04-27 Philipp Kern Fixed gobby to compile without gtksourceview 2005-04-26 Philipp Kern Insert parameter placeholder corrected 2005-04-25 Philipp Kern Ugly fix to get the times right 2005-04-25 Armin Burgmeier Implemented timestamps in logview 2005-04-25 Philipp Kern Some corrections to the file types 2005-04-24 Philipp Kern Set current name in the Save FileChooser 2005-04-24 Philipp Kern Added two new TODO items 2005-04-22 Armin Burgmeier Code highlighting by file extension 2005-04-22 Armin Burgmeier Some GtkSourceView wrapper fixes and extensions 2005-04-22 Armin Burgmeier GtkSourceLanguagesManager wrapper 2005-04-21 Armin Burgmeier Wrapped GtkSourceLanguage 2005-04-21 Armin Burgmeier Use a monospaced font for the TextView 2005-04-20 Armin Burgmeier GtkSourceBuffer wrapper 2005-04-18 Philipp Kern Save document was missing in the source 2005-04-17 Philipp Kern Check for howl in libobby 2005-04-17 Armin Burgmeier sourceview/-subdir for sourceview wrappers, Gtk::SourceView actually works 2005-04-17 Philipp Kern Gather host information correctly 2005-04-17 Armin Burgmeier Win32 buffer_wrappers using a timer 2005-04-15 Armin Burgmeier Added tom as artist 2005-04-15 Armin Burgmeier Added inline gobby icon 2005-04-15 Philipp Kern Added artwork credits 2005-04-15 Thomas Glatt Added Gobby artwork 2005-04-15 Armin Burgmeier Call correct base_function in Gobby::Host::on_connect 2005-04-15 Armin Burgmeier Adjusted buffer_wrapper for net6 API corrections 2005-04-15 Armin Burgmeier Added some first wrapper code for GtkSourceView -- disfunctional 2005-04-15 Philipp Kern Added framework to use SourceView instead of TextView 2005-04-14 Philipp Kern Added boringfile 2005-04-14 Philipp Kern Added save document hooks, but w/o real functionality 2005-04-14 Philipp Kern Use the new include path of libobby 2005-04-14 Philipp Kern Check for obby-1.0 instead of lobby-1.0 2005-04-14 Philipp Kern Implemented open document 2005-04-14 Philipp Kern Removed ui.xml from the ebuild 2005-04-14 Philipp Kern XML UI descriptions are now present within src/header.cpp 2005-04-14 Philipp Kern Compile the right buffer wrappers for their corresponding platform 2005-04-14 Philipp Kern Fix buffer wrapper to use generic on !WIN32 2005-04-12 Armin Burgmeier Splitted buffer_wrapper up to buffer_wrapper_generic and buffer_wrapper. buffer_wrapper_win32 will follow. 2005-04-11 Philipp Kern Implemented close a bit more correctly, updated TODO 2005-04-11 Philipp Kern Remove current document, *hopefully* w/o memory leak 2005-04-10 Thomas Glatt Ebuild for gobby 2005-04-10 Philipp Kern Resolved conflict in Makefile.am related to WIN32 build 2005-04-10 Philipp Kern Added WIN32 build support 2005-04-09 Armin Burgmeier Win32 build fixes; buffer_wrappers still use a timer on win32 2005-04-09 Armin Burgmeier Distribute header files with 'make dist' 2005-04-09 Armin Burgmeier Replaced ERROR with IOERROR in buffer_wrappers according to new net6 API 2005-04-09 Armin Burgmeier Fixed missing include in buffer_wrapper.cpp 2005-04-09 Armin Burgmeier Use the file name of the file to open as document title 2005-04-09 Philipp Kern Relicensed under the GPL Reasoning: There was never the intention to license gobby under the LGPL. COPYING included the GPL but all the license headers referred to the LGPL. This is now fixed in accordance with all the contributing authors. ACK: - Armin Burgmeier - Philipp Kern - Benjamin Herr 2005-04-09 Armin Burgmeier Watching on Glib::signal_io() instead of using a timer 2005-04-08 Armin Burgmeier Fixed a crash in gobby which occured if a connection has been lost 2005-04-08 Armin Burgmeier Changed Menu-Action 'Help' to 'MenuHelp', for consistency with other actions 2005-04-08 Armin Burgmeier Resolved a conflict in inc/window.hpp and src/window.cpp 2005-04-08 Armin Burgmeier Document creation 2005-04-08 Philipp Kern Added about dialog 2005-04-08 Benjamin Herr Added entrydialog to prompt for strings 2005-04-08 Armin Burgmeier Fixed gobby synchronization 2005-04-08 Benjamin Herr Added menu items for *Document, fixed typo 2005-04-08 Philipp Kern Moved config_.hpp to config.hpp, introduced features.hpp 2005-04-07 Philipp Kern Added initial NEWS content and Ben to AUTHORS 2005-04-07 Philipp Kern Added document toolbar button stubs 2005-04-07 Philipp Kern Receive document title from libobby 2005-04-07 Armin Burgmeier h4ck 2005-04-07 Benjamin Herr Todo: Exceptions? 2005-04-07 Benjamin Herr Fixed window to also connect chat signals on join 2005-04-07 Benjamin Herr Fixed indenting spaces to be tabs 2005-04-07 Armin Burgmeier Document synchronisation thorugh libobby 2005-04-07 Benjamin Herr Added handling of chat events from m_chat and m_buffer 2005-04-05 Armin Burgmeier Initial TODO file 2005-04-04 Philipp Kern Depend on gtkmm-2.4 >= 2.6.0 2005-04-03 Armin Burgmeier Document class representing an obby::document 2005-04-03 Armin Burgmeier Event delegations 2005-04-03 Armin Burgmeier XML config file in home dir; requires libxml++ 2005-04-02 Armin Burgmeier Added create & join dialogs 2005-04-02 Armin Burgmeier Skeleton of the UI 2005-04-02 Armin Burgmeier Header, GTK naming scheme 2005-03-30 Philipp Kern Autotoolised gobby 2005-03-30 Armin Burgmeier Empty gobby window gobby-0.6.0/config.guess0000755000175000017500000012637313244306071012074 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > "$dummy.c" ; for c in cc gcc c89 c99 ; do if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval "$set_cc_for_build" cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; esac # Note: order is significant - the case branches are not exclusive. case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ "/sbin/$sysctl" 2>/dev/null || \ "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine="${arch}${endian}"-unknown ;; *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval "$set_cc_for_build" if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "$machine-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval "$set_cc_for_build" SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ [ "$TARGET_BINARY_INTERFACE"x = x ] then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "$sc_kernel_bits" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "$HP_ARCH" = "" ]; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ "$HP_ARCH" = hppa2.0w ] then eval "$set_cc_for_build" # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) case "$UNAME_MACHINE" in x86) echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; i*86:Minix:*:*) echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) eval "$set_cc_for_build" if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) if objdump -f /bin/sh | grep -q elf32-x86-64; then echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 else echo "$UNAME_MACHINE"-pc-linux-"$LIBC" fi exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gobby-0.6.0/po/0000775000175000017500000000000014005504730010236 500000000000000gobby-0.6.0/po/Makefile.in.in0000644000175000017500000001575614005503641012644 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # Copyright (C) 2004-2008 Rodney Dawes # # This file may be copied and used freely without restrictions. It may # be used in projects which are not available under a GNU Public License, # but which still want to provide support for the GNU gettext functionality. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ localedir = @localedir@ subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ INTLTOOL_V_MSGFMT = $(INTLTOOL__v_MSGFMT_$(V)) INTLTOOL__v_MSGFMT_= $(INTLTOOL__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) INTLTOOL__v_MSGFMT_0 = @echo " MSGFMT" $@; .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $* $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $< .po.gmo: $(INTLTOOL_V_MSGFMT)file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info ctags tags CTAGS TAGS ID: # Define this as empty until I found a useful application. install-exec installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/po/POTFILES.in0000664000175000017500000000372214003367605011745 00000000000000code/application.cpp code/commands/auth-commands.cpp code/commands/browser-commands.cpp code/commands/browser-context-commands.cpp code/commands/file-commands.cpp code/commands/file-tasks/task-export-html.cpp code/commands/file-tasks/task-new.cpp code/commands/file-tasks/task-open.cpp code/commands/file-tasks/task-open-file.cpp code/commands/file-tasks/task-open-location.cpp code/commands/file-tasks/task-save.cpp code/commands/help-commands.cpp code/commands/subscription-commands.cpp code/commands/synchronization-commands.cpp code/commands/user-join-commands.cpp code/core/browser.cpp code/core/certificatemanager.cpp code/core/filechooser.cpp code/core/foldermanager.cpp code/core/huebutton.cpp code/core/selfhoster.cpp code/core/sessionuserview.cpp code/core/statusbar.cpp code/core/textsessionview.cpp code/core/userlist.cpp code/dialogs/connection-dialog.cpp code/dialogs/connection-info-dialog.cpp code/dialogs/document-location-dialog.cpp code/dialogs/find-dialog.cpp code/dialogs/goto-dialog.cpp code/dialogs/initial-dialog.cpp code/dialogs/open-location-dialog.cpp code/dialogs/password-dialog.cpp code/dialogs/preferences-dialog.cpp code/gobby-resources.c code/operations/operation-delete.cpp code/operations/operation-export-html.cpp code/operations/operation-new.cpp code/operations/operation-open.cpp code/operations/operation-open-multiple.cpp code/operations/operation-save.cpp code/operations/operation-subscribe-path.cpp code/resources/ui/browser-context-menu.ui code/resources/ui/connection-dialog.ui code/resources/ui/connection-info-dialog.ui code/resources/ui/document-location-dialog.ui code/resources/ui/find-dialog.ui code/resources/ui/goto-dialog.ui code/resources/ui/initial-dialog.ui code/resources/ui/menu.ui code/resources/ui/open-location-dialog.ui code/resources/ui/password-dialog.ui code/resources/ui/preferences-dialog.ui code/resources/ui/toolbar.ui code/util/file.cpp code/util/i18n.cpp code/util/i18n.hpp code/util/uri.cpp code/window.cpp gobby-0.5.desktop.in gobby-0.6.0/po/en_GB.po0000664000175000017500000007653414005502331011502 00000000000000# British English translation for Gobby, the collaborative real-time text # editor. # Copyright (C) 2009 Gabríel A. Pétursson # This file is distributed under the same license as the Gobby package. # Gabríel A. Pétursson , 2009. # msgid "" msgstr "" "Project-Id-Version: gobby-0.4.93~dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-31 11:22+0100\n" "PO-Revision-Date: 2009-12-03 19:26-0000\n" "Last-Translator: Gabríel A. Pétursson \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n!=1;\n" #: ../code/application.cpp:132 msgid "Display version information and exit" msgstr "Display version information and exit" #: ../code/application.cpp:134 #, fuzzy msgid "Start a new gobby instance also if there is one already running" msgstr "Also start a new Gobby instance when there is one running already" #: ../code/commands/auth-commands.cpp:193 #: ../code/commands/browser-context-commands.cpp:354 #: ../code/core/filechooser.cpp:34 ../code/core/filechooser.cpp:39 #: ../code/core/huebutton.cpp:102 #: ../code/dialogs/document-location-dialog.cpp:35 #, fuzzy msgid "_Cancel" msgstr "C_ancel" #: ../code/commands/auth-commands.cpp:195 ../code/core/huebutton.cpp:103 msgid "_Ok" msgstr "" #: ../code/commands/auth-commands.cpp:217 #, fuzzy msgid "Password required" msgstr "Password Required" #: ../code/commands/auth-commands.cpp:250 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:289 msgid "Subscribing to %1..." msgstr "Subscribing to %1..." #: ../code/commands/browser-commands.cpp:302 msgid "Subscribing to chat on %1..." msgstr "Subscribing to chat on %1..." #: ../code/commands/browser-commands.cpp:625 msgid "Subscription failed" msgstr "Subscription failed" #: ../code/commands/browser-context-commands.cpp:85 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:287 #: ../code/commands/browser-context-commands.cpp:322 #: ../code/commands/browser-context-commands.cpp:409 #: ../code/commands/file-tasks/task-open-location.cpp:31 #: ../code/core/statusbar.cpp:81 ../code/dialogs/find-dialog.cpp:58 #: ../code/dialogs/goto-dialog.cpp:30 ../code/dialogs/initial-dialog.cpp:206 #: ../code/dialogs/preferences-dialog.cpp:815 msgid "_Close" msgstr "" #: ../code/commands/browser-context-commands.cpp:349 msgid "Choose a name for the directory" msgstr "Choose a name for the directory" #: ../code/commands/browser-context-commands.cpp:350 msgid "Choose a name for the document" msgstr "Choose a name for the document" #: ../code/commands/browser-context-commands.cpp:351 msgid "_Directory Name:" msgstr "_Directory Name:" #: ../code/commands/browser-context-commands.cpp:352 msgid "_Document Name:" msgstr "_Document Name:" #: ../code/commands/browser-context-commands.cpp:355 msgid "C_reate" msgstr "C_reate" #: ../code/commands/browser-context-commands.cpp:357 msgid "New Directory" msgstr "New Directory" #: ../code/commands/browser-context-commands.cpp:358 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "New Document" #: ../code/commands/browser-context-commands.cpp:380 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Choose a text file to open" #: ../code/commands/browser-context-commands.cpp:519 #: ../code/commands/browser-context-commands.cpp:530 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:523 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:534 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:547 #, fuzzy msgid "Failed to create account" msgstr "Failed to create document \"%1\"" #: ../code/commands/browser-context-commands.cpp:550 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-commands.cpp:252 #, fuzzy msgid "Cancel" msgstr "C_ancel" #: ../code/commands/file-commands.cpp:254 msgid "Connect" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Choose a location to export document \"%1\" to" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "Querying \"%1\"..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:469 #: ../code/operations/operation-open-multiple.cpp:176 msgid "Failed to open document \"%1\"" msgstr "Failed to open document \"%1\"" #: ../code/commands/file-tasks/task-open-location.cpp:32 #: ../code/core/filechooser.cpp:40 #: ../code/dialogs/document-location-dialog.cpp:36 #, fuzzy msgid "_Open" msgstr "_Open..." #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Choose a location to save document \"%1\" to" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:49 msgid "There was an error displaying help." msgstr "There was an error displaying help." #: ../code/commands/help-commands.cpp:74 msgid "Contributors:" msgstr "Contributors:" #: ../code/commands/help-commands.cpp:80 msgid "British English:" msgstr "British English:" #: ../code/commands/help-commands.cpp:82 msgid "German:" msgstr "German:" #: ../code/commands/help-commands.cpp:99 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronised to others any longer, " "therefore the document cannot be edited any longer.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Synchronisation in progress... %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "This document cannot be used." #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) in order for us to fix the problem in a " "later version. Thank you." #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Synchronisation failed: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "You can still watch others editing the document, but you cannot edit it " "yourself." #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "User Join failed: %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:109 msgid "_Direct Connection" msgstr "_Direct Connection" #: ../code/core/browser.cpp:110 msgid "Host Name:" msgstr "Host Name:" #: ../code/core/certificatemanager.cpp:86 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:279 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:341 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:417 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/filechooser.cpp:35 #, fuzzy msgid "_Save" msgstr "Save All" #: ../code/core/foldermanager.cpp:345 msgid "The document has been removed from the server." msgstr "" #: ../code/core/selfhoster.cpp:105 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:137 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "Failed to delete node \"%1\"" #: ../code/core/selfhoster.cpp:139 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:265 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:287 #, fuzzy msgid "Failed to share documents" msgstr "Failed to save document \"%1\"" #: ../code/core/sessionuserview.cpp:38 msgid "User List" msgstr "User List" #: ../code/core/statusbar.cpp:434 msgid "Ln %1, Col %2\t%3" msgstr "Ln %1, Col %2\t%3" #: ../code/core/statusbar.cpp:437 msgid "OVR" msgstr "OVR" #: ../code/core/statusbar.cpp:437 msgid "INS" msgstr "INS" #: ../code/core/textsessionview.cpp:639 msgid "Text written by %1" msgstr "Text written by %1" #: ../code/core/textsessionview.cpp:645 msgid "Unowned text" msgstr "Ownerless text" #: ../code/core/userlist.cpp:115 msgid "Users" msgstr "Users" #: ../code/dialogs/connection-info-dialog.cpp:48 #, fuzzy msgid "Connections" msgstr "Secure Connection" #: ../code/dialogs/connection-info-dialog.cpp:313 msgid "Nobody is connected to this computer" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:153 msgid "Select document's target location" msgstr "Select document's target location" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Choose a directory to create the document into:" msgstr "Choose a directory to create the document into:" #: ../code/dialogs/document-location-dialog.cpp:162 msgid "Select documents' target location" msgstr "Select documents' target location" #: ../code/dialogs/document-location-dialog.cpp:164 msgid "Choose a directory to create the documents into:" msgstr "Choose a directory to create the documents into:" #: ../code/dialogs/find-dialog.cpp:59 msgid "Replace _All" msgstr "Replace _All" #: ../code/dialogs/find-dialog.cpp:61 msgid "_Replace" msgstr "_Replace" #: ../code/dialogs/find-dialog.cpp:62 #, fuzzy msgid "_Find" msgstr "Find" #: ../code/dialogs/find-dialog.cpp:119 msgid "Find" msgstr "Find" #: ../code/dialogs/find-dialog.cpp:119 msgid "Replace" msgstr "Replace" #: ../code/dialogs/find-dialog.cpp:138 ../code/dialogs/find-dialog.cpp:154 msgid "Phrase \"%1\" has not been found" msgstr "Phrase \"%1\" has not been found" #: ../code/dialogs/find-dialog.cpp:312 msgid "No occurrence has been replaced" msgstr "No occurrence has been replaced" #: ../code/dialogs/find-dialog.cpp:318 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 occurrence has been replaced" msgstr[1] "%1 occurrences have been replaced" #: ../code/dialogs/goto-dialog.cpp:31 msgid "Go To _Line" msgstr "Go To _Line" #: ../code/dialogs/initial-dialog.cpp:53 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:76 #, fuzzy msgid "Failed to generate private key" msgstr "Failed to delete node \"%1\"" #: ../code/dialogs/initial-dialog.cpp:79 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:118 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:121 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/password-dialog.cpp:34 msgid "Connection to host \"%1\" requires a password." msgstr "Connection to host \"%1\" requires a password." #: ../code/dialogs/password-dialog.cpp:40 msgid "Invalid password for host \"%1\". Please try again." msgstr "Invalid password for host \"%1\". Please try again." #: ../code/dialogs/preferences-dialog.cpp:409 msgid "Display no whitespace" msgstr "Display no whitespace" #: ../code/dialogs/preferences-dialog.cpp:412 msgid "Display spaces" msgstr "Display spaces" #: ../code/dialogs/preferences-dialog.cpp:416 msgid "Display tabs" msgstr "Display tabs" #: ../code/dialogs/preferences-dialog.cpp:420 msgid "Display tabs and spaces" msgstr "Display tabs and spaces" #: ../code/dialogs/preferences-dialog.cpp:452 msgid "Show text only" msgstr "Show text only" #: ../code/dialogs/preferences-dialog.cpp:454 msgid "Show icons only" msgstr "Show icons only" #: ../code/dialogs/preferences-dialog.cpp:456 msgid "Show both icons and text" msgstr "Show both icons and text" #: ../code/dialogs/preferences-dialog.cpp:458 msgid "Show text besides icons" msgstr "Show text besides icons" #: ../code/dialogs/preferences-dialog.cpp:478 msgid "Scheme Description" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:575 msgid "Use TLS if possible" msgstr "Use TLS where possible" #: ../code/dialogs/preferences-dialog.cpp:578 msgid "Always use TLS" msgstr "Always use TLS" #: ../code/dialogs/preferences-dialog.cpp:615 #, fuzzy msgid "Error reading file: %1" msgstr "User Join failed: %1" #: ../code/dialogs/preferences-dialog.cpp:655 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:685 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:703 msgid "Select a location for the generated certificate" msgstr "" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Removing node \"%1\"..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Failed to delete node \"%1\"" #: ../code/operations/operation-export-html.cpp:173 #, c-format msgid "written by: %s" msgstr "written by: %s" #: ../code/operations/operation-export-html.cpp:246 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:259 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Document generated from %1$s:%2$s at %3$s by %4$s" #: ../code/operations/operation-export-html.cpp:409 msgid "Participants" msgstr "Participants" #: ../code/operations/operation-export-html.cpp:483 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Exporting document \"%1\" to \"%2\" in HTML..." #: ../code/operations/operation-export-html.cpp:544 msgid "Failed to export document \"%1\" to HTML" msgstr "Failed to export document \"%1\" to HTML" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Creating directory \"%1\"..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Creating document \"%1\"..." #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Failed to create directory \"%1\"" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Failed to create document \"%1\"" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-1" #: ../code/operations/operation-open.cpp:113 msgid "Opening document \"%1\"..." msgstr "Opening document \"%1\"..." #: ../code/operations/operation-open.cpp:129 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" "The directory into which the new document was supposed to be inserted has " "been removed" #: ../code/operations/operation-open.cpp:318 msgid "The file contains data not in the specified encoding" msgstr "The file contains data not in the specified encoding" #: ../code/operations/operation-open.cpp:329 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "The file either contains data in an unknown encoding, or it contains binary " "data." #: ../code/operations/operation-open-multiple.cpp:88 msgid "Parent folder was removed" msgstr "Parent folder was removed" #: ../code/operations/operation-open-multiple.cpp:189 msgid "Failed to open multiple documents" msgstr "Failed to open multiple documents" #: ../code/operations/operation-save.cpp:91 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Saving document \"%1\" to \"%2\"..." #: ../code/operations/operation-save.cpp:220 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." #: ../code/operations/operation-save.cpp:281 msgid "Failed to save document \"%1\"" msgstr "Failed to save document \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Failed to open document \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "Subscribing to %1..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Failed to create directory \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "Connection to \"%1\" failed" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "Could not resolve \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "Device \"%1\" does not exist" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Could not create directory \"%1\": %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Device \"%1\" does not exist" #: ../code/window.cpp:42 msgid "Chat" msgstr "Chat" #: ../code/window.cpp:83 msgid "This Computer" msgstr "" #: ../code/window.cpp:108 msgid "Document Browser" msgstr "Document Browser" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Collaborative Editor" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Gobby Collaborative Editor (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Edit text files collaboratively" #, fuzzy #~ msgid "_Disconnect from Server" #~ msgstr "Connect to Server" #, fuzzy #~ msgid "Create _Account..." #~ msgstr "Create Do_cument..." #~ msgid "Create Do_cument..." #~ msgstr "Create Do_cument..." #, fuzzy #~ msgid "Create Di_rectory..." #~ msgstr "Create Directory..." #~ msgid "_Open Document..." #~ msgstr "_Open Document..." #~ msgid "D_elete" #~ msgstr "D_elete" #~ msgid "_None" #~ msgstr "_None" #~ msgid "_File" #~ msgstr "_File" #~ msgid "Open _Location..." #~ msgstr "Open _Location..." #~ msgid "Save _As..." #~ msgstr "Save _As..." #~ msgid "Save all open files locally" #~ msgstr "Save all open files locally" #~ msgid "Export As _HTML..." #~ msgstr "Export As _HTML..." #~ msgid "Connect _to Server..." #~ msgstr "Connect _to Server..." #~ msgid "_Edit" #~ msgstr "_Edit" #~ msgid "_Find..." #~ msgstr "_Find..." #~ msgid "Find Ne_xt" #~ msgstr "Find Ne_xt" #~ msgid "Find next match of phrase searched for" #~ msgstr "Find next match of phrase searched for" #~ msgid "Find Pre_vious" #~ msgstr "Find Pre_vious" #~ msgid "Find previous match of phrase searched for" #~ msgstr "Find previous match of phrase searched for" #~ msgid "Find and Rep_lace..." #~ msgstr "Find and Rep_lace..." #~ msgid "Go to _Line..." #~ msgstr "Go to _Line..." #~ msgid "Pr_eferences..." #~ msgstr "Pr_eferences..." #~ msgid "_View" #~ msgstr "_View" #~ msgid "Reset User Colors" #~ msgstr "Reset User Colours" #~ msgid "Hide user colors in current document" #~ msgstr "Hide user colours in current document" #~ msgid "View Toolbar" #~ msgstr "View Toolbar" #~ msgid "Whether to show the toolbar" #~ msgstr "Whether to show the toolbar" #~ msgid "View Statusbar" #~ msgstr "View Statusbar" #~ msgid "Whether to show the statusbar" #~ msgstr "Whether to show the statusbar" #~ msgid "View Document Browser" #~ msgstr "View Document Browser" #~ msgid "Whether to show the document browser" #~ msgstr "Whether to show the document browser" #~ msgid "View Chat" #~ msgstr "View Chat" #~ msgid "Whether to show the chat pane" #~ msgstr "Whether to show the chat pane" #~ msgid "View Document User List" #~ msgstr "View Document User List" #~ msgid "Whether to show the user list for documents" #~ msgstr "Whether to show the user list for documents" #~ msgid "View Chat User List" #~ msgstr "View Chat User List" #~ msgid "Whether to show the user list for the chat" #~ msgstr "Whether to show the user list for the chat" #~ msgid "_Highlight Mode" #~ msgstr "_Highlight Mode" #~ msgid "_Help" #~ msgstr "_Help" #~ msgid "_Contents" #~ msgstr "_Contents" #~ msgid "Opens the Gobby manual" #~ msgstr "Opens the Gobby manual" #~ msgid "_About..." #~ msgstr "_About..." #~ msgid "Shows Gobby's copyright and credits" #~ msgstr "Shows Gobby's copyright and credits" #~ msgid "User list" #~ msgstr "User list" #~ msgid "Document list" #~ msgstr "Document list" #~ msgid "User Color Indicator" #~ msgstr "User Colour Indicator" #~ msgid "Connect to Server" #~ msgstr "Connect to Server" #~ msgid "Please enter a host name with which to establish a connection." #~ msgstr "Please enter a host name with which to establish a connection." #~ msgid "_Remote Endpoint:" #~ msgstr "_Remote Endpoint:" #~ msgid "Document Name:" #~ msgstr "Document Name:" #~ msgid "_Search for:" #~ msgstr "_Search for:" #~ msgid "Replace _with:" #~ msgstr "Replace _with:" #~ msgid "_Match case" #~ msgstr "_Match case" #~ msgid "Match _entire word only" #~ msgstr "Match _entire word only" #~ msgid "Search _backwards" #~ msgstr "Search _backwards" #~ msgid "Wra_p around" #~ msgstr "Wra_p around" #~ msgid "Go to line" #~ msgstr "Go to line" #~ msgid "Line _number:" #~ msgstr "Line _number:" #~ msgid "Choose a user color" #~ msgstr "Choose a user colour" #~ msgid "Welcome to Gobby" #~ msgstr "Welcome to Gobby" #~ msgid "" #~ "Before we start, a few options need to be configured. You can later " #~ "change them by choosing Edit ▸ Preferences from the menu." #~ msgstr "" #~ "Before we start, a few options need to be configured. You can later " #~ "change them by choosing Edit ▸ Preferences from the menu." #~ msgid "User Name" #~ msgstr "User Name" #~ msgid "Your name as shown to other users." #~ msgstr "Your name as shown to other users." #~ msgid "User Color" #~ msgstr "User Colour" #~ msgid "The color with which text you have written is branded." #~ msgstr "The colour with which text you have written is branded." #, fuzzy #~ msgid "Password:" #~ msgstr "Server _Password:" #~ msgid "Open Location" #~ msgstr "Open Location" #~ msgid "Enter the _location (URI) of the file you would like to open:" #~ msgstr "Enter the _location (URI) of the file you would like to open:" #~ msgid "Password Required" #~ msgstr "Password Required" #~ msgid "Server _Password:" #~ msgstr "Server _Password:" #~ msgid "Settings" #~ msgstr "Settings" #, fuzzy #~ msgid "Remote Users" #~ msgstr "Reset User Colours" #, fuzzy #~ msgid "Local Documents" #~ msgstr "New Document" #~ msgid "User name:" #~ msgstr "User name:" #~ msgid "User color:" #~ msgstr "User colour:" #~ msgid "Choose a new user color" #~ msgstr "Choose a new user colour" #, fuzzy #~ msgid "Highlight current line of remote users" #~ msgstr "Highlight current line" #, fuzzy #~ msgid "Local documents directory:" #~ msgstr "Host directory:" #~ msgid "Tab Stops" #~ msgstr "Tab Stops" #~ msgid "Indentation" #~ msgstr "Indentation" #~ msgid "Home/End Behavior" #~ msgstr "Home/End Behaviour" #~ msgid "File Saving" #~ msgstr "File Saving" #~ msgid "_Tab width:" #~ msgstr "_Tab width:" #~ msgid "Insert _spaces instead of tabs" #~ msgstr "Insert _spaces instead of tabs" #~ msgid "Enable automatic _indentation" #~ msgstr "Enable automatic _indentation" #~ msgid "Smart _home/end" #~ msgstr "Smart _home/end" #~ msgid "Enable _automatic saving of documents" #~ msgstr "Enable _automatic saving of documents" #~ msgid "Autosave interval in _minutes:" #~ msgstr "Autosave interval in _minutes:" #~ msgid "" #~ "With this option enabled, Home/End keys move to first/last character " #~ "before going to the start/end of the line." #~ msgstr "" #~ "With this option enabled, Home/End keys move to first/last character " #~ "before going to the start/end of the line." #~ msgid "Text Wrapping" #~ msgstr "Text Wrapping" #~ msgid "Line Numbers" #~ msgstr "Line Numbers" #~ msgid "Current Line" #~ msgstr "Current Line" #~ msgid "Right Margin" #~ msgstr "Right Margin" #~ msgid "Bracket Matching" #~ msgstr "Bracket Matching" #~ msgid "Whitespace Display" #~ msgstr "Whitespace Display" #~ msgid "Enable text wrapping" #~ msgstr "Enable text wrapping" #~ msgid "Do not split words over two lines" #~ msgstr "Do not split words over two lines" #~ msgid "Display line numbers" #~ msgstr "Display line numbers" #~ msgid "Highlight current line" #~ msgstr "Highlight current line" #~ msgid "Display right margin" #~ msgstr "Display right margin" #~ msgid "Right margin at column:" #~ msgstr "Right margin at column:" #~ msgid "Highlight matching bracket" #~ msgstr "Highlight matching bracket" #~ msgid "Toolbar" #~ msgstr "Toolbar" #~ msgid "Font" #~ msgstr "Font" #~ msgid "Color Scheme" #~ msgstr "Colour Scheme" #~ msgid "Trusted CAs" #~ msgstr "Trusted CAs" #~ msgid "Secure Connection" #~ msgstr "Secure Connection" #, fuzzy #~ msgid "Authentication" #~ msgstr "Indentation" #~ msgid "Select a file containing trusted CAs" #~ msgstr "Select a file containing trusted CAs" #, fuzzy #~ msgid "None" #~ msgstr "_None" #, fuzzy #~ msgid "Create New..." #~ msgstr "Create Do_cument..." #~ msgid "Preferences" #~ msgstr "Preferences" #~ msgid "User" #~ msgstr "User" #~ msgid "Editor" #~ msgstr "Editor" #~ msgid "View" #~ msgstr "View" #~ msgid "Appearance" #~ msgstr "Appearance" #~ msgid "Security" #~ msgstr "Security" #~ msgid "Gobby options" #~ msgstr "Gobby options" #~ msgid "Options related to Gobby" #~ msgstr "Options related to Gobby" #~ msgid "Connect to given host on startup, can be given multiple times" #~ msgstr "Connect to given host on startup, can be given multiple times" #~ msgid "HOSTNAME" #~ msgstr "HOSTNAME" #~ msgid "You are still connected to a session" #~ msgstr "You are still connected to a session" #~ msgid "Do you want to close Gobby nevertheless?" #~ msgstr "Do you want to close Gobby nevertheless?" #~ msgid "" #~ "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.\n" #~ "\n" #~ "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.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "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.\n" #~ "\n" #~ "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.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgid "User Join in progress..." #~ msgstr "User Join in progress..." #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Could not resolve \"%1\"" #~ msgid "Resolving \"%1\"..." #~ msgstr "Resolving \"%1\"..." #~ msgid "Paths" #~ msgstr "Paths" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "" #~ "The directory into which locally hosted sessions are permanently stored" #, fuzzy #~ msgid "Subscription already in progress" #~ msgstr "Subscription failed" #, fuzzy #~ msgid "Whether to show the user list" #~ msgstr "Whether to show the user list for the chat" gobby-0.6.0/po/ca.po0000664000175000017500000012501314005502331011076 00000000000000# Catalan translation of Gobby. # Copyright © 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the gobby package. # Jordi Mallach , 2012. # msgid "" msgstr "" "Project-Id-Version: gobby 0.4.94\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-31 11:22+0100\n" "PO-Revision-Date: 2012-12-04 18:12+0100\n" "Last-Translator: Jordi Mallach \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n!=1;\n" #: ../code/application.cpp:132 msgid "Display version information and exit" msgstr "" #: ../code/application.cpp:134 msgid "Start a new gobby instance also if there is one already running" msgstr "" #: ../code/commands/auth-commands.cpp:193 #: ../code/commands/browser-context-commands.cpp:354 #: ../code/core/filechooser.cpp:34 ../code/core/filechooser.cpp:39 #: ../code/core/huebutton.cpp:102 #: ../code/dialogs/document-location-dialog.cpp:35 #, fuzzy msgid "_Cancel" msgstr "C_ancel·la" #: ../code/commands/auth-commands.cpp:195 ../code/core/huebutton.cpp:103 msgid "_Ok" msgstr "" #: ../code/commands/auth-commands.cpp:217 #, fuzzy msgid "Password required" msgstr "Cal una contrasenya per a la sessió" #: ../code/commands/auth-commands.cpp:250 #, fuzzy msgid "Incorrect password" msgstr "Contrasenya incorrecta" #: ../code/commands/browser-commands.cpp:289 msgid "Subscribing to %1..." msgstr "Subscrivint a %1..." #: ../code/commands/browser-commands.cpp:302 msgid "Subscribing to chat on %1..." msgstr "Subscrivint al Chat de %1..." #: ../code/commands/browser-commands.cpp:625 msgid "Subscription failed" msgstr "Ha fallat la subscripció" #: ../code/commands/browser-context-commands.cpp:85 msgid "Could not find a location where to store the certificate" msgstr "No s'ha trobat on desar el certificat" #: ../code/commands/browser-context-commands.cpp:287 #: ../code/commands/browser-context-commands.cpp:322 #: ../code/commands/browser-context-commands.cpp:409 #: ../code/commands/file-tasks/task-open-location.cpp:31 #: ../code/core/statusbar.cpp:81 ../code/dialogs/find-dialog.cpp:58 #: ../code/dialogs/goto-dialog.cpp:30 ../code/dialogs/initial-dialog.cpp:206 #: ../code/dialogs/preferences-dialog.cpp:815 msgid "_Close" msgstr "" #: ../code/commands/browser-context-commands.cpp:349 msgid "Choose a name for the directory" msgstr "Escriu un nom per la carpeta" #: ../code/commands/browser-context-commands.cpp:350 #, fuzzy msgid "Choose a name for the document" msgstr "Escriu un nom pel document" #: ../code/commands/browser-context-commands.cpp:351 msgid "_Directory Name:" msgstr "Nom _de la carpeta:" #: ../code/commands/browser-context-commands.cpp:352 #, fuzzy msgid "_Document Name:" msgstr "Nom del document:" #: ../code/commands/browser-context-commands.cpp:355 msgid "C_reate" msgstr "C_rea" #: ../code/commands/browser-context-commands.cpp:357 #, fuzzy msgid "New Directory" msgstr "Nova carpeta" #: ../code/commands/browser-context-commands.cpp:358 #: ../code/commands/file-tasks/task-new.cpp:36 #, fuzzy msgid "New Document" msgstr "Nou document" #: ../code/commands/browser-context-commands.cpp:380 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Escolliu un fitxer de text a obrir" #: ../code/commands/browser-context-commands.cpp:519 #: ../code/commands/browser-context-commands.cpp:530 msgid "Account successfully created" msgstr "El compte ha quedat creat" #: ../code/commands/browser-context-commands.cpp:523 msgid "When re-connecting to the server, the new account will be used." msgstr "En re-connectar al servidor, s'utilitzarà el nou compte." #: ../code/commands/browser-context-commands.cpp:534 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" "El certificat ha estat desat a %1.\n" "\n" "Per acreditar-vos per compte, establiu el certificat a les Preferències " "deGobby i re-connecteu al servidor." #: ../code/commands/browser-context-commands.cpp:547 msgid "Failed to create account" msgstr "La creació del compte ha fallat" #: ../code/commands/browser-context-commands.cpp:550 msgid "Could not save the certificate for the account: %1" msgstr "No s'ha pogut desar el certificat pel compte: %1" #: ../code/commands/file-commands.cpp:252 #, fuzzy msgid "Cancel" msgstr "C_ancel·la" #: ../code/commands/file-commands.cpp:254 #, fuzzy msgid "Connect" msgstr "Desconnectat" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Escolliu on exportar el document \"%1\"" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "Consultant \"%1\"..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:469 #: ../code/operations/operation-open-multiple.cpp:176 #, fuzzy msgid "Failed to open document \"%1\"" msgstr "Ha fallat l'obertura del document \"%1\"" #: ../code/commands/file-tasks/task-open-location.cpp:32 #: ../code/core/filechooser.cpp:40 #: ../code/dialogs/document-location-dialog.cpp:36 #, fuzzy msgid "_Open" msgstr "_Obre..." #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Escolliu on desar el document \"%1\"" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:49 msgid "There was an error displaying help." msgstr "Hi hagué un problema per mostrar l'ajuda" #: ../code/commands/help-commands.cpp:74 msgid "Contributors:" msgstr "Qui ha contribuït:" #: ../code/commands/help-commands.cpp:80 msgid "British English:" msgstr "Anglès britànic:" #: ../code/commands/help-commands.cpp:82 msgid "German:" msgstr "Alemany:" #: ../code/commands/help-commands.cpp:99 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "S'ha perdut la connexió al centre de servei d'aquest document. Els " "canvisnous que ara feu al document podrien no sincronitzar-se més amb els " "demés, per tant el document no es pot editar més.\n" "\n" "Si us plau tingueu clar que és possible que no tots els últims canvis hauran " "arribat al centre de servei abans que la connexió es perdés." #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "S'est sincronitzant... %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "Aquest document no es pot utilitzar." #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "Si teniu idea del què ha pogut causar el problema, aleshores podríeu provar " "a resoldre'l i intentar de nou (després d'haver tancat aquest document). " "D'altra manera sembla ben be una errada al programari. En aquest cas, si us " "plau enregistreu un informe d'errada a http://gobby.0x539.de/trac/newticket " "i faciliteu tanta informació com podeu, incloent qu és el qu fèieu quan el " "problema ha succeït i com reproduïr el problema (si és possible) per tal que " "podem corregir aquest problema en una propera versió. Gràcies." #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "La sincronització ha fallat: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "Encara podeu observar els demés com editen el document, però no el podeu " "editar." #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "L'acreditació d'usuari ha fallat: %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "No s'han concedit permisos per modificar el document." #: ../code/core/browser.cpp:109 #, fuzzy msgid "_Direct Connection" msgstr "Connexió _directa" #: ../code/core/browser.cpp:110 #, fuzzy msgid "Host Name:" msgstr "Servidor:" #: ../code/core/certificatemanager.cpp:86 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "Ha fallat l'escriptura de paràmetres Diffie-Hellman a \"%s\": %s" #: ../code/core/certificatemanager.cpp:279 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "Ha fallat la lectura de paràmetres Diffie-Hellman: %s" #: ../code/core/certificatemanager.cpp:341 msgid "File does not contain a X.509 certificate" msgstr "El fitxer no conté un certificat X.509" #: ../code/core/certificatemanager.cpp:417 msgid "Certificate does not belong to the chosen key" msgstr "El certificat no es correspòn amb la clau escollida" #: ../code/core/filechooser.cpp:35 #, fuzzy msgid "_Save" msgstr "Desa-ho tot" #: ../code/core/foldermanager.cpp:345 msgid "The document has been removed from the server." msgstr "El document ha estat eliminat del servidor" #: ../code/core/selfhoster.cpp:105 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "Generant paràmetres Diffie-Hellman de 2048 bits" #: ../code/core/selfhoster.cpp:137 msgid "Failed to generate Diffie-Hellman parameters" msgstr "Ha fallat la generació de paràmetres Diffie-Hellman" #: ../code/core/selfhoster.cpp:139 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" "Això significa que el «Secret Avançat Perfecte» (PFS) no est disponible. " "Reinicieu Gobby per re-intentar la generació de paràmetres. El problema " "específic fou:\n" "%1" #: ../code/core/selfhoster.cpp:265 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" "Per tal que es comencin a compartir els vostres documents, escolliu una clau " "privada i el certificat o creeu un nou parell a les preferències" #: ../code/core/selfhoster.cpp:287 #, fuzzy msgid "Failed to share documents" msgstr "S'ha fallat a compartir documents" #: ../code/core/sessionuserview.cpp:38 #, fuzzy msgid "User List" msgstr "Llista d'usuaris" #: ../code/core/statusbar.cpp:434 #, fuzzy msgid "Ln %1, Col %2\t%3" msgstr "Línia: %1, Columna: %2\t%3" #: ../code/core/statusbar.cpp:437 msgid "OVR" msgstr "SOBR" #: ../code/core/statusbar.cpp:437 msgid "INS" msgstr "INS" #: ../code/core/textsessionview.cpp:639 msgid "Text written by %1" msgstr "Text escrit per %1" #: ../code/core/textsessionview.cpp:645 msgid "Unowned text" msgstr "Text sense autoria" #: ../code/core/userlist.cpp:115 #, fuzzy msgid "Users" msgstr "Usuaris" #: ../code/dialogs/connection-info-dialog.cpp:48 #, fuzzy msgid "Connections" msgstr "Connexions remotes" #: ../code/dialogs/connection-info-dialog.cpp:313 msgid "Nobody is connected to this computer" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:153 #, fuzzy msgid "Select document's target location" msgstr "Seleccioneu la destinació pel document" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Choose a directory to create the document into:" msgstr "Escolliu una carpeta on crehari-hi el document:" #: ../code/dialogs/document-location-dialog.cpp:162 #, fuzzy msgid "Select documents' target location" msgstr "Seleccioneu la ubicació pel document" #: ../code/dialogs/document-location-dialog.cpp:164 msgid "Choose a directory to create the documents into:" msgstr "Escolliu una carpeta on crear-hi els documents:" #: ../code/dialogs/find-dialog.cpp:59 #, fuzzy msgid "Replace _All" msgstr "Reemplaça-ho _tot" #: ../code/dialogs/find-dialog.cpp:61 msgid "_Replace" msgstr "_Reemplaça" #: ../code/dialogs/find-dialog.cpp:62 #, fuzzy msgid "_Find" msgstr "Cerca" #: ../code/dialogs/find-dialog.cpp:119 #, fuzzy msgid "Find" msgstr "Cerca" #: ../code/dialogs/find-dialog.cpp:119 #, fuzzy msgid "Replace" msgstr "_Reemplaça" #: ../code/dialogs/find-dialog.cpp:138 ../code/dialogs/find-dialog.cpp:154 #, fuzzy msgid "Phrase \"%1\" has not been found" msgstr "No s'ha trobat la frase «%1»" #: ../code/dialogs/find-dialog.cpp:312 #, fuzzy msgid "No occurrence has been replaced" msgstr "No s'ha reemplaçat cap coincidència" #: ../code/dialogs/find-dialog.cpp:318 #, fuzzy msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "S'ha reemplaçat %1 coincidència" msgstr[1] "S'han reemplaçat %1 coincidències" #: ../code/dialogs/goto-dialog.cpp:31 msgid "Go To _Line" msgstr "Vés a la _línia" #: ../code/dialogs/initial-dialog.cpp:53 msgid "Generating 2048-bit RSA private key..." msgstr "Generant clau RSA privada de 2048 bits..." #: ../code/dialogs/initial-dialog.cpp:76 msgid "Failed to generate private key" msgstr "Ha fallat la generació de clau privada" #: ../code/dialogs/initial-dialog.cpp:79 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" "%1\n" "\n" "Podeu intentar una altra vegada a crear una clau a la solapa «Seguretat» del " "quadre de preferències." #: ../code/dialogs/initial-dialog.cpp:118 msgid "Failed to generate self-signed certificate" msgstr "Ha fallat la generació de certificat auto-signat" #: ../code/dialogs/initial-dialog.cpp:121 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" "%1\n" "\n" "Podeu provar una altra vegada a crear un certificat a la solapa «Seguretat» " "del quadre de preferències" #: ../code/dialogs/password-dialog.cpp:34 msgid "Connection to host \"%1\" requires a password." msgstr "" #: ../code/dialogs/password-dialog.cpp:40 msgid "Invalid password for host \"%1\". Please try again." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:409 msgid "Display no whitespace" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:412 msgid "Display spaces" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:416 #, fuzzy msgid "Display tabs" msgstr "Mostra les tabulacions" #: ../code/dialogs/preferences-dialog.cpp:420 msgid "Display tabs and spaces" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:452 msgid "Show text only" msgstr "Mostra només text" #: ../code/dialogs/preferences-dialog.cpp:454 msgid "Show icons only" msgstr "Mostra només icones" #: ../code/dialogs/preferences-dialog.cpp:456 msgid "Show both icons and text" msgstr "Mostra icones i text" #: ../code/dialogs/preferences-dialog.cpp:458 msgid "Show text besides icons" msgstr "Mostra el text de costat amb les icones" #: ../code/dialogs/preferences-dialog.cpp:478 msgid "Scheme Description" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:575 msgid "Use TLS if possible" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:578 msgid "Always use TLS" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:615 #, fuzzy msgid "Error reading file: %1" msgstr "L'acreditació d'usuari ha fallat: %1" #: ../code/dialogs/preferences-dialog.cpp:655 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:685 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:703 msgid "Select a location for the generated certificate" msgstr "" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "" #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "" #: ../code/operations/operation-export-html.cpp:173 #, c-format msgid "written by: %s" msgstr "" #: ../code/operations/operation-export-html.cpp:246 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:259 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "" #: ../code/operations/operation-export-html.cpp:409 msgid "Participants" msgstr "" #: ../code/operations/operation-export-html.cpp:483 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "" #: ../code/operations/operation-export-html.cpp:544 msgid "Failed to export document \"%1\" to HTML" msgstr "" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "" #: ../code/operations/operation-new.cpp:76 #, fuzzy msgid "Creating document \"%1\"..." msgstr "Creant el document «%1»..." #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "" #: ../code/operations/operation-new.cpp:89 #, fuzzy msgid "Failed to create document \"%1\"" msgstr "Ha fallat la creació del document «%1»" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "" #: ../code/operations/operation-open.cpp:113 #, fuzzy msgid "Opening document \"%1\"..." msgstr "Obrint el document «%1»..." #: ../code/operations/operation-open.cpp:129 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" #: ../code/operations/operation-open.cpp:318 msgid "The file contains data not in the specified encoding" msgstr "" #: ../code/operations/operation-open.cpp:329 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" #: ../code/operations/operation-open-multiple.cpp:88 msgid "Parent folder was removed" msgstr "" #: ../code/operations/operation-open-multiple.cpp:189 #, fuzzy msgid "Failed to open multiple documents" msgstr "Ha fallat l'obertura de múltiples documents" #: ../code/operations/operation-save.cpp:91 #, fuzzy msgid "Saving document \"%1\" to \"%2\"..." msgstr "Desant el document «%1» a «%2»..." #: ../code/operations/operation-save.cpp:220 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" #: ../code/operations/operation-save.cpp:281 #, fuzzy msgid "Failed to save document \"%1\"" msgstr "S'ha fallat en desar el document «%1»" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Component invàlid a la ruta: «%1»" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 msgid "Subscribing to \"%1\"..." msgstr "" #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Ha fallat la connexió a «%1»" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "Connectant a «%1»..." #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 msgid "Could not subscribe to \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "La ruta «%1» no existeix" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "" #: ../code/util/uri.cpp:91 #, fuzzy msgid "Device \"%1\" does not exist" msgstr "El dispositiu «%1» no existeix" #: ../code/window.cpp:42 msgid "Chat" msgstr "Conversa" #: ../code/window.cpp:83 msgid "This Computer" msgstr "" #: ../code/window.cpp:108 #, fuzzy msgid "Document Browser" msgstr "Explorador de documents" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "" #: ../gobby-0.5.desktop.in.h:2 #, fuzzy msgid "Collaborative Editor" msgstr "Editor col·laboratiu Gobby" #: ../gobby-0.5.desktop.in.h:3 #, fuzzy msgid "Gobby Collaborative Editor (0.5)" msgstr "Editor col·laboratiu Gobby (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Editeu fitxers de text col·laborativament" #~ msgid "_Remove" #~ msgstr "_Elimina" #~ msgid "_Disconnect from Server" #~ msgstr "_Desconnecta del servidor" #, fuzzy #~ msgid "Create _Account..." #~ msgstr "Cre_a un compte..." #, fuzzy #~ msgid "Create Do_cument..." #~ msgstr "Crea un do_cument..." #, fuzzy #~ msgid "Create Di_rectory..." #~ msgstr "Crea una ca_rpeta..." #, fuzzy #~ msgid "_Open Document..." #~ msgstr "_Obre un document..." #, fuzzy #~ msgid "_Permissions..." #~ msgstr "_Permisos..." #~ msgid "D_elete" #~ msgstr "_Elimina" #, fuzzy #~ msgid "_None" #~ msgstr "Cap" #, fuzzy #~ msgid "_File" #~ msgstr "_Fitxers" #, fuzzy #~ msgid "Open _Location..." #~ msgstr "Obre una ubicació..." #, fuzzy #~ msgid "Save _As..." #~ msgstr "_Anomena i desa..." #~ msgid "Save all open files locally" #~ msgstr "Desa tots els fitxers oberts localment" #~ msgid "Export As _HTML..." #~ msgstr "Exporta en format _HTML..." #~ msgid "Connect _to Server..." #~ msgstr "Connec_ta a Servidor..." #~ msgid "_Edit" #~ msgstr "_Edita" #, fuzzy #~ msgid "_Find..." #~ msgstr "Cerca..." #, fuzzy #~ msgid "Find Ne_xt" #~ msgstr "Cerca següent" #~ msgid "Find next match of phrase searched for" #~ msgstr "Troba la següent frase coincident amb la cerca" #~ msgid "Find Pre_vious" #~ msgstr "Cerca enrere" #~ msgid "Find previous match of phrase searched for" #~ msgstr "Troba l'anterior frase coincident amb la cerca" #, fuzzy #~ msgid "Find and Rep_lace..." #~ msgstr "Cerca i reemplaça..." #, fuzzy #~ msgid "Go to _Line..." #~ msgstr "Vés a la _línia..." #, fuzzy #~ msgid "Pr_eferences..." #~ msgstr "Pr_eferències..." #, fuzzy #~ msgid "_View" #~ msgstr "_Visualitza" #~ msgid "Reset User Colors" #~ msgstr "Reinicialitza colors d'usuari" #, fuzzy #~ msgid "Hide user colors in current document" #~ msgstr "Amaga colors d'usuari al document actual" #~ msgid "Show the editing window in fullscreen mode" #~ msgstr "Mostra la finestra d'edició a pantalla completa" #~ msgid "Zoom In" #~ msgstr "Apropa zoom" #~ msgid "Zoom Out" #~ msgstr "Allunya zoom" #, fuzzy #~ msgid "View Toolbar" #~ msgstr "Mostra la barra d'eines" #~ msgid "Whether to show the toolbar" #~ msgstr "Quan mostrar la barra d'eines" #~ msgid "View Statusbar" #~ msgstr "Mostra la barra d'estat" #~ msgid "Whether to show the statusbar" #~ msgstr "Quan mostrar la barra d'estat" #~ msgid "View Document Browser" #~ msgstr "Mostra l'explorador de documents" #~ msgid "Whether to show the document browser" #~ msgstr "Quan mostrar l'explorador de documents" #, fuzzy #~ msgid "View Chat" #~ msgstr "Mostra la conversa" #~ msgid "Whether to show the chat pane" #~ msgstr "Quan mostrar el quadre de conversa" #, fuzzy #~ msgid "View Document User List" #~ msgstr "Mostra la llista d'usuaris del document" #~ msgid "Whether to show the user list for documents" #~ msgstr "Quan mostrar la llista d'usuaris del document" #~ msgid "View Chat User List" #~ msgstr "Mostra la llista d'usuaris en conversa" #~ msgid "Whether to show the user list for the chat" #~ msgstr "Quan mostrar la llista d'usuaris en conversa" #~ msgid "_Highlight Mode" #~ msgstr "Forma de ressaltat" #~ msgid "_Help" #~ msgstr "A_juda" #~ msgid "_Contents" #~ msgstr "_Continguts" #, fuzzy #~ msgid "Opens the Gobby manual" #~ msgstr "Obre el manual del Gobby" #, fuzzy #~ msgid "_About..." #~ msgstr "Quant _a..." #~ msgid "Shows Gobby's copyright and credits" #~ msgstr "Mostra la llicència i autoria del Gobby" #~ msgid "User list" #~ msgstr "Llista d'usuaris" #~ msgid "Document list" #~ msgstr "Llista de documents" #~ msgid "User Color Indicator" #~ msgstr "Indicador de color d'usuari" #~ msgid "Connect to Server" #~ msgstr "Connecta al servidor" #~ msgid "Please enter a host name with which to establish a connection." #~ msgstr "Si us plau entreu el centre de servei amb el qual connectar." #~ msgid "_Remote Endpoint:" #~ msgstr "Equip _remot:" #, fuzzy #~ msgid "Document Name:" #~ msgstr "Nom del document:" #, fuzzy #~ msgid "_Search for:" #~ msgstr "Cerca:" #, fuzzy #~ msgid "Replace _with:" #~ msgstr "Substitueix amb:" #, fuzzy #~ msgid "_Match case" #~ msgstr "Distingeix entre majúscules i minúscules" #, fuzzy #~ msgid "Match _entire word only" #~ msgstr "Només paraules senceres" #~ msgid "Search _backwards" #~ msgstr "Cerca enrere" #~ msgid "Wra_p around" #~ msgstr "Ajusta del text" #~ msgid "Go to line" #~ msgstr "Vés a la línia" #, fuzzy #~ msgid "Line _number:" #~ msgstr "_Número de línia:" #~ msgid "Choose a user color" #~ msgstr "Escolliu un color d'usuari" #~ msgid "Welcome to Gobby" #~ msgstr "La benvinguda a Gobby" #~ msgid "" #~ "Before we start, a few options need to be configured. You can later " #~ "change them by choosing Edit ▸ Preferences from the menu." #~ msgstr "" #~ "Abans de començar, cal configurar algunes opcions. Podreu canviar-les més " #~ "encadant escollint Edició ▸ Preferències del menú." #, fuzzy #~ msgid "User Name" #~ msgstr "Nom d'usuari" #~ msgid "Your name as shown to other users." #~ msgstr "El vostre com ha de ser vist pels demés usuaris." #, fuzzy #~ msgid "User Color" #~ msgstr "Color d'usuari" #, fuzzy #~ msgid "Ask remote users for a password" #~ msgstr "Demana contrasenya als usuaris remots" #~ msgid "Password:" #~ msgstr "Contrasenya:" #, fuzzy #~ msgid "Password Required" #~ msgstr "Cal contrasenya" #, fuzzy #~ msgid "Server _Password:" #~ msgstr "Contrasenya del servei:" #, fuzzy #~ msgid "Local Documents" #~ msgstr "Documents locals" #, fuzzy #~ msgid "User name:" #~ msgstr "Nom d'usuari:" #, fuzzy #~ msgid "User color:" #~ msgstr "Color d'usuari:" #~ msgid "Color intensity:" #~ msgstr "Intensitat de color" #, fuzzy #~ msgid "Highlight current line of remote users" #~ msgstr "Realça la línia actual d'usuaris" #~ msgid "Port:" #~ msgstr "Port:" #~ msgid "Tab Stops" #~ msgstr "Tabulacions" #~ msgid "Indentation" #~ msgstr "Sagnat" #, fuzzy #~ msgid "Home/End Behavior" #~ msgstr "Comportament d'Inici/Fi" #, fuzzy #~ msgid "_Tab width:" #~ msgstr "Amplada del _tabulador:" #, fuzzy #~ msgid "Insert _spaces instead of tabs" #~ msgstr "Insereix espais en comptes de tabulacions" #, fuzzy #~ msgid "Enable automatic _indentation" #~ msgstr "Habilita el sagnat automàtic" #, fuzzy #~ msgid "Smart _home/end" #~ msgstr "Inici/fi intel·ligent" #, fuzzy #~ msgid "Enable _automatic saving of documents" #~ msgstr "Habilita que es desin els documents _automàticament" #~ msgid "" #~ "With this option enabled, Home/End keys move to first/last character " #~ "before going to the start/end of the line." #~ msgstr "" #~ "Amb aquesta opció habilitada, les tecles Inici/Fi mouen al primer/darrer " #~ "caràcter abans d'anar al principi/final de la línia." #, fuzzy #~ msgid "Text Wrapping" #~ msgstr "Ajustament del text" #, fuzzy #~ msgid "Line Numbers" #~ msgstr "Números de línies" #, fuzzy #~ msgid "Current Line" #~ msgstr "Línia actual" #, fuzzy #~ msgid "Right Margin" #~ msgstr "Marge dret" #, fuzzy #~ msgid "Bracket Matching" #~ msgstr "Coincidència de parèntesi" #~ msgid "Enable text wrapping" #~ msgstr "Habilita l'ajustament del text" #~ msgid "Do not split words over two lines" #~ msgstr "No divideixis paraules en dues línies" #~ msgid "Display line numbers" #~ msgstr "Mostra els números de línia" #~ msgid "Highlight current line" #~ msgstr "Realça la línia actual" #~ msgid "Display right margin" #~ msgstr "Mostra el marge dret" #~ msgid "Right margin at column:" #~ msgstr "Marge dret a la columna:" #~ msgid "Highlight matching bracket" #~ msgstr "Realça la coincidència de parèntesi" #~ msgid "Toolbar" #~ msgstr "Barra d'eines" #~ msgid "Font" #~ msgstr "Tipografia" #, fuzzy #~ msgid "Secure Connection" #~ msgstr "Connexió segura" #, fuzzy #~ msgid "Authentication" #~ msgstr "Acreditació" #~ msgid "None" #~ msgstr "Cap" #, fuzzy #~ msgid "Create New..." #~ msgstr "Crea Nou..." #~ msgid "Preferences" #~ msgstr "Preferències" #~ msgid "User" #~ msgstr "Usuari" #~ msgid "Editor" #~ msgstr "Editor" #~ msgid "View" #~ msgstr "Visualitza" #~ msgid "Appearance" #~ msgstr "Aparença" #~ msgid "You are still connected to a session" #~ msgstr "Encara esteu connectat a una sessió" #, fuzzy #~ msgid "Do you want to close Gobby nevertheless?" #~ msgstr "Voleu tancar el Gobby igualment?" #, fuzzy #~ msgid "" #~ "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.\n" #~ "\n" #~ "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.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "Aquest programa és programari lliure; podeu redistribuir-lo i/o\n" #~ "modificar-lo sota els termes de la Llicència Pública General GNU tal i\n" #~ "com ha estat publicada per la Free Software Foundation; bé sota la\n" #~ "versió 2 de la Llicència o bé (si ho preferiu) sota qualsevol versió\n" #~ "posterior.\n" #~ "\n" #~ "Aquest programa es distribueix amb l'expectativa de que serà útil,\n" #~ "però SENSE CAP GARANTIA; ni tan sols la garantia implícita de\n" #~ "COMERCIABILITAT o ADEQUACIÓ PER UN PROPÒSIT PARTICULAR. Vegeu la\n" #~ "Llicència Pública General GNU per obtenir-ne més detalls." #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Ha fallat la resolució de «%1»: %2" #~ msgid "_Up" #~ msgstr "A _dalt" #~ msgid "_Down" #~ msgstr "A _baix" #~ msgid "Send" #~ msgstr "Envia" #~ msgid "Command '%0%' not found. Type /help for a list of existing commands." #~ msgstr "" #~ "No s'ha trobat la instrucció '%0%'. Entreu /help per una llista d'ordres." #~ msgid "%0%: %1%" #~ msgstr "%0%: %1%" #~ msgid "Usage: /remove " #~ msgstr "Forma d'ús: /remove " #~ msgid "Subscribe" #~ msgstr "Subscriu-me" #~ msgid "GtkSpell error: %0%" #~ msgstr "Error del GtkSpell: %0%" #~ msgid "UTF-8|ISO-8859-1|ISO-8859-15|UTF-7|UTF-16|UCS-2|UCS-4" #~ msgstr "UTF-8|ISO-8859-1|ISO-8859-15|UTF-7|UTF-16|UCS-2|UCS-4" #~ msgid "" #~ "Failed to convert input into UTF-8: Either the encoding is unknown or it " #~ "is binary input." #~ msgstr "" #~ "No s'ha pogut convertir l'entrada a UTF-8: la codificació és desconeguda " #~ "o és entrada binària." #~ msgid "Auto Detect" #~ msgstr "Autodetecta" #~ msgid "Character Encoding:" #~ msgstr "Codificació de caràcters:" #~ msgid "Match as regular expression" #~ msgstr "Fes coincidir com a expressió regular" #~ msgid "Search and replace" #~ msgstr "Cerca i reemplaça" #~ msgid "No document currently opened" #~ msgstr "No hi ha cap document obert" #~ msgid "_Go to line" #~ msgstr "_Vés a la línia" #~ msgid "Join session..." #~ msgstr "Uneix-te a una sessió…" #~ msgid "Joins an existing obby session" #~ msgstr "Uneix a una sessió d'obby ja existent" #~ msgid "Save session" #~ msgstr "Desa la sessió…" #~ msgid "Saves the complete session for a later restore" #~ msgstr "Desa la sessió completa per a restaurar-la més endavant" #~ msgid "Save session as..." #~ msgstr "Anomena i desa la sessió…" #~ msgid "\"Saves as...\" the complete session for a later restore" #~ msgstr "«Anomena i desa…» la sessió completa per a restaurar-la més tard" #~ msgid "Quit session" #~ msgstr "Desconnecta de la sessió" #~ msgid "Leaves the currently running obby session" #~ msgstr "Abandona la sessió d'obby que s'està executant" #~ msgid "Quit" #~ msgstr "Surt" #~ msgid "Quits the application" #~ msgstr "Surt de l'aplicació" #~ msgid "Creates a new document" #~ msgstr "Crea un document nou" #~ msgid "Loads a file into a new document" #~ msgstr "Carrega un fitxer en un document nou" #~ msgid "Saves a document into a file" #~ msgstr "Desa el document en un fitxer" #~ msgid "Save document as..." #~ msgstr "Anomena i desa el document…" #~ msgid "Saves all documents" #~ msgstr "Desa tots els documents" #~ msgid "Close document" #~ msgstr "Tanca el document" #~ msgid "Search for a text and replace it with another one" #~ msgstr "Cerca un text i reemplaça'l amb un altre" #~ msgid "Move cursor to a specified line" #~ msgstr "Mou el cursor a una línia especificada" #~ msgid "Displays a dialog to customize Gobby for your needs" #~ msgstr "" #~ "Mostra un diàleg per a personalitzar el Gobby a les vostres necessitats" #~ msgid "Document preferences..." #~ msgstr "Preferències del document…" #~ msgid "Shows a preferences dialog that is just applied to this document" #~ msgstr "" #~ "Mostra un diàleg de preferències que només s'aplica a aquest document" #~ msgid "Syntax" #~ msgstr "Sintaxi" #~ msgid "_User" #~ msgstr "_Usuari" #~ msgid "Sets a password for this user" #~ msgstr "Estableix una contrasenya per a aquest usuari" #~ msgid "Set color..." #~ msgstr "Estableix el color…" #~ msgid "Sets a new color for this user" #~ msgstr "Estableix el color per a aquest usuari" #~ msgid "_Window" #~ msgstr "_Finestra" #~ msgid "Displays a list of users that are currently joined" #~ msgstr "Mostra la llista d'usuaris que estan conectats" #~ msgid "Displays a list of documents within the current session" #~ msgstr "Mostra la llista de documents de dins de la sessió actual" #~ msgid "Displays a chat to talk to other people in the session" #~ msgstr "Mostra el xat per parlar amb l'altra gent a la sessió." #~ msgid "Unselects the current language" #~ msgstr "Desselecciona el llenguatge actual" #~ msgid "Selects %0% as language" #~ msgstr "Selecciona %0% com a llenguatge" #~ msgid "Create obby session" #~ msgstr "Crea una sessió d'obby" #~ msgid "Color:" #~ msgstr "Color:" #~ msgid "Restore session:" #~ msgstr "Restaura la sessió:" #~ msgid "Restore session" #~ msgstr "Restaura una sessió" #~ msgid ".obby files" #~ msgstr "Fitxers .obby" #~ msgid "All files" #~ msgstr "Tots els fitxers" #~ msgid "_Host" #~ msgstr "_Servidor" #~ msgid "Opening obby session..." #~ msgstr "S'està obrint la sessió d'obby…" #~ msgid "Join obby session" #~ msgstr "Connecta a una sessió d'obby" #~ msgid "Host:" #~ msgstr "Servidor:" #~ msgid "Local network" #~ msgstr "Xarxa local" #~ msgid "Host" #~ msgstr "Servidor" #~ msgid "Port" #~ msgstr "Port" #~ msgid "Failure" #~ msgstr "Fallada" #~ msgid "" #~ "User password for user '%0%' required. You may either choose another user " #~ "name, type in your user password or cancel the connection." #~ msgstr "" #~ "Es requereix la contrasenya per l'usuari «%0%». Podeu triar un altre nom " #~ "d'usuari, introduir la vostra contrasenya d'usuari o cancel·lar la " #~ "connexió." #~ msgid "" #~ "Name is already in use. You may choose another name or cancel the " #~ "connection." #~ msgstr "" #~ "El nom ja està en ús. Podeu triar un altre nom o cancel·lar la connexió." #~ msgid "" #~ "Color is already in use. You may choose another color or cancel the " #~ "connection." #~ msgstr "" #~ "El color ja està en ús. Podeu triar un altre color o cancel·lar la " #~ "connexió." #~ msgid "" #~ "Session password required. You have to type in the password to be able to " #~ "join the obby session." #~ msgstr "" #~ "Es requereix una contrasenya per a la sessió. Heu d'introduir la " #~ "contrasenya per a poder unir-vos a la sessió d'obby." #~ msgid "Session password:" #~ msgstr "Contrasenya de la sessió:" #~ msgid "Joining obby session..." #~ msgstr "S'està unint a una sessió d'obby…" #~ msgid "Setting up connection encryption (TLS)..." #~ msgstr "S'està configurant el xifratge (TLS) de la connexió…" #~ msgid "Login packet sent, waiting for response..." #~ msgstr "S'ha enviat el paquet d'entrada, s'està esperant la resposta…" #~ msgid "Logged in successfully, synchronising session..." #~ msgstr "S'ha entrat amb èxit, s'està sincronitzant la sessió…" #~ msgid "Windows" #~ msgstr "Finestres" #~ msgid "Remember the positions and states" #~ msgstr "Recorda les posicions i estats" #~ msgid "Highlight the window on incoming chat messages" #~ msgstr "Realça la finestra quan arriben missatges de xat" #~ msgid "Open new remotely-created documents automatically" #~ msgstr "Obre automàticament els documents nous creats remotament" #~ msgid "Pattern" #~ msgstr "Patró" #~ msgid "Language" #~ msgstr "Llenguatge" #~ msgid "Mime type" #~ msgstr "Tipus MIME" #~ msgid "This is a list of all recognized file types" #~ msgstr "Aquesta es una llista de tots els tipus de fitxer reconeguts" #~ msgid "Pattern must not be empty." #~ msgstr "El patró no pot ser buit" #~ msgid "There is no language with the mime type '%0%'." #~ msgstr "No hi ha cap llenguatge amb el tipus mime «%0%»." #~ msgid "Behaviour" #~ msgstr "Comportament" #~ msgid "Selected language: %0%" #~ msgstr "Llenguatge seleccionat: %0%" #~ msgid "No language selected" #~ msgstr "No hi ha cap llenguatge seleccionat" #~ msgid "Online" #~ msgstr "En línia" #~ msgid "Offline" #~ msgstr "Fora de línia" #~ msgid "" #~ "Zeroconf initialisation failed. Probably you need to run avahi-daemon or " #~ "mDNSResponder, depending on the library you use, as root prior to Gobby. " #~ "Zeroconf support is deactivated for this session." #~ msgstr "" #~ "Ha fallat la inicialització del Zeroconf. És possible que hàgiu " #~ "d'executar l'avahi-daemon o mDNSResponder, depenent de la biblioteca que " #~ "empreu, com a root, abans d'executar el Gobby. S'ha inhabilitat el suport " #~ "de Zeroconf per a aquesta sessió." #~ msgid "Use default .obby extension if none is given" #~ msgstr "Utilitza l'extensió per defecte .obby si no es dóna cap" #~ msgid "Save obby session" #~ msgstr "Desa la sessió d'obby" #~ msgid "A collaborative text editor" #~ msgstr "Un editor de text col·laboratiu" #~ msgid "Create document" #~ msgstr "Crea un document" #~ msgid "Enter document name" #~ msgstr "Introduïu el nom del document" #~ msgid "Open new document" #~ msgstr "Obre un document nou" #~ msgid "" #~ "Click on \"Apply\" to apply the new settings to documents that are " #~ "currently open. \"OK\" will just store the values to use them with newly " #~ "created documents." #~ msgstr "" #~ "Feu clic en «Aplica» per a aplicar els nous paràmetres als documents que " #~ "estan oberts. «D'acord» només emmagatzemarà els valors per a usar-los amb " #~ "els documents de nova creació." #~ msgid "" #~ "Set a user password for your user account. When you try to login next " #~ "time with this user, you will be prompted for your password." #~ msgstr "" #~ "Estableix una contrasenya d'usuari per al vostre compte d'usuari. Quan " #~ "intenteu entrar la pròxima vegada amb aquest usuari, se us demanarà la " #~ "contrasenya." #~ msgid "" #~ "These preferences affect only the currently active document \"%0%\". If " #~ "you want to change global preferences, use the preferences menu item in " #~ "the \"Edit\" menu." #~ msgstr "" #~ "Aquestes preferències només afecten al document actiu «%0%». Si voleu " #~ "canviar les preferències globals, utilitzeu l'element del menú de " #~ "preferències al menú «Edita»." #~ msgid "Color change failed: Color already in use" #~ msgstr "Ha fallat el canvi de color: el color ja està en ús" #~ msgid "Connected to %0%:%1%" #~ msgstr "S'ha connectat a %0%:%1%" #~ msgid "Serving on port %0%" #~ msgstr "S'està servint al port %0%" #~ msgid "Save changes to document \"%0%\" before closing?" #~ msgstr "Voleu desar els canvis al document «%0%» abans de tancar?" #~ msgid "" #~ "If you don't save, changes will be discarded, but may still be retrieved " #~ "if you re-subscribe to the document as long as the session remains open." #~ msgstr "" #~ "Si no deseu, es descartaran els canvis, pero encara podrien ser " #~ "recuperats si us torneu a subscriure al document sempre que la sessió " #~ "encara sigui oberta." #~ msgid "If you don't save, changes will be discarded." #~ msgstr "Si no els deseu, es descartaran tots els canvis." #~ msgid "Close without saving" #~ msgstr "Tanca sense desar" #~ msgid "Set colour..." #~ msgstr "Estableix el color…" #~ msgid "Sets a new colour for this user" #~ msgstr "Estableix el color per a aquest usuari" #~ msgid "Colour:" #~ msgstr "Color:" #~ msgid "Displays a dialog to customise Gobby for your needs" #~ msgstr "" #~ "Mostra un diàleg per a personalitzar el Gobby a les vostres necessitats" #~ msgid "Colour change failed: Colour already in use" #~ msgstr "Ha fallat el canvi de color: el color ja està en ús" #~ msgid "" #~ "Colour is already in use. You may choose another colour or cancel the " #~ "connection." #~ msgstr "" #~ "El color ja està en ús. Podeu triar un altre color o cancel·lar la " #~ "connexió." gobby-0.6.0/po/it_IT.po0000664000175000017500000010503514005502331011525 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-31 11:22+0100\n" "PO-Revision-Date: 2016-10-27 23:27+0200\n" "Last-Translator: \n" "Language-Team: \n" "Language: it_IT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.8.9\n" #: ../code/application.cpp:132 msgid "Display version information and exit" msgstr "Mostra informazioni sulla versione ed esci" #: ../code/application.cpp:134 #, fuzzy msgid "Start a new gobby instance also if there is one already running" msgstr "Apri nuova istanza di Gobby se una è già presente" #: ../code/commands/auth-commands.cpp:193 #: ../code/commands/browser-context-commands.cpp:354 #: ../code/core/filechooser.cpp:34 ../code/core/filechooser.cpp:39 #: ../code/core/huebutton.cpp:102 #: ../code/dialogs/document-location-dialog.cpp:35 #, fuzzy msgid "_Cancel" msgstr "Annulla" #: ../code/commands/auth-commands.cpp:195 ../code/core/huebutton.cpp:103 msgid "_Ok" msgstr "" #: ../code/commands/auth-commands.cpp:217 msgid "Password required" msgstr "È richiesta una password" #: ../code/commands/auth-commands.cpp:250 msgid "Incorrect password" msgstr "Password non corretta" #: ../code/commands/browser-commands.cpp:289 msgid "Subscribing to %1..." msgstr "Iscrizione a %1..." #: ../code/commands/browser-commands.cpp:302 msgid "Subscribing to chat on %1..." msgstr "Iscrizione alla chat su %1..." #: ../code/commands/browser-commands.cpp:625 msgid "Subscription failed" msgstr "Iscrizione fallita" #: ../code/commands/browser-context-commands.cpp:85 msgid "Could not find a location where to store the certificate" msgstr "Impossibile trovare una posizione dove salvare il certificato" #: ../code/commands/browser-context-commands.cpp:287 #: ../code/commands/browser-context-commands.cpp:322 #: ../code/commands/browser-context-commands.cpp:409 #: ../code/commands/file-tasks/task-open-location.cpp:31 #: ../code/core/statusbar.cpp:81 ../code/dialogs/find-dialog.cpp:58 #: ../code/dialogs/goto-dialog.cpp:30 ../code/dialogs/initial-dialog.cpp:206 #: ../code/dialogs/preferences-dialog.cpp:815 msgid "_Close" msgstr "" #: ../code/commands/browser-context-commands.cpp:349 msgid "Choose a name for the directory" msgstr "Scegli un nome per la cartella" #: ../code/commands/browser-context-commands.cpp:350 msgid "Choose a name for the document" msgstr "Scegli un nome per il documento" #: ../code/commands/browser-context-commands.cpp:351 msgid "_Directory Name:" msgstr "Nome _della Cartella:" #: ../code/commands/browser-context-commands.cpp:352 msgid "_Document Name:" msgstr "Nome del _Documento:" #: ../code/commands/browser-context-commands.cpp:355 msgid "C_reate" msgstr "C_rea" #: ../code/commands/browser-context-commands.cpp:357 msgid "New Directory" msgstr "Nuova Cartella" #: ../code/commands/browser-context-commands.cpp:358 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "Nuovo Documento" #: ../code/commands/browser-context-commands.cpp:380 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Scegli un file di testo da aprire" #: ../code/commands/browser-context-commands.cpp:519 #: ../code/commands/browser-context-commands.cpp:530 msgid "Account successfully created" msgstr "Account creato con successo" #: ../code/commands/browser-context-commands.cpp:523 msgid "When re-connecting to the server, the new account will be used." msgstr "Alla riconnessione al server, sarà utilizzato il nuovo account." #: ../code/commands/browser-context-commands.cpp:534 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" "Il certificato è stato salvato in %1.\n" "\n" "Per accedere a questo account, imposta il certificato nelle preferenze di " "Gobby e riconnettiti al server." #: ../code/commands/browser-context-commands.cpp:547 msgid "Failed to create account" msgstr "Impossibile creare l'account" #: ../code/commands/browser-context-commands.cpp:550 msgid "Could not save the certificate for the account: %1" msgstr "Impossibile salvare il certificato per l'account: %1" #: ../code/commands/file-commands.cpp:252 #, fuzzy msgid "Cancel" msgstr "Annulla" #: ../code/commands/file-commands.cpp:254 msgid "Connect" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Scegli una posizione in cui esportare il documento \"%1\"" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "Interrogazione di \"%1\"..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:469 #: ../code/operations/operation-open-multiple.cpp:176 msgid "Failed to open document \"%1\"" msgstr "Impossibile aprire il documento \"%1\"" #: ../code/commands/file-tasks/task-open-location.cpp:32 #: ../code/core/filechooser.cpp:40 #: ../code/dialogs/document-location-dialog.cpp:36 #, fuzzy msgid "_Open" msgstr "_Apri..." #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Scegli una posizione in cui salvare il documento \"%1\"" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:49 msgid "There was an error displaying help." msgstr "C'è stato un errore nell'aprire l'aiuto." #: ../code/commands/help-commands.cpp:74 msgid "Contributors:" msgstr "Contributors:" #: ../code/commands/help-commands.cpp:80 msgid "British English:" msgstr "Inglese:" #: ../code/commands/help-commands.cpp:82 msgid "German:" msgstr "Tedesco:" #: ../code/commands/help-commands.cpp:99 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "La connessione al proprietario del documento è stata persa. Non è più " "possibile sincronizzare le modifiche con gli altri, quindi non è più " "possibile modificare il documento.\n" "\n" "Nota: è possibile che non tutti gli ultimi cambiamenti abbiano raggiunto il " "proprietario prima che la connessione fosse persa." #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Sincronizzazione in corso... %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "Questo documento non può essere usato." #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "Se hai un'idea del problema, puoi provare a risolverlo e a riaprire questo " "documento. Altrimenti si tratta probabilmente di un bug del programma. In " "questo caso, inserisci un bug report all'indirizzo http://gobby.0x539.de/" "trac/newticket e fornisci tutte le informazioni possibili, incluso che cosa " "stavi facendo quando si è verificato il problema e come riprodurlo (se " "possibile) in modo che possiamo risolverlo in una versione successiva. " "Grazie." #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Sincronizzazione fallita: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "Puoi assistere alle modifiche da parte degli altri, ma non puoi modificare " "il documento." #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "User Join fallito: %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "Non si dispone dei permessi per modificare il documento." #: ../code/core/browser.cpp:109 msgid "_Direct Connection" msgstr "Connessione _Diretta" #: ../code/core/browser.cpp:110 msgid "Host Name:" msgstr "Nome Host:" #: ../code/core/certificatemanager.cpp:86 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "Impossibile scrivere i parametri di Diffie-Helman in \"%s\": \"%s\"" #: ../code/core/certificatemanager.cpp:279 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "Impossibile leggere i parametri Diffie-Hellman: %s" #: ../code/core/certificatemanager.cpp:341 msgid "File does not contain a X.509 certificate" msgstr "Il file non contiene un certificato X.509" #: ../code/core/certificatemanager.cpp:417 msgid "Certificate does not belong to the chosen key" msgstr "Il certificato non appartiene alla chiave scelta" #: ../code/core/filechooser.cpp:35 #, fuzzy msgid "_Save" msgstr "Salva Tutti" #: ../code/core/foldermanager.cpp:345 msgid "The document has been removed from the server." msgstr "Il documento è stato rimosso dal server." #: ../code/core/selfhoster.cpp:105 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "Generazione dei parametri Diffie-Hellman a 2048-bit" #: ../code/core/selfhoster.cpp:137 msgid "Failed to generate Diffie-Hellman parameters" msgstr "Impossibile generare i parametri Diffie-Hellman" #: ../code/core/selfhoster.cpp:139 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" "Questo significa che la Perfect Forward Secrecy (PFS) non è disponibile. " "Riavvia Gobby per provare a rigenerare i parametri. L'errore specifico è: \n" "\n" "%1" #: ../code/core/selfhoster.cpp:265 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" "Per condividere i tuoi documenti, scegli una chiave privata e un certificato " "o crea una nuova coppia di chiavi nelle preferenze" #: ../code/core/selfhoster.cpp:287 msgid "Failed to share documents" msgstr "Impossibile condividere i documenti" #: ../code/core/sessionuserview.cpp:38 msgid "User List" msgstr "Lista Utenti" #: ../code/core/statusbar.cpp:434 msgid "Ln %1, Col %2\t%3" msgstr "Ln %1, Col %2\t%3" #: ../code/core/statusbar.cpp:437 msgid "OVR" msgstr "SSC" #: ../code/core/statusbar.cpp:437 msgid "INS" msgstr "INS" #: ../code/core/textsessionview.cpp:639 msgid "Text written by %1" msgstr "Testo di %1" #: ../code/core/textsessionview.cpp:645 msgid "Unowned text" msgstr "Testo senza proprietario" #: ../code/core/userlist.cpp:115 msgid "Users" msgstr "Utenti" #: ../code/dialogs/connection-info-dialog.cpp:48 #, fuzzy msgid "Connections" msgstr "Permetti connessioni remote" #: ../code/dialogs/connection-info-dialog.cpp:313 msgid "Nobody is connected to this computer" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:153 msgid "Select document's target location" msgstr "Scegli la destinazione del documento" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Choose a directory to create the document into:" msgstr "Scegli una cartella in cui creare il documento:" #: ../code/dialogs/document-location-dialog.cpp:162 msgid "Select documents' target location" msgstr "Scegli la destinazione del documento" #: ../code/dialogs/document-location-dialog.cpp:164 msgid "Choose a directory to create the documents into:" msgstr "Choose a directory to create the document into:" #: ../code/dialogs/find-dialog.cpp:59 msgid "Replace _All" msgstr "Sostituisci _Tutto" #: ../code/dialogs/find-dialog.cpp:61 msgid "_Replace" msgstr "Sostituis_ci" #: ../code/dialogs/find-dialog.cpp:62 #, fuzzy msgid "_Find" msgstr "Trova" #: ../code/dialogs/find-dialog.cpp:119 msgid "Find" msgstr "Trova" #: ../code/dialogs/find-dialog.cpp:119 msgid "Replace" msgstr "Sostituisci" #: ../code/dialogs/find-dialog.cpp:138 ../code/dialogs/find-dialog.cpp:154 msgid "Phrase \"%1\" has not been found" msgstr "La frase \"%1\" non è stata trovata" #: ../code/dialogs/find-dialog.cpp:312 msgid "No occurrence has been replaced" msgstr "Nessuna occorrenza sostituita" #: ../code/dialogs/find-dialog.cpp:318 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 occorrenza è stata sostituita" msgstr[1] "%1 occorrenze sono state sostituite" #: ../code/dialogs/goto-dialog.cpp:31 msgid "Go To _Line" msgstr "Vai alla _Riga" #: ../code/dialogs/initial-dialog.cpp:53 msgid "Generating 2048-bit RSA private key..." msgstr "Generazione chiave privata RSA a 2048-bit" #: ../code/dialogs/initial-dialog.cpp:76 msgid "Failed to generate private key" msgstr "Impossibile generare la chiave privata" #: ../code/dialogs/initial-dialog.cpp:79 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" "%1\n" "\n" "Puoi provare ancora a creare una chiave nella scheda Sicurezza delle " "Preferenze" #: ../code/dialogs/initial-dialog.cpp:118 msgid "Failed to generate self-signed certificate" msgstr "Impossibile generare il certificato auto-firmato" #: ../code/dialogs/initial-dialog.cpp:121 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" "%1\n" "\n" "Puoi provare ancora a creare un certificato nella scheda Sicurezza delle " "Preferenze" #: ../code/dialogs/password-dialog.cpp:34 msgid "Connection to host \"%1\" requires a password." msgstr "La connessione all'host \"%1\" richiede una password." #: ../code/dialogs/password-dialog.cpp:40 msgid "Invalid password for host \"%1\". Please try again." msgstr "Password non valida per l'host \"%1\". Riprova." #: ../code/dialogs/preferences-dialog.cpp:409 msgid "Display no whitespace" msgstr "Non mostrare caratteri non stampabili" #: ../code/dialogs/preferences-dialog.cpp:412 msgid "Display spaces" msgstr "Mostra spazi" #: ../code/dialogs/preferences-dialog.cpp:416 msgid "Display tabs" msgstr "Mostra tabulazioni" #: ../code/dialogs/preferences-dialog.cpp:420 msgid "Display tabs and spaces" msgstr "Mostra spazi e tabulazioni" #: ../code/dialogs/preferences-dialog.cpp:452 msgid "Show text only" msgstr "Solo testo" #: ../code/dialogs/preferences-dialog.cpp:454 msgid "Show icons only" msgstr "Solo icone" #: ../code/dialogs/preferences-dialog.cpp:456 msgid "Show both icons and text" msgstr "Icone e testo" #: ../code/dialogs/preferences-dialog.cpp:458 msgid "Show text besides icons" msgstr "Testo accanto alle icone" #: ../code/dialogs/preferences-dialog.cpp:478 msgid "Scheme Description" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:575 msgid "Use TLS if possible" msgstr "Usa TLS se possibile" #: ../code/dialogs/preferences-dialog.cpp:578 msgid "Always use TLS" msgstr "Usa sempre TLS" #: ../code/dialogs/preferences-dialog.cpp:615 #, fuzzy msgid "Error reading file: %1" msgstr "Errore nella lettura del file:" #: ../code/dialogs/preferences-dialog.cpp:655 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "La chiave privata RSA a 2048-bit viene generata, attendere..." #: ../code/dialogs/preferences-dialog.cpp:685 msgid "Select a location for the generated key" msgstr "Scegli una posizione per la chiave generata" #: ../code/dialogs/preferences-dialog.cpp:703 msgid "Select a location for the generated certificate" msgstr "Scegli una posizione per il certificato generato" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Rimozione nodo \"%1\"..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Impossibile rimuovere nodo \"%1\"" #: ../code/operations/operation-export-html.cpp:173 #, c-format msgid "written by: %s" msgstr "scritto da: %s" #: ../code/operations/operation-export-html.cpp:246 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:259 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Documento generato a partire da %1$s:%2$s in data %3$s da %4$s" #: ../code/operations/operation-export-html.cpp:409 msgid "Participants" msgstr "Partecipanti" #: ../code/operations/operation-export-html.cpp:483 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Esportazione documento \"%1\" su \"%2\" in HTML..." #: ../code/operations/operation-export-html.cpp:544 msgid "Failed to export document \"%1\" to HTML" msgstr "Impossibile esportare il documento \"%1\" in HTML" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Creazione cartella \"%1\"..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Creazione documento \"%1\"..." #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Impossibile creare la cartella \"%1\"" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Impossibile creare il documento \"%1\"" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-1" #: ../code/operations/operation-open.cpp:113 msgid "Opening document \"%1\"..." msgstr "Apertura documento \"%1\"..." #: ../code/operations/operation-open.cpp:129 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" "La cartella in cui il nuovo documento doveva essere inserito è stata rimossa" #: ../code/operations/operation-open.cpp:318 msgid "The file contains data not in the specified encoding" msgstr "Il file contiene dati che non sono nella codifica specificata" #: ../code/operations/operation-open.cpp:329 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "Il file contiene dati in una codifica non nota, oppure contiene dati binari." #: ../code/operations/operation-open-multiple.cpp:88 msgid "Parent folder was removed" msgstr "Una cartella superiore è stata rimossa" #: ../code/operations/operation-open-multiple.cpp:189 msgid "Failed to open multiple documents" msgstr "Impossibile aprire più documenti" #: ../code/operations/operation-save.cpp:91 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Salvataggio documento \"%1\" su \"%2\"..." #: ../code/operations/operation-save.cpp:220 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "Il documento contiene uno o più caratteri che non possono essere " "rappresentati nella codifica specificata." #: ../code/operations/operation-save.cpp:281 msgid "Failed to save document \"%1\"" msgstr "Impossibile salvare il documento \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "Percorso non valido: \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:45 msgid "Invalid path component: \"%1\"" msgstr "Componente del percorso non valida: \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 msgid "Subscribing to \"%1\"..." msgstr "Iscrizione a \"%1\"..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 msgid "Failed to connect to \"%1\"" msgstr "Impossibile connettere a \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "Lo schema URI \"%1\" non è supportato" #: ../code/operations/operation-subscribe-path.cpp:193 msgid "Connecting to \"%1\"..." msgstr "Connessione a \"%1\"..." #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 msgid "Could not subscribe to \"%1\"" msgstr "Impossibile iscriversi a \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 msgid "Path \"%1\" does not exist" msgstr "Il percorso \"%1\" non esiste" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Impossibile creare cartella \"%1\": %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Il dispositivo \"%1\" non esiste" #: ../code/window.cpp:42 msgid "Chat" msgstr "Chat" #: ../code/window.cpp:83 msgid "This Computer" msgstr "Questo Computer" #: ../code/window.cpp:108 msgid "Document Browser" msgstr "Browser Documenti" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Editor Collaborativo" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Gobby Editor Collaborativo (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Modifica file di testo in modo collaborativo" #~ msgid "_Remove" #~ msgstr "_Rimuovi" #~ msgid "_Disconnect from Server" #~ msgstr "_Disconnetti dal Server" #~ msgid "Create _Account..." #~ msgstr "crea _Account..." #~ msgid "Create Do_cument..." #~ msgstr "Crea Do_cumento..." #~ msgid "Create Di_rectory..." #~ msgstr "Crea Ca_rtella..." #~ msgid "_Open Document..." #~ msgstr "Apri D_ocumento..." #~ msgid "_Permissions..." #~ msgstr "_Permessi..." #~ msgid "D_elete" #~ msgstr "_Elimina" #~ msgid "_None" #~ msgstr "_Nessuno" #~ msgid "_File" #~ msgstr "_File" #~ msgid "Open _Location..." #~ msgstr "Apri _Posizione..." #~ msgid "Save _As..." #~ msgstr "Salva _Come..." #~ msgid "Save all open files locally" #~ msgstr "Salva localmente tutti i file aperti" #~ msgid "Export As _HTML..." #~ msgstr "Esporta come _HTML..." #~ msgid "Connect _to Server..." #~ msgstr "Conne_tti al Server..." #~ msgid "_Edit" #~ msgstr "_Modifica" #~ msgid "_Find..." #~ msgstr "_Trova.." #~ msgid "Find Ne_xt" #~ msgstr "Trova P_rossimo" #~ msgid "Find next match of phrase searched for" #~ msgstr "Trova la prossima corrispondenza della frase cercata" #~ msgid "Find Pre_vious" #~ msgstr "Trova Precede_nte" #~ msgid "Find previous match of phrase searched for" #~ msgstr "Trova corrispondenza precedente della frase cercata" #~ msgid "Find and Rep_lace..." #~ msgstr "Trova e Sos_tituisci" #~ msgid "Go to _Line..." #~ msgstr "Vai alla _Linea..." #~ msgid "Pr_eferences..." #~ msgstr "Pr_eferenze..." #~ msgid "_View" #~ msgstr "_Visualizza" #~ msgid "Reset User Colors" #~ msgstr "Reimposta i colori degli utenti" #~ msgid "Hide user colors in current document" #~ msgstr "Nascondi i colori degli utenti" #~ msgid "Fullscreen" #~ msgstr "Schermo intero" #~ msgid "Show the editing window in fullscreen mode" #~ msgstr "Mostra la finestra di modifica a schermo intero" #~ msgid "Zoom In" #~ msgstr "Ingrandisci" #~ msgid "Zoom Out" #~ msgstr "Rimpicciolisci" #~ msgid "View Toolbar" #~ msgstr "Visualizza Barra degli Strumenti" #~ msgid "Whether to show the toolbar" #~ msgstr "Stabilisce se mostrare la barra degli strumenti" #~ msgid "View Statusbar" #~ msgstr "Visualizza la Barra di Stato" #~ msgid "Whether to show the statusbar" #~ msgstr "Stabilisce se visualizzare la barra di stato" #~ msgid "View Document Browser" #~ msgstr "Visualizza Browser dei Documenti" #~ msgid "Whether to show the document browser" #~ msgstr "Stabilisce se visualizzare il browser dei documenti" #~ msgid "View Chat" #~ msgstr "Visualizza Chat" #~ msgid "Whether to show the chat pane" #~ msgstr "Stabilisce se visualizzare il pannello della chat" #~ msgid "View Document User List" #~ msgstr "Visualizza Lista Utenti del Documento" #~ msgid "Whether to show the user list for documents" #~ msgstr "Stabilisce se visualizzare la lista di utenti del documento" #~ msgid "View Chat User List" #~ msgstr "Visualizza Lista di utenti della chat" #~ msgid "Whether to show the user list for the chat" #~ msgstr "Stabilisce se visiualizzare la lista degli utenti della chat" #~ msgid "_Highlight Mode" #~ msgstr "Modalità _Evidenziazione" #~ msgid "_Help" #~ msgstr "_Aiuto" #~ msgid "_Contents" #~ msgstr "_Contenuti" #~ msgid "Opens the Gobby manual" #~ msgstr "Apri il manuale di Gobby" #~ msgid "_About..." #~ msgstr "Inform_azioni..." #~ msgid "Shows Gobby's copyright and credits" #~ msgstr "Mostra i riconoscimenti e il copyright di Gobby" #~ msgid "User list" #~ msgstr "Lista utenti" #~ msgid "Document list" #~ msgstr "Lista documenti" #~ msgid "User Color Indicator" #~ msgstr "Indicatore colore dell'utente" #~ msgid "Connect to Server" #~ msgstr "Connetti al server" #~ msgid "Please enter a host name with which to establish a connection." #~ msgstr "Inserisci un nome host con cui stabilire una connessione." #~ msgid "_Remote Endpoint:" #~ msgstr "Endpoint _remoto:" #~ msgid "Document Name:" #~ msgstr "Nome Documento:" #~ msgid "_Search for:" #~ msgstr "_Cerca:" #~ msgid "Replace _with:" #~ msgstr "Sostituisci _con" #~ msgid "_Match case" #~ msgstr "Corrispondenza _maiuscole/minuscole" #~ msgid "Match _entire word only" #~ msgstr "Solo parole int_ere" #~ msgid "Search _backwards" #~ msgstr "Cerca all'indietro" #~ msgid "Wra_p around" #~ msgstr "Ricomincia da ca_po" #~ msgid "Go to line" #~ msgstr "Vai alla riga" #~ msgid "Line _number:" #~ msgstr "_Numero riga:" #~ msgid "Choose a user color" #~ msgstr "Scegli un colore utente" #~ msgid "Welcome to Gobby" #~ msgstr "Benvenuto in Gobby" #~ msgid "" #~ "Before we start, a few options need to be configured. You can later " #~ "change them by choosing Edit ▸ Preferences from the menu." #~ msgstr "" #~ "Prima di iniziare, occorre configurare qualche opzione. Puoi modificarle " #~ "più tardi scegliendo Modifica ▸ Preferenze dal menu." #~ msgid "User Name" #~ msgstr "Nome Utente" #~ msgid "Your name as shown to other users." #~ msgstr "Il tuo nome come mostrato agli altri" #~ msgid "User Color" #~ msgstr "Colore utente" #~ msgid "The color with which text you have written is branded." #~ msgstr "Il colore con cui è marcato il testo scritto da te." #~ msgid "Allow remote users to edit local documents" #~ msgstr "Permetti agli utenti remoti di modificare i documenti locali" #~ msgid "Ask remote users for a password" #~ msgstr "Richiedi una password agli utenti remoti" #~ msgid "Password:" #~ msgstr "Password:" #~ msgid "No authentication (Not recommended)" #~ msgstr "Nessuna autenticazione (sconsigliato)" #~ msgid "" #~ "Don't authenticate ourselves to remote users. Data transfer will be " #~ "unencrypted." #~ msgstr "" #~ "Non autenticarmi agli utenti remoti. I dati saranno trasmessi in chiaro." #~ msgid "Create a self-signed certificate (Recommended)" #~ msgstr "Crea un certificato auto-firmato (consigliato)" #~ msgid "" #~ "It may take a minute or two until remote users can connect while the " #~ "security certificate is being generated." #~ msgstr "" #~ "Potrebbero volerci due minuti prima che gli utenti remoti possano " #~ "connettersi, mentre il certificato viene generato." #~ msgid "Use an existing certificate (Expert option)" #~ msgstr "Usa un certificato esistente (per esperti)" #~ msgid "" #~ "Use an existing private key and certificate for authentication. The files " #~ "must be in PEM format." #~ msgstr "" #~ "Usa una chiave privata e un certificato esistenti. I file devono essere " #~ "nel formato PEM." #~ msgid "Private key:" #~ msgstr "Chiave privata:" #~ msgid "Certificate:" #~ msgstr "Certificato:" #~ msgid "Open Location" #~ msgstr "Apri Posizione" #~ msgid "Enter the _location (URI) of the file you would like to open:" #~ msgstr "Inserisci la _posizione (URI) del file che vuoi aprire:" #~ msgid "Password Required" #~ msgstr "È richiesta una password" #~ msgid "Server _Password:" #~ msgstr "_Password del server:" #~ msgid "Settings" #~ msgstr "Impostazioni" #~ msgid "Remote Users" #~ msgstr "Utenti remoti" #~ msgid "Local Documents" #~ msgstr "Documenti locali" #~ msgid "User name:" #~ msgstr "Nome utente:" #~ msgid "User color:" #~ msgstr "Colore utente:" #~ msgid "Color intensity:" #~ msgstr "Intensità colore:" #~ msgid "Choose a new user color" #~ msgstr "Scegli un nuovo colore utente" #~ msgid "Show cursors of remote users" #~ msgstr "Mostra il cursore degli utenti remoti" #~ msgid "Show selections of remote users" #~ msgstr "Mostra la selezione degli utenti remoti" #~ msgid "Highlight current line of remote users" #~ msgstr "Evidenzia la linea corrente degli utenti remoti" #~ msgid "Indicate cursor position of remote users in the scrollbar" #~ msgstr "" #~ "Mostra la posizione del cursore degli utenti remoti sulla barra di " #~ "scorrimento" #~ msgid "Require remote users to enter a password" #~ msgstr "Richiedi che gli utenti remoti inseriscano una password" #~ msgid "Port:" #~ msgstr "Porta:" #~ msgid "Remember local documents after Gobby restart" #~ msgstr "Ricorda i documenti locali dopo il riavvio di Gobby" #~ msgid "Local documents directory:" #~ msgstr "Cartella dei documenti locali:" #~ msgid "Tab Stops" #~ msgstr "Tabulazioni" #~ msgid "Indentation" #~ msgstr "Indentazione" #~ msgid "Home/End Behavior" #~ msgstr "Comportamento tasti Inizio/Fine" #~ msgid "File Saving" #~ msgstr "Salvataggio file" #~ msgid "_Tab width:" #~ msgstr "Larghezza _tab" #~ msgid "Insert _spaces instead of tabs" #~ msgstr "Inserisci _spazi al posto delle tabulazioni" #~ msgid "Enable automatic _indentation" #~ msgstr "Abilita _indentazione automatica" #~ msgid "Smart _home/end" #~ msgstr "Inizio/_fine intelligente" #~ msgid "Enable _automatic saving of documents" #~ msgstr "Abilita salvataggio _automatico dei documenti" #~ msgid "Autosave interval in _minutes:" #~ msgstr "Ogni quanti minuti salvare automaticamente: " #~ msgid "" #~ "With this option enabled, Home/End keys move to first/last character " #~ "before going to the start/end of the line." #~ msgstr "" #~ "Con questa opzione abilitata, i tasti Inizio/Fine muovono il cursore al " #~ "primo/ultimo carattere prima di andare all'inizio/fine della riga." #~ msgid "Text Wrapping" #~ msgstr "A capo automatico" #~ msgid "Line Numbers" #~ msgstr "Numeri di linea" #~ msgid "Current Line" #~ msgstr "Linea corrente" #~ msgid "Right Margin" #~ msgstr "Margine destro" #~ msgid "Bracket Matching" #~ msgstr "Parentesi" #~ msgid "Whitespace Display" #~ msgstr "Mostra caratteri non stampabili" #~ msgid "Enable text wrapping" #~ msgstr "Abilita a capo automatico" #~ msgid "Do not split words over two lines" #~ msgstr "Non dividere le parole su due righe" #~ msgid "Display line numbers" #~ msgstr "Mostra numeri di riga" #~ msgid "Highlight current line" #~ msgstr "Evidenzia riga corrente" #~ msgid "Display right margin" #~ msgstr "Mostra margine destro" #~ msgid "Right margin at column:" #~ msgstr "Margine destro alla colonna:" #~ msgid "Highlight matching bracket" #~ msgstr "Evidenzia parentesi corrispondenti" #~ msgid "Toolbar" #~ msgstr "Barra degli strumenti" #~ msgid "Font" #~ msgstr "Carattere" #~ msgid "Color Scheme" #~ msgstr "Tema dei Colori" #~ msgid "Trusted CAs" #~ msgstr "Certificate Autorities fidate" #~ msgid "Secure Connection" #~ msgstr "Connessione Sicura" #~ msgid "Authentication" #~ msgstr "Autenticazione" #~ msgid "Select a file containing trusted CAs" #~ msgstr "Scegli file contenente le Certificate Autorities fidate" #~ msgid "None" #~ msgstr "Nessuno" #~ msgid "Use a certificate" #~ msgstr "Usa certificato" #~ msgid "Select a private key file" #~ msgstr "Scegli file della chiave privata" #~ msgid "Create New..." #~ msgstr "Crea Nuovo..." #~ msgid "Select a certificate file" #~ msgstr "Scegli file del certificato" #~ msgid "Preferences" #~ msgstr "Preferenze" #~ msgid "User" #~ msgstr "Utente" #~ msgid "Editor" #~ msgstr "Editor" #~ msgid "View" #~ msgstr "Visualizzazione" #~ msgid "Appearance" #~ msgstr "Aspetto" #~ msgid "Security" #~ msgstr "Sicurezza" #~ msgid "Gobby options" #~ msgstr "Opzioni di Gobby" #~ msgid "Options related to Gobby" #~ msgstr "Opzioni riguardanti Gobby" #~ msgid "Connect to given host on startup, can be given multiple times" #~ msgstr "All'avvio connettiti all'host fornito, può essere fornito più volte" #~ msgid "HOSTNAME" #~ msgstr "HOSTNAME" #~ msgid "You are still connected to a session" #~ msgstr "Sei ancora connesso a una sessione" #~ msgid "Do you want to close Gobby nevertheless?" #~ msgstr "Vuoi ugualmente chiudere Gobby?" gobby-0.6.0/po/zh_TW.po0000664000175000017500000007621314005502331011555 00000000000000# Gobby Traditional Chinese translation. # Copyright (C) 2010 THE gobby'S COPYRIGHT HOLDER. # This file is distributed under the same license as the gobby package. # Wei-Lun Chao , 2011. # msgid "" msgstr "" "Project-Id-Version: gobby 0.4.94\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-31 11:22+0100\n" "PO-Revision-Date: 2010-06-26 17:11+0800\n" "Last-Translator: Wei-Lun Chao \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../code/application.cpp:132 msgid "Display version information and exit" msgstr "顯示版本資訊然後離開" #: ../code/application.cpp:134 #, fuzzy msgid "Start a new gobby instance also if there is one already running" msgstr "當已經有一個執行中的 Gobby 時,也要開啟新的實體" #: ../code/commands/auth-commands.cpp:193 #: ../code/commands/browser-context-commands.cpp:354 #: ../code/core/filechooser.cpp:34 ../code/core/filechooser.cpp:39 #: ../code/core/huebutton.cpp:102 #: ../code/dialogs/document-location-dialog.cpp:35 #, fuzzy msgid "_Cancel" msgstr "取消(_A)" #: ../code/commands/auth-commands.cpp:195 ../code/core/huebutton.cpp:103 msgid "_Ok" msgstr "" #: ../code/commands/auth-commands.cpp:217 #, fuzzy msgid "Password required" msgstr "必須輸入密碼" #: ../code/commands/auth-commands.cpp:250 msgid "Incorrect password" msgstr "不正確的密碼" #: ../code/commands/browser-commands.cpp:289 msgid "Subscribing to %1..." msgstr "訂用 %1…" #: ../code/commands/browser-commands.cpp:302 msgid "Subscribing to chat on %1..." msgstr "訂用聊天於 %1…" #: ../code/commands/browser-commands.cpp:625 msgid "Subscription failed" msgstr "訂用失敗" #: ../code/commands/browser-context-commands.cpp:85 msgid "Could not find a location where to store the certificate" msgstr "無法找到儲存認證的位置" #: ../code/commands/browser-context-commands.cpp:287 #: ../code/commands/browser-context-commands.cpp:322 #: ../code/commands/browser-context-commands.cpp:409 #: ../code/commands/file-tasks/task-open-location.cpp:31 #: ../code/core/statusbar.cpp:81 ../code/dialogs/find-dialog.cpp:58 #: ../code/dialogs/goto-dialog.cpp:30 ../code/dialogs/initial-dialog.cpp:206 #: ../code/dialogs/preferences-dialog.cpp:815 msgid "_Close" msgstr "" #: ../code/commands/browser-context-commands.cpp:349 msgid "Choose a name for the directory" msgstr "選擇目錄名稱" #: ../code/commands/browser-context-commands.cpp:350 msgid "Choose a name for the document" msgstr "選擇文件名稱" #: ../code/commands/browser-context-commands.cpp:351 msgid "_Directory Name:" msgstr "目錄名稱(_D):" #: ../code/commands/browser-context-commands.cpp:352 msgid "_Document Name:" msgstr "文件名稱(_D):" #: ../code/commands/browser-context-commands.cpp:355 msgid "C_reate" msgstr "建立(_R)" #: ../code/commands/browser-context-commands.cpp:357 msgid "New Directory" msgstr "新目錄" #: ../code/commands/browser-context-commands.cpp:358 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "新文件" #: ../code/commands/browser-context-commands.cpp:380 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "選擇要開啟的文字檔" #: ../code/commands/browser-context-commands.cpp:519 #: ../code/commands/browser-context-commands.cpp:530 msgid "Account successfully created" msgstr "成功建立帳號" #: ../code/commands/browser-context-commands.cpp:523 msgid "When re-connecting to the server, the new account will be used." msgstr "當重新連接至伺服器時,將會使用新的帳號" #: ../code/commands/browser-context-commands.cpp:534 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:547 #, fuzzy msgid "Failed to create account" msgstr "建立文件「%1」時失敗" #: ../code/commands/browser-context-commands.cpp:550 msgid "Could not save the certificate for the account: %1" msgstr "無法爲帳號 %1 儲存認證" #: ../code/commands/file-commands.cpp:252 #, fuzzy msgid "Cancel" msgstr "取消(_A)" #: ../code/commands/file-commands.cpp:254 msgid "Connect" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "選擇位置以匯出文件「%1」到" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "正在查詢「%1」…" #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:469 #: ../code/operations/operation-open-multiple.cpp:176 msgid "Failed to open document \"%1\"" msgstr "開啟文件「%1」時失敗" #: ../code/commands/file-tasks/task-open-location.cpp:32 #: ../code/core/filechooser.cpp:40 #: ../code/dialogs/document-location-dialog.cpp:36 #, fuzzy msgid "_Open" msgstr "開啟(_O)…" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "選擇位置以儲存文件「%1」到" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:49 msgid "There was an error displaying help." msgstr "出現了錯誤顯示說明。" #: ../code/commands/help-commands.cpp:74 msgid "Contributors:" msgstr "貢獻者:" #: ../code/commands/help-commands.cpp:80 msgid "British English:" msgstr "英語:" #: ../code/commands/help-commands.cpp:82 msgid "German:" msgstr "德語:" #: ../code/commands/help-commands.cpp:99 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "已經失去對於這份文件出版者的連線。文件的進一步變更將無法再繼續同步到其他人," "因而文件無法再繼續編輯。\n" "\n" "請注意,也有可能在失去與出版者的連線之前,並非您所有的最後變更已送達。" #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "同步化正在進行…%1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "這個文件無法使用。" #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "如果您有某個可能造成此問題的想法,那麼您可以試圖解決它並再次嘗試 (於關閉這個" "文件之後)。否則很有可能是軟體中的錯誤。在這種情況下,請將錯誤回報給 http://" "gobby.0x539.de/trac/newticket 並儘可能提供足夠的資訊,包括當問題發生時您做了" "什麼事,以及如何重新產生問題 (如果可能) ,以便讓我們可以在稍後的版本中修正問" "題。謝謝您。" #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "同步化失敗:%1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "您仍然可以監看其他人編輯文件,但是您無法自行編輯它。" #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "使用者加入失敗:%1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:109 msgid "_Direct Connection" msgstr "直接的連線(_D)" #: ../code/core/browser.cpp:110 msgid "Host Name:" msgstr "主機名稱:" #: ../code/core/certificatemanager.cpp:86 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:279 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:341 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:417 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/filechooser.cpp:35 #, fuzzy msgid "_Save" msgstr "全部儲存" #: ../code/core/foldermanager.cpp:345 msgid "The document has been removed from the server." msgstr "文件已從伺服器上移除" #: ../code/core/selfhoster.cpp:105 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:137 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "刪除節點「%1」時失敗" #: ../code/core/selfhoster.cpp:139 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:265 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:287 #, fuzzy msgid "Failed to share documents" msgstr "儲存文件「%1」時失敗" #: ../code/core/sessionuserview.cpp:38 msgid "User List" msgstr "使用者清單" #: ../code/core/statusbar.cpp:434 msgid "Ln %1, Col %2\t%3" msgstr "列 %1, 行 %2\t%3" #: ../code/core/statusbar.cpp:437 msgid "OVR" msgstr "覆寫" #: ../code/core/statusbar.cpp:437 msgid "INS" msgstr "插入" #: ../code/core/textsessionview.cpp:639 msgid "Text written by %1" msgstr "文章由 %1 編寫" #: ../code/core/textsessionview.cpp:645 msgid "Unowned text" msgstr "無主的文章" #: ../code/core/userlist.cpp:115 msgid "Users" msgstr "使用者" #: ../code/dialogs/connection-info-dialog.cpp:48 #, fuzzy msgid "Connections" msgstr "安全連線" #: ../code/dialogs/connection-info-dialog.cpp:313 msgid "Nobody is connected to this computer" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:153 msgid "Select document's target location" msgstr "選取文件目標位置" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Choose a directory to create the document into:" msgstr "選擇目錄以於其中建立文件:" #: ../code/dialogs/document-location-dialog.cpp:162 msgid "Select documents' target location" msgstr "選取文件目標位置" #: ../code/dialogs/document-location-dialog.cpp:164 msgid "Choose a directory to create the documents into:" msgstr "選擇目錄以於其中建立文件:" #: ../code/dialogs/find-dialog.cpp:59 msgid "Replace _All" msgstr "全部置換(_A)" #: ../code/dialogs/find-dialog.cpp:61 msgid "_Replace" msgstr "置換(_R)" #: ../code/dialogs/find-dialog.cpp:62 #, fuzzy msgid "_Find" msgstr "尋找" #: ../code/dialogs/find-dialog.cpp:119 msgid "Find" msgstr "尋找" #: ../code/dialogs/find-dialog.cpp:119 msgid "Replace" msgstr "置換" #: ../code/dialogs/find-dialog.cpp:138 ../code/dialogs/find-dialog.cpp:154 msgid "Phrase \"%1\" has not been found" msgstr "片語「%1」尚未找到" #: ../code/dialogs/find-dialog.cpp:312 msgid "No occurrence has been replaced" msgstr "沒有置換任何項目" #: ../code/dialogs/find-dialog.cpp:318 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "已經置換 %1 個項目" #: ../code/dialogs/goto-dialog.cpp:31 msgid "Go To _Line" msgstr "前往指定列(_L)" #: ../code/dialogs/initial-dialog.cpp:53 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:76 #, fuzzy msgid "Failed to generate private key" msgstr "刪除節點「%1」時失敗" #: ../code/dialogs/initial-dialog.cpp:79 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:118 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:121 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/password-dialog.cpp:34 msgid "Connection to host \"%1\" requires a password." msgstr "連線到主機「%1」需要密碼。" #: ../code/dialogs/password-dialog.cpp:40 msgid "Invalid password for host \"%1\". Please try again." msgstr "密碼對於主機「%1」無效。請再試一次。" #: ../code/dialogs/preferences-dialog.cpp:409 msgid "Display no whitespace" msgstr "不顯示任何空格" #: ../code/dialogs/preferences-dialog.cpp:412 msgid "Display spaces" msgstr "顯示空格" #: ../code/dialogs/preferences-dialog.cpp:416 msgid "Display tabs" msgstr "顯示跳格" #: ../code/dialogs/preferences-dialog.cpp:420 msgid "Display tabs and spaces" msgstr "顯示跳格和空格" #: ../code/dialogs/preferences-dialog.cpp:452 msgid "Show text only" msgstr "只顯示文字" #: ../code/dialogs/preferences-dialog.cpp:454 msgid "Show icons only" msgstr "只顯示圖示" #: ../code/dialogs/preferences-dialog.cpp:456 msgid "Show both icons and text" msgstr "顯示圖示和文字" #: ../code/dialogs/preferences-dialog.cpp:458 msgid "Show text besides icons" msgstr "在圖示旁邊顯示文字" #: ../code/dialogs/preferences-dialog.cpp:478 msgid "Scheme Description" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:575 msgid "Use TLS if possible" msgstr "儘量使用 TLS" #: ../code/dialogs/preferences-dialog.cpp:578 msgid "Always use TLS" msgstr "一律使用 TLS" #: ../code/dialogs/preferences-dialog.cpp:615 #, fuzzy msgid "Error reading file: %1" msgstr "使用者加入失敗:%1" #: ../code/dialogs/preferences-dialog.cpp:655 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:685 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:703 msgid "Select a location for the generated certificate" msgstr "" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "移除節點「%1」…" #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "刪除節點「%1」時失敗" #: ../code/operations/operation-export-html.cpp:173 #, c-format msgid "written by: %s" msgstr "由 %s 所編寫" #: ../code/operations/operation-export-html.cpp:246 msgid "" msgstr "<無法印出日期>" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:259 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "文件產生自 %1$s:%2$s 於 %3$s 由 %4$s" #: ../code/operations/operation-export-html.cpp:409 msgid "Participants" msgstr "參加者" #: ../code/operations/operation-export-html.cpp:483 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "以 HTML 匯出文件「%1」到「%2」…" #: ../code/operations/operation-export-html.cpp:544 msgid "Failed to export document \"%1\" to HTML" msgstr "以 HTML 匯出文件「%1」時失敗" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "建立目錄「%1」…" #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "建立文件「%1」…" #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "建立目錄「%1」時失敗" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "建立文件「%1」時失敗" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "UTF-8" #: ../code/operations/operation-open.cpp:113 msgid "Opening document \"%1\"..." msgstr "開啟文件「%1」…" #: ../code/operations/operation-open.cpp:129 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "預計用來插入新文件的目錄已被移除" #: ../code/operations/operation-open.cpp:318 msgid "The file contains data not in the specified encoding" msgstr "檔案含有不屬於指定編碼的資料" #: ../code/operations/operation-open.cpp:329 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "檔案若非含有不明編碼的資料,就是含有二進位資料。" #: ../code/operations/operation-open-multiple.cpp:88 msgid "Parent folder was removed" msgstr "上層資料夾被移除了" #: ../code/operations/operation-open-multiple.cpp:189 msgid "Failed to open multiple documents" msgstr "開啟多份文件時失敗" #: ../code/operations/operation-save.cpp:91 msgid "Saving document \"%1\" to \"%2\"..." msgstr "儲存文件「%1」到「%2」…" #: ../code/operations/operation-save.cpp:220 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "文件含有一或多個不屬於指定字元編碼的字元。" #: ../code/operations/operation-save.cpp:281 msgid "Failed to save document \"%1\"" msgstr "儲存文件「%1」時失敗" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "開啟文件「%1」時失敗" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "訂用 %1…" #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "建立目錄「%1」時失敗" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "連線到「%1」失敗" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "無法解析「%1」" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "裝置「%1」不存在" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "無法建立目錄「%1」:%2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "裝置「%1」不存在" #: ../code/window.cpp:42 msgid "Chat" msgstr "聊天" #: ../code/window.cpp:83 msgid "This Computer" msgstr "" #: ../code/window.cpp:108 msgid "Document Browser" msgstr "文件瀏覽器" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "共同編輯器" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Gobby 共同編輯器 (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "共同編輯文字檔" #~ msgid "_Remove" #~ msgstr "移除(_R)" #, fuzzy #~ msgid "_Disconnect from Server" #~ msgstr "連線到伺服器" #, fuzzy #~ msgid "Create _Account..." #~ msgstr "建立文件(_C)…" #~ msgid "Create Do_cument..." #~ msgstr "建立文件(_C)…" #, fuzzy #~ msgid "Create Di_rectory..." #~ msgstr "建立目錄…" #~ msgid "_Open Document..." #~ msgstr "開啟文件(_O)…" #~ msgid "_Permissions..." #~ msgstr "權限(_P)" #~ msgid "D_elete" #~ msgstr "刪除(_E)" #~ msgid "_None" #~ msgstr "無(_N)" #~ msgid "_File" #~ msgstr "檔案(_F)" #~ msgid "Open _Location..." #~ msgstr "開啟位置(_L)…" #~ msgid "Save _As..." #~ msgstr "另存新檔(_A)…" #~ msgid "Save all open files locally" #~ msgstr "儲存所有開啟檔案於本機" #~ msgid "Export As _HTML..." #~ msgstr "匯出為 _HTML…" #~ msgid "Connect _to Server..." #~ msgstr "連線到伺服器(_T)…" #~ msgid "_Edit" #~ msgstr "編輯(_E)" #~ msgid "_Find..." #~ msgstr "尋找(_F)…" #~ msgid "Find Ne_xt" #~ msgstr "找下一個(_X)" #~ msgid "Find next match of phrase searched for" #~ msgstr "找下一個匹配的片語依據搜尋" #~ msgid "Find Pre_vious" #~ msgstr "找上一個(_V)" #~ msgid "Find previous match of phrase searched for" #~ msgstr "找上一個匹配的片語依據搜尋" #~ msgid "Find and Rep_lace..." #~ msgstr "尋找和置換(_L)…" #~ msgid "Go to _Line..." #~ msgstr "前往指定列(_L)…" #~ msgid "Pr_eferences..." #~ msgstr "偏好設定(_E)…" #~ msgid "_View" #~ msgstr "檢視(_V)" #~ msgid "Reset User Colors" #~ msgstr "重置使用者顏色" #~ msgid "Hide user colors in current document" #~ msgstr "在目前的文件中隱藏使用者顏色" #~ msgid "Fullscreen" #~ msgstr "全螢幕" #~ msgid "Show the editing window in fullscreen mode" #~ msgstr "以全螢幕顯示編輯視窗" #~ msgid "Zoom In" #~ msgstr "放大" #~ msgid "Zoom Out" #~ msgstr "縮小" #~ msgid "View Toolbar" #~ msgstr "檢視工具列" #~ msgid "Whether to show the toolbar" #~ msgstr "是否要顯示工具列" #~ msgid "View Statusbar" #~ msgstr "檢視狀態列" #~ msgid "Whether to show the statusbar" #~ msgstr "是否要顯示狀態列" #~ msgid "View Document Browser" #~ msgstr "檢視文件瀏覽器" #~ msgid "Whether to show the document browser" #~ msgstr "是否要顯示文件瀏覽器" #~ msgid "View Chat" #~ msgstr "檢視聊天" #~ msgid "Whether to show the chat pane" #~ msgstr "是否要顯示聊天窗格" #~ msgid "View Document User List" #~ msgstr "檢視文件使用者清單" #~ msgid "Whether to show the user list for documents" #~ msgstr "是否要顯示文件的使用者清單" #~ msgid "View Chat User List" #~ msgstr "檢視聊天使用者清單" #~ msgid "Whether to show the user list for the chat" #~ msgstr "是否要顯示聊天的使用者清單" #~ msgid "_Highlight Mode" #~ msgstr "強調模式(_H)" #~ msgid "_Help" #~ msgstr "求助(_H)" #~ msgid "_Contents" #~ msgstr "內容(_C)" #~ msgid "Opens the Gobby manual" #~ msgstr "手動開啟 Gobby" #~ msgid "_About..." #~ msgstr "關於(_A)…" #~ msgid "Shows Gobby's copyright and credits" #~ msgstr "顯示 Gobby 的著作權和鳴謝" #~ msgid "User list" #~ msgstr "使用者清單" #~ msgid "Document list" #~ msgstr "文件清單" #~ msgid "User Color Indicator" #~ msgstr "使用者顏色指示器" #~ msgid "Connect to Server" #~ msgstr "連線到伺服器" #~ msgid "Please enter a host name with which to establish a connection." #~ msgstr "請輸入要與其建立連線的主機名稱。" #~ msgid "_Remote Endpoint:" #~ msgstr "遠端終點(_R):" #~ msgid "Document Name:" #~ msgstr "文件名稱:" #~ msgid "_Search for:" #~ msgstr "搜尋(_S):" #~ msgid "Replace _with:" #~ msgstr "置換成(_W):" #~ msgid "_Match case" #~ msgstr "匹配大小寫(_M)" #~ msgid "Match _entire word only" #~ msgstr "匹配完整字詞(_E)" #~ msgid "Search _backwards" #~ msgstr "向後搜尋(_B)" #~ msgid "Wra_p around" #~ msgstr "回到開始部份(_P)" #~ msgid "Go to line" #~ msgstr "前往指定列" #~ msgid "Line _number:" #~ msgstr "列號(_N):" #~ msgid "Choose a user color" #~ msgstr "選擇使用者顏色" #~ msgid "Welcome to Gobby" #~ msgstr "歡迎使用 Gobby" #~ msgid "" #~ "Before we start, a few options need to be configured. You can later " #~ "change them by choosing Edit ▸ Preferences from the menu." #~ msgstr "" #~ "在開始之前,需要組配幾個選項。您可以稍後藉由從選單選擇「編輯▸偏好設定」來" #~ "變更它們。" #~ msgid "User Name" #~ msgstr "使用者名稱" #~ msgid "Your name as shown to other users." #~ msgstr "您顯示給其他使用者看的名稱。" #~ msgid "User Color" #~ msgstr "使用者顏色" #~ msgid "The color with which text you have written is branded." #~ msgstr "用來標示您所寫文字的顏色。" #, fuzzy #~ msgid "Password:" #~ msgstr "伺服器密碼(_P):" #~ msgid "Open Location" #~ msgstr "開啟位置" #~ msgid "Enter the _location (URI) of the file you would like to open:" #~ msgstr "輸入您想要開啟的檔案位置(URI)(_L):" #~ msgid "Password Required" #~ msgstr "必須輸入密碼" #~ msgid "Server _Password:" #~ msgstr "伺服器密碼(_P):" #~ msgid "Settings" #~ msgstr "設定值" #, fuzzy #~ msgid "Remote Users" #~ msgstr "重置使用者顏色" #, fuzzy #~ msgid "Local Documents" #~ msgstr "新文件" #~ msgid "User name:" #~ msgstr "使用者名稱:" #~ msgid "User color:" #~ msgstr "使用者顏色:" #~ msgid "Choose a new user color" #~ msgstr "選擇新的使用者顏色" #, fuzzy #~ msgid "Highlight current line of remote users" #~ msgstr "強調目前的列" #, fuzzy #~ msgid "Local documents directory:" #~ msgstr "主機目錄:" #~ msgid "Tab Stops" #~ msgstr "定位停駐點" #~ msgid "Indentation" #~ msgstr "縮排" #~ msgid "Home/End Behavior" #~ msgstr "Home/End 按鍵行為" #~ msgid "File Saving" #~ msgstr "檔案儲存" #~ msgid "_Tab width:" #~ msgstr "定位點寬度(_T):" #~ msgid "Insert _spaces instead of tabs" #~ msgstr "插入空格以代替跳格(_S)" #~ msgid "Enable automatic _indentation" #~ msgstr "啟用自動縮排(_I)" #~ msgid "Smart _home/end" #~ msgstr "智慧型 _Home/End" #~ msgid "Enable _automatic saving of documents" #~ msgstr "啟用文件自動儲存(_A)" #~ msgid "Autosave interval in _minutes:" #~ msgstr "自動儲存間隔以分鐘為單位(_M):" #~ msgid "" #~ "With this option enabled, Home/End keys move to first/last character " #~ "before going to the start/end of the line." #~ msgstr "" #~ "如果啟用這個選項,Home/End 按鍵會在前往列首/列尾之前移動到第一/最後一個字" #~ "元。" #~ msgid "Text Wrapping" #~ msgstr "文字環繞" #~ msgid "Line Numbers" #~ msgstr "列號" #~ msgid "Current Line" #~ msgstr "目前的列" #~ msgid "Right Margin" #~ msgstr "右邊界" #~ msgid "Bracket Matching" #~ msgstr "中括號匹配" #~ msgid "Whitespace Display" #~ msgstr "空白顯示" #~ msgid "Enable text wrapping" #~ msgstr "啟用文字環繞" #~ msgid "Do not split words over two lines" #~ msgstr "不分割單字於兩列" #~ msgid "Display line numbers" #~ msgstr "顯示列號" #~ msgid "Highlight current line" #~ msgstr "強調目前的列" #~ msgid "Display right margin" #~ msgstr "顯示右邊界" #~ msgid "Right margin at column:" #~ msgstr "右邊界於行數:" #~ msgid "Highlight matching bracket" #~ msgstr "強調匹配中括號" #~ msgid "Toolbar" #~ msgstr "工具列" #~ msgid "Font" #~ msgstr "字型" #~ msgid "Color Scheme" #~ msgstr "配色方案" #~ msgid "Trusted CAs" #~ msgstr "信賴的 CAs" #~ msgid "Secure Connection" #~ msgstr "安全連線" #, fuzzy #~ msgid "Authentication" #~ msgstr "縮排" #~ msgid "Select a file containing trusted CAs" #~ msgstr "選取包含信賴的 CAs 檔案" #, fuzzy #~ msgid "None" #~ msgstr "無(_N)" #, fuzzy #~ msgid "Create New..." #~ msgstr "建立文件(_C)…" #~ msgid "Preferences" #~ msgstr "偏好設定" #~ msgid "User" #~ msgstr "使用者" #~ msgid "Editor" #~ msgstr "編輯器" #~ msgid "View" #~ msgstr "檢視" #~ msgid "Appearance" #~ msgstr "外觀" #~ msgid "Security" #~ msgstr "安全" #~ msgid "Gobby options" #~ msgstr "Gobby 選項" #~ msgid "Options related to Gobby" #~ msgstr "與 Gobby 相關的選項" #~ msgid "Connect to given host on startup, can be given multiple times" #~ msgstr "啟動時連線到給定的主機,可以多次給定" #~ msgid "HOSTNAME" #~ msgstr "主機名稱" #~ msgid "You are still connected to a session" #~ msgstr "您仍然與作業階段連線" #~ msgid "Do you want to close Gobby nevertheless?" #~ msgstr "您無論如何都要關閉 Gobby 嗎?" #~ msgid "" #~ "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.\n" #~ "\n" #~ "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.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "這個程式是自由軟體;您可以遵循由自由軟體基金會所發布的 GNU 通用公共授權來" #~ "再次散布它和/或修改它;無論您依據的是本授權的第二版,或 (您自行選擇的) 任" #~ "何後續的版本。\n" #~ "\n" #~ "發行本程式是希望該它能夠有用, 但是沒有任何擔保;對於某一特定目的之適售性" #~ "與適用性亦無暗示性的擔保。參看 GNU 通用公共授權以獲得更多細節。\n" #~ "\n" #~ "您應該已收到隨附於這個程式的 GNU 通用公共授權複本;若無則請寫信到 Free " #~ "Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA " #~ "02110-1301, USA" #~ msgid "User Join in progress..." #~ msgstr "使用者正在加入…" #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "無法解析「%1」" #~ msgid "Resolving \"%1\"..." #~ msgstr "正在解析「%1」…" #~ msgid "Paths" #~ msgstr "路徑" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "本機寄存作業階段永久儲存於其中的目錄" gobby-0.6.0/po/pt_BR.po0000664000175000017500000006606314005502331011532 00000000000000# Brazilian translation of Gobby # Copyright © 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the gobby package. # Vitor Lobo , 2014. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: gobby 0.4.94\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-31 11:22+0100\n" "PO-Revision-Date: 2014-07-11 18:12+0100\n" "Last-Translator: Vitor Lobo \n" "Language-Team: Portuguese Brazilian \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n!=1;\n" #: ../code/application.cpp:132 msgid "Display version information and exit" msgstr "Exibir informação da versão e sair" #: ../code/application.cpp:134 msgid "Start a new gobby instance also if there is one already running" msgstr "" #: ../code/commands/auth-commands.cpp:193 #: ../code/commands/browser-context-commands.cpp:354 #: ../code/core/filechooser.cpp:34 ../code/core/filechooser.cpp:39 #: ../code/core/huebutton.cpp:102 #: ../code/dialogs/document-location-dialog.cpp:35 #, fuzzy msgid "_Cancel" msgstr "C_ancelar" #: ../code/commands/auth-commands.cpp:195 ../code/core/huebutton.cpp:103 msgid "_Ok" msgstr "" #: ../code/commands/auth-commands.cpp:217 #, fuzzy msgid "Password required" msgstr "Senha Requerida" #: ../code/commands/auth-commands.cpp:250 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:289 msgid "Subscribing to %1..." msgstr "" #: ../code/commands/browser-commands.cpp:302 msgid "Subscribing to chat on %1..." msgstr "" #: ../code/commands/browser-commands.cpp:625 msgid "Subscription failed" msgstr "Assinatura falhou" #: ../code/commands/browser-context-commands.cpp:85 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:287 #: ../code/commands/browser-context-commands.cpp:322 #: ../code/commands/browser-context-commands.cpp:409 #: ../code/commands/file-tasks/task-open-location.cpp:31 #: ../code/core/statusbar.cpp:81 ../code/dialogs/find-dialog.cpp:58 #: ../code/dialogs/goto-dialog.cpp:30 ../code/dialogs/initial-dialog.cpp:206 #: ../code/dialogs/preferences-dialog.cpp:815 msgid "_Close" msgstr "" #: ../code/commands/browser-context-commands.cpp:349 msgid "Choose a name for the directory" msgstr "Escolha um nome para o diretório" #: ../code/commands/browser-context-commands.cpp:350 msgid "Choose a name for the document" msgstr "Escolha um nome para o documento" #: ../code/commands/browser-context-commands.cpp:351 msgid "_Directory Name:" msgstr "_Nome do diretório" #: ../code/commands/browser-context-commands.cpp:352 msgid "_Document Name:" msgstr "_Nome do documento" #: ../code/commands/browser-context-commands.cpp:355 msgid "C_reate" msgstr "C_riar" #: ../code/commands/browser-context-commands.cpp:357 msgid "New Directory" msgstr "Novo Diretório" #: ../code/commands/browser-context-commands.cpp:358 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "Novo Documento" #: ../code/commands/browser-context-commands.cpp:380 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Escolha um arquivo de texto para abrir" #: ../code/commands/browser-context-commands.cpp:519 #: ../code/commands/browser-context-commands.cpp:530 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:523 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:534 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:547 #, fuzzy msgid "Failed to create account" msgstr "Falha ao criar documento \"%1\"" #: ../code/commands/browser-context-commands.cpp:550 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-commands.cpp:252 #, fuzzy msgid "Cancel" msgstr "C_ancelar" #: ../code/commands/file-commands.cpp:254 msgid "Connect" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Escolha um local para exportar o documento \"%1\" para" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "Consultando \"%1\"..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:469 #: ../code/operations/operation-open-multiple.cpp:176 msgid "Failed to open document \"%1\"" msgstr "Falha ao abrir o documento \"%1\"" #: ../code/commands/file-tasks/task-open-location.cpp:32 #: ../code/core/filechooser.cpp:40 #: ../code/dialogs/document-location-dialog.cpp:36 #, fuzzy msgid "_Open" msgstr "_Abrir..." #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Escolha um local para salvar o documento \"%1\" para" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:49 msgid "There was an error displaying help." msgstr "Erro ao exibir a ajuda" #: ../code/commands/help-commands.cpp:74 msgid "Contributors:" msgstr "Contribuintes:" #: ../code/commands/help-commands.cpp:80 msgid "British English:" msgstr "Inglês britânico:" #: ../code/commands/help-commands.cpp:82 msgid "German:" msgstr "Alemão:" #: ../code/commands/help-commands.cpp:99 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Sincronização em andamento... %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "Este documento não pode ser usado" #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Falha de sincronização: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "Você ainda pode ver outros documentos, mas você não pode editá-lovocê mesmo" #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:109 msgid "_Direct Connection" msgstr "_Conexão direta" #: ../code/core/browser.cpp:110 msgid "Host Name:" msgstr "" #: ../code/core/certificatemanager.cpp:86 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:279 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:341 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:417 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/filechooser.cpp:35 #, fuzzy msgid "_Save" msgstr "Salvar Tudo" #: ../code/core/foldermanager.cpp:345 msgid "The document has been removed from the server." msgstr "" #: ../code/core/selfhoster.cpp:105 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:137 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "Falha ao excluir nó \"%1\"" #: ../code/core/selfhoster.cpp:139 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:265 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:287 #, fuzzy msgid "Failed to share documents" msgstr "Falha ao salvar o documento \"%1\"" #: ../code/core/sessionuserview.cpp:38 msgid "User List" msgstr "Lista de Usuários" #: ../code/core/statusbar.cpp:434 msgid "Ln %1, Col %2\t%3" msgstr "" #: ../code/core/statusbar.cpp:437 msgid "OVR" msgstr "" #: ../code/core/statusbar.cpp:437 msgid "INS" msgstr "" #: ../code/core/textsessionview.cpp:639 msgid "Text written by %1" msgstr "" #: ../code/core/textsessionview.cpp:645 msgid "Unowned text" msgstr "Texto sem dono" #: ../code/core/userlist.cpp:115 msgid "Users" msgstr "Usuários" #: ../code/dialogs/connection-info-dialog.cpp:48 #, fuzzy msgid "Connections" msgstr "Conexão Segura" #: ../code/dialogs/connection-info-dialog.cpp:313 msgid "Nobody is connected to this computer" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:153 msgid "Select document's target location" msgstr "Selecione o local de destino do documento" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Choose a directory to create the document into:" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:162 msgid "Select documents' target location" msgstr "Selecione o local de destino dos documentos" #: ../code/dialogs/document-location-dialog.cpp:164 msgid "Choose a directory to create the documents into:" msgstr "Escolha um diretório para criar os documentos em:" #: ../code/dialogs/find-dialog.cpp:59 msgid "Replace _All" msgstr "Substituir _Tudo" #: ../code/dialogs/find-dialog.cpp:61 msgid "_Replace" msgstr "_Substituir" #: ../code/dialogs/find-dialog.cpp:62 #, fuzzy msgid "_Find" msgstr "Localizar" #: ../code/dialogs/find-dialog.cpp:119 msgid "Find" msgstr "Localizar" #: ../code/dialogs/find-dialog.cpp:119 msgid "Replace" msgstr "Substituir" #: ../code/dialogs/find-dialog.cpp:138 ../code/dialogs/find-dialog.cpp:154 msgid "Phrase \"%1\" has not been found" msgstr "" #: ../code/dialogs/find-dialog.cpp:312 msgid "No occurrence has been replaced" msgstr "Nenhuma ocorrência foi substituída" #: ../code/dialogs/find-dialog.cpp:318 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 ocorrência foi substituída" msgstr[1] "%1 as ocorrências foram substituídas" #: ../code/dialogs/goto-dialog.cpp:31 msgid "Go To _Line" msgstr "Ir até a _Linha" #: ../code/dialogs/initial-dialog.cpp:53 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:76 #, fuzzy msgid "Failed to generate private key" msgstr "Falha ao excluir nó \"%1\"" #: ../code/dialogs/initial-dialog.cpp:79 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:118 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:121 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/password-dialog.cpp:34 msgid "Connection to host \"%1\" requires a password." msgstr "" #: ../code/dialogs/password-dialog.cpp:40 msgid "Invalid password for host \"%1\". Please try again." msgstr "Senha inválida para o host \"%1\". Por favor, tente novamente." #: ../code/dialogs/preferences-dialog.cpp:409 msgid "Display no whitespace" msgstr "Não mostrar espaços em branco" #: ../code/dialogs/preferences-dialog.cpp:412 msgid "Display spaces" msgstr "Mostrar espaçamentos" #: ../code/dialogs/preferences-dialog.cpp:416 msgid "Display tabs" msgstr "Mostrar tabulações" #: ../code/dialogs/preferences-dialog.cpp:420 msgid "Display tabs and spaces" msgstr "Mostrar tabulações e espaços" #: ../code/dialogs/preferences-dialog.cpp:452 msgid "Show text only" msgstr "Mostrar apenas texto" #: ../code/dialogs/preferences-dialog.cpp:454 msgid "Show icons only" msgstr "Mostrar apenas ícones" #: ../code/dialogs/preferences-dialog.cpp:456 msgid "Show both icons and text" msgstr "Mostrar os ícones e texto" #: ../code/dialogs/preferences-dialog.cpp:458 msgid "Show text besides icons" msgstr "Mostrar texto além de ícones" #: ../code/dialogs/preferences-dialog.cpp:478 msgid "Scheme Description" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:575 msgid "Use TLS if possible" msgstr "Usar TLS se possível" #: ../code/dialogs/preferences-dialog.cpp:578 msgid "Always use TLS" msgstr "Sempre usar TLS" #: ../code/dialogs/preferences-dialog.cpp:615 msgid "Error reading file: %1" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:655 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:685 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:703 msgid "Select a location for the generated certificate" msgstr "" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Removendo nó \"%1\"..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Falha ao excluir nó \"%1\"" #: ../code/operations/operation-export-html.cpp:173 #, c-format msgid "written by: %s" msgstr "escrito por: %s" #: ../code/operations/operation-export-html.cpp:246 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:259 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Documento gerado a partir de %1$s:%2$s at %3$s by %4$s" #: ../code/operations/operation-export-html.cpp:409 msgid "Participants" msgstr "Participantes" #: ../code/operations/operation-export-html.cpp:483 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Exportando o documento \"%1\" to \"%2\" em HTML..." #: ../code/operations/operation-export-html.cpp:544 msgid "Failed to export document \"%1\" to HTML" msgstr "Falha ao exportar documento \"%1\" para HTML" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Criando diretório \"%1\"..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Criação de documento \"%1\"..." #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Falha ao criar diretório \"%1\"" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Falha ao criar documento \"%1\"" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "" #: ../code/operations/operation-open.cpp:113 msgid "Opening document \"%1\"..." msgstr "Abrindo documento \"%1\"..." #: ../code/operations/operation-open.cpp:129 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "O diretório no qual o suposto novo documento foi inseridofoi removido" #: ../code/operations/operation-open.cpp:318 msgid "The file contains data not in the specified encoding" msgstr "O arquivo não contém dados no encoding especificado" #: ../code/operations/operation-open.cpp:329 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "O arquivo também contém dados em uma codificação desconhecida, ou que contém " "o bináriodados." #: ../code/operations/operation-open-multiple.cpp:88 msgid "Parent folder was removed" msgstr "Pasta pai foi removida" #: ../code/operations/operation-open-multiple.cpp:189 msgid "Failed to open multiple documents" msgstr "Falha ao abrir vários documentos" #: ../code/operations/operation-save.cpp:91 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Salvar documento \"%1\" de \"%2\"..." #: ../code/operations/operation-save.cpp:220 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "O documento contém um ou mais caracteres que não podem ser codificados " "nacodificação de caractere especificado." #: ../code/operations/operation-save.cpp:281 msgid "Failed to save document \"%1\"" msgstr "Falha ao salvar o documento \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Falha ao abrir o documento \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "Consultando \"%1\"..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Falha ao criar diretório \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "Conexão para \"%1\" falhou" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "Não foi possível resolver \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "Dispositivo \"%1\" não existe" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Não foi possível criar o diretório \"%1\": %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Dispositivo \"%1\" não existe" #: ../code/window.cpp:42 msgid "Chat" msgstr "" #: ../code/window.cpp:83 msgid "This Computer" msgstr "" #: ../code/window.cpp:108 msgid "Document Browser" msgstr "Navegador do documento" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Editor colaborativo" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Editar arquivos de texto de forma colaborativa" #, fuzzy #~ msgid "_Disconnect from Server" #~ msgstr "Conectar ao Servidor" #, fuzzy #~ msgid "Create _Account..." #~ msgstr "Criar Diretório..." #, fuzzy #~ msgid "Create Di_rectory..." #~ msgstr "Criar Diretório..." #~ msgid "_Open Document..." #~ msgstr "_Abrir Documento..." #~ msgid "_File" #~ msgstr "_Arquivo" #~ msgid "Open _Location..." #~ msgstr "Abrir _Local..." #~ msgid "Save _As..." #~ msgstr "Salvar _Como..." #~ msgid "Save all open files locally" #~ msgstr "Salvar todos os arquivos abertos localmente" #~ msgid "Export As _HTML..." #~ msgstr "Exportar Como _HTML..." #~ msgid "Connect _to Server..." #~ msgstr "Conectar _ao Servidor" #~ msgid "_Edit" #~ msgstr "_Editar" #~ msgid "_Find..." #~ msgstr "_Encontrar" #~ msgid "Find Ne_xt" #~ msgstr "Localizar Pr_óximo" #~ msgid "Find next match of phrase searched for" #~ msgstr "Encontrar a próxima parte da frase procurada" #~ msgid "Find Pre_vious" #~ msgstr "Localizar Ante_rior" #~ msgid "Find previous match of phrase searched for" #~ msgstr "Encontrar a parte anterior da frase procurada" #~ msgid "Find and Rep_lace..." #~ msgstr "Localizar e Subs_tituir" #~ msgid "Go to _Line..." #~ msgstr "Vá para a _Linha..." #~ msgid "Pr_eferences..." #~ msgstr "Pr_eferências" #~ msgid "_View" #~ msgstr "_Ver" #~ msgid "Reset User Colors" #~ msgstr "Redefinir as cores do usuário" #~ msgid "Hide user colors in current document" #~ msgstr "Esconder as cores do usuário no documento atual" #~ msgid "View Toolbar" #~ msgstr "Ver a Barra de Ferramentas" #~ msgid "Whether to show the toolbar" #~ msgstr "Desejo mostrar a barra de ferramentas" #~ msgid "View Statusbar" #~ msgstr "Ver a Barra de Status" #~ msgid "Whether to show the statusbar" #~ msgstr "Desejo mostrar a Barra de Status" #~ msgid "View Document Browser" #~ msgstr "Exibir o Documento no Navegador" #~ msgid "Whether to show the document browser" #~ msgstr "Desejo mostrar o navegador do documento" #~ msgid "View Chat" #~ msgstr "Exibir Chat" #~ msgid "Whether to show the chat pane" #~ msgstr "Desejo mostrar o painel do Chat" #~ msgid "View Document User List" #~ msgstr "Ver documento lista de usuário" #~ msgid "Whether to show the user list for documents" #~ msgstr "Desejo mostrar a lista de usuários para documentos" #~ msgid "View Chat User List" #~ msgstr "Ver lista de usuários do Chat" #~ msgid "Whether to show the user list for the chat" #~ msgstr "Desejo mostrar a lista de usuário para o chat" #~ msgid "_Help" #~ msgstr "_Ajuda" #~ msgid "_Contents" #~ msgstr "_Conteúdo" #~ msgid "_About..." #~ msgstr "_Sobre" #~ msgid "Shows Gobby's copyright and credits" #~ msgstr "Mostrar direitos autoriais e créditos do Gobby" #~ msgid "User list" #~ msgstr "Lista de Usuários" #~ msgid "Document list" #~ msgstr "Lista de Documentos" #~ msgid "User Color Indicator" #~ msgstr "Indicador de cor do usuário" #~ msgid "Connect to Server" #~ msgstr "Conectar ao Servidor" #~ msgid "Please enter a host name with which to establish a connection." #~ msgstr "" #~ "Por favor, digite um nome de host com o qual deseja estabelecer uma " #~ "conexão." #~ msgid "Document Name:" #~ msgstr "Nome do Documento" #~ msgid "_Search for:" #~ msgstr "_Pesquisar por:" #~ msgid "Replace _with:" #~ msgstr "Substituir _com:" #~ msgid "Go to line" #~ msgstr "Ir até a linha" #~ msgid "Line _number:" #~ msgstr "Número de _linhas:" #~ msgid "Choose a user color" #~ msgstr "Escolha uma cor para o usuário" #~ msgid "Welcome to Gobby" #~ msgstr "Bem-vindo ao Gobby" #~ msgid "User Name" #~ msgstr "Nome do Usuário" #~ msgid "Your name as shown to other users." #~ msgstr "Como seu nome será mostrado para outros usuários" #~ msgid "User Color" #~ msgstr "Cor do Usuário" #~ msgid "The color with which text you have written is branded." #~ msgstr "A cor com o texto que você escreveu é marcado" #, fuzzy #~ msgid "Password:" #~ msgstr "Senha Requerida" #~ msgid "Open Location" #~ msgstr "Abrir Localização" #~ msgid "Password Required" #~ msgstr "Senha Requerida" #~ msgid "Settings" #~ msgstr "Configurações" #, fuzzy #~ msgid "Remote Users" #~ msgstr "Redefinir as cores do usuário" #, fuzzy #~ msgid "Local Documents" #~ msgstr "Novo Documento" #~ msgid "User name:" #~ msgstr "Nome do Usuário" #~ msgid "User color:" #~ msgstr "Cor do usuário:" #~ msgid "Choose a new user color" #~ msgstr "Escolha uma nova cor para o usuário" #, fuzzy #~ msgid "Highlight current line of remote users" #~ msgstr "Realçar linha atual" #, fuzzy #~ msgid "Local documents directory:" #~ msgstr "Diretório do Host:" #~ msgid "Indentation" #~ msgstr "Indentação" #~ msgid "File Saving" #~ msgstr "Salvar Arquivo" #~ msgid "_Tab width:" #~ msgstr "Larguda da _Tabulação" #~ msgid "Insert _spaces instead of tabs" #~ msgstr "Inserir _espaços em vez de tabulações " #~ msgid "Enable _automatic saving of documents" #~ msgstr "Ativar _salvar documentos automaticamente" #~ msgid "Autosave interval in _minutes:" #~ msgstr "Salvar automaticamente no intervalo de _minutos" #~ msgid "" #~ "With this option enabled, Home/End keys move to first/last character " #~ "before going to the start/end of the line." #~ msgstr "" #~ "Com esta opção habilitada, chaves Home/End movem-se para o primeiro/" #~ "último caractereindo para o início/fim da linha." #~ msgid "Line Numbers" #~ msgstr "Número de Linhas" #~ msgid "Current Line" #~ msgstr "Linha Atual" #~ msgid "Right Margin" #~ msgstr "Margem Direita" #~ msgid "Whitespace Display" #~ msgstr "Mostrar espaços em branco" #~ msgid "Enable text wrapping" #~ msgstr "Ativar quebra-linha" #~ msgid "Display line numbers" #~ msgstr "Mostrar números de linhas" #~ msgid "Highlight current line" #~ msgstr "Realçar linha atual" #~ msgid "Display right margin" #~ msgstr "Mostrar margem direita" #~ msgid "Right margin at column:" #~ msgstr "Margem direita na coluna" #~ msgid "Highlight matching bracket" #~ msgstr "Fechar colchete correspondente" #~ msgid "Toolbar" #~ msgstr "Barra de Ferramentas" #~ msgid "Font" #~ msgstr "Fontes" #~ msgid "Color Scheme" #~ msgstr "Esquema de cores" #~ msgid "Trusted CAs" #~ msgstr "CAs confiáveis" #~ msgid "Secure Connection" #~ msgstr "Conexão Segura" #, fuzzy #~ msgid "Authentication" #~ msgstr "Indentação" #~ msgid "Select a file containing trusted CAs" #~ msgstr "Selecionar um arquivo contendo dados confiáveis CAs " #, fuzzy #~ msgid "Create New..." #~ msgstr "Criar Diretório..." #~ msgid "Preferences" #~ msgstr "Preferências" #~ msgid "User" #~ msgstr "Usuário" #~ msgid "View" #~ msgstr "Exibir" #~ msgid "Appearance" #~ msgstr "Aparência" #~ msgid "Security" #~ msgstr "Segurança" #~ msgid "Gobby options" #~ msgstr "Opções do Gobby" #~ msgid "Options related to Gobby" #~ msgstr "Opções relacionadas do Gobby" #~ msgid "You are still connected to a session" #~ msgstr "Você ainda está conectado a uma sessão" #~ msgid "Do you want to close Gobby nevertheless?" #~ msgstr "Você quer fechar Gobby?" #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Não foi possível resolver \"%1\"" #~ msgid "Resolving \"%1\"..." #~ msgstr "Resolvendo \"%1\"..." gobby-0.6.0/po/fr.po0000664000175000017500000010256014005502331011124 00000000000000# French translation of Gobby. # Copyright (C) 2010, Listed translators # This file is distributed under the same license as the Gobby package. # Claude Paroz , 2010 # msgid "" msgstr "" "Project-Id-Version: Gobby 0.5 fr\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-31 11:22+0100\n" "PO-Revision-Date: 2010-11-16 23:04+0100\n" "Last-Translator: Claude Paroz \n" "Language-Team: French \n" "Language: French\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../code/application.cpp:132 msgid "Display version information and exit" msgstr "Affiche l'information de version et quitte" #: ../code/application.cpp:134 #, fuzzy msgid "Start a new gobby instance also if there is one already running" msgstr "Démarre une nouvelle instance Gobby même s'il y en a déjà une" #: ../code/commands/auth-commands.cpp:193 #: ../code/commands/browser-context-commands.cpp:354 #: ../code/core/filechooser.cpp:34 ../code/core/filechooser.cpp:39 #: ../code/core/huebutton.cpp:102 #: ../code/dialogs/document-location-dialog.cpp:35 #, fuzzy msgid "_Cancel" msgstr "_Annuler" #: ../code/commands/auth-commands.cpp:195 ../code/core/huebutton.cpp:103 msgid "_Ok" msgstr "" #: ../code/commands/auth-commands.cpp:217 #, fuzzy msgid "Password required" msgstr "Mot de passe nécessaire" #: ../code/commands/auth-commands.cpp:250 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:289 msgid "Subscribing to %1..." msgstr "Inscription à %1..." #: ../code/commands/browser-commands.cpp:302 msgid "Subscribing to chat on %1..." msgstr "Inscription à la discussion sur %1..." #: ../code/commands/browser-commands.cpp:625 msgid "Subscription failed" msgstr "Échec de l'inscription" #: ../code/commands/browser-context-commands.cpp:85 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:287 #: ../code/commands/browser-context-commands.cpp:322 #: ../code/commands/browser-context-commands.cpp:409 #: ../code/commands/file-tasks/task-open-location.cpp:31 #: ../code/core/statusbar.cpp:81 ../code/dialogs/find-dialog.cpp:58 #: ../code/dialogs/goto-dialog.cpp:30 ../code/dialogs/initial-dialog.cpp:206 #: ../code/dialogs/preferences-dialog.cpp:815 msgid "_Close" msgstr "" #: ../code/commands/browser-context-commands.cpp:349 msgid "Choose a name for the directory" msgstr "Choisissez un nom pour le dossier" #: ../code/commands/browser-context-commands.cpp:350 msgid "Choose a name for the document" msgstr "Choisissez un nom pour le document" #: ../code/commands/browser-context-commands.cpp:351 msgid "_Directory Name:" msgstr "Nom du _dossier :" #: ../code/commands/browser-context-commands.cpp:352 msgid "_Document Name:" msgstr "Nom du _document :" #: ../code/commands/browser-context-commands.cpp:355 msgid "C_reate" msgstr "C_réer" #: ../code/commands/browser-context-commands.cpp:357 msgid "New Directory" msgstr "Nouveau dossier" #: ../code/commands/browser-context-commands.cpp:358 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "Nouveau document" #: ../code/commands/browser-context-commands.cpp:380 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Choisissez un fichier texte à ouvrir" #: ../code/commands/browser-context-commands.cpp:519 #: ../code/commands/browser-context-commands.cpp:530 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:523 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:534 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:547 #, fuzzy msgid "Failed to create account" msgstr "Impossible de créer le document « %1 »" #: ../code/commands/browser-context-commands.cpp:550 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-commands.cpp:252 #, fuzzy msgid "Cancel" msgstr "_Annuler" #: ../code/commands/file-commands.cpp:254 msgid "Connect" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Choisissez un emplacement pour y exporter le document « %1 »" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "Requête vers « %1 »..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:469 #: ../code/operations/operation-open-multiple.cpp:176 msgid "Failed to open document \"%1\"" msgstr "Le document « %1 » n'a pas pu être ouvert" #: ../code/commands/file-tasks/task-open-location.cpp:32 #: ../code/core/filechooser.cpp:40 #: ../code/dialogs/document-location-dialog.cpp:36 #, fuzzy msgid "_Open" msgstr "_Ouvrir..." #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Choisissez un emplacement pour y enregistrer le document « %1 »" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:49 msgid "There was an error displaying help." msgstr "Une erreur est survenue durant l'affichage de l'aide" #: ../code/commands/help-commands.cpp:74 msgid "Contributors:" msgstr "Contributeurs :" #: ../code/commands/help-commands.cpp:80 msgid "British English:" msgstr "Anglais britannique :" #: ../code/commands/help-commands.cpp:82 msgid "German:" msgstr "Allemand :" #: ../code/commands/help-commands.cpp:99 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "La connexion à l'éditeur de ce document a été interrompue. De nouvelles " "modifications au document ne pourraient plus être partagées avec les autres, " "c'est pourquoi le document ne peut plus être modifié.\n" "\n" "Sachez également qu'il n'est pas certain que vos dernières modifications " "aient pu être transmises à l'éditeur avant la perte de la connexion." #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Synchronisation en cours... %1 %%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "Ce document est inutilisable." #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "Si vous avez une idée sur la cause de ce problème, vous pouvez tenter de le " "résoudre puis essayer à nouveau (après avoir fermé ce document). Sinon, " "c'est probablement une anomalie du logiciel. Dans ce cas, veuillez signaler " "cette erreur dans un rapport sur http://gobby.0x539.de/trac/newticket et " "indiquer le maximum d'informations, y compris ce que vous faisiez lorsque le " "problème est survenu et comment il est possible de le reproduire (le cas " "échéant), afin que nous puissions corriger cette erreur dans une prochaine " "version. Merci." #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Échec de synchronisation : %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "Vous pouvez encore voir les modifications des autres personnes, mais vous ne " "pouvez plus modifier ce document vous-même." #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "Échec de l'adhésion d'un utilisateur : %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:109 msgid "_Direct Connection" msgstr "Connexion _directe" #: ../code/core/browser.cpp:110 msgid "Host Name:" msgstr "Nom d'hôte :" #: ../code/core/certificatemanager.cpp:86 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:279 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:341 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:417 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/filechooser.cpp:35 #, fuzzy msgid "_Save" msgstr "Tout enregistrer" #: ../code/core/foldermanager.cpp:345 msgid "The document has been removed from the server." msgstr "" #: ../code/core/selfhoster.cpp:105 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:137 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "Échec de suppression du nœud « %1 »" #: ../code/core/selfhoster.cpp:139 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:265 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:287 #, fuzzy msgid "Failed to share documents" msgstr "L'enregistrement du document « %1 » a échoué" #: ../code/core/sessionuserview.cpp:38 msgid "User List" msgstr "Liste des utilisateurs" #: ../code/core/statusbar.cpp:434 msgid "Ln %1, Col %2\t%3" msgstr "Lig %1, col %2\t%3" #: ../code/core/statusbar.cpp:437 msgid "OVR" msgstr "ÉCR" #: ../code/core/statusbar.cpp:437 msgid "INS" msgstr "INS" #: ../code/core/textsessionview.cpp:639 msgid "Text written by %1" msgstr "Texte écrit par %1" #: ../code/core/textsessionview.cpp:645 msgid "Unowned text" msgstr "Texte anonyme" #: ../code/core/userlist.cpp:115 msgid "Users" msgstr "Utilisateurs" #: ../code/dialogs/connection-info-dialog.cpp:48 #, fuzzy msgid "Connections" msgstr "Connexion sécurisée" #: ../code/dialogs/connection-info-dialog.cpp:313 msgid "Nobody is connected to this computer" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:153 msgid "Select document's target location" msgstr "Sélectionnez l'emplacement cible du document" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Choose a directory to create the document into:" msgstr "Choisissez un dossier dans lequel créer le document :" #: ../code/dialogs/document-location-dialog.cpp:162 msgid "Select documents' target location" msgstr "Sélectionnez l'emplacement cible du document" #: ../code/dialogs/document-location-dialog.cpp:164 msgid "Choose a directory to create the documents into:" msgstr "Choisissez un dossier dans lequel créer les documents :" #: ../code/dialogs/find-dialog.cpp:59 msgid "Replace _All" msgstr "_Tout remplacer" #: ../code/dialogs/find-dialog.cpp:61 msgid "_Replace" msgstr "R_emplacer" #: ../code/dialogs/find-dialog.cpp:62 #, fuzzy msgid "_Find" msgstr "Rechercher" #: ../code/dialogs/find-dialog.cpp:119 msgid "Find" msgstr "Rechercher" #: ../code/dialogs/find-dialog.cpp:119 msgid "Replace" msgstr "Remplacer" #: ../code/dialogs/find-dialog.cpp:138 ../code/dialogs/find-dialog.cpp:154 msgid "Phrase \"%1\" has not been found" msgstr "Le texte « %1 » n'a pas été trouvé" #: ../code/dialogs/find-dialog.cpp:312 msgid "No occurrence has been replaced" msgstr "Aucune occurrence n'a été remplacée" #: ../code/dialogs/find-dialog.cpp:318 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 occurrence a été remplacée" msgstr[1] "%1 occurrences ont été remplacées" #: ../code/dialogs/goto-dialog.cpp:31 msgid "Go To _Line" msgstr "Aller à la _ligne" #: ../code/dialogs/initial-dialog.cpp:53 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:76 #, fuzzy msgid "Failed to generate private key" msgstr "Échec de suppression du nœud « %1 »" #: ../code/dialogs/initial-dialog.cpp:79 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:118 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:121 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/password-dialog.cpp:34 msgid "Connection to host \"%1\" requires a password." msgstr "La connexion au serveur « %1 » exige un mot de passe." #: ../code/dialogs/password-dialog.cpp:40 msgid "Invalid password for host \"%1\". Please try again." msgstr "" "Le mot de passe pour le serveur « %1 » n'est pas valable. Essayez encore une " "fois." #: ../code/dialogs/preferences-dialog.cpp:409 msgid "Display no whitespace" msgstr "N'afficher aucun type d'espace" #: ../code/dialogs/preferences-dialog.cpp:412 msgid "Display spaces" msgstr "Afficher les espaces" #: ../code/dialogs/preferences-dialog.cpp:416 msgid "Display tabs" msgstr "Afficher les tabulations" #: ../code/dialogs/preferences-dialog.cpp:420 msgid "Display tabs and spaces" msgstr "Afficher les tabulations et les espaces" #: ../code/dialogs/preferences-dialog.cpp:452 msgid "Show text only" msgstr "Afficher uniquement le texte" #: ../code/dialogs/preferences-dialog.cpp:454 msgid "Show icons only" msgstr "Afficher unqiuement les icônes" #: ../code/dialogs/preferences-dialog.cpp:456 msgid "Show both icons and text" msgstr "Afficher les icônes et le texte" #: ../code/dialogs/preferences-dialog.cpp:458 msgid "Show text besides icons" msgstr "Afficher le texte à côté des icônes" #: ../code/dialogs/preferences-dialog.cpp:478 msgid "Scheme Description" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:575 msgid "Use TLS if possible" msgstr "Utiliser TSL si possible" #: ../code/dialogs/preferences-dialog.cpp:578 msgid "Always use TLS" msgstr "Toujours utiliser TLS" #: ../code/dialogs/preferences-dialog.cpp:615 #, fuzzy msgid "Error reading file: %1" msgstr "Échec de l'adhésion d'un utilisateur : %1" #: ../code/dialogs/preferences-dialog.cpp:655 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:685 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:703 msgid "Select a location for the generated certificate" msgstr "" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Suppression du nœud « %1 »..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Échec de suppression du nœud « %1 »" #: ../code/operations/operation-export-html.cpp:173 #, c-format msgid "written by: %s" msgstr "écrit par : %s" #: ../code/operations/operation-export-html.cpp:246 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:259 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Document généré à partir de %1$s:%2$s le %3$s par %4$s" #: ../code/operations/operation-export-html.cpp:409 msgid "Participants" msgstr "Participants" #: ../code/operations/operation-export-html.cpp:483 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Exportation HTML du document « %1 » vers « %2 »..." #: ../code/operations/operation-export-html.cpp:544 msgid "Failed to export document \"%1\" to HTML" msgstr "Impossible d'exporter le document « %1 » en HTML" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Création du dossier « %1 »..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Création du document « %1 »..." #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Impossible de créer le dossier « %1 »" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Impossible de créer le document « %1 »" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-1" #: ../code/operations/operation-open.cpp:113 msgid "Opening document \"%1\"..." msgstr "Ouverture du document « %1 »..." #: ../code/operations/operation-open.cpp:129 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" "Le dossier dans lequel le document aurait dû être inséré a été supprimé" #: ../code/operations/operation-open.cpp:318 msgid "The file contains data not in the specified encoding" msgstr "" "Le fichier contient des données incompatibles avec le jeu de caractères " "indiqué" #: ../code/operations/operation-open.cpp:329 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "Soit le fichier contient des données dans un codage inconnu, soit il " "contient des données binaires." #: ../code/operations/operation-open-multiple.cpp:88 msgid "Parent folder was removed" msgstr "Le dossier parent a été supprimé" #: ../code/operations/operation-open-multiple.cpp:189 msgid "Failed to open multiple documents" msgstr "Impossible d'ouvrir plusieurs documents" #: ../code/operations/operation-save.cpp:91 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Enregistrement du document « %1 » vers « %2 »..." #: ../code/operations/operation-save.cpp:220 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "Le document contient un ou plusieurs caractères qui ne peuvent pas être " "codés dans le jeu de caractères indiqué." #: ../code/operations/operation-save.cpp:281 msgid "Failed to save document \"%1\"" msgstr "L'enregistrement du document « %1 » a échoué" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Le document « %1 » n'a pas pu être ouvert" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "Inscription à %1..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Impossible de créer le dossier « %1 »" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "La connexion à « %1 » a échoué" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "Impossible de résoudre « %1 »" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "Le périphérique « %1 » n'existe pas" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Impossible de créer le " #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Le périphérique « %1 » n'existe pas" #: ../code/window.cpp:42 msgid "Chat" msgstr "Discussion" #: ../code/window.cpp:83 msgid "This Computer" msgstr "" #: ../code/window.cpp:108 msgid "Document Browser" msgstr "Navigateur de documents" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Éditeur collaboratif" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Éditeur collaboratif Gobby (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Éditer des fichiers texte de manière collaborative" #, fuzzy #~ msgid "_Disconnect from Server" #~ msgstr "Connexion à un serveur" #, fuzzy #~ msgid "Create _Account..." #~ msgstr "Créer un do_cument..." #~ msgid "Create Do_cument..." #~ msgstr "Créer un do_cument..." #, fuzzy #~ msgid "Create Di_rectory..." #~ msgstr "Créer un dossier..." #~ msgid "_Open Document..." #~ msgstr "_Ouvrir un document..." #~ msgid "D_elete" #~ msgstr "_Supprimer" #~ msgid "_None" #~ msgstr "_Aucun" #~ msgid "_File" #~ msgstr "_Fichier" #~ msgid "Open _Location..." #~ msgstr "Ouvrir un _emplacement..." #~ msgid "Save _As..." #~ msgstr "Enregistrer _sous..." #~ msgid "Save all open files locally" #~ msgstr "Enregistrer localement tous les fichiers ouverts" #~ msgid "Export As _HTML..." #~ msgstr "Exporter en _HTML..." #~ msgid "Connect _to Server..." #~ msgstr "Se _connecter à un serveur..." #~ msgid "_Edit" #~ msgstr "É_dition" #~ msgid "_Find..." #~ msgstr "_Rechercher..." #~ msgid "Find Ne_xt" #~ msgstr "Rechercher le _suivant" #~ msgid "Find next match of phrase searched for" #~ msgstr "Rechercher la prochaine occurrence du texte recherché" #~ msgid "Find Pre_vious" #~ msgstr "Rechercher le _précédent" #~ msgid "Find previous match of phrase searched for" #~ msgstr "Rechercher la précédente occurrence du texte recherché" #~ msgid "Find and Rep_lace..." #~ msgstr "Rechercher et re_mplacer..." #~ msgid "Go to _Line..." #~ msgstr "Aller à la _ligne..." #~ msgid "Pr_eferences..." #~ msgstr "_Préférences..." #~ msgid "_View" #~ msgstr "_Affichage" #~ msgid "Reset User Colors" #~ msgstr "Réinitialiser les couleurs des utilisateurs" #~ msgid "Hide user colors in current document" #~ msgstr "Masquer les couleurs des utilisateurs dans le document actuel" #~ msgid "View Toolbar" #~ msgstr "Afficher la barre d'outils" #~ msgid "Whether to show the toolbar" #~ msgstr "Indique s'il faut afficher la barre d'outils" #~ msgid "View Statusbar" #~ msgstr "Afficher la barre d'état" #~ msgid "Whether to show the statusbar" #~ msgstr "Indique s'il faut afficher la barre d'état" #~ msgid "View Document Browser" #~ msgstr "Afficher le navigateur de document" #~ msgid "Whether to show the document browser" #~ msgstr "Indique s'il faut afficher le navigateur de document" #~ msgid "View Chat" #~ msgstr "Afficher la discussion" #~ msgid "Whether to show the chat pane" #~ msgstr "Indique s'il faut afficher le volet de discussion" #~ msgid "View Document User List" #~ msgstr "Afficher la liste des utilisateurs du document" #~ msgid "Whether to show the user list for documents" #~ msgstr "Indique s'il faut afficher la liste des utilisateurs du document" #~ msgid "View Chat User List" #~ msgstr "Afficher la liste des utilisateurs de la discussion" #~ msgid "Whether to show the user list for the chat" #~ msgstr "" #~ "Indique s'il faut afficher la liste des utilisateurs de la discussion" #~ msgid "_Highlight Mode" #~ msgstr "_Mode de coloration" #~ msgid "_Help" #~ msgstr "Aid_e" #~ msgid "_Contents" #~ msgstr "_Sommaire" #~ msgid "Opens the Gobby manual" #~ msgstr "Ouvre le manuel de Gobby" #~ msgid "_About..." #~ msgstr "À _propos..." #~ msgid "Shows Gobby's copyright and credits" #~ msgstr "Affiche le copyright et les remerciements de Gobby" #~ msgid "User list" #~ msgstr "Liste des utilisateurs" #~ msgid "Document list" #~ msgstr "Liste des documents" #~ msgid "User Color Indicator" #~ msgstr "Indicateur des couleurs des utilisateurs" #~ msgid "Connect to Server" #~ msgstr "Connexion à un serveur" #~ msgid "Please enter a host name with which to establish a connection." #~ msgstr "Veuillez indiquer un nom d'hôte pour établir la connexion." #~ msgid "_Remote Endpoint:" #~ msgstr "Point d'_accès distant :" #~ msgid "Document Name:" #~ msgstr "Nom du document :" #~ msgid "_Search for:" #~ msgstr "_Rechercher :" #~ msgid "Replace _with:" #~ msgstr "Rem_placer par :" #~ msgid "_Match case" #~ msgstr "Re_specter la casse" #~ msgid "Match _entire word only" #~ msgstr "_Mots entiers seulement" #~ msgid "Search _backwards" #~ msgstr "Rechercher en _arrière" #~ msgid "Wra_p around" #~ msgstr "Recherche _circulaire" #~ msgid "Go to line" #~ msgstr "Aller à la ligne" #~ msgid "Line _number:" #~ msgstr "_Numéro de ligne :" #~ msgid "Choose a user color" #~ msgstr "Choisissez une couleur d'utilisateur" #~ msgid "Welcome to Gobby" #~ msgstr "Bienvenue dans Gobby" #~ msgid "" #~ "Before we start, a few options need to be configured. You can later " #~ "change them by choosing Edit ▸ Preferences from the menu." #~ msgstr "" #~ "Avant de commencer, quelques options doivent être configurées. Il est " #~ "possible de les modifier ultérieurement en choisissant Édition ▸ " #~ "Préférences dans le menu." #~ msgid "User Name" #~ msgstr "Nom d'utilisateur" #~ msgid "Your name as shown to other users." #~ msgstr "Votre nom tel qu'il apparaîtra pour les autres personnes." #~ msgid "User Color" #~ msgstr "Couleur d'utilisateur" #~ msgid "The color with which text you have written is branded." #~ msgstr "La couleur qui marquera le texte que vous écrivez." #, fuzzy #~ msgid "Password:" #~ msgstr "_Mot de passe du serveur :" #~ msgid "Open Location" #~ msgstr "Ouvrir un emplacement" #~ msgid "Enter the _location (URI) of the file you would like to open:" #~ msgstr "" #~ "Saisissez l'_emplacement (URI) du fichier que vous souhaitez ouvrir :" #~ msgid "Password Required" #~ msgstr "Mot de passe nécessaire" #~ msgid "Server _Password:" #~ msgstr "_Mot de passe du serveur :" #~ msgid "Settings" #~ msgstr "Paramètres" #, fuzzy #~ msgid "Remote Users" #~ msgstr "Réinitialiser les couleurs des utilisateurs" #, fuzzy #~ msgid "Local Documents" #~ msgstr "Nouveau document" #~ msgid "User name:" #~ msgstr "Nom d'utilisateur :" #~ msgid "User color:" #~ msgstr "Couleur d'utilisateur :" #~ msgid "Choose a new user color" #~ msgstr "Choisissez une nouvelle couleur d'utilisateur" #, fuzzy #~ msgid "Highlight current line of remote users" #~ msgstr "Surligner la ligne actuelle" #, fuzzy #~ msgid "Local documents directory:" #~ msgstr "Dossier de l'hôte :" #~ msgid "Tab Stops" #~ msgstr "Tabulations" #~ msgid "Indentation" #~ msgstr "Indentation" #~ msgid "Home/End Behavior" #~ msgstr "Comportement de Origine/Fin" #~ msgid "File Saving" #~ msgstr "Enregistrement de fichiers" #~ msgid "_Tab width:" #~ msgstr "_Largeur des tabulations :" #~ msgid "Insert _spaces instead of tabs" #~ msgstr "Insérer des _espaces au lieu de tabulations" #~ msgid "Enable automatic _indentation" #~ msgstr "Activer l'_indentation automatique" #~ msgid "Smart _home/end" #~ msgstr "_Origine/fin intelligents" #~ msgid "Enable _automatic saving of documents" #~ msgstr "_Activer l'enregistrement automatique des documents" #~ msgid "Autosave interval in _minutes:" #~ msgstr "Intervalle d'enregistrement en _minutes :" #~ msgid "" #~ "With this option enabled, Home/End keys move to first/last character " #~ "before going to the start/end of the line." #~ msgstr "" #~ "Quand cette option est activée, les touches Origine/Fin se placent au " #~ "premier/dernier caractère avant d'aller au début/à la fin de la ligne." #~ msgid "Text Wrapping" #~ msgstr "Longues lignes" #~ msgid "Line Numbers" #~ msgstr "Numéros de ligne" #~ msgid "Current Line" #~ msgstr "Ligne actuelle" #~ msgid "Right Margin" #~ msgstr "Marge de droite" #~ msgid "Bracket Matching" #~ msgstr "Correspondance des parenthèses" #~ msgid "Whitespace Display" #~ msgstr "Affichage des blancs" #~ msgid "Enable text wrapping" #~ msgstr "Activer le retour à la ligne" #~ msgid "Do not split words over two lines" #~ msgstr "Ne pas couper les mots sur deux lignes" #~ msgid "Display line numbers" #~ msgstr "Afficher les numéros de ligne" #~ msgid "Highlight current line" #~ msgstr "Surligner la ligne actuelle" #~ msgid "Display right margin" #~ msgstr "Afficher la marge de droite" #~ msgid "Right margin at column:" #~ msgstr "Marge de droite à la colonne :" #~ msgid "Highlight matching bracket" #~ msgstr "Surligner les parenthèses correspondantes" #~ msgid "Toolbar" #~ msgstr "Barre d'outils" #~ msgid "Font" #~ msgstr "Police" #~ msgid "Color Scheme" #~ msgstr "Jeu de couleurs" #~ msgid "Trusted CAs" #~ msgstr "Autorités de confiance" #~ msgid "Secure Connection" #~ msgstr "Connexion sécurisée" #, fuzzy #~ msgid "Authentication" #~ msgstr "Indentation" #~ msgid "Select a file containing trusted CAs" #~ msgstr "" #~ "Choisissez un fichier contenant les autorités de certification de " #~ "confiance" #, fuzzy #~ msgid "None" #~ msgstr "_Aucun" #, fuzzy #~ msgid "Create New..." #~ msgstr "Créer un do_cument..." #~ msgid "Preferences" #~ msgstr "Préférences" #~ msgid "User" #~ msgstr "Utilisateur" #~ msgid "Editor" #~ msgstr "Éditeur" #~ msgid "View" #~ msgstr "Affichage" #~ msgid "Appearance" #~ msgstr "Apparence" #~ msgid "Security" #~ msgstr "Sécurité" #~ msgid "Gobby options" #~ msgstr "Options de Gobby" #~ msgid "Options related to Gobby" #~ msgstr "Options liées à Gobby" #~ msgid "Connect to given host on startup, can be given multiple times" #~ msgstr "" #~ "Se connecte à l'hôte indiqué au démarrage, peut apparaître plusieurs fois" #~ msgid "HOSTNAME" #~ msgstr "NOM_HÒTE" #~ msgid "You are still connected to a session" #~ msgstr "Vous êtes toujours connecté à une session" #~ msgid "Do you want to close Gobby nevertheless?" #~ msgstr "Souhaitez-vous tout de même fermer Gobby ?" #~ msgid "" #~ "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.\n" #~ "\n" #~ "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.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le " #~ "modifier au titre des clauses de la Licence Publique Générale GNU, telle " #~ "que publiée par la Free Software Foundation ; soit la version 2 de la " #~ "Licence, ou (à votre discrétion) une version ultérieure quelconque.\n" #~ "Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS " #~ "AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIABILITÉ ou " #~ "DE CONFORMITÉ À UNE UTILISATION PARTICULIÈRE. Voir la Licence Publique " #~ "Générale GNU pour plus de détails.\n" #~ "Vous devriez avoir reçu un exemplaire de la Licence Publique Générale GNU " #~ "avec ce programme ; si ce n'est pas le cas, écrivez à la Free Software " #~ "Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, " #~ "USA." #~ msgid "User Join in progress..." #~ msgstr "Adhésion d'utilisateur en cours..." #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Impossible de résoudre « %1 »" #~ msgid "Resolving \"%1\"..." #~ msgstr "Résolution de « %1 »..." #~ msgid "Paths" #~ msgstr "Chemins" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "" #~ "Le dossier dans lequel les sessions hébergées localement sont " #~ "enregistrées de façon permanente" gobby-0.6.0/po/de.po0000664000175000017500000010125314005502331011103 00000000000000# Gobby German translation # Copyright (C) 2010 Michael Frey # This file is distributed under the same license as the gobby-0.5 package. # Michael Frey , 2010 msgid "" msgstr "" "Project-Id-Version: 0.4.93\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-31 11:22+0100\n" "PO-Revision-Date: 2010-02-07 09:40+0100\n" "Last-Translator: Michael Frey \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../code/application.cpp:132 msgid "Display version information and exit" msgstr "Zeige Version von Gobby an" #: ../code/application.cpp:134 #, fuzzy msgid "Start a new gobby instance also if there is one already running" msgstr "Auch neue Gobby-Instanz starten, wenn bereits eine Instanz läuft" #: ../code/commands/auth-commands.cpp:193 #: ../code/commands/browser-context-commands.cpp:354 #: ../code/core/filechooser.cpp:34 ../code/core/filechooser.cpp:39 #: ../code/core/huebutton.cpp:102 #: ../code/dialogs/document-location-dialog.cpp:35 #, fuzzy msgid "_Cancel" msgstr "_Abbrechen" #: ../code/commands/auth-commands.cpp:195 ../code/core/huebutton.cpp:103 msgid "_Ok" msgstr "" #: ../code/commands/auth-commands.cpp:217 #, fuzzy msgid "Password required" msgstr "Passwort benötigt" #: ../code/commands/auth-commands.cpp:250 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:289 msgid "Subscribing to %1..." msgstr "Anmeldung bei %1…" #: ../code/commands/browser-commands.cpp:302 msgid "Subscribing to chat on %1..." msgstr "Anmeldung zum Chat bei %1…" #: ../code/commands/browser-commands.cpp:625 msgid "Subscription failed" msgstr "Anmeldung fehlgeschlagen" #: ../code/commands/browser-context-commands.cpp:85 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:287 #: ../code/commands/browser-context-commands.cpp:322 #: ../code/commands/browser-context-commands.cpp:409 #: ../code/commands/file-tasks/task-open-location.cpp:31 #: ../code/core/statusbar.cpp:81 ../code/dialogs/find-dialog.cpp:58 #: ../code/dialogs/goto-dialog.cpp:30 ../code/dialogs/initial-dialog.cpp:206 #: ../code/dialogs/preferences-dialog.cpp:815 msgid "_Close" msgstr "" #: ../code/commands/browser-context-commands.cpp:349 msgid "Choose a name for the directory" msgstr "Wählen Sie einen Namen für das Verzeichnis" #: ../code/commands/browser-context-commands.cpp:350 msgid "Choose a name for the document" msgstr "Wählen Sie einen Namen für das Dokument:" #: ../code/commands/browser-context-commands.cpp:351 msgid "_Directory Name:" msgstr "_Verzeichnisname:" #: ../code/commands/browser-context-commands.cpp:352 msgid "_Document Name:" msgstr "_Dokumentname:" #: ../code/commands/browser-context-commands.cpp:355 msgid "C_reate" msgstr "E_rstellen" #: ../code/commands/browser-context-commands.cpp:357 msgid "New Directory" msgstr "Neues Verzeichnis" #: ../code/commands/browser-context-commands.cpp:358 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "Neues Dokument" #: ../code/commands/browser-context-commands.cpp:380 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Dateien öffnen" #: ../code/commands/browser-context-commands.cpp:519 #: ../code/commands/browser-context-commands.cpp:530 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:523 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:534 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:547 #, fuzzy msgid "Failed to create account" msgstr "Erstellen des Dokuments »%1« fehlgeschlagen" #: ../code/commands/browser-context-commands.cpp:550 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-commands.cpp:252 #, fuzzy msgid "Cancel" msgstr "_Abbrechen" #: ../code/commands/file-commands.cpp:254 msgid "Connect" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Wählen Sie ein Verzeichnis zum Exportieren der Datei »%1«" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "»%1« wird abgefragt" #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:469 #: ../code/operations/operation-open-multiple.cpp:176 msgid "Failed to open document \"%1\"" msgstr "Öffnen des Dokuments fehlschlagen »%1«" #: ../code/commands/file-tasks/task-open-location.cpp:32 #: ../code/core/filechooser.cpp:40 #: ../code/dialogs/document-location-dialog.cpp:36 #, fuzzy msgid "_Open" msgstr "Ö_ffnen…" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Wählen Sie ein Verzeichnis zum Speichern der Datei »%1«" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:49 msgid "There was an error displaying help." msgstr "Beim Anzeigen der Hilfe ist ein Fehler aufgetreten." #: ../code/commands/help-commands.cpp:74 msgid "Contributors:" msgstr "Mitwirkende:" #: ../code/commands/help-commands.cpp:80 msgid "British English:" msgstr "Britisches Englisch:" #: ../code/commands/help-commands.cpp:82 msgid "German:" msgstr "Deutsch:" #: ../code/commands/help-commands.cpp:99 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "Die Verbindung zum Verteiler dieses Dokumentes wurde verloren. Änderungen am " "Dokument können nicht mehr mit anderen abgeglichen werden, daher kann dieses " "Dokument nicht mehr bearbeitet werden.\n" "\n" "Bitte beachten Sie, dass ihre letzten Änderungen möglicherweise nicht mehr " "den Verteiler erreichen konnten, bevor die Verbindung verloren ging." #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Abgleich in Arbeit… %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "Dieses Dokument kann nicht verwendet werden." #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "Falls Sie eine Möglichkeit zur Behebung des Problems sehen, können Sie das " "Dokument schließen und es erneut versuchen. Ansonsten handelt es sich " "wahrscheinlich um einen Programmfehler. In diesem Fall können Sie einen " "Fehlerbericht unter http://gobby.0x539.de/trac/newticket einreichen mit " "möglichst vielen zusätzlichen Informationen, insbesondere, was Sie gerade " "taten, als das Problem auftrat, und, wenn möglich, wie man es reproduzieren " "kann, so dass wir den Fehler für die nächste Version beheben können. Vielen " "Dank." #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Abgleich fehlgeschlagen: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "Sie können anderen beim Bearbeiten des Dokuments zusehen, aber nicht selbst " "Änderungen vornehmen." #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "Anmeldung fehlgeschlagen: %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:109 msgid "_Direct Connection" msgstr "Direkt_verbindung" #: ../code/core/browser.cpp:110 msgid "Host Name:" msgstr "Servername:" #: ../code/core/certificatemanager.cpp:86 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:279 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:341 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:417 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/filechooser.cpp:35 #, fuzzy msgid "_Save" msgstr "Alle speichern" #: ../code/core/foldermanager.cpp:345 msgid "The document has been removed from the server." msgstr "" #: ../code/core/selfhoster.cpp:105 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:137 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "Entfernen des Eintrags »%1« fehlgeschlagen" #: ../code/core/selfhoster.cpp:139 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:265 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:287 #, fuzzy msgid "Failed to share documents" msgstr "Speichern des Dokuments »%1« fehlgeschlagen" #: ../code/core/sessionuserview.cpp:38 msgid "User List" msgstr "Benutzerliste" #: ../code/core/statusbar.cpp:434 msgid "Ln %1, Col %2\t%3" msgstr "Z. %1, Sp. %2\t%3" #: ../code/core/statusbar.cpp:437 msgid "OVR" msgstr "ÜBS" #: ../code/core/statusbar.cpp:437 msgid "INS" msgstr "EIN" #: ../code/core/textsessionview.cpp:639 msgid "Text written by %1" msgstr "Text geschrieben von %1" #: ../code/core/textsessionview.cpp:645 msgid "Unowned text" msgstr "Kein Verfasser" #: ../code/core/userlist.cpp:115 msgid "Users" msgstr "Benutzer" #: ../code/dialogs/connection-info-dialog.cpp:48 #, fuzzy msgid "Connections" msgstr "Sichere Verbindung" #: ../code/dialogs/connection-info-dialog.cpp:313 msgid "Nobody is connected to this computer" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:153 msgid "Select document's target location" msgstr "Zielverzeichnis des Dokumentes auswählen" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Choose a directory to create the document into:" msgstr "Wählen Sie das Verzeichnis, in dem das Dokument erstellt werden soll:" #: ../code/dialogs/document-location-dialog.cpp:162 msgid "Select documents' target location" msgstr "Zielverzeichnis der Dokumente auswählen" #: ../code/dialogs/document-location-dialog.cpp:164 msgid "Choose a directory to create the documents into:" msgstr "" "Wählen Sie das Verzeichnis, in dem die Dokumente erstellt werden sollen:" #: ../code/dialogs/find-dialog.cpp:59 msgid "Replace _All" msgstr "_Alle ersetzen" #: ../code/dialogs/find-dialog.cpp:61 msgid "_Replace" msgstr "_Ersetzen" #: ../code/dialogs/find-dialog.cpp:62 #, fuzzy msgid "_Find" msgstr "Suche" #: ../code/dialogs/find-dialog.cpp:119 msgid "Find" msgstr "Suche" #: ../code/dialogs/find-dialog.cpp:119 msgid "Replace" msgstr "Ersetzen" #: ../code/dialogs/find-dialog.cpp:138 ../code/dialogs/find-dialog.cpp:154 msgid "Phrase \"%1\" has not been found" msgstr "Der Ausdruck »%1« wurde nicht gefunden" #: ../code/dialogs/find-dialog.cpp:312 msgid "No occurrence has been replaced" msgstr "Es wurde keine Ersetzung vorgenommen" #: ../code/dialogs/find-dialog.cpp:318 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 Treffer wurde ersetzt" msgstr[1] "%1 Treffer wurden ersetzt" #: ../code/dialogs/goto-dialog.cpp:31 msgid "Go To _Line" msgstr "Gehe zu _Zeile" #: ../code/dialogs/initial-dialog.cpp:53 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:76 #, fuzzy msgid "Failed to generate private key" msgstr "Entfernen des Eintrags »%1« fehlgeschlagen" #: ../code/dialogs/initial-dialog.cpp:79 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:118 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:121 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/password-dialog.cpp:34 msgid "Connection to host \"%1\" requires a password." msgstr "Die Verbindung zum Server »%1« erfordert ein Passwort." #: ../code/dialogs/password-dialog.cpp:40 msgid "Invalid password for host \"%1\". Please try again." msgstr "Ungültiges Password für Server »%1«. Bitte versuchen Sie es erneut." #: ../code/dialogs/preferences-dialog.cpp:409 msgid "Display no whitespace" msgstr "Leerräume nicht anzeigen" #: ../code/dialogs/preferences-dialog.cpp:412 msgid "Display spaces" msgstr "Leerzeichen anzeigen" #: ../code/dialogs/preferences-dialog.cpp:416 msgid "Display tabs" msgstr "Tabulatoren anzeigen" #: ../code/dialogs/preferences-dialog.cpp:420 msgid "Display tabs and spaces" msgstr "Tabulatoren und Leerzeichen anzeigen" #: ../code/dialogs/preferences-dialog.cpp:452 msgid "Show text only" msgstr "Nur Text anzeigen" #: ../code/dialogs/preferences-dialog.cpp:454 msgid "Show icons only" msgstr "Nur Symbole anzeigen" #: ../code/dialogs/preferences-dialog.cpp:456 msgid "Show both icons and text" msgstr "Zeige Symbol und Text" #: ../code/dialogs/preferences-dialog.cpp:458 msgid "Show text besides icons" msgstr "Zeige Text neben dem Symbol" #: ../code/dialogs/preferences-dialog.cpp:478 msgid "Scheme Description" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:575 msgid "Use TLS if possible" msgstr "Wenn möglich TLS-Verschlüsselung verwenden" #: ../code/dialogs/preferences-dialog.cpp:578 msgid "Always use TLS" msgstr "Immer TLS-Verschlüsselung verwenden" #: ../code/dialogs/preferences-dialog.cpp:615 #, fuzzy msgid "Error reading file: %1" msgstr "Anmeldung fehlgeschlagen: %1" #: ../code/dialogs/preferences-dialog.cpp:655 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:685 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:703 msgid "Select a location for the generated certificate" msgstr "" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Eintrag »%1« wird entfernt…" #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Entfernen des Eintrags »%1« fehlgeschlagen" #: ../code/operations/operation-export-html.cpp:173 #, c-format msgid "written by: %s" msgstr "geschrieben von: %s" #: ../code/operations/operation-export-html.cpp:246 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:259 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Dokument erstellt aus %1$s:%2$s am %3$s durch %4$s" #: ../code/operations/operation-export-html.cpp:409 msgid "Participants" msgstr "Teilnehmer" #: ../code/operations/operation-export-html.cpp:483 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Exportiere Dokument »%1« nach »%2« als HTML…" #: ../code/operations/operation-export-html.cpp:544 msgid "Failed to export document \"%1\" to HTML" msgstr "Exportieren des Dokuments »%1« zu HTML fehlgeschlagen" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Erstelle Verzeichnis »%1«…" #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Erstelle Dokument »%1«…" #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Erstellen des Verzeichnisses »%1« fehlgeschlagen" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Erstellen des Dokuments »%1« fehlgeschlagen" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-15" #: ../code/operations/operation-open.cpp:113 msgid "Opening document \"%1\"..." msgstr "Dokument »%1« wird geöffnet…" #: ../code/operations/operation-open.cpp:129 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" "Das Verzeichnis, in das das neue Dokument eingefügt werden sollte, wurde " "entfernt" #: ../code/operations/operation-open.cpp:318 msgid "The file contains data not in the specified encoding" msgstr "" "Die Datei enthält Daten, die nicht dem angegebenen Zeichensatz entsprechen" #: ../code/operations/operation-open.cpp:329 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "Die Datei enthält entweder Text aus einem unbekannten Zeichensatz oder " "Binärdaten" #: ../code/operations/operation-open-multiple.cpp:88 msgid "Parent folder was removed" msgstr "Enthaltender Ordner wurde entfernt" #: ../code/operations/operation-open-multiple.cpp:189 msgid "Failed to open multiple documents" msgstr "Öffnen mehrerer Dokumente fehlgeschlagen" #: ../code/operations/operation-save.cpp:91 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Speichere Dokument »%1« nach »%2«…" #: ../code/operations/operation-save.cpp:220 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "Das Dokument enthält ein oder mehrere Zeichen, die mit dem aktuellen " "Zeichensatz nicht dargestellt werden können." #: ../code/operations/operation-save.cpp:281 msgid "Failed to save document \"%1\"" msgstr "Speichern des Dokuments »%1« fehlgeschlagen" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Öffnen des Dokuments fehlschlagen »%1«" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "Anmeldung bei %1…" #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Erstellen des Verzeichnisses »%1« fehlgeschlagen" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "Verbindung zu »%1« fehlgeschlagen" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "Auflösung von »%1« fehlgeschlagen" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "Schnittstelle »%1« existiert nicht" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Erstellen des Verzeichnisses »%1« fehlgeschlagen: %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Schnittstelle »%1« existiert nicht" #: ../code/window.cpp:42 msgid "Chat" msgstr "Chat" #: ../code/window.cpp:83 msgid "This Computer" msgstr "" #: ../code/window.cpp:108 msgid "Document Browser" msgstr "Dokumentenliste" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Gemeinschaftlicher Editor" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Gobby Gemeinschaftlicher Editor (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Textdateien gemeinsam bearbeiten" #, fuzzy #~ msgid "_Disconnect from Server" #~ msgstr "Zu Server verbinden" #, fuzzy #~ msgid "Create _Account..." #~ msgstr "Dokument erstellen…" #~ msgid "Create Do_cument..." #~ msgstr "Dokument erstellen…" #, fuzzy #~ msgid "Create Di_rectory..." #~ msgstr "Verzeichnis erstellen…" #~ msgid "_Open Document..." #~ msgstr "Dokument ö_ffnen…" #~ msgid "D_elete" #~ msgstr "_Löschen" #~ msgid "_None" #~ msgstr "_Keine" #~ msgid "_File" #~ msgstr "_Datei" #~ msgid "Open _Location..." #~ msgstr "_Ort öffnen…" #~ msgid "Save _As..." #~ msgstr "Speichern _als…" #~ msgid "Save all open files locally" #~ msgstr "Alle offenen Dateien lokal speichern" #~ msgid "Export As _HTML..." #~ msgstr "Als _HTML exportieren..." #~ msgid "Connect _to Server..." #~ msgstr "_Zu Server verbinden…" #~ msgid "_Edit" #~ msgstr "_Bearbeiten" #~ msgid "_Find..." #~ msgstr "_Suchen…" #~ msgid "Find Ne_xt" #~ msgstr "_Weitersuchen" #~ msgid "Find next match of phrase searched for" #~ msgstr "Suche nach nächstem Vorkommen des Suchbegriffs" #~ msgid "Find Pre_vious" #~ msgstr "_Rückwärts suchen" #~ msgid "Find previous match of phrase searched for" #~ msgstr "Suche nach vorigem Vorkommen des Suchbegriffs" #~ msgid "Find and Rep_lace..." #~ msgstr "Suchen und _Ersetzen…" #~ msgid "Go to _Line..." #~ msgstr "Gehe zu _Zeile…" #~ msgid "Pr_eferences..." #~ msgstr "_Einstellungen…" #~ msgid "_View" #~ msgstr "_Ansicht" #~ msgid "Reset User Colors" #~ msgstr "Benutzerfarben zurücksetzen" #~ msgid "Hide user colors in current document" #~ msgstr "Benutzerfarben im aktuellen Dokument nicht anzeigen" #~ msgid "View Toolbar" #~ msgstr "Zeige Werkzeugleiste" #~ msgid "Whether to show the toolbar" #~ msgstr "Ob die Werkzeugleiste angezeigt werden soll" #~ msgid "View Statusbar" #~ msgstr "Zeige Statusleiste" #~ msgid "Whether to show the statusbar" #~ msgstr "Ob die Statusleiste angezeigt werden soll" #~ msgid "View Document Browser" #~ msgstr "Zeige Dokumentenliste" #~ msgid "Whether to show the document browser" #~ msgstr "Ob die Dokumentenliste angezeigt werden soll" #~ msgid "View Chat" #~ msgstr "Chat anzeigen" #~ msgid "Whether to show the chat pane" #~ msgstr "Ob das Chatfenster angezeigt werden soll" #~ msgid "View Document User List" #~ msgstr "Zeige Dokument-Benutzerliste" #~ msgid "Whether to show the user list for documents" #~ msgstr "Ob die Benutzerliste für Dokumente angezeigt werden soll" #~ msgid "View Chat User List" #~ msgstr "Zeige Chat-Benutzerliste" #~ msgid "Whether to show the user list for the chat" #~ msgstr "Ob die Benutzerliste des Chats angezeigt werden soll" #~ msgid "_Highlight Mode" #~ msgstr "_Syntaxhervorhebung" #~ msgid "_Help" #~ msgstr "_Hilfe" #~ msgid "_Contents" #~ msgstr "_Inhalt" #~ msgid "Opens the Gobby manual" #~ msgstr "Öffnet die Gobby-Anleitung" #~ msgid "_About..." #~ msgstr "Ü_ber…" #~ msgid "Shows Gobby's copyright and credits" #~ msgstr "Zeigt Gobbys Lizenz und Autoren" #~ msgid "User list" #~ msgstr "Benutzerliste:" #~ msgid "Document list" #~ msgstr "Dokumentenliste" #~ msgid "User Color Indicator" #~ msgstr "Benutzerfarbenindikator" #~ msgid "Connect to Server" #~ msgstr "Zu Server verbinden" #~ msgid "Please enter a host name with which to establish a connection." #~ msgstr "" #~ "Bitte geben sie den Namen des Servers ein, zu dem Sie verbinden wollen." #~ msgid "_Remote Endpoint:" #~ msgstr "Servername:" #~ msgid "Document Name:" #~ msgstr "Dokumentnamen:" #~ msgid "_Search for:" #~ msgstr "_Suche nach:" #~ msgid "Replace _with:" #~ msgstr "Ersetze _mit:" #~ msgid "_Match case" #~ msgstr "_Groß-/Kleinschreibung berücksichtigen" #~ msgid "Match _entire word only" #~ msgstr "Nur vollständige Wörter berücksichtigen" #~ msgid "Search _backwards" #~ msgstr "Rückwärts suchen" #~ msgid "Wra_p around" #~ msgstr "Suche beim Erreichen des Endes am Anfang _fortsetzen" #~ msgid "Go to line" #~ msgstr "Gehe zu Zeile" #~ msgid "Line _number:" #~ msgstr "Zeilen_nummer" #~ msgid "Choose a user color" #~ msgstr "Wählen Sie eine Benutzerfarbe" #~ msgid "Welcome to Gobby" #~ msgstr "Willkommen zu Gobby" #~ msgid "" #~ "Before we start, a few options need to be configured. You can later " #~ "change them by choosing Edit ▸ Preferences from the menu." #~ msgstr "" #~ "Bevor Sie loslegen können, müssen noch einige Einstellungen vorgenommen " #~ "werden. Sie können diese Einstellungen später unter Bearbeiten ▸ " #~ "Einstellungen im Hauptmenü verändern." #~ msgid "User Name" #~ msgstr "Benutzername" #~ msgid "Your name as shown to other users." #~ msgstr "Ihr Name, wie er anderen Benutzern angezeigt wird." #~ msgid "User Color" #~ msgstr "Benutzerfarbe" #~ msgid "The color with which text you have written is branded." #~ msgstr "Die Farbe, in der von Ihnen geschriebener Text hervorgeheben wird." #, fuzzy #~ msgid "Password:" #~ msgstr "Server-Passwort:" #~ msgid "Open Location" #~ msgstr "Ort öffnen" #~ msgid "Enter the _location (URI) of the file you would like to open:" #~ msgstr "Geben Sie den Ort (URI) der Datei ein, die Sie öffnen möchten:" #~ msgid "Password Required" #~ msgstr "Passwort benötigt" #~ msgid "Server _Password:" #~ msgstr "Server-Passwort:" #~ msgid "Settings" #~ msgstr "Einstellungen" #, fuzzy #~ msgid "Remote Users" #~ msgstr "Benutzerfarben zurücksetzen" #, fuzzy #~ msgid "Local Documents" #~ msgstr "Neues Dokument" #~ msgid "User name:" #~ msgstr "Benutzername:" #~ msgid "User color:" #~ msgstr "Benutzerfarbe:" #~ msgid "Choose a new user color" #~ msgstr "Neue Benutzerfarbe wählen" #, fuzzy #~ msgid "Highlight current line of remote users" #~ msgstr "Aktuelle Zeile hervorheben" #, fuzzy #~ msgid "Local documents directory:" #~ msgstr "Sitzungsverzeichnis" #~ msgid "Tab Stops" #~ msgstr "Tabulatoren" #~ msgid "Indentation" #~ msgstr "Zeileneinrückung" #~ msgid "Home/End Behavior" #~ msgstr "Pos1/Ende-Verhalten" #~ msgid "File Saving" #~ msgstr "Datei speichern" #~ msgid "_Tab width:" #~ msgstr "_Tabulatorbreite" #~ msgid "Insert _spaces instead of tabs" #~ msgstr "_Leerzeichen statt Tabulatoren einfügen" #~ msgid "Enable automatic _indentation" #~ msgstr "Automatische Zeileneinrückung aktivieren" #~ msgid "Smart _home/end" #~ msgstr "Intelligentes Pos1/Ende" #~ msgid "Enable _automatic saving of documents" #~ msgstr "Dokumente _automatisch speichern" #~ msgid "Autosave interval in _minutes:" #~ msgstr "Abstand in Minuten zwischen automatischem Speichern:" #~ msgid "" #~ "With this option enabled, Home/End keys move to first/last character " #~ "before going to the start/end of the line." #~ msgstr "" #~ "Ist diese Option aktiviert, bewegen die Pos1-/Ende-Taste den Cursor zum " #~ "ersten/letzten Zeichen, bevor sie bis an den Zeilenanfang/das Zeilenende " #~ "gehen." #~ msgid "Text Wrapping" #~ msgstr "Textumbruch" #~ msgid "Line Numbers" #~ msgstr "Zeilennummern" #~ msgid "Current Line" #~ msgstr "Aktuelle Zeile" #~ msgid "Right Margin" #~ msgstr "Rechter Rand" #~ msgid "Bracket Matching" #~ msgstr "Klammernpaare" #~ msgid "Whitespace Display" #~ msgstr "Leerraum" #~ msgid "Enable text wrapping" #~ msgstr "Zeilenumbruch aktivieren" #~ msgid "Do not split words over two lines" #~ msgstr "Wörter nicht getrennt über zwei Zeilen schreiben" #~ msgid "Display line numbers" #~ msgstr "Zeilennummern anzeigen" #~ msgid "Highlight current line" #~ msgstr "Aktuelle Zeile hervorheben" #~ msgid "Display right margin" #~ msgstr "Rechter Rand anzeigen" #~ msgid "Right margin at column:" #~ msgstr "Rechter Rand in Spalte:" #~ msgid "Highlight matching bracket" #~ msgstr "Klammernpaare hervorheben" #~ msgid "Toolbar" #~ msgstr "Werkzeugleiste" #~ msgid "Font" #~ msgstr "Schrift" #~ msgid "Color Scheme" #~ msgstr "Farbschema" #~ msgid "Trusted CAs" #~ msgstr "Vertrauenswürdige Zertifizierungsstellen" #~ msgid "Secure Connection" #~ msgstr "Sichere Verbindung" #, fuzzy #~ msgid "Authentication" #~ msgstr "Zeileneinrückung" #~ msgid "Select a file containing trusted CAs" #~ msgstr "" #~ "Wählen Sie eine Datei, die vertrauenswürdige Zertifizierungsstellen " #~ "enthält" #, fuzzy #~ msgid "None" #~ msgstr "_Keine" #, fuzzy #~ msgid "Create New..." #~ msgstr "Dokument erstellen…" #~ msgid "Preferences" #~ msgstr "Einstellungen" #~ msgid "User" #~ msgstr "Benutzer" #~ msgid "Editor" #~ msgstr "Textbearbeitung" #~ msgid "View" #~ msgstr "Ansicht" #~ msgid "Appearance" #~ msgstr "Erscheinungsbild" #~ msgid "Security" #~ msgstr "Sicherheit" #~ msgid "Gobby options" #~ msgstr "Gobby-Optionen" #~ msgid "Options related to Gobby" #~ msgstr "Optionen bezüglich Gobby" #~ msgid "Connect to given host on startup, can be given multiple times" #~ msgstr "" #~ "Beim Programmstart zum angegebenen Server verbinden, Mehrfachnennung " #~ "möglich" #~ msgid "HOSTNAME" #~ msgstr "SERVER" #~ msgid "You are still connected to a session" #~ msgstr "Sie sind noch in einer Sitzung" #~ msgid "Do you want to close Gobby nevertheless?" #~ msgstr "Wollen Sie Gobby dennoch schließen?" #~ msgid "" #~ "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.\n" #~ "\n" #~ "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.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "Dieses Programm ist freie Software. Sie können es unter den Bedingungen " #~ "der GNU General Public License, wie von der Free Software Foundation " #~ "veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version " #~ "2 der Lizenz oder (nach Ihrer Option) jeder späteren Version.\n" #~ "\n" #~ "Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es " #~ "Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die " #~ "implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN " #~ "BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.\n" #~ "\n" #~ "Sie sollten ein Exemplar der GNU General Public License zusammen mit " #~ "diesem Programm erhalten haben. Falls nicht, schreiben Sie an die Free " #~ "Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, " #~ "USA." #~ msgid "User Join in progress..." #~ msgstr "Benutzerbeitritt wird bearbeitet…" #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Auflösung von »%1« fehlgeschlagen" #~ msgid "Resolving \"%1\"..." #~ msgstr "Löse »%1« auf…" #~ msgid "Paths" #~ msgstr "Pfade" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "" #~ "Verzeichnis zur permanenten Aufbewahrung veröffentlichter Dokuemente" #~ msgid "Subscription already in progress" #~ msgstr "Anmeldung läuft bereits" gobby-0.6.0/po/ChangeLog0000664000175000017500000000451114003367605011737 000000000000002016-10-28 Pietro Brenna * it_IT.po: Add italian translation. * LINGUAS: Add it_IT. 2011-12-01 Wei-Lun Chao * zh_TW.po: Add traditional Chinese translation. * LINGUAS: Add zh_TW. 2010-11-18 Takahiro Sunaga * ja.po: Add Japanese translation. * LINGUAS: Add ja. 2010-11-16 Claude Paroz * fr.po: Add French translation. * LINGUAS: Add fr. 2010-06-20 Armin Burgmeier * en_GB.po: * de.po: Brought up to date. 2010-06-20 Γιάννης Κασκαμανίδης * LINGUAS: Added el_GR. * el_GR.po: Added greek translation. 2010-02-26 Armin Burgmeier * de.po: Choose v as mnemonic for "Direktverbindung" as d is already in use by "_Datei" in the menu bar. 2010-02-14 Benjamin Herr * en_GB.po: * de.po: Brought up to date 2010-02-14 Armin Burgmeier , Benjamin Herr , Michael Frey * de.po: Added german translation. * LINGUAS: Added de. 2009-12-19 Armin Burgmeier * gobby05.pot: Added .pot file, to allow synchronization with launchpad. * Makefile.in.in: Include gobby05.pot in distribution tarball. 2009-12-19 Armin Burgmeier * en_GB.po: Update. 2009-12-16 Armin Burgmeier * POTFILES.in: Updated. 2009-12-03 Gabríel A. Pétursson * LINGUAS: * en_GB.po: Added British English translation. 2009-11-15 Armin Burgmeier * POTFILES.in: Updated. * LINGUAS: Removed all languages. * *.po: Removed as these were just remains from Gobby 0.4.x which contained only very few strings that are still valid, and a lot of invalid fuzzy matches. 2009-08-29 Armin Burgmeier * POTFILES.in: Updated. 2009-04-24 Armin Burgmeier * POTFILES.in: Updated. 2008-11-23 Armin Burgmeier * POTFILES.in: Added contrib/gobby-0.5.desktop.in. * gobby05.pot: Regenerated. * *.po: Updated for the new strings. 2008-10-16 Armin Burgmeier * POTFILES.in: * gobby.pot: Updated for 0.4.90 release. 2008-09-19 Armin Burgmeier * POTFILES.in: Regenerated. * gobby.pot: * *.po: Updated to the strings of 0.4.90. gobby-0.6.0/po/el_GR.po0000664000175000017500000011670714005502331011515 00000000000000# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # # Yannis Kaskamanidis , 2010. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-31 11:22+0100\n" "PO-Revision-Date: 2010-06-20 17:27+0300\n" "Last-Translator: Yannis Kaskamanidis \n" "Language-Team: Ελληνικά \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.0\n" #: ../code/application.cpp:132 msgid "Display version information and exit" msgstr "Εμφάνιση πληροφοριών έκδοσης και έξοδος" #: ../code/application.cpp:134 #, fuzzy msgid "Start a new gobby instance also if there is one already running" msgstr "" "Έναρξη ενός νέου στιγμιότυπου Gobby όταν υπάρχει ένα που ήδη εκτελείται." #: ../code/commands/auth-commands.cpp:193 #: ../code/commands/browser-context-commands.cpp:354 #: ../code/core/filechooser.cpp:34 ../code/core/filechooser.cpp:39 #: ../code/core/huebutton.cpp:102 #: ../code/dialogs/document-location-dialog.cpp:35 #, fuzzy msgid "_Cancel" msgstr "Άκυρο" #: ../code/commands/auth-commands.cpp:195 ../code/core/huebutton.cpp:103 msgid "_Ok" msgstr "" #: ../code/commands/auth-commands.cpp:217 #, fuzzy msgid "Password required" msgstr "Απαιτείται κωδικός πρόσβασης" #: ../code/commands/auth-commands.cpp:250 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:289 msgid "Subscribing to %1..." msgstr "Εγγραφή στο %1..." #: ../code/commands/browser-commands.cpp:302 msgid "Subscribing to chat on %1..." msgstr "Εγγραφή στη συνομιλία %1..." #: ../code/commands/browser-commands.cpp:625 msgid "Subscription failed" msgstr "Η εγγραφή απέτυχε" #: ../code/commands/browser-context-commands.cpp:85 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:287 #: ../code/commands/browser-context-commands.cpp:322 #: ../code/commands/browser-context-commands.cpp:409 #: ../code/commands/file-tasks/task-open-location.cpp:31 #: ../code/core/statusbar.cpp:81 ../code/dialogs/find-dialog.cpp:58 #: ../code/dialogs/goto-dialog.cpp:30 ../code/dialogs/initial-dialog.cpp:206 #: ../code/dialogs/preferences-dialog.cpp:815 msgid "_Close" msgstr "" #: ../code/commands/browser-context-commands.cpp:349 msgid "Choose a name for the directory" msgstr "Επιλογή ονόματος για τον φάκελο" #: ../code/commands/browser-context-commands.cpp:350 msgid "Choose a name for the document" msgstr "Επιλογή ονόματος για το έγγραφο" #: ../code/commands/browser-context-commands.cpp:351 msgid "_Directory Name:" msgstr "Όνομα φακέλου:" #: ../code/commands/browser-context-commands.cpp:352 msgid "_Document Name:" msgstr "Όνομα εγγράφου:" #: ../code/commands/browser-context-commands.cpp:355 msgid "C_reate" msgstr "Δημιουργία" #: ../code/commands/browser-context-commands.cpp:357 msgid "New Directory" msgstr "Νέος φάκελος" #: ../code/commands/browser-context-commands.cpp:358 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "Νέο έγγραφο" #: ../code/commands/browser-context-commands.cpp:380 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Επιλογή ενός αρχείου κειμένου για άνοιγμα" #: ../code/commands/browser-context-commands.cpp:519 #: ../code/commands/browser-context-commands.cpp:530 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:523 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:534 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:547 #, fuzzy msgid "Failed to create account" msgstr "Αποτυχία δημιουργίας εγγράφου \"%1\"" #: ../code/commands/browser-context-commands.cpp:550 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-commands.cpp:252 #, fuzzy msgid "Cancel" msgstr "Άκυρο" #: ../code/commands/file-commands.cpp:254 msgid "Connect" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Επιλογή τοποθεσίας για εξαγωγή του εγγράφου \"%1\" στο" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "Ερώτημα \"%1\"..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:469 #: ../code/operations/operation-open-multiple.cpp:176 msgid "Failed to open document \"%1\"" msgstr "Αποτυχία ανοίγματος του εγγράφου \"%1\"" #: ../code/commands/file-tasks/task-open-location.cpp:32 #: ../code/core/filechooser.cpp:40 #: ../code/dialogs/document-location-dialog.cpp:36 #, fuzzy msgid "_Open" msgstr "Άνοιγμα..." #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Επιλογή τοποθεσίας για αποθήκευση του εγγράφου \"%1\" στο" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:49 msgid "There was an error displaying help." msgstr "Υπήρξε κάποιο σφάλμα κατά την προβολή της βοήθειας." #: ../code/commands/help-commands.cpp:74 msgid "Contributors:" msgstr "Άτομα που συνεισέφεραν:" #: ../code/commands/help-commands.cpp:80 msgid "British English:" msgstr "Αγγλικά (Βρετανίας):" #: ../code/commands/help-commands.cpp:82 msgid "German:" msgstr "Γερμανικά:" #: ../code/commands/help-commands.cpp:99 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "Η σύνδεση με τον εκδότη αυτού του εγγράφου χάθηκε. Περισσότερες αλλαγές στο " "έγγραφο δεν είναι πλέον δυνατόν να συγχρονιστούν με άλλους χρήστες. Η " "επεξεργασία του εγγράφου δεν είναι πια δυνατή.\n" "\n" "Παρακαλώ σημειώστε ότι είναι δυνατόν να μην έχουν φθάσει στον εκδότη όλες οι " "τελευταίες αλλαγές πριν τη διακοπή της σύνδεσης." #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Συγχρονισμός σε εξέλιξη... %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "Αυτό το έγγραφο δεν μπορεί να χρησιμοποιηθεί." #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "Εάν υποψιάζεστε τι μπορεί να προκάλεσε το πρόβλημα, προσπαθήστε να το λύσετε " "και ξαναπροσπαθήστε (αφού έχετε κλείσει το έγγραφο). Διαφορετικά, πιθανόν να " "πρόκειται για κάποιο σφάλμα του λογισμικού. Σε αυτή την περίπτωση, στείλτε " "μια αναφορά σφάλματος στο http://gobby.0x539.de/trac/newticket και προσθέστε " "όσες περισσότερες πληροφορίες μπορείτε, καθώς και το τι κάνατε όταν συνέβη " "το πρόβλημα. Επίσης, δώστε πληροφορίες σχετικά με το πώς μπορεί να γίνει " "αναπαραγωγή του προβλήματος (αν κάτι τέτοιο είναι εφικτό), ώστε να " "διορθώσουμε το πρόβλημα σε μια επόμενη έκδοση. Ευχαριστούμε." #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Ο συγχρονισμός απέτυχε: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "Μπορείτε ακόμη να παρακολουθείτε άλλους να επεξεργάζονται το έγγραφο, αλλά " "δεν μπορείτε εσείς να συμμετέχετε στην επεξεργασία." #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "Η σύνδεση του χρήστη απέτυχε: %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:109 msgid "_Direct Connection" msgstr "Άμεση σύνδεση" #: ../code/core/browser.cpp:110 msgid "Host Name:" msgstr "Όνομα κόμβου:" #: ../code/core/certificatemanager.cpp:86 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:279 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:341 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:417 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/filechooser.cpp:35 #, fuzzy msgid "_Save" msgstr "Αποθήκευση όλων" #: ../code/core/foldermanager.cpp:345 msgid "The document has been removed from the server." msgstr "" #: ../code/core/selfhoster.cpp:105 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:137 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "Αποτυχία διαγραφής διακομιστή %1: %2" #: ../code/core/selfhoster.cpp:139 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:265 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:287 #, fuzzy msgid "Failed to share documents" msgstr "Αποτυχία αποθήκευσης εγγράφου \"%1\"" #: ../code/core/sessionuserview.cpp:38 msgid "User List" msgstr "Κατάλογος χρηστών" #: ../code/core/statusbar.cpp:434 msgid "Ln %1, Col %2\t%3" msgstr "Ln %1, Col %2\t%3" #: ../code/core/statusbar.cpp:437 msgid "OVR" msgstr "OVR" #: ../code/core/statusbar.cpp:437 msgid "INS" msgstr "INS" #: ../code/core/textsessionview.cpp:639 msgid "Text written by %1" msgstr "Κείμενο που συντάχθηκε από τον/την %1" #: ../code/core/textsessionview.cpp:645 msgid "Unowned text" msgstr "Κείμενο που δεν ανήκει σε κανέναν" #: ../code/core/userlist.cpp:115 msgid "Users" msgstr "Χρήστες" #: ../code/dialogs/connection-info-dialog.cpp:48 #, fuzzy msgid "Connections" msgstr "Ασφαλής σύνδεση" #: ../code/dialogs/connection-info-dialog.cpp:313 msgid "Nobody is connected to this computer" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:153 msgid "Select document's target location" msgstr "Επιλογή θέσης προορισμού του εγγράφου" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Choose a directory to create the document into:" msgstr "Επιλογή φακέλου για δημιουργία εγγράφου μέσα σ' αυτόν:" #: ../code/dialogs/document-location-dialog.cpp:162 msgid "Select documents' target location" msgstr "Επιλογή θέσης προορισμού του εγγράφου" #: ../code/dialogs/document-location-dialog.cpp:164 msgid "Choose a directory to create the documents into:" msgstr "Επιλογή φακέλου για δημιουργία εγγράφου μέσα σ' αυτόν:" #: ../code/dialogs/find-dialog.cpp:59 msgid "Replace _All" msgstr "Αντικατάσταση όλων" #: ../code/dialogs/find-dialog.cpp:61 msgid "_Replace" msgstr "Αντικατάσταση" #: ../code/dialogs/find-dialog.cpp:62 #, fuzzy msgid "_Find" msgstr "Εύρεση" #: ../code/dialogs/find-dialog.cpp:119 msgid "Find" msgstr "Εύρεση" #: ../code/dialogs/find-dialog.cpp:119 msgid "Replace" msgstr "Αντικατάσταση" #: ../code/dialogs/find-dialog.cpp:138 ../code/dialogs/find-dialog.cpp:154 msgid "Phrase \"%1\" has not been found" msgstr "Η φράση \"%1\" δεν βρέθηκε" #: ../code/dialogs/find-dialog.cpp:312 msgid "No occurrence has been replaced" msgstr "Τίποτε δεν αντικαταστάθηκε" #: ../code/dialogs/find-dialog.cpp:318 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 αντικαταστάθηκε" msgstr[1] "%1 αντικαταστάθηκαν" #: ../code/dialogs/goto-dialog.cpp:31 msgid "Go To _Line" msgstr "Μετάβαση στη γραμμή" #: ../code/dialogs/initial-dialog.cpp:53 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:76 #, fuzzy msgid "Failed to generate private key" msgstr "Αποτυχία διαγραφής διακομιστή %1: %2" #: ../code/dialogs/initial-dialog.cpp:79 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:118 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:121 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/password-dialog.cpp:34 msgid "Connection to host \"%1\" requires a password." msgstr "Η σύνδεση με τον διακομιστή \"%1\" απαιτεί κωδικό πρόσβασης." #: ../code/dialogs/password-dialog.cpp:40 msgid "Invalid password for host \"%1\". Please try again." msgstr "" "Μη έγκυρος κωδικός πρόσβασης για τον διακομιστή \"%1\". Παρακαλώ προσπαθήστε " "πάλι." #: ../code/dialogs/preferences-dialog.cpp:409 msgid "Display no whitespace" msgstr "Απόκρυψη λευκού διαστήματος" #: ../code/dialogs/preferences-dialog.cpp:412 msgid "Display spaces" msgstr "Εμφάνιση διαστημάτων" #: ../code/dialogs/preferences-dialog.cpp:416 msgid "Display tabs" msgstr "Εμφάνιση στηλοθετών" #: ../code/dialogs/preferences-dialog.cpp:420 msgid "Display tabs and spaces" msgstr "Εμφάνιση στηλοθετών και διαστημάτων" #: ../code/dialogs/preferences-dialog.cpp:452 msgid "Show text only" msgstr "Εμφάνιση μόνο του κειμένου" #: ../code/dialogs/preferences-dialog.cpp:454 msgid "Show icons only" msgstr "Εμφάνιση μόνο των εικονιδίων" #: ../code/dialogs/preferences-dialog.cpp:456 msgid "Show both icons and text" msgstr "Εμφάνιση εικονιδίων και κειμένου" #: ../code/dialogs/preferences-dialog.cpp:458 msgid "Show text besides icons" msgstr "Εμφάνιση κειμένου δίπλα στα εικονίδια" #: ../code/dialogs/preferences-dialog.cpp:478 msgid "Scheme Description" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:575 msgid "Use TLS if possible" msgstr "Χρήση TLS εάν είναι δυνατό" #: ../code/dialogs/preferences-dialog.cpp:578 msgid "Always use TLS" msgstr "Παντοτινή χρήση TLS" #: ../code/dialogs/preferences-dialog.cpp:615 #, fuzzy msgid "Error reading file: %1" msgstr "Η σύνδεση του χρήστη απέτυχε: %1" #: ../code/dialogs/preferences-dialog.cpp:655 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:685 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:703 msgid "Select a location for the generated certificate" msgstr "" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Αφαίρεση διακομιστή %1..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Αποτυχία διαγραφής διακομιστή %1: %2" #: ../code/operations/operation-export-html.cpp:173 #, c-format msgid "written by: %s" msgstr "συντάχθηκε από τον/την: %s" #: ../code/operations/operation-export-html.cpp:246 msgid "" msgstr "<αδυναμία εκτύπωσης της ημερομηνίας>" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:259 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Έγγραφο που δημιουργήθηκε από τους %1$s:%2$s at %3$s by %4$s" #: ../code/operations/operation-export-html.cpp:409 msgid "Participants" msgstr "Συμμετέχοντες" #: ../code/operations/operation-export-html.cpp:483 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Εξαγωγή εγγράφου \"%1\" σε \"%2\" σε HTML..." #: ../code/operations/operation-export-html.cpp:544 msgid "Failed to export document \"%1\" to HTML" msgstr "Αποτυχία εξαγωγής του εγγράφου \"%1\" σε HTML" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Δημιουργία φακέλου \"%1\"..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Δημιουργία εγγράφου \"%1\"..." #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Αποτυχία δημιουργίας φακέλου \"%1\"" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Αποτυχία δημιουργίας εγγράφου \"%1\"" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-1" #: ../code/operations/operation-open.cpp:113 msgid "Opening document \"%1\"..." msgstr "Άνοιγμα εγγράφου \"%1\"..." #: ../code/operations/operation-open.cpp:129 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" "Ο φάκελος στον οποίο υποτίθεται ότι θα αποθηκευόταν το νέο έγγραφο έχει " "αφαιρεθεί." #: ../code/operations/operation-open.cpp:318 msgid "The file contains data not in the specified encoding" msgstr "" "Το αρχείο περιέχει δεδομένα που δεν διαθέτουν την καθορισμένη κωδικοποίηση." #: ../code/operations/operation-open.cpp:329 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "Είτε το αρχείο περιέχει δεδομένα σε άγνωστη κωδικοποίηση, είτε περιέχει " "δυαδικά δεδομένα." #: ../code/operations/operation-open-multiple.cpp:88 msgid "Parent folder was removed" msgstr "Ο γονικός φάκελος αφαιρέθηκε" #: ../code/operations/operation-open-multiple.cpp:189 msgid "Failed to open multiple documents" msgstr "Αποτυχία ανοίγματος πολλαπλών εγγράφων" #: ../code/operations/operation-save.cpp:91 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Αποθήκευση εγγράφου \"%1\" στο \"%2\"..." #: ../code/operations/operation-save.cpp:220 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "Το έγγραφο περιέχει έναν ή περισσότερους χαρακτήρες που δεν μπορούν να " "κωδικοποιηθούν στην καθορισμένη κωδικοποίηση χαρακτήρων." #: ../code/operations/operation-save.cpp:281 msgid "Failed to save document \"%1\"" msgstr "Αποτυχία αποθήκευσης εγγράφου \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Αποτυχία ανοίγματος του εγγράφου \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "Εγγραφή στο %1..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Αποτυχία δημιουργίας φακέλου \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "Η σύνδεση στο \"%1\" απέτυχε" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "Αδυναμία επίλυσης \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "Η συσκευή \"%1\" δεν υπάρχει" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Αδυναμία δημιουργίας φακέλου \"%1\": %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Η συσκευή \"%1\" δεν υπάρχει" #: ../code/window.cpp:42 msgid "Chat" msgstr "Συνομιλία" #: ../code/window.cpp:83 msgid "This Computer" msgstr "" #: ../code/window.cpp:108 msgid "Document Browser" msgstr "Περιηγητής εγγράφου" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Συνεργατικός επεξεργαστής κειμένων" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Συνεργατικός επεξεργαστής κειμένων Gobby (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Συνεργατική επεξεργασία αρχείων κειμένου" #, fuzzy #~ msgid "_Disconnect from Server" #~ msgstr "Σύνδεση στον διακομιστή" #, fuzzy #~ msgid "Create _Account..." #~ msgstr "Δημιουργία εγγράφου..." #~ msgid "Create Do_cument..." #~ msgstr "Δημιουργία εγγράφου..." #, fuzzy #~ msgid "Create Di_rectory..." #~ msgstr "Δημιουργία φακέλου..." #~ msgid "_Open Document..." #~ msgstr "Άνοιγμα εγγράφου..." #~ msgid "D_elete" #~ msgstr "Διαγραφή" #~ msgid "_None" #~ msgstr "Κανένα" #~ msgid "_File" #~ msgstr "Αρχείο" #~ msgid "Open _Location..." #~ msgstr "Άνοιγμα τοποθεσίας..." #~ msgid "Save _As..." #~ msgstr "Αποθήκευση ως..." #~ msgid "Save all open files locally" #~ msgstr "Αποθήκευση όλων των ανοιχτών αρχείων τοπικά" #~ msgid "Export As _HTML..." #~ msgstr "Εξαγωγή ως HTML..." #~ msgid "Connect _to Server..." #~ msgstr "Σύνδεση στον διακομιστή..." #~ msgid "_Edit" #~ msgstr "Επεξεργασία" #~ msgid "_Find..." #~ msgstr "Εύρεση..." #~ msgid "Find Ne_xt" #~ msgstr "Εύρεση επόμενου" #~ msgid "Find next match of phrase searched for" #~ msgstr "Εύρεση επόμενης φράσης που ταιριάζει με αυτήν που αναζητάτε" #~ msgid "Find Pre_vious" #~ msgstr "Εύρεση προηγούμενου" #~ msgid "Find previous match of phrase searched for" #~ msgstr "Εύρεση προηγούμενης φράσης που ταιριάζει με αυτήν που αναζητάτε" #~ msgid "Find and Rep_lace..." #~ msgstr "Εύρεση και αντικατάσταση..." #~ msgid "Go to _Line..." #~ msgstr "Μετάβαση στη γραμμή..." #~ msgid "Pr_eferences..." #~ msgstr "Προτιμήσεις..." #~ msgid "_View" #~ msgstr "Προβολή" #~ msgid "Reset User Colors" #~ msgstr "Επαναφορά χρωμάτων χρήστη" #~ msgid "Hide user colors in current document" #~ msgstr "Απόκρυψη χρωμάτων χρήστη στο τρέχον έγγραφο" #~ msgid "View Toolbar" #~ msgstr "Προβολή γραμμής εργαλείων" #~ msgid "Whether to show the toolbar" #~ msgstr "Αν θα εμφανίζεται η γραμμή εργαλείων" #~ msgid "View Statusbar" #~ msgstr "Προβολή γραμμής κατάστασης" #~ msgid "Whether to show the statusbar" #~ msgstr "Αν θα εμφανίζεται η γραμμή κατάστασης" #~ msgid "View Document Browser" #~ msgstr "Προβολή περιηγητή εγγράφου" #~ msgid "Whether to show the document browser" #~ msgstr "Αν θα εμφανίζεται ο περιηγητής εγγράφου" #~ msgid "View Chat" #~ msgstr "Προβολή συνομιλίας" #~ msgid "Whether to show the chat pane" #~ msgstr "Εάν θα εμφανίζεται το παράθυρο συνομιλίας" #~ msgid "View Document User List" #~ msgstr "Προβολή καταλόγου χρηστών του εγγράφου" #~ msgid "Whether to show the user list for documents" #~ msgstr "Εάν θα εμφανίζεται ο κατάλογος χρηστών για τα έγγραφα" #~ msgid "View Chat User List" #~ msgstr "Προβολή καταλόγου χρηστών συνομιλίας" #~ msgid "Whether to show the user list for the chat" #~ msgstr "Εάν θα εμφανίζεται ο κατάλογος χρηστών της συνομιλίας" #~ msgid "_Highlight Mode" #~ msgstr "Λειτουργία επισήμανσης" #~ msgid "_Help" #~ msgstr "Βοήθεια" #~ msgid "_Contents" #~ msgstr "Περιεχόμενα" #~ msgid "Opens the Gobby manual" #~ msgstr "Ανοίγει το εγχειρίδιο του Gobby" #~ msgid "_About..." #~ msgstr "Σχετικά..." #~ msgid "Shows Gobby's copyright and credits" #~ msgstr "Εμφανίζει τα πνευματικά δικαιώματα και τα εύσημα για το Gobby" #~ msgid "User list" #~ msgstr "Κατάλογος χρηστών" #~ msgid "Document list" #~ msgstr "Κατάλογος εγγράφων" #~ msgid "User Color Indicator" #~ msgstr "Ένδειξη χρώματος χρήστη" #~ msgid "Connect to Server" #~ msgstr "Σύνδεση στον διακομιστή" #~ msgid "Please enter a host name with which to establish a connection." #~ msgstr "" #~ "Παρακαλώ εισάγετε το όνομα του διακομιστή με τον οποίο θα γίνει η σύνδεση." #~ msgid "_Remote Endpoint:" #~ msgstr "Απομακρυσμένο τελικό σημείο:" #~ msgid "Document Name:" #~ msgstr "Όνομα εγγράφου:" #~ msgid "_Search for:" #~ msgstr "Εύρεση για:" #~ msgid "Replace _with:" #~ msgstr "Αντικατάσταση με:" #~ msgid "_Match case" #~ msgstr "Ταίριασμα" #~ msgid "Match _entire word only" #~ msgstr "Ταίριασμα μόνον ολόκληρης λέξης" #~ msgid "Search _backwards" #~ msgstr "Αναζήτηση προς τα πίσω" #~ msgid "Wra_p around" #~ msgstr "Αναδίπλωση ολόγυρα" #~ msgid "Go to line" #~ msgstr "Μετάβαση στη γραμμή" #~ msgid "Line _number:" #~ msgstr "Αριθμός γραμμής:" #~ msgid "Choose a user color" #~ msgstr "Επιλογή χρώματος χρήστη" #~ msgid "Welcome to Gobby" #~ msgstr "Καλωσήρθατε στο Gobby" #~ msgid "" #~ "Before we start, a few options need to be configured. You can later " #~ "change them by choosing Edit ▸ Preferences from the menu." #~ msgstr "" #~ "Πριν ξεκινήσουμε, καλό είναι να ρυθμίσουμε ορισμένες επιλογές. Αργότερα " #~ "μπορούμε να τις αλλάξουμε επιλέγοντας το μενού Επεξεργασία ▸ Προτιμήσεις." #~ msgid "User Name" #~ msgstr "Όνομα χρήστη" #~ msgid "Your name as shown to other users." #~ msgstr "Το όνομά σας όπως το βλέπουν οι άλλοι χρήστες" #~ msgid "User Color" #~ msgstr "Χρώμα χρήστη" #~ msgid "The color with which text you have written is branded." #~ msgstr "Το χρώμα με το οποίο έχετε γράψει το κείμενό σας είναι επώνυμο." #, fuzzy #~ msgid "Password:" #~ msgstr "Κωδικός πρόσβασης διακομιστή:" #~ msgid "Open Location" #~ msgstr "Άνοιγμα τοποθεσίας" #~ msgid "Enter the _location (URI) of the file you would like to open:" #~ msgstr "Εισαγωγή της τοποθεσίας (URI) του αρχείου που θέλετε να ανοίξετε:" #~ msgid "Password Required" #~ msgstr "Απαιτείται κωδικός πρόσβασης" #~ msgid "Server _Password:" #~ msgstr "Κωδικός πρόσβασης διακομιστή:" #~ msgid "Settings" #~ msgstr "Ρυθμίσεις" #, fuzzy #~ msgid "Remote Users" #~ msgstr "Επαναφορά χρωμάτων χρήστη" #, fuzzy #~ msgid "Local Documents" #~ msgstr "Νέο έγγραφο" #~ msgid "User name:" #~ msgstr "Όνομα χρήστη:" #~ msgid "User color:" #~ msgstr "Χρώμα χρήστη:" #~ msgid "Choose a new user color" #~ msgstr "Επιλογή νέου χρώματος χρήστη" #, fuzzy #~ msgid "Highlight current line of remote users" #~ msgstr "Επισήμανση τρέχουσας γραμμής" #, fuzzy #~ msgid "Local documents directory:" #~ msgstr "Φάκελος κόμβου:" #~ msgid "Tab Stops" #~ msgstr "Στηλοθέτες" #~ msgid "Indentation" #~ msgstr "Εσοχή" #~ msgid "Home/End Behavior" #~ msgstr "Συμπεριφορά πλήκτρων Home/End" #~ msgid "File Saving" #~ msgstr "Αποθήκευση αρχείου" #~ msgid "_Tab width:" #~ msgstr "Πλάτος στηλοθέτη:" #~ msgid "Insert _spaces instead of tabs" #~ msgstr "Εισαγωγή διαστημάτων αντί και στηλοθέτες" #~ msgid "Enable automatic _indentation" #~ msgstr "Ενεργοποίηση αυτόματης εισαγωγής εσοχών" #~ msgid "Smart _home/end" #~ msgstr "Έξυπνο Home/End" #~ msgid "Enable _automatic saving of documents" #~ msgstr "Ενεργοποίηση αυτόματης αποθήκευσης εγγράφων" #~ msgid "Autosave interval in _minutes:" #~ msgstr "Χρονικό διάστημα αυτόματης αποθήκευσης σε λεπτά:" #~ msgid "" #~ "With this option enabled, Home/End keys move to first/last character " #~ "before going to the start/end of the line." #~ msgstr "" #~ "Με αυτή την επιλογή ενεργοποιημένη, τα πλήκτρα Home/End μας μετακινούν " #~ "στον πρώτο/τελευταίο χαρακτήρα πριν μεταβούμε στην αρχή/τέλος της γραμμής." #~ msgid "Text Wrapping" #~ msgstr "Αναδίπλωση κειμένου" #~ msgid "Line Numbers" #~ msgstr "Αριθμοί γραμμών" #~ msgid "Current Line" #~ msgstr "Τρέχουσα γραμμή" #~ msgid "Right Margin" #~ msgstr "Δεξί περιθώριο" #~ msgid "Bracket Matching" #~ msgstr "Αγκύλες ταιριάσματος" #~ msgid "Whitespace Display" #~ msgstr "Εμφάνιση λευκού διαστήματος" #~ msgid "Enable text wrapping" #~ msgstr "Ενεργοποίηση αναδίπλωσης κειμένου" #~ msgid "Do not split words over two lines" #~ msgstr "Να μη διαχωρίζονται οι λέξεις σε περισσότερες από δυο γραμμές" #~ msgid "Display line numbers" #~ msgstr "Εμφάνιση αριθμών στις γραμμές" #~ msgid "Highlight current line" #~ msgstr "Επισήμανση τρέχουσας γραμμής" #~ msgid "Display right margin" #~ msgstr "Εμφάνιση δεξιού περιθωρίου" #~ msgid "Right margin at column:" #~ msgstr "Δεξί περιθώριο σε στήλη:" #~ msgid "Highlight matching bracket" #~ msgstr "Επισήμανση αγκύλης ταιριάσματος" #~ msgid "Toolbar" #~ msgstr "Γραμμή εργαλείων" #~ msgid "Font" #~ msgstr "Γραμματοσειρά" #~ msgid "Color Scheme" #~ msgstr "Απεικόνιση χρώματος" #~ msgid "Trusted CAs" #~ msgstr "Έμπιστα CAs" #~ msgid "Secure Connection" #~ msgstr "Ασφαλής σύνδεση" #, fuzzy #~ msgid "Authentication" #~ msgstr "Εσοχή" #~ msgid "Select a file containing trusted CAs" #~ msgstr "Επιλογή αρχείου που περιέχει έμπιστα CAs" #, fuzzy #~ msgid "None" #~ msgstr "Κανένα" #, fuzzy #~ msgid "Create New..." #~ msgstr "Δημιουργία εγγράφου..." #~ msgid "Preferences" #~ msgstr "Προτιμήσεις" #~ msgid "User" #~ msgstr "Χρήστης" #~ msgid "Editor" #~ msgstr "Επεξεργαστής" #~ msgid "View" #~ msgstr "Προβολή" #~ msgid "Appearance" #~ msgstr "Εμφάνιση" #~ msgid "Security" #~ msgstr "Ασφάλεια" #~ msgid "Gobby options" #~ msgstr "Επιλογές του Gobby" #~ msgid "Options related to Gobby" #~ msgstr "Επιλογές σχετικές με το Gobby" #~ msgid "Connect to given host on startup, can be given multiple times" #~ msgstr "" #~ "Η σύνδεση με τον συγκεκριμένο διακομιστή κατά την έναρξη, μπορεί να δοθεί " #~ "πολλές φορές." #~ msgid "HOSTNAME" #~ msgstr "Όνομα διακομιστή" #~ msgid "You are still connected to a session" #~ msgstr "Είστε ακόμη συνδεδεμένοι σε μια συνεδρία" #~ msgid "Do you want to close Gobby nevertheless?" #~ msgstr "Θέλετε παρόλα αυτά να κλείσετε το Gobby;" #~ msgid "" #~ "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.\n" #~ "\n" #~ "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.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "Αυτή η εφαρμογή είναι Ελεύθερο Λογισμικό. Μπορείτε να την αναδιανείμετε ή " #~ "να την τροποποιήσετε υπό τους όρους της Γενικής Δημόσιας Άδειας GNU, όπως " #~ "έχει δημοσιευτεί από το Ίδρυμα Ελεύθερου Λογισμικού (FSF), είτε την " #~ "έκδοση 2, είτε (ανάλογα με τις προθέσεις σας) με κάθε επόμενη έκδοση.\n" #~ "\n" #~ "Αυτή η εφαρμογή διανέμεται με την ελπίδα ότι θα είναι χρήσιμη, αλλά ΧΩΡΙΣ " #~ "ΚΑΜΙΑ ΕΓΓΥΗΣΗ, χωρίς ακόμη υποδηλούμενη εγγύηση ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ ή " #~ "ΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΓΙΑ ΣΥΓΚΕΚΡΙΜΕΝΟΥΣ ΣΚΟΠΟΥΣ. Δείτε τη Γενική Δημόσια Άδεια " #~ "GNU για περισσότερες λεπτομέρειες.\n" #~ "\n" #~ "Θα πρέπει να έχετε λάβει ένα αντίγραφο της άδειας αυτής μαζί με την " #~ "εφαρμογή. Εάν όχι, στείλτε μια επιστολή στο Ίδρυμα Ελεύθερου Λογισμικού " #~ "(FSF), Inc., 675 Mass Ave, Cambridge, MA 02139, USA." #~ msgid "User Join in progress..." #~ msgstr "Σύνδεση του χρήστη σε εξέλιξη..." #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Αδυναμία επίλυσης \"%1\"" #~ msgid "Resolving \"%1\"..." #~ msgstr "Επίλυση \"%1\"..." #~ msgid "Paths" #~ msgstr "Διαδρομές" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "" #~ "Ο φάκελος στον οποίο οι τοπικά φιλοξενούμενες συνεδρίες έχουν μόνιμα " #~ "αποθηκευτεί." #~ msgid "Subscription already in progress" #~ msgstr "Εγγραφή ήδη σε εξέλιξη" gobby-0.6.0/po/ja.po0000664000175000017500000010233714005502331011111 00000000000000# Japanese translations for gobby package. # Copyright (C) 2010 THE gobby'S COPYRIGHT HOLDER # This file is distributed under the same license as the gobby package. # , 2010. # msgid "" msgstr "" "Project-Id-Version: gobby 0.4.94\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-31 11:22+0100\n" "PO-Revision-Date: 2010-11-19 01:09+0900\n" "Last-Translator: Takahiro Sunaga \n" "Language-Team: Japanese\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../code/application.cpp:132 msgid "Display version information and exit" msgstr "バージョン情報を表示して終了" #: ../code/application.cpp:134 #, fuzzy msgid "Start a new gobby instance also if there is one already running" msgstr "Gobbyが既にひとつ起動していても新しいインスタンスを起動する" #: ../code/commands/auth-commands.cpp:193 #: ../code/commands/browser-context-commands.cpp:354 #: ../code/core/filechooser.cpp:34 ../code/core/filechooser.cpp:39 #: ../code/core/huebutton.cpp:102 #: ../code/dialogs/document-location-dialog.cpp:35 #, fuzzy msgid "_Cancel" msgstr "キャンセル(_C)" #: ../code/commands/auth-commands.cpp:195 ../code/core/huebutton.cpp:103 msgid "_Ok" msgstr "" #: ../code/commands/auth-commands.cpp:217 #, fuzzy msgid "Password required" msgstr "パスワードが必要です" #: ../code/commands/auth-commands.cpp:250 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:289 msgid "Subscribing to %1..." msgstr "%1へ加入..." #: ../code/commands/browser-commands.cpp:302 msgid "Subscribing to chat on %1..." msgstr "チャット%1へ加入..." #: ../code/commands/browser-commands.cpp:625 msgid "Subscription failed" msgstr "加入に失敗" #: ../code/commands/browser-context-commands.cpp:85 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:287 #: ../code/commands/browser-context-commands.cpp:322 #: ../code/commands/browser-context-commands.cpp:409 #: ../code/commands/file-tasks/task-open-location.cpp:31 #: ../code/core/statusbar.cpp:81 ../code/dialogs/find-dialog.cpp:58 #: ../code/dialogs/goto-dialog.cpp:30 ../code/dialogs/initial-dialog.cpp:206 #: ../code/dialogs/preferences-dialog.cpp:815 msgid "_Close" msgstr "" #: ../code/commands/browser-context-commands.cpp:349 msgid "Choose a name for the directory" msgstr "ディレクトリ名の選択" #: ../code/commands/browser-context-commands.cpp:350 msgid "Choose a name for the document" msgstr "ドキュメント名の選択" #: ../code/commands/browser-context-commands.cpp:351 msgid "_Directory Name:" msgstr "ディレクトリ名(_D)" #: ../code/commands/browser-context-commands.cpp:352 msgid "_Document Name:" msgstr "ドキュメント名(_D)" #: ../code/commands/browser-context-commands.cpp:355 msgid "C_reate" msgstr "作成(_C)" #: ../code/commands/browser-context-commands.cpp:357 msgid "New Directory" msgstr "新規ディレクトリ" #: ../code/commands/browser-context-commands.cpp:358 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "新規ドキュメント" #: ../code/commands/browser-context-commands.cpp:380 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "開くテキストファイルの選択" #: ../code/commands/browser-context-commands.cpp:519 #: ../code/commands/browser-context-commands.cpp:530 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:523 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:534 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:547 #, fuzzy msgid "Failed to create account" msgstr "ドキュメント\"%1\"の作成に失敗しました" #: ../code/commands/browser-context-commands.cpp:550 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-commands.cpp:252 #, fuzzy msgid "Cancel" msgstr "キャンセル(_C)" #: ../code/commands/file-commands.cpp:254 msgid "Connect" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "\"%1\"をエクスポートする先の選択" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "\"%1\"の問い合わせ..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:469 #: ../code/operations/operation-open-multiple.cpp:176 msgid "Failed to open document \"%1\"" msgstr "\"%1\"を開くのに失敗しました" #: ../code/commands/file-tasks/task-open-location.cpp:32 #: ../code/core/filechooser.cpp:40 #: ../code/dialogs/document-location-dialog.cpp:36 #, fuzzy msgid "_Open" msgstr "開く(_O)" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "\"%1\"を保存する先の選択" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:49 msgid "There was an error displaying help." msgstr "ヘルプ表示時にエラーが発生しました。" #: ../code/commands/help-commands.cpp:74 msgid "Contributors:" msgstr "貢献者:" #: ../code/commands/help-commands.cpp:80 msgid "British English:" msgstr "British English:" #: ../code/commands/help-commands.cpp:82 msgid "German:" msgstr "German:" #: ../code/commands/help-commands.cpp:99 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "このドキュメントの発行者への接続が失われました。ドキュメントへの変更の同期が" "これ以上できないため、このドキュメントはこれ以上編集できません。\n" "\n" "発行者への接続が失われる前に伝達された変更でも適用されていない可能性がありま" "す。" #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "同期中です... %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "このドキュメントは使用できません。" #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "もしなにがこの問題を引き起こしているか分かる場合、それを解決してもう一度試し" "てください(このドキュメントを閉じた後)。そうでなければこのソフトウェアのバグ" "の可能性があります。この場合は私たちは今後のバージョンで問題を修復できるよう" "に、http://gobby.0x539.de/trac/newticket(英語)にバグレポートを記録し、この問" "題が起きたときどんな操作をしていたか、または問題の再現の方法(可能ならば)を含" "むできるだけたくさんの情報を提供してください。よろしくお願いします。" #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "同期に失敗しました: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "このドキュメントが他人によって編集されるのを見ることができますが、編集はでき" "ません。" #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "ユーザーの参加に失敗: %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:109 msgid "_Direct Connection" msgstr "直接接続(_D)" #: ../code/core/browser.cpp:110 msgid "Host Name:" msgstr "ホスト名:" #: ../code/core/certificatemanager.cpp:86 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:279 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:341 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:417 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/filechooser.cpp:35 #, fuzzy msgid "_Save" msgstr "すべて保存" #: ../code/core/foldermanager.cpp:345 msgid "The document has been removed from the server." msgstr "" #: ../code/core/selfhoster.cpp:105 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:137 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "ノード\"%1\"の削除に失敗" #: ../code/core/selfhoster.cpp:139 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:265 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:287 #, fuzzy msgid "Failed to share documents" msgstr "ドキュメント\"%1\"の保存に失敗しました" #: ../code/core/sessionuserview.cpp:38 msgid "User List" msgstr "ユーザーリスト" #: ../code/core/statusbar.cpp:434 msgid "Ln %1, Col %2\t%3" msgstr "%1行, %2列\t%3" #: ../code/core/statusbar.cpp:437 msgid "OVR" msgstr "上書" #: ../code/core/statusbar.cpp:437 msgid "INS" msgstr "挿入" #: ../code/core/textsessionview.cpp:639 msgid "Text written by %1" msgstr "%1によって書かれたテキスト" #: ../code/core/textsessionview.cpp:645 msgid "Unowned text" msgstr "所有していないテキスト" #: ../code/core/userlist.cpp:115 msgid "Users" msgstr "ユーザー" #: ../code/dialogs/connection-info-dialog.cpp:48 #, fuzzy msgid "Connections" msgstr "保護された接続" #: ../code/dialogs/connection-info-dialog.cpp:313 msgid "Nobody is connected to this computer" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:153 msgid "Select document's target location" msgstr "ドキュメントの対象場所を選択" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Choose a directory to create the document into:" msgstr "ドキュメントをいれるディレクトリ名:" #: ../code/dialogs/document-location-dialog.cpp:162 msgid "Select documents' target location" msgstr "ドキュメントの対象場所を選択" #: ../code/dialogs/document-location-dialog.cpp:164 msgid "Choose a directory to create the documents into:" msgstr "ドキュメントをいれるディレクトリ名:" #: ../code/dialogs/find-dialog.cpp:59 msgid "Replace _All" msgstr "すべて置換(_A)" #: ../code/dialogs/find-dialog.cpp:61 msgid "_Replace" msgstr "置換(_R)" #: ../code/dialogs/find-dialog.cpp:62 #, fuzzy msgid "_Find" msgstr "検索" #: ../code/dialogs/find-dialog.cpp:119 msgid "Find" msgstr "検索" #: ../code/dialogs/find-dialog.cpp:119 msgid "Replace" msgstr "置換" #: ../code/dialogs/find-dialog.cpp:138 ../code/dialogs/find-dialog.cpp:154 msgid "Phrase \"%1\" has not been found" msgstr "フレーズ\"%1\"は発見されません" #: ../code/dialogs/find-dialog.cpp:312 msgid "No occurrence has been replaced" msgstr "置換されませんでした" #: ../code/dialogs/find-dialog.cpp:318 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1件置換されました" #: ../code/dialogs/goto-dialog.cpp:31 msgid "Go To _Line" msgstr "指定行へ移動(_L)" #: ../code/dialogs/initial-dialog.cpp:53 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:76 #, fuzzy msgid "Failed to generate private key" msgstr "ノード\"%1\"の削除に失敗" #: ../code/dialogs/initial-dialog.cpp:79 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:118 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:121 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/password-dialog.cpp:34 msgid "Connection to host \"%1\" requires a password." msgstr "ホスト\"%1\"への接続にはパスワードが必要です。" #: ../code/dialogs/password-dialog.cpp:40 msgid "Invalid password for host \"%1\". Please try again." msgstr "ホスト\"%1\"のパスワードが違います。再試行してください。" #: ../code/dialogs/preferences-dialog.cpp:409 msgid "Display no whitespace" msgstr "空白文字を表示しない" #: ../code/dialogs/preferences-dialog.cpp:412 msgid "Display spaces" msgstr "スペースの表示" #: ../code/dialogs/preferences-dialog.cpp:416 msgid "Display tabs" msgstr "タブ文字の表示" #: ../code/dialogs/preferences-dialog.cpp:420 msgid "Display tabs and spaces" msgstr "タブ文字とスペースの表示" #: ../code/dialogs/preferences-dialog.cpp:452 msgid "Show text only" msgstr "テキストのみ表示" #: ../code/dialogs/preferences-dialog.cpp:454 msgid "Show icons only" msgstr "アイコンのみ表示" #: ../code/dialogs/preferences-dialog.cpp:456 msgid "Show both icons and text" msgstr "アイコンとテキストの表示" #: ../code/dialogs/preferences-dialog.cpp:458 msgid "Show text besides icons" msgstr "アイコンの隣にテキストを表示" #: ../code/dialogs/preferences-dialog.cpp:478 msgid "Scheme Description" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:575 msgid "Use TLS if possible" msgstr "可能であればTLSを使用する" #: ../code/dialogs/preferences-dialog.cpp:578 msgid "Always use TLS" msgstr "常にTLSを使用する" #: ../code/dialogs/preferences-dialog.cpp:615 #, fuzzy msgid "Error reading file: %1" msgstr "ユーザーの参加に失敗: %1" #: ../code/dialogs/preferences-dialog.cpp:655 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:685 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:703 msgid "Select a location for the generated certificate" msgstr "" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "ノード\"%1\"を削除..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "ノード\"%1\"の削除に失敗" #: ../code/operations/operation-export-html.cpp:173 #, c-format msgid "written by: %s" msgstr "%sによって書かれた" #: ../code/operations/operation-export-html.cpp:246 msgid "" msgstr "<日付を表示できません>" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:259 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "ドキュメントは%3$sの%1$s:%2$sから%4$sによって生成された" #: ../code/operations/operation-export-html.cpp:409 msgid "Participants" msgstr "参加者" #: ../code/operations/operation-export-html.cpp:483 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "\"%1\"を\"%2\"へHTMLでエクスポート..." #: ../code/operations/operation-export-html.cpp:544 msgid "Failed to export document \"%1\" to HTML" msgstr "\"%1\"のHTMLでのエクスポートに失敗しました" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "ディレクトリ\"%1\"の作成..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "ドキュメント\"%1\"の作成" #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "ディレクトリ\"%1\"の作成に失敗しました" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "ドキュメント\"%1\"の作成に失敗しました" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-1" #: ../code/operations/operation-open.cpp:113 msgid "Opening document \"%1\"..." msgstr "ドキュメント\"%1\"を開く..." #: ../code/operations/operation-open.cpp:129 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "新しいドキュメントを挿入しようとしたディレクトリは削除されています" #: ../code/operations/operation-open.cpp:318 msgid "The file contains data not in the specified encoding" msgstr "入力されたエンコーディングでないデータがファイルに含まれています" #: ../code/operations/operation-open.cpp:329 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "未知のエンコーディングか、バイナリデータがファイルに含まれています" #: ../code/operations/operation-open-multiple.cpp:88 msgid "Parent folder was removed" msgstr "親フォルダは削除されました" #: ../code/operations/operation-open-multiple.cpp:189 msgid "Failed to open multiple documents" msgstr "複数のファイルを開くのに失敗" #: ../code/operations/operation-save.cpp:91 msgid "Saving document \"%1\" to \"%2\"..." msgstr "\"%1\"を\"%2\"へ保存..." #: ../code/operations/operation-save.cpp:220 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "指定された文字エンコーディングでエンコードできない文字がドキュメントに含まれ" "ています" #: ../code/operations/operation-save.cpp:281 msgid "Failed to save document \"%1\"" msgstr "ドキュメント\"%1\"の保存に失敗しました" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "\"%1\"を開くのに失敗しました" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "%1へ加入..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "ディレクトリ\"%1\"の作成に失敗しました" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "\"%1\"への接続が失敗しました" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "\"%1\"の解決に失敗しました" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "デバイス\"%1\"は存在しません" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "ディレクトリ\"%1\"を作成できませんでした: %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "デバイス\"%1\"は存在しません" #: ../code/window.cpp:42 msgid "Chat" msgstr "チャット" #: ../code/window.cpp:83 msgid "This Computer" msgstr "" #: ../code/window.cpp:108 msgid "Document Browser" msgstr "ドキュメントブラウザ" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "共同作業テキストエディタ" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Gobby Collaborative Editor (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "テキストを共同作業で編集する" #, fuzzy #~ msgid "_Disconnect from Server" #~ msgstr "サーバーへ接続" #, fuzzy #~ msgid "Create _Account..." #~ msgstr "ドキュメントの作成(_C)" #~ msgid "Create Do_cument..." #~ msgstr "ドキュメントの作成(_C)" #, fuzzy #~ msgid "Create Di_rectory..." #~ msgstr "ディレクトリの作成" #~ msgid "_Open Document..." #~ msgstr "ドキュメントを開く(_O)" #~ msgid "D_elete" #~ msgstr "削除(_D)" #~ msgid "_None" #~ msgstr "_None" #~ msgid "_File" #~ msgstr "ファイル(_F)" #~ msgid "Open _Location..." #~ msgstr "場所を開く(_L)" #~ msgid "Save _As..." #~ msgstr "名前をつけて保存(_A)" #~ msgid "Save all open files locally" #~ msgstr "開かれているすべてのファイルをローカルへ保存" #~ msgid "Export As _HTML..." #~ msgstr "HTMLとしてエクスポート(_H)" #~ msgid "Connect _to Server..." #~ msgstr "サーバーへ接続(_T)" #~ msgid "_Edit" #~ msgstr "編集(_E)" #~ msgid "_Find..." #~ msgstr "検索(_F)" #~ msgid "Find Ne_xt" #~ msgstr "次を検索(_X)" #~ msgid "Find next match of phrase searched for" #~ msgstr "フレーズ検索の次を検索" #~ msgid "Find Pre_vious" #~ msgstr "前を検索(_V)" #~ msgid "Find previous match of phrase searched for" #~ msgstr "フレーズ検索の前を検索" #~ msgid "Find and Rep_lace..." #~ msgstr "置換(_L)" #~ msgid "Go to _Line..." #~ msgstr "指定行へ移動(_L)" #~ msgid "Pr_eferences..." #~ msgstr "設定(_E)" #~ msgid "_View" #~ msgstr "表示(_V)" #~ msgid "Reset User Colors" #~ msgstr "ユーザーカラーをリセット" #~ msgid "Hide user colors in current document" #~ msgstr "このドキュメントユーザーカラーを非表示" #~ msgid "View Toolbar" #~ msgstr "ツールバー" #~ msgid "Whether to show the toolbar" #~ msgstr "ツールバーを表示するかどうか" #~ msgid "View Statusbar" #~ msgstr "ステータスバー" #~ msgid "Whether to show the statusbar" #~ msgstr "ステータスバーを表示するかどうか" #~ msgid "View Document Browser" #~ msgstr "ドキュメントブラウザ" #~ msgid "Whether to show the document browser" #~ msgstr "ドキュメントブラウザを表示するかどうか" #~ msgid "View Chat" #~ msgstr "チャット" #~ msgid "Whether to show the chat pane" #~ msgstr "チャットを表示するかどうか" #~ msgid "View Document User List" #~ msgstr "ドキュメントユーザーリスト" #~ msgid "Whether to show the user list for documents" #~ msgstr "このドキュメントのユーザーリストを表示するかどうか" #~ msgid "View Chat User List" #~ msgstr "チャットユーザーリスト" #~ msgid "Whether to show the user list for the chat" #~ msgstr "チャットユーザーリストを表示するかどうか" #~ msgid "_Highlight Mode" #~ msgstr "強調表示モード(_H)" #~ msgid "_Help" #~ msgstr "ヘルプ(_H)" #~ msgid "_Contents" #~ msgstr "目次(_C)" #~ msgid "Opens the Gobby manual" #~ msgstr "Gobbyのマニュアルを開く" #~ msgid "_About..." #~ msgstr "Gobbyについて(_A)" #~ msgid "Shows Gobby's copyright and credits" #~ msgstr "Gobbyの著作権やクレジットの表示" #~ msgid "User list" #~ msgstr "ユーザーリスト" #~ msgid "Document list" #~ msgstr "ドキュメントリスト" #~ msgid "User Color Indicator" #~ msgstr "ユーザーカラー表示" #~ msgid "Connect to Server" #~ msgstr "サーバーへ接続" #~ msgid "Please enter a host name with which to establish a connection." #~ msgstr "接続先のホスト名を入力してください" #~ msgid "_Remote Endpoint:" #~ msgstr "接続先(_R)" #~ msgid "Document Name:" #~ msgstr "ドキュメント名:" #~ msgid "_Search for:" #~ msgstr "検索文字列(_S):" #~ msgid "Replace _with:" #~ msgstr "置換先(_W)" #~ msgid "_Match case" #~ msgstr "大文字小文字の区別(_M)" #~ msgid "Match _entire word only" #~ msgstr "完全単語一致(_E)" #~ msgid "Search _backwards" #~ msgstr "前へ検索(_B)" #~ msgid "Wra_p around" #~ msgstr "行をはさむ(_P)" #~ msgid "Go to line" #~ msgstr "指定行へ移動" #~ msgid "Line _number:" #~ msgstr "行番号(_N):" #~ msgid "Choose a user color" #~ msgstr "ユーザーカラーの選択" #~ msgid "Welcome to Gobby" #~ msgstr "Gobbyへようそこ" #~ msgid "" #~ "Before we start, a few options need to be configured. You can later " #~ "change them by choosing Edit ▸ Preferences from the menu." #~ msgstr "" #~ "開始する前に、いくつかのオプションを設定する必要があります。これらは後から" #~ "「設定」メニューで変更できます。" #~ msgid "User Name" #~ msgstr "ユーザー名" #~ msgid "Your name as shown to other users." #~ msgstr "他のユーザーへ表示されるあなたの名前" #~ msgid "User Color" #~ msgstr "ユーザーカラー" #~ msgid "The color with which text you have written is branded." #~ msgstr "あなたが書いた文章につけられる色" #, fuzzy #~ msgid "Password:" #~ msgstr "サーバーパスワード(_P):" #~ msgid "Open Location" #~ msgstr "場所を開く" #~ msgid "Enter the _location (URI) of the file you would like to open:" #~ msgstr "開きたいファイルがある場所(URI)(_L):" #~ msgid "Password Required" #~ msgstr "パスワードが必要です" #~ msgid "Server _Password:" #~ msgstr "サーバーパスワード(_P):" #~ msgid "Settings" #~ msgstr "設定" #, fuzzy #~ msgid "Remote Users" #~ msgstr "ユーザーカラーをリセット" #, fuzzy #~ msgid "Local Documents" #~ msgstr "新規ドキュメント" #~ msgid "User name:" #~ msgstr "ユーザー名:" #~ msgid "User color:" #~ msgstr "ユーザーカラー:" #~ msgid "Choose a new user color" #~ msgstr "新しいユーザーカラーを選択してください" #, fuzzy #~ msgid "Highlight current line of remote users" #~ msgstr "現在の行をハイライトする" #, fuzzy #~ msgid "Local documents directory:" #~ msgstr "ホストディレクトリ:" #~ msgid "Tab Stops" #~ msgstr "タブストップ" #~ msgid "Indentation" #~ msgstr "インデント" #~ msgid "Home/End Behavior" #~ msgstr "Home/Endキーの挙動" #~ msgid "File Saving" #~ msgstr "ファイルの保存" #~ msgid "_Tab width:" #~ msgstr "タブ幅(_T):" #~ msgid "Insert _spaces instead of tabs" #~ msgstr "タブ文字の代わりにスペースを挿入する(_I)" #~ msgid "Enable automatic _indentation" #~ msgstr "オートインデントを有効にする(_I)" #~ msgid "Smart _home/end" #~ msgstr "スマートhome/end(_H)" #~ msgid "Enable _automatic saving of documents" #~ msgstr "ドキュメントの自動保存を有効にする(_A)" #~ msgid "Autosave interval in _minutes:" #~ msgstr "自動保存間隔(分)(_M):" #~ msgid "" #~ "With this option enabled, Home/End keys move to first/last character " #~ "before going to the start/end of the line." #~ msgstr "" #~ "このオプションによって、Home/Endキーは行頭/行末にいく前に最初/最後の文字へ" #~ "移動するようになります。" #~ msgid "Text Wrapping" #~ msgstr "ワードラップ" #~ msgid "Line Numbers" #~ msgstr "行番号" #~ msgid "Current Line" #~ msgstr "現在行" #~ msgid "Right Margin" #~ msgstr "右マージン" #~ msgid "Bracket Matching" #~ msgstr "対応する括弧の表示" #~ msgid "Whitespace Display" #~ msgstr "空白文字の表示" #~ msgid "Enable text wrapping" #~ msgstr "ワードラップを有効にする" #~ msgid "Do not split words over two lines" #~ msgstr "一単語を二行に分割しない" #~ msgid "Display line numbers" #~ msgstr "行番号を表示する" #~ msgid "Highlight current line" #~ msgstr "現在の行をハイライトする" #~ msgid "Display right margin" #~ msgstr "右マージンの表示" #~ msgid "Right margin at column:" #~ msgstr "右マージンの列数:" #~ msgid "Highlight matching bracket" #~ msgstr "対応する括弧のハイライト" #~ msgid "Toolbar" #~ msgstr "ツールバー" #~ msgid "Font" #~ msgstr "フォント" #~ msgid "Color Scheme" #~ msgstr "カラースキーム" #~ msgid "Trusted CAs" #~ msgstr "信頼したCA" #~ msgid "Secure Connection" #~ msgstr "保護された接続" #, fuzzy #~ msgid "Authentication" #~ msgstr "インデント" #~ msgid "Select a file containing trusted CAs" #~ msgstr "信頼されたCAを含むファイルの選択" #, fuzzy #~ msgid "None" #~ msgstr "_None" #, fuzzy #~ msgid "Create New..." #~ msgstr "ドキュメントの作成(_C)" #~ msgid "Preferences" #~ msgstr "設定" #~ msgid "User" #~ msgstr "ユーザー" #~ msgid "Editor" #~ msgstr "エディタ" #~ msgid "View" #~ msgstr "表示" #~ msgid "Appearance" #~ msgstr "外観" #~ msgid "Security" #~ msgstr "セキュリティ" #~ msgid "Gobby options" #~ msgstr "Gobbyオプション" #~ msgid "Options related to Gobby" #~ msgstr "Gobbyに関連したオプション" #~ msgid "Connect to given host on startup, can be given multiple times" #~ msgstr "起動時に与えられたホストへ接続します。複数回指定できます。" #~ msgid "HOSTNAME" #~ msgstr "HOSTNAME" #~ msgid "You are still connected to a session" #~ msgstr "まだセッションに接続されています" #~ msgid "Do you want to close Gobby nevertheless?" #~ msgstr "それでもGobbyを閉じてもいいですか?" #~ msgid "" #~ "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.\n" #~ "\n" #~ "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.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "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.\n" #~ "\n" #~ "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.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgid "User Join in progress..." #~ msgstr "ユーザーの参加処理を行っています..." #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "\"%1\"の解決に失敗しました" #~ msgid "Resolving \"%1\"..." #~ msgstr "\"%1\"を解決しています..." #~ msgid "Paths" #~ msgstr "パス" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "ローカルでホストされたセッションが恒久的に記憶されるディレクトリ" gobby-0.6.0/po/LINGUAS0000664000175000017500000000005314003367605011207 00000000000000ca de el_GR en_GB fr ja zh_TW pt_BR it_IT gobby-0.6.0/win32/0000775000175000017500000000000014005504730010562 500000000000000gobby-0.6.0/win32/gobby.ico0000664000175000017500000002267614003367605012323 0000000000000000 %(0` &!(:;97: 4:;;;;:70#######################&7D;;;;;;;7& JJJLLLNOOQQQTTTSSSOOOKKKHHHJJJMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKKKABB;<<::: ! Y<;;8- %|||YmmmJJJ___STSJMJAFAAFAJMJSTS\\\qqqEFF[4% ZZZ***&8O"d"$l$&r&(x((x(&r&$m$"f"U>6<><{{{PPP5VVV#!(u(////////////////////////////++1\\\+tttT1@@>><<884411////////////////////B\\\+O}}}VVV???+YYWWTTOOJJCC;;33////////////////<Tn\\\+AAA5+"PC6(& kkqqmmhhaaZZPPGG<<22//////////..#1#c}7U}\\\+ lYFoXs[r[XJC~R`.-+&} [7bbbtu[f*;.-("wCU AAAFMIX.-+%{ _7" ]]]:u7SSS{y{P...6+1r'2m&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # Note that $RANDOM variable is not portable (e.g. dash); Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p' feature. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: gobby-0.6.0/gobby-0.5.10000664000175000017500000000170314003367605011233 00000000000000.TH GOBBY 1 "August 17, 2006" .\" Please adjust this date whenever revising the manpage. .\" For manpage-specific macros: see man(7). .SH NAME .B gobby \- a collaborative text editor .SH SYNOPSIS .B gobby .RI [ options ] .RI [ file(s) ] .SH DESCRIPTION .B gobby is an editor which allows one to edit text documents and source files collaboratively over a network. Changes to the documents are synchronised instantly to the other clients. .PP .\".SH OPTIONS .\".TP .\"\fB\-j\fR, \fB\-\-join\fR=\fIHOST\fR:\fIPORT\fR .\"Joins the obby session on the specified host. .\".TP .\"\fB\-n\fR, \fB\-\-new\-instance\fR .\"Forces a new instance of Gobby to be created. .\".TP .\".B file(s) .\"Files passed on the command line will be opened within Gobby. If there is .\"already a Gobby instance running they will be opened therein, otherwise .\"a new hosted session will be created automatically. .PP .SH AUTHOR .B gobby was written by the 0x539 dev group . gobby-0.6.0/aclocal.m40000664000175000017500000026175514005503643011422 00000000000000# generated automatically by aclocal 1.16.1 -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # Increment this whenever this file is changed. #serial 1 # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. dnl dnl Copied from intlmacosx.m4 in gettext, GPL. dnl Copyright (C) 2004-2013 Free Software Foundation, Inc. glib_DEFUN([glib_gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in Mac OS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFLocaleCopyCurrent();]])], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= glib_gt_INTL_MACOSX AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs $INTL_MACOSX_LIBS" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl AU_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ], [[$0: This macro is deprecated. You should use upstream gettext instead.]]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) # Increment this whenever this file is changed. #serial 2 dnl GLIB_GSETTINGS dnl Defines GSETTINGS_SCHEMAS_INSTALL which controls whether dnl the schema should be compiled dnl AC_DEFUN([GLIB_GSETTINGS], [ dnl We can't use PKG_PREREQ because that needs 0.29. m4_ifndef([PKG_PROG_PKG_CONFIG], [pkg.m4 version 0.28 or later is required]) m4_pattern_allow([AM_V_GEN]) AC_ARG_ENABLE(schemas-compile, AS_HELP_STRING([--disable-schemas-compile], [Disable regeneration of gschemas.compiled on install]), [case ${enableval} in yes) GSETTINGS_DISABLE_SCHEMAS_COMPILE="" ;; no) GSETTINGS_DISABLE_SCHEMAS_COMPILE="1" ;; *) AC_MSG_ERROR([bad value ${enableval} for --enable-schemas-compile]) ;; esac]) AC_SUBST([GSETTINGS_DISABLE_SCHEMAS_COMPILE]) PKG_PROG_PKG_CONFIG([0.16]) AC_SUBST(gsettingsschemadir, [${datadir}/glib-2.0/schemas]) AS_IF([test x$cross_compiling != xyes], [PKG_CHECK_VAR([GLIB_COMPILE_SCHEMAS], [gio-2.0], [glib_compile_schemas])], [AC_PATH_PROG([GLIB_COMPILE_SCHEMAS], [glib-compile-schemas])]) AC_SUBST(GLIB_COMPILE_SCHEMAS) if test "x$GLIB_COMPILE_SCHEMAS" = "x"; then ifelse([$2],,[AC_MSG_ERROR([glib-compile-schemas not found.])],[$2]) else ifelse([$1],,[:],[$1]) fi GSETTINGS_RULES=' .PHONY : uninstall-gsettings-schemas install-gsettings-schemas clean-gsettings-schemas mostlyclean-am: clean-gsettings-schemas gsettings__enum_file = $(addsuffix .enums.xml,$(gsettings_ENUM_NAMESPACE)) %.gschema.valid: %.gschema.xml $(gsettings__enum_file) $(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) --strict --dry-run $(addprefix --schema-file=,$(gsettings__enum_file)) --schema-file=$< && mkdir -p [$](@D) && touch [$]@ all-am: $(gsettings_SCHEMAS:.xml=.valid) uninstall-am: uninstall-gsettings-schemas install-data-am: install-gsettings-schemas .SECONDARY: $(gsettings_SCHEMAS) install-gsettings-schemas: $(gsettings_SCHEMAS) $(gsettings__enum_file) @$(NORMAL_INSTALL) if test -n "$^"; then \ test -z "$(gsettingsschemadir)" || $(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"; \ $(INSTALL_DATA) $^ "$(DESTDIR)$(gsettingsschemadir)"; \ test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); \ fi uninstall-gsettings-schemas: @$(NORMAL_UNINSTALL) @list='\''$(gsettings_SCHEMAS) $(gsettings__enum_file)'\''; test -n "$(gsettingsschemadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e '\''s|^.*/||'\''`; \ test -n "$$files" || exit 0; \ echo " ( cd '\''$(DESTDIR)$(gsettingsschemadir)'\'' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(gsettingsschemadir)" && rm -f $$files test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir) clean-gsettings-schemas: rm -f $(gsettings_SCHEMAS:.xml=.valid) $(gsettings__enum_file) ifdef gsettings_ENUM_NAMESPACE $(gsettings__enum_file): $(gsettings_ENUM_FILES) $(AM_V_GEN) glib-mkenums --comments '\'''\'' --fhead "" --vhead " <@type@ id='\''$(gsettings_ENUM_NAMESPACE).@EnumName@'\''>" --vprod " " --vtail " " --ftail "" [$]^ > [$]@.tmp && mv [$]@.tmp [$]@ endif ' _GSETTINGS_SUBST(GSETTINGS_RULES) ]) dnl _GSETTINGS_SUBST(VARIABLE) dnl Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST AC_DEFUN([_GSETTINGS_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 42 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;' AC_SUBST(INTLTOOL_V_MERGE) AC_SUBST(INTLTOOL__v_MERGE_) AC_SUBST(INTLTOOL__v_MERGE_0) INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) AC_SUBST(intltool__v_merge_options_) AC_SUBST(intltool__v_merge_options_0) INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29.1) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.1]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR AC_DEFUN([YELP_HELP_INIT], [ AC_REQUIRE([AC_PROG_LN_S]) m4_pattern_allow([AM_V_at]) m4_pattern_allow([AM_V_GEN]) m4_pattern_allow([AM_DEFAULT_VERBOSITY]) YELP_LC_MEDIA_LINKS=true YELP_LC_DIST=true for yelpopt in [$1]; do case $yelpopt in lc-media-links) YELP_LC_MEDIA_LINKS=true ;; no-lc-media-links) YELP_LC_MEDIA_LINKS= ;; lc-dist) YELP_LC_DIST=true ;; no-lc-dist) YELP_LC_DIST= ;; *) AC_MSG_ERROR([Unrecognized [YELP_HELP_INIT] option $yelpopt"]) ;; esac done; AC_SUBST([YELP_LC_MEDIA_LINKS]) AC_SUBST([YELP_LC_DIST]) AC_ARG_WITH([help-dir], AS_HELP_STRING([--with-help-dir=DIR], [path where help files are installed]),, [with_help_dir='${datadir}/help']) HELP_DIR="$with_help_dir" AC_SUBST(HELP_DIR) AC_ARG_VAR([ITSTOOL], [Path to the `itstool` command]) AC_CHECK_PROG([ITSTOOL], [itstool], [itstool]) if test x"$ITSTOOL" = x; then AC_MSG_ERROR([itstool not found]) fi AC_ARG_VAR([XMLLINT], [Path to the `xmllint` command]) AC_CHECK_PROG([XMLLINT], [xmllint], [xmllint]) if test x"$XMLLINT" = x; then AC_MSG_ERROR([xmllint not found]) fi YELP_HELP_RULES=' HELP_ID ?= HELP_POT ?= HELP_FILES ?= HELP_EXTRA ?= HELP_MEDIA ?= HELP_LINGUAS ?= _HELP_LINGUAS = $(if $(filter environment,$(origin LINGUAS)),$(filter $(LINGUAS),$(HELP_LINGUAS)),$(HELP_LINGUAS)) _HELP_POTFILE = $(if $(HELP_POT),$(HELP_POT),$(if $(HELP_ID),$(HELP_ID).pot)) _HELP_POFILES = $(if $(HELP_ID),$(foreach lc,$(_HELP_LINGUAS),$(lc)/$(lc).po)) _HELP_MOFILES = $(patsubst %.po,%.mo,$(_HELP_POFILES)) _HELP_C_FILES = $(foreach f,$(HELP_FILES),C/$(f)) _HELP_C_EXTRA = $(foreach f,$(HELP_EXTRA),C/$(f)) _HELP_C_MEDIA = $(foreach f,$(HELP_MEDIA),C/$(f)) _HELP_LC_FILES = $(foreach lc,$(_HELP_LINGUAS),$(foreach f,$(HELP_FILES),$(lc)/$(f))) _HELP_LC_STAMPS = $(foreach lc,$(_HELP_LINGUAS),$(lc)/$(lc).stamp) _HELP_DEFAULT_V = $(if $(AM_DEFAULT_VERBOSITY),$(AM_DEFAULT_VERBOSITY),1) _HELP_V = $(if $(V),$(V),$(_HELP_DEFAULT_V)) _HELP_LC_VERBOSE = $(_HELP_LC_VERBOSE_$(_HELP_V)) _HELP_LC_VERBOSE_ = $(_HELP_LC_VERBOSE_$(_HELP_DEFAULT_V)) _HELP_LC_VERBOSE_0 = @echo " GEN "$(dir [$]@); all: $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(_HELP_C_MEDIA) $(_HELP_LC_FILES) $(_HELP_POFILES) .PHONY: pot pot: $(_HELP_POTFILE) $(_HELP_POTFILE): $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(_HELP_C_MEDIA) $(AM_V_GEN)if test -d "C"; then d=; else d="$(srcdir)/"; fi; \ $(ITSTOOL) -o "[$]@" $(foreach f,$(_HELP_C_FILES),"$${d}$(f)") .PHONY: repo repo: $(_HELP_POTFILE) $(AM_V_at)for po in $(_HELP_POFILES); do \ if test "x[$](_HELP_V)" = "x0"; then echo " GEN $${po}"; fi; \ msgmerge -q -o "$${po}" "$${po}" "$(_HELP_POTFILE)"; \ done $(_HELP_POFILES): $(AM_V_at)if ! test -d "$(dir [$]@)"; then mkdir "$(dir [$]@)"; fi $(AM_V_at)if test ! -f "[$]@" -a -f "$(srcdir)/[$]@"; then cp "$(srcdir)/[$]@" "[$]@"; fi $(AM_V_GEN)if ! test -f "[$]@"; then \ (cd "$(dir [$]@)" && \ $(ITSTOOL) -o "$(notdir [$]@).tmp" $(_HELP_C_FILES) && \ mv "$(notdir [$]@).tmp" "$(notdir [$]@)"); \ else \ (cd "$(dir [$]@)" && \ $(ITSTOOL) -o "$(notdir [$]@).tmp" $(_HELP_C_FILES) && \ msgmerge -o "$(notdir [$]@)" "$(notdir [$]@)" "$(notdir [$]@).tmp" && \ rm "$(notdir [$]@).tmp"); \ fi $(_HELP_MOFILES): %.mo: %.po $(AM_V_at)if ! test -d "$(dir [$]@)"; then mkdir "$(dir [$]@)"; fi $(AM_V_GEN)msgfmt -o "[$]@" "$<" $(_HELP_LC_FILES): $(_HELP_LINGUAS) $(_HELP_LINGUAS): $(_HELP_LC_STAMPS) $(_HELP_LC_STAMPS): %.stamp: %.mo $(_HELP_LC_STAMPS): $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(AM_V_at)if ! test -d "$(dir [$]@)"; then mkdir "$(dir [$]@)"; fi $(_HELP_LC_VERBOSE)if test -d "C"; then d="../"; else d="$(abs_srcdir)/"; fi; \ mo="$(dir [$]@)$(patsubst %/$(notdir [$]@),%,[$]@).mo"; \ if test -f "$${mo}"; then mo="../$${mo}"; else mo="$(abs_srcdir)/$${mo}"; fi; \ (cd "$(dir [$]@)" && $(ITSTOOL) -m "$${mo}" $(foreach f,$(_HELP_C_FILES),$${d}/$(f))) && \ touch "[$]@" .PHONY: clean-help mostlyclean-am: $(if $(HELP_ID),clean-help) clean-help: rm -f $(_HELP_LC_FILES) $(_HELP_LC_STAMPS) $(_HELP_MOFILES) EXTRA_DIST ?= EXTRA_DIST += $(_HELP_C_EXTRA) $(_HELP_C_MEDIA) EXTRA_DIST += $(if $(YELP_LC_DIST),$(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).stamp)) EXTRA_DIST += $(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).po) EXTRA_DIST += $(foreach f,$(HELP_MEDIA),$(foreach lc,$(HELP_LINGUAS),$(wildcard $(lc)/$(f)))) distdir: distdir-help-files distdir-help-files: $(_HELP_LC_FILES) @for lc in C $(if $(YELP_LC_DIST),$(HELP_LINGUAS)) ; do \ $(MKDIR_P) "$(distdir)/$$lc"; \ for file in $(HELP_FILES); do \ if test -f "$$lc/$$file"; then d=./; else d=$(srcdir)/; fi; \ cp -p "$$d$$lc/$$file" "$(distdir)/$$lc/" || exit 1; \ done; \ done; \ .PHONY: check-help check: check-help check-help: for lc in C $(_HELP_LINGUAS); do \ if test -d "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ for page in $(HELP_FILES); do \ echo "$(XMLLINT) --nonet --noout --noent --path $$xmlpath --xinclude $$d$$lc/$$page"; \ $(XMLLINT) --nonet --noout --noent --path "$$xmlpath" --xinclude "$$d$$lc/$$page"; \ done; \ done .PHONY: install-help install-data-am: $(if $(HELP_ID),install-help) install-help: $(_HELP_LC_FILES) @for lc in C $(_HELP_LINGUAS); do \ $(mkinstalldirs) "$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)" || exit 1; \ done @for lc in C $(_HELP_LINGUAS); do for f in $(HELP_FILES); do \ if test -f "$$lc/$$f"; then d=; else d="$(srcdir)/"; fi; \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ if ! test -d "$$helpdir"; then $(mkinstalldirs) "$$helpdir"; fi; \ echo "$(INSTALL_DATA) $$d$$lc/$$f $$helpdir`basename $$f`"; \ $(INSTALL_DATA) "$$d$$lc/$$f" "$$helpdir`basename $$f`" || exit 1; \ done; done @for f in $(_HELP_C_EXTRA); do \ lc=`dirname "$$f"`; lc=`basename "$$lc"`; \ if test -f "$$f"; then d=; else d="$(srcdir)/"; fi; \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ if ! test -d "$$helpdir"; then $(mkinstalldirs) "$$helpdir"; fi; \ echo "$(INSTALL_DATA) $$d$$f $$helpdir`basename $$f`"; \ $(INSTALL_DATA) "$$d$$f" "$$helpdir`basename $$f`" || exit 1; \ done @for f in $(HELP_MEDIA); do \ for lc in C $(_HELP_LINGUAS); do \ if test -f "$$lc$$f"; then d=; else d="$(srcdir)/"; fi; \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ mdir=`dirname "$$f"`; \ if test "x$mdir" = "x."; then mdir=""; fi; \ if ! test -d "$$helpdir$$mdir"; then $(mkinstalldirs) "$$helpdir$$mdir"; fi; \ if test -f "$$d$$lc/$$f"; then \ echo "$(INSTALL_DATA) $$d$$lc/$$f $$helpdir$$f"; \ $(INSTALL_DATA) "$$d$$lc/$$f" "$$helpdir$$f" || exit 1; \ elif test "x$$lc" != "xC"; then \ if test "x$(YELP_LC_MEDIA_LINKS)" != "x"; then \ echo "$(LN_S) -f $(HELP_DIR)/C/$(HELP_ID)/$$f $$helpdir$$f"; \ dname="$$f"; \ pars="../"; \ while test "$$dname" != "." -a "$$dname" != "/"; do \ pars="../$$pars"; \ dname=$$(dirname "$$dname"); \ done; \ $(LN_S) -f $$pars"C/$(HELP_ID)/$$f" "$$helpdir$$f" || exit 1; \ fi; \ fi; \ done; \ done .PHONY: uninstall-help uninstall-am: $(if $(HELP_ID),uninstall-help) uninstall-help: for lc in C $(_HELP_LINGUAS); do for f in $(HELP_FILES); do \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ echo "rm -f $$helpdir`basename $$f`"; \ rm -f "$$helpdir`basename $$f`"; \ done; done @for f in $(_HELP_C_EXTRA); do \ lc=`dirname "$$f"`; lc=`basename "$$lc"`; \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ echo "rm -f $$helpdir`basename $$f`"; \ rm -f "$$helpdir`basename $$f`"; \ done @for f in $(HELP_MEDIA); do \ for lc in C $(_HELP_LINGUAS); do \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ echo "rm -f $$helpdir$$f"; \ rm -f "$$helpdir$$f"; \ done; \ done; ' AC_SUBST([YELP_HELP_RULES]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([YELP_HELP_RULES])]) ]) # Copyright (C) 2002-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2018 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ax_cxx_compile_stdcxx.m4]) m4_include([m4/ax_cxx_compile_stdcxx_11.m4]) gobby-0.6.0/icons/0000775000175000017500000000000014005504730010733 500000000000000gobby-0.6.0/icons/hicolor/0000775000175000017500000000000014005504730012372 500000000000000gobby-0.6.0/icons/hicolor/48x48/0000775000175000017500000000000014005504730013171 500000000000000gobby-0.6.0/icons/hicolor/48x48/actions/0000775000175000017500000000000014005504730014631 500000000000000gobby-0.6.0/icons/hicolor/48x48/actions/document-list.png0000664000175000017500000000622214003367605020056 00000000000000PNG  IHDR00WsRGB pHYs B(xtIMEXE $IDAThKl]]]~_C|cBXRFF0b"&bнb._6h6`fXD6hG6vnUo6Uv;$$Oծr?|eG=BB|S˲888e_lV|<#|k׮[oq֭[ lL\.72lek׮O?TBQU<(0  /Q'l0 Ldz< Bf7@:wIHDgaaZ,S,y&.\`jj !BlۦhP׹z*^a:9;O\nq5W_f!hZ|b1 @QL$NBPh6d2ϓj5FaZ>㻎fT*E$!NJYXX7|({'?Qgh9¿ y?N4Ų,$=mcY/ovpnnEG ̜3_@UUn޼Idggj @44M`0x6M۶  wEn=otĉ3<L93|Z\\?}矩jb1áK nܸA*²,L4MbOƶmOJO?M^>sΟ>  `}}UUZrƍ9 4d2I'#IgX,˔J%,"i?^xAOT*`߉NaiJs1>yEQHRDQ2 $˗ygm@ `0xH?{B3`9!9>F1ZM'2x(#B7MIt]dY& i~*B.s/N.NOѠRP(X]]!lEQH#\.,,,$I vƏ{ &@X,z H@T*HXdqqqD붷 c~~-R C{fggXdN 0SUU677ZhЅ,b~~ 2 [[[E(Jz!{FSG%VTzbʦiΜ9C?Sc&333HDXD$fgg BHp8Q4f!;=nYzn}]#&v7n߾M>jtftp]B6`˾}a~B @u&ǎc{{{b9pmX,F8&JeY̰aD"N8q7X.7ҟy=yG9~8eq曉[Vr9$IB$.FX,ɓ'Bfy7L$Ƹfd2I:&iPh@cee49qkkk#Bw$ӧO: ~9{7o>lqQw㶻mZ^G-h4ʓO>(츞MnnE:n8 QvmvhBvww4mOH$B*RPUO<xB@\&Q,IRr¤x@;;;z+揄=}x= AVZ4fnK2`x\Ća/N!IGqd2Ν;i s)N)ߧi1װjJ&AS,BP(eYhix҆Ovnw,N֖v=~uvvv0 t:MZ^sCZ[]tD(='8ař~!nK\(r˲PUu|d2b1~'rrd2f$ dY>'M}۷G:U_0.[[[GVz)&%H$B#J!2ƣQ^N[;8j.--qi\|5:rb1qےx'5ǚVUUU@MhlYV|[˭-,Qd2j5.'O<bx_nNw,pQ\ XE\fzz4=dY$ey, ! ~) {i.E3Eբ\.{1ʶCvV~ :p{Q0Z-hC(vT4_ ]|~p^x}8wk9W? y5~+ۘ_z76uZ<#>l<9^[4{~+!6SIENDB`gobby-0.6.0/icons/hicolor/48x48/actions/chat.png0000664000175000017500000000524114003367605016206 00000000000000PNG  IHDR@@iq hIDATxL?UTU.dցAPabQlen5 )k4t9f-6?. Fc6&C YN˽gz "={ssy@,؍cnm8R(>2Ϛ<|ҀnJȨ*3@>,`3Z,^hv;111vv;XVhkkpsu}(u_wDžWMz>^ߌ!33 222HMMeĈ)ŋTWWSUUűcpy- ȘT^PNR^W=jVǏWj̘1J 2 Drt:%.KXNц_N8I<z7UBBI I6Uiir*Xv{hsX> f3;;[9*r5ej_сbQ *555~vM6)ŢIO*~5k֨(uiu=V&o=СU^N~eeep}/..1z>@۶m ͖-[t//x+)rrr jVZG/P׫-[KBsߏj%~ lo,`I󉉉!$ :::vSLaڵ7E@ZXX7o&$<*5s-5ie;~2Z hy&۷oח'd|zIcUw_twc;PAX`5@AAA@ nJ{{;b:76,z}O{7 -oiiif8weŊzW \|?VLz"Cр]/7nPPPW x1n"2Sѽ^l~&CqNΑBHv*33^}ӦMx.=\`8C&<=ETVUTT ~ΝvX%Px(~9=|;)>Ԝh gwy_%%%}Az(LzsDCǃZhQq"S?~ Γ2y>!PDUUU4SQshwDlUnn}<&Md70 H7䁢1.Fӯ^IeddP$d ^&CJ6{;wTJ)uel6c;*x8TGw@͚5K߿_\4o4]yTĞ1>6?bf,d#C[ߓyc֣PY/eIENDB`gobby-0.6.0/icons/hicolor/48x48/actions/Makefile.am0000664000175000017500000000021314003367605016607 00000000000000icondir = $(datadir)/gobby-0.5/icons/hicolor/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/hicolor/48x48/actions/Makefile.in0000664000175000017500000003610714005503645016631 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/hicolor/48x48/actions ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/gobby-0.5/icons/hicolor/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/hicolor/48x48/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/48x48/actions/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/hicolor/48x48/actions/user-list.png0000664000175000017500000000526114003367605017220 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME!+ CIDATh͙{lS?ׯ8N;! @@RcݣimWm*6U[=*4V u@;.P&<Iĉ;so<=9N|w/\-@P@h h|F<ޔzXE&d ~U|.<ϺC] 5̿F!l~c } +בvM'ـu o`TVgxsʲץNML!p.p'2`T8pjh# q5NOIOI.߭4OE2^6|s"MIKpz4%Ҵ Kn+]NdL(?m,e)%:֘tR;B~9E &Pn,MFN ~h\Q-.q@D&ȄMȫ!M %RH)GhJ4g~.D)" UJ6ɌLtЙaF~E9>.ρ?'0] *U_emj)⹝T;Ϻr3 pvw"8CMSgޏްnO)'<~/M?)9pT07$}lʇ':2'T%N~ؠ4* kBK]8MAӖ-7g:=E)snt8RǁWtr-Nh|9) ΚۜNS`sXS_ V= %xV_$6ݷK,\GhL}j9ɒw:bסN.F-Xgס |KL.'vsYUJyo^- mebut8q EaWe: aߺb={xH@V7,k #`]ߞy~_Pa{9$\cwm7"w8TU3硻9teli0skT|Ty_`A4&)e8eTXTRAZB5o޼s͖eK_=s;ZSydrsp8]PGHHS3Gh%;1?把ORr O=TRjbR–H$N$u88:BӔPRH ?˕ ]KKKۗ.] ܕR|jhEJeJi===`{{{N4͊FxoN0|텶zVek ѮOLmwO7źP(`Y2:S@8k<\JɆ6PWWf?Xѥl<9BS9 ٚG>4P(eYg|w&qg΋a$QJM_f̓SCK̛Z_k}JyW.2~btϓ~rX켞/d~?UUm"o5wojlq+`RGeoĻ|AT~+Rn <0 [S Fzv⊛5w͉.Rpdđds#'/Be4:M#|̝{9/S[[Z^y؜"re\E*EBx8;_sx"!⚆SJC$ ٷ?$I䬯[oA)E6ct_uQT玥rѧ]CCιbժU 444EO[ҊgPWW{zj,i.OW{{;ǏHcc#gX95bFBE$~'A)#ÙD٧O!"8By ]=2-[~z Sf ye-;^cdxӛUgUU{ypb*ˡc@hko 4ꑷJj*yì_ZmKNmlÈC:!NǡϢQUU緰 /.2Z9dRVco~+/RdՑxMHW OKI 8.Ṭv$CN*yңNDkb <8G"OG-K9V:OzTސ$ R[[Cs  vgF&`V ?EBI. D"xRw£3@u=A__߸9uCE Qe&lUV|{ϕu \:0#c̟wI뱯'OBs0M40 0Ks;iI"S _&MW7͚P.Kd>$U, LWv;,u1d$Ǐl24M;s;. ZR$<}/iN>)eapױ$Czq3]m pw,sqyاQBZ"cHtU ;v@u"}${;IPB4+K79 .T?yw^{{6Iec%r"s)dH)2NT! N CA̯l|/aҥ @:1DÜf"~󅇾 @<SM]E6±=+oS`0=HB$hHH )Ri;MxF=s9O~tuuerWͥiUȩu̺btkѸ馛}3\ym mgڜU7ЗCzWҦȻyrn lѱd2Adt_~x-W~hr\$+Wʕ+\sȑyXiN/#>/p-llaW"q󔕕[oSܱv#Sg]1H&ӄáXn]?=զi^{?oy@x቉Ŧ#H8J)|qͽ"e-+icdÆ O<ĞHZ&P3%$aO|:::HR]aYeF? %CO )l ZF閎ѭ↕y,H`P!%U|KQYYY*|>gѣ$b"p]ו٬X֭[ԕ'NX`0)RLMDeLm`455 TTT`9B!0x)Blۦ}50/*fΜ^kk3 C3 C)r]W !Rl3nq|]|>M=>52(IO@I"؅Xh|4% L-1 }Tʒ+Js J %KrI.pZHnIENDB`gobby-0.6.0/icons/hicolor/48x48/apps/Makefile.in0000664000175000017500000003602614005503645016134 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/hicolor/48x48/apps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/icons/hicolor/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/hicolor/48x48/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/48x48/apps/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/hicolor/48x48/status/0000775000175000017500000000000014005504730014514 500000000000000gobby-0.6.0/icons/hicolor/48x48/status/user-color-indicator.png0000664000175000017500000000463114003367605021220 00000000000000PNG  IHDR00WsBIT|d pHYs))+ܲtEXtSoftwarewww.inkscape.org< IDATh՚MlE=vdQEX+!  \+.Q. 0r%ₖ\#-r0 8)6CuMWXvTz﷾RJBTIiqX~6Οw\JH  ʾ={d| xh>a9[j?< <fM"Itn_# /= \R~kM*S8<@< unC|?@TLq aHu)5mR,jɻ, 4= /At(RDTDMcX[+׀&ۭlΙNaټβg8 Ǐ̌VKq~k@aDogB&'L۳fSϞ_ 5`^\탱1eV6wT$gbbڜ !^6Cci-ҧVȈ2'W$Q&cnJ7Tl_<+ij0>!*IP^!Np> SS x=Lw]Ja$6:zj &˰*_ua|\+CXGaTZA62>]qhS֜byRu^zIv;7abک=\ iad$`ttԔgT8w Z1Wތ 0?IjqMa8ExE:\~$SfBe}Ӹ,Ir iUysNjW\h0?'a&pm6qyfv-3iGi<8*P>x<F7^v[}m) ŅbPA3UpfVVtFTԶ_ȯsDLl.5 !!QAP$)B)Sk3Mw9$MrCC-(%xVˊ'i5hNLkє>Zl*(R!^W jJL e&djF70URh mΫip6 Sr9IЎaYk@1Ҳ LIY5ز裥o`:HՃa$L 62 4Bm?v pP Xo)N6M5 9gphiz8ӥadʴ2i#ۭiDdKܟ軽ىo$m&~)eG[n]'MmI)lO.hStF- [n睐0VVn2̊r)e i2aXXMd'4Lb,|ٔ;"x:G[/kYATsH_n:? Q)e"xlqW_ؘq"=/n7N67|Q_f鴔r%#izLN.8 k{ewnZڠZڂFέ[sllKJ)]! $q&BlYEtQ(ˋ|9°qaVЂFJP)e}&'/uۼX(V˗_^ˤbPGػw.A"}.[&Nq·૯z›|mVߟaϞLNVoڙ:fy:mVĶA0Q)FG;A Ofڟ=vlBͿ5X8ttoIENDB`gobby-0.6.0/icons/hicolor/48x48/status/Makefile.am0000664000175000017500000000017214003367605016476 00000000000000icondir = $(datadir)/gobby-0.5/icons/hicolor/48x48/status icon_DATA = user-color-indicator.png EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/hicolor/48x48/status/Makefile.in0000664000175000017500000003606314005503645016515 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/hicolor/48x48/status ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/gobby-0.5/icons/hicolor/48x48/status icon_DATA = user-color-indicator.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/hicolor/48x48/status/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/48x48/status/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/hicolor/48x48/Makefile.am0000664000175000017500000000003614003367605015152 00000000000000SUBDIRS = apps actions status gobby-0.6.0/icons/hicolor/48x48/Makefile.in0000664000175000017500000004606214005503645015172 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/hicolor/48x48 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps actions status all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/hicolor/48x48/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/48x48/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/hicolor/Makefile.am0000664000175000017500000000065714003367605014364 00000000000000SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi gobby-0.6.0/icons/hicolor/Makefile.in0000664000175000017500000004714314005503645014374 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/hicolor ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/hicolor/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(am__recursive_targets) install-am install-data-am \ install-strip uninstall-am .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-data-hook install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-hook .PRECIOUS: Makefile install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/hicolor/scalable/0000775000175000017500000000000014005504730014140 500000000000000gobby-0.6.0/icons/hicolor/scalable/actions/0000775000175000017500000000000014005504730015600 500000000000000gobby-0.6.0/icons/hicolor/scalable/actions/user-list.svg0000664000175000017500000005711314003367605020205 00000000000000 image/svg+xml image/svg+xml image/svg+xml gobby-0.6.0/icons/hicolor/scalable/actions/document-list.svg0000664000175000017500000017771714003367605021062 00000000000000 image/svg+xml gobby-0.6.0/icons/hicolor/scalable/actions/Makefile.am0000664000175000017500000000021614003367605017561 00000000000000icondir = $(datadir)/gobby-0.5/icons/hicolor/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/hicolor/scalable/actions/Makefile.in0000664000175000017500000003612314005503645017576 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/hicolor/scalable/actions ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/gobby-0.5/icons/hicolor/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/hicolor/scalable/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/scalable/actions/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/hicolor/scalable/actions/chat.svg0000664000175000017500000001654514003367605017201 00000000000000 image/svg+xml gobby-0.6.0/icons/hicolor/scalable/apps/0000775000175000017500000000000014005504730015103 500000000000000gobby-0.6.0/icons/hicolor/scalable/apps/gobby-0.5.svg0000664000175000017500000015003614003367605017161 00000000000000 image/svg+xml image/svg+xml image/svg+xml gobby-0.6.0/icons/hicolor/scalable/apps/Makefile.am0000664000175000017500000000014614003367605017066 00000000000000icondir = $(datadir)/icons/hicolor/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/hicolor/scalable/apps/Makefile.in0000664000175000017500000003604214005503645017101 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/hicolor/scalable/apps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/icons/hicolor/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/hicolor/scalable/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/scalable/apps/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/hicolor/scalable/status/0000775000175000017500000000000014005504730015463 500000000000000gobby-0.6.0/icons/hicolor/scalable/status/user-color-indicator.svg0000664000175000017500000001700514003367605022201 00000000000000 image/svg+xml gobby-0.6.0/icons/hicolor/scalable/status/Makefile.am0000664000175000017500000000017514003367605017450 00000000000000icondir = $(datadir)/gobby-0.5/icons/hicolor/scalable/status icon_DATA = user-color-indicator.svg EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/hicolor/scalable/status/Makefile.in0000664000175000017500000003607714005503645017471 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/hicolor/scalable/status ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/gobby-0.5/icons/hicolor/scalable/status icon_DATA = user-color-indicator.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/hicolor/scalable/status/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/scalable/status/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/hicolor/scalable/Makefile.am0000664000175000017500000000003614003367605016121 00000000000000SUBDIRS = apps actions status gobby-0.6.0/icons/hicolor/scalable/Makefile.in0000664000175000017500000004607314005503645016143 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/hicolor/scalable ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps actions status all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/hicolor/scalable/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/scalable/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrint/0000775000175000017500000000000014005504730015320 500000000000000gobby-0.6.0/icons/HighContrastLargePrint/48x48/0000775000175000017500000000000014005504730016117 500000000000000gobby-0.6.0/icons/HighContrastLargePrint/48x48/actions/0000775000175000017500000000000014005504730017557 500000000000000gobby-0.6.0/icons/HighContrastLargePrint/48x48/actions/document-list.png0000664000175000017500000000205614003367605023005 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME07 6IDAThOH+Wƿ hb"Zq.nJWnZqS()HAy RZ"ծH N( ֍P5I8/1 LΜ;sfD@E$ JB5UfH4!9%7fCVV,?(px\ڊ\L=~!"ݎnJH_*.//u >}V !l/ @'AR$oR(nG4}dZ'Ieb{{χLW?H~ өY|4sss7IV @ B\ߓ4 @ jrcc#WPf.Px\s:BΊ.XXX@]]]}}}Y) Ɋ3!īF?22RHLLL(ݾΌTleYiYA9n+++Y-[SYӰX,%vU[V{ZRTlFss3fwRzzQi(i b1B!? ,--)xeߟ7QSSeL$ɂx. ncvv>I "_cc#l6r)Ds(q 6D"444@8<<,S(JJ{f,&LMM_CCCEgKMN&1l6ݛsx0R#K&6,Ԭ9_W,FvUrkgoK_x:M efjKWOZq^d1*H~\gHIENDB`gobby-0.6.0/icons/HighContrastLargePrint/48x48/actions/chat.png0000664000175000017500000000350014003367605021130 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME0!;IDAThՙ_LTǿ`֪"2R}dy)1+X 5av1ilj5F7dڇ@:(D]&cSH71;#ovͽw. L̹wΜs~F`Br3}@ :(`i Z <".h #I0 G1.H54xtH$L&Jl6p8PZZ ݾVcB<~$K}?H `dd?˷b ӉZԠ Ǟ={PVVf4UnR?Bp%>%djj,--%ZlooW?FM$cV:3gh67b452£YB$-hˡCpV---8p\.jkkQUUłʼ;KKX^^b1$ID",..ӧB䤢'ˎ;p]TWWoxOIJ$ BʣGI6ARlݺldY)LzQ ===l&!PHB\iG"MYn-..*=N cyeeE߽IR:dR驨( f l$P"/#c )%D@ b:Bb(6dRƀʢ3@=%/J[uuuJLQ $GNYBxA(?wܩWLɭlթf111QP~&׫|W'N(©TwVX?ny(B0l8|"`GG&5H*%w3 |نAz<h=j'uFVpm)GCCCCAcaap`h4OgzqBo4Iǣ(m۶+p3cF)OZ^W !xҥ5OLLe]|]]Oxxn$B:۷ǎӧz877~:opO%eUUvW}˓'OܜJuJ$@[?) e xss3GGG o$FoD $i ^nݺEͦ^\NC$[H9I>Pi_Nժ[,^|3rU e7+ QOOM&WRRA=IJL~ZSvd__yw Lܖ)ŋ900w^ P[s333x4knz2X&9{ll6~='5 6`Je\.Glv7:j544UTj7oK'd$pb7?/dmmmy\vM BbrU:zzz$Ud2++<ܹsj ]7f__>*$_"#Ɉѿ$E$w?a&IENDB`gobby-0.6.0/icons/HighContrastLargePrint/48x48/actions/Makefile.am0000664000175000017500000000023214003367605021536 00000000000000icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrint/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/HighContrastLargePrint/48x48/actions/Makefile.in0000664000175000017500000003620314005503644021553 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrint/48x48/actions ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrint/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrint/48x48/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/48x48/actions/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrint/48x48/actions/user-list.png0000664000175000017500000000354414003367605022150 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME0+IDAThY_LSYn; HmPYC6$nf&1>1FÃ& ` .fdb?1!i0 043o_zmK{;3${99WFaa%I"~/FcHld5p$'I~GrE28g;OMMa``X,p\0KkpT_k$; yEn߾bJ~~>kjj=~[~ fFyed21c@2'[VTTh.;wА3 g^lB!ݻ݂nGEEvՊ tuu>Ou8zp\H7GH'ksaD322X__ Iϳv]o۶mQH֛ ---vMsׯrn&e9$Ilmm]+W 055%,vz$9ӧUUU% q.zحz!" )9q |g9i^^ʱigP6uaaeK/YYYIXZ-CAdlw#an4aZ̛ ~ecƍrիWF x\˃`X2o2~T6:$GGGq{^]^^޼B)7-~A=<#ȲgJa:~ rI:\~a!yMMͲ_~]ӦMWL.lt#Тz1D}}&\b@ 77###jLIeeelkkc4ê*#eW/[Y8pţGɓd~~MNiKR$*$ݿ+b0xٸ񪫫O5Q🐔Nb4e__4ߵk?~8$S(JMe} <OΝcii)sssAb>}=>Ѩ vgKRØc2:fSSmr,%{ۮ]&زeڥa9cZZb0 N sÆ ,hB$ wbnnNNZFdz49sF"an-G%mɋ/* .**RE wX,9fcm֭”Zjiy回F0m Ŕ9H [Xj!X:SN`ڵB{hh(ྏb%==]D")'0;;+M&S\l#\yqz{{SN8n0jj?sLݬQURRvV -ˈ;wĈW۷cbCC-_JH'FU ͛71rrr4X8X} b999p8Z0L00 C8|>:;;ݍ6 <͛H5%7oް8I)Q?קrYFwtR?<>465w֭[>IYFdeeaժUp:p8p&O$gW|ԛ$$I6$$4,4;ؾXXca @$I?ւIENDB`gobby-0.6.0/icons/HighContrastLargePrint/48x48/apps/0000775000175000017500000000000014005504730017062 500000000000000gobby-0.6.0/icons/HighContrastLargePrint/48x48/apps/Makefile.am0000664000175000017500000000016214003367605021043 00000000000000icondir = $(datadir)/icons/HighContrastLargePrint/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/HighContrastLargePrint/48x48/apps/gobby-0.5.png0000664000175000017500000000463414003367605021127 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME.-}Hn .IDATh޽kLUW^,h2MijA;*-jiUƤ j:mt2IS&|MӴF ڴ"ikQbբcA% *vryykIT&ɣ$t%j< ( Qx< dپaTMLs5440gٲejhhDSo.}фv}AI3 `6p:c^ KUU=,IZmFx%)]_%e<7MTPP`Y0//o\/fT+IU IU5?%Q|Sssx@SͷO8zJ֢K,I?>)0 C~WVwS %;;Xv p/^aҥ_ݻwS__޽{z#g`vIxx5VXX+nSRRBff9o0VV֭[p(??_v}׊_nݒ$;v@rrMz0 ksT-IgϞ ݮCusss-Z$@5oKV^=&/}\.ΐBf)ƦM(..歷OfŊJPPc۶mx<7F 'dggt\XXmmmn\.5eF_j*@.\-\P~'Iҹs&Ս(vtt3bcc~:8K%<N6n{DZ[[1I3d^Jaa,d۶mcҥJbL̼ywttqF9Yj9ygFDž$]{OxA֯ өaVTTʅn۷Y7`-ŋ/3g ـ,_K.QSScpE|3͛7̕$''SYYɓO>'|Bff&Ñ3gZciii[A߫$5Iүϊ0-YD֮];bرcPAkkkajoo.D>IjjjR^^u1ͦ'O|mmf̘!@Og}wƻ)++… ٳ{RRRyuq5OGE.]BkHBBvu/4 #_8͗T$}g,p8k׮]cq!\.]rES$͒"F:$ڢk֬QNNU>ׯ?hzG&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrint/48x48/apps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/icons/HighContrastLargePrint/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrint/48x48/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/48x48/apps/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrint/48x48/Makefile.am0000664000175000017500000000002714003367605020100 00000000000000SUBDIRS = apps actions gobby-0.6.0/icons/HighContrastLargePrint/48x48/Makefile.in0000664000175000017500000004613014005503644020113 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrint/48x48 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps actions all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrint/48x48/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/48x48/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrint/Makefile.am0000664000175000017500000000067614003367605017313 00000000000000SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/HighContrastLargePrint install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi gobby-0.6.0/icons/HighContrastLargePrint/Makefile.in0000664000175000017500000004723714005503644017325 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrint ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/HighContrastLargePrint all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrint/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(am__recursive_targets) install-am install-data-am \ install-strip uninstall-am .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-data-hook install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-hook .PRECIOUS: Makefile install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrint/scalable/0000775000175000017500000000000014005504730017066 500000000000000gobby-0.6.0/icons/HighContrastLargePrint/scalable/actions/0000775000175000017500000000000014005504730020526 500000000000000gobby-0.6.0/icons/HighContrastLargePrint/scalable/actions/user-list.svg0000664000175000017500000001576114003367605023136 00000000000000 image/svg+xml gobby-0.6.0/icons/HighContrastLargePrint/scalable/actions/document-list.svg0000664000175000017500000000760114003367605023770 00000000000000 image/svg+xml gobby-0.6.0/icons/HighContrastLargePrint/scalable/actions/Makefile.am0000664000175000017500000000023514003367605022510 00000000000000icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrint/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/HighContrastLargePrint/scalable/actions/Makefile.in0000664000175000017500000003621714005503644022527 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrint/scalable/actions ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrint/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrint/scalable/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/scalable/actions/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrint/scalable/actions/chat.svg0000664000175000017500000001040614003367605022115 00000000000000 image/svg+xml gobby-0.6.0/icons/HighContrastLargePrint/scalable/apps/0000775000175000017500000000000014005504730020031 500000000000000gobby-0.6.0/icons/HighContrastLargePrint/scalable/apps/gobby-0.5.svg0000664000175000017500000006050114003367605022104 00000000000000 image/svg+xml gobby-0.6.0/icons/HighContrastLargePrint/scalable/apps/Makefile.am0000664000175000017500000000016514003367605022015 00000000000000icondir = $(datadir)/icons/HighContrastLargePrint/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/HighContrastLargePrint/scalable/apps/Makefile.in0000664000175000017500000003613614005503644022032 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrint/scalable/apps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/icons/HighContrastLargePrint/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrint/scalable/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/scalable/apps/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrint/scalable/Makefile.am0000664000175000017500000000002714003367605021047 00000000000000SUBDIRS = apps actions gobby-0.6.0/icons/HighContrastLargePrint/scalable/Makefile.in0000664000175000017500000004614114005503644021064 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrint/scalable ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps actions all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrint/scalable/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/scalable/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/Makefile.am0000664000175000017500000000010714003367605012713 00000000000000SUBDIRS = hicolor HighContrastLargePrint HighContrastLargePrintInverse gobby-0.6.0/icons/Makefile.in0000664000175000017500000004606114005503645012733 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = hicolor HighContrastLargePrint HighContrastLargePrintInverse all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrintInverse/0000775000175000017500000000000014005504730016654 500000000000000gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/0000775000175000017500000000000014005504730017453 500000000000000gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/actions/0000775000175000017500000000000014005504730021113 500000000000000gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/actions/document-list.png0000664000175000017500000000203014003367605024331 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME'!m IDAThKH+gGJH(xcB*ޅtU J馈hႠT\M v!^Eh݈tQ(Hu!DƠy1ҤIkq>.*///<NS鷚.ؐHsssQuPkkk~Ƚ>ۇEqvcjSb!"p\#fDfUX^K{n=@AKjp8hiiQψ68^^*666;$0::Z9Kɔߧ$˶N'+++444d;??'V@ P<ѧ hy\BE8nlv788(|>\/www+g?^<'`osYvV g;oQ.!sYTIENDB`gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/actions/chat.png0000664000175000017500000000343114003367605022467 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME&3OIDATh՚_LT?3Έ3 0]۔vp4+hV҈ щ@LԤuLվb oM(!6RLKBBI[P*j{B2o2!߹;  pyxTƀ? !3  fWJg-*"]JO[zj^/6 Ś5kx<̌v昞^n'.._7n7{% RZZJII EEE׫M&LLLDcpp^>nXuuz/555 BI'Xqs`rzb2q%P䧁#@P6 ٱca4Gx<˩S>R+-jǏGFF4fI&Zܜ:t >DANW\ FA3߀ ËgJCCaFg3|2|-2dƍ c~jjJvmd8 sŴm^U,j3|_VLj,#5Άh TSShU[[ked0:zSݿ"[. ~~~^9bY6.pi;vLR6] mrبf=|$۲wvpp>4D*H,%8#\?Ӽs;Lr:WsIENDB`gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/actions/Makefile.am0000664000175000017500000000024114003367605023072 00000000000000icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrintInverse/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/actions/Makefile.in0000664000175000017500000003623714005503644023116 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrintInverse/48x48/actions ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrintInverse/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/48x48/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/48x48/actions/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/actions/user-list.png0000664000175000017500000000351614003367605023503 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME'mIDAThZmLSW~nU>)5l1 ?fقH$ j/ _FdÌ%N2-,ԥS*ut,Jt% w?ޜ{[ල$ܞs9{AY1.[%`(G/V`Ps.-Kм 9_ \NNڵO&t:jD6N[<ϧ/Roo/%AlTRR8w_xtsGϟp8LrիWJFJbq ͥwR*2 R2݈rc? BluBWW\.BZ-, ?Q<~|)=577'ZT*544P {)mܸ7< 4`jjjD 0:>KKKibbB4E~a x<8T]]7jh;$rLb^{{{*1jmm驫٣Xŗ.]޹sgJZ- znݺ%ӨӬG FR+txB59T2ƶmۄDZ33>>.ԋшܢb؆V333ibC:)L`0(7oN+**HPhEgB}PT)رcP+Moln B9r$eB{UH&zD"v)###ۢ㸪wnq͖SN{^RTlhФtK<ϋ܉fYhqqQD`dd };4\t8 }|Nq\pD"<{,t<c3YRnѣ|p\χlFYYٚ3ׇ}aaa!h@)|HKKK=x nI%H^Pߍ7onOLQyyyЛ7oq{n?~8s<;vLJ< jҕ+Wp͑磞~:rbB!AԺ>ё*]}vv6  !k8Q 9JXu'sq*|քy2?/ 23ם Dm/a[l=qL&ӺX,Byx^8n;wT455l9NiOc݈'N9[gΜISjkksI}c222vyNֺZdeeɓ'qGGG d=b{N%%% ~?BD_ʠuuuQccJ{i,7K\^^d``@^^rss/6`ff]5@ 0?ϒAMJ*QXAs|mJRQ]Y)-_z9_{M{3IENDB`gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/apps/0000775000175000017500000000000014005504730020416 500000000000000gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/apps/Makefile.am0000664000175000017500000000017114003367605022377 00000000000000icondir = $(datadir)/icons/HighContrastLargePrintInverse/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/apps/gobby-0.5.png0000664000175000017500000000455414003367605022464 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME'8IDATh޽mLW ˼$@x[5m)FDVƴԒ~`m5Mܘlڢͺ[ݕZְ!a#Hk@еPgv &p39i}@l9 yMp$o* BhH j ͕KIIэ74[illTJJhOt z-KeFh&R"l"?Ρ!n'lX,2228<7ofxx`9w`=FwVa,))-**3穨Phho**[& ;0ןxqXXhѢ޾}{Pq@ ) 9ikkۧp ˗`<kY;QNii)9 % ;::ϧ JKK ,Y{bX&u G+**ĉX,|>TVVõ@nv(KKK%IGRRREGGP;wpкuL\reZٳ=122bcXm&@+V$y^mٲ%&I裏Ç PMMʹ8q":Nf\}9w۶mȑ#~ժU100`hhݻwsiV+wS#&JKKzhtb\.caj'Izg&p풤<zJ&e\"**h:;;'͛7Xt)82Jpf*p80I#d/_NQQQ,$ӧOT02S__/Ia(>>^^~ejjjzB| >Ɂ!!`jkk{.wd3 !իW|$%%q% hjj2?|駼+fp-زe ;v8sLC8uuuIY}>TVV*ӭ>OCCC&EFFh9i(//$(77WǏ7-uuuzvZnI<BvXfjkkK/dr(^x.]ʒ%Kxꩧx'X,rMz… yąKWWǎN%.\ I:sCHMMUKK˄Ybh```G7xc!T (66V^W9F\.I۷~hzuus>-X`Af";wrU[oNYYj6lkظq#w{Myy97ߐ̮]B=.\2J1%I<ŋ'l6Mnݒ$9rd^Ѐq11\.9+W7.dNZZ/O? ?0dW2w[[[KCCYYY԰o>*++x<W… 3.]DLL/x2/tPoosSkk$jx=z蘂fZvc722A(11Q%%%ϧ OMMU$g̠^W[Mh"6l@ff&$$$֭[|>cTUUl2^/Vʕ+nLexxf|>'MJvϞ=c,x_hzuI t*---nnnҁ/ɓf/_}V\NIRCCYԆUUUl޼fVX&))m۶MXX ={v#<3()|\(++ hv!IRGGŒ n@%%%i;&&Ƥ6m2/·6$رcF1_J;fwxXVp:x'9&yӕA2')h駟kMzje ><USi` z.Tr8דj[p:\.vbcc`p)c̛Os.6qGt)y&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrintInverse/48x48/apps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/icons/HighContrastLargePrintInverse/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/48x48/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/48x48/apps/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/Makefile.am0000664000175000017500000000002714003367605021434 00000000000000SUBDIRS = apps actions gobby-0.6.0/icons/HighContrastLargePrintInverse/48x48/Makefile.in0000664000175000017500000004615514005503644021456 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrintInverse/48x48 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps actions all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/48x48/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/48x48/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrintInverse/Makefile.am0000664000175000017500000000070514003367605020640 00000000000000SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/HighContrastLargePrintInverse install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi gobby-0.6.0/icons/HighContrastLargePrintInverse/Makefile.in0000664000175000017500000004727314005503644020661 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrintInverse ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/HighContrastLargePrintInverse all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(am__recursive_targets) install-am install-data-am \ install-strip uninstall-am .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-data-hook install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-hook .PRECIOUS: Makefile install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/0000775000175000017500000000000014005504730020422 500000000000000gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/actions/0000775000175000017500000000000014005504730022062 500000000000000gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/actions/user-list.svg0000664000175000017500000001575414003367605024474 00000000000000 image/svg+xml gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/actions/document-list.svg0000664000175000017500000000757414003367605025335 00000000000000 image/svg+xml gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/actions/Makefile.am0000664000175000017500000000024414003367605024044 00000000000000icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrintInverse/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/actions/Makefile.in0000664000175000017500000003625314005503644024063 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrintInverse/scalable/actions ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrintInverse/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/scalable/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/scalable/actions/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/actions/chat.svg0000664000175000017500000001047314003367605023455 00000000000000 image/svg+xml gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/apps/0000775000175000017500000000000014005504730021365 500000000000000gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/apps/gobby-0.5.svg0000664000175000017500000006165114003367605023447 00000000000000 image/svg+xml gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/apps/Makefile.am0000664000175000017500000000017414003367605023351 00000000000000icondir = $(datadir)/icons/HighContrastLargePrintInverse/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/apps/Makefile.in0000664000175000017500000003617214005503644023366 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrintInverse/scalable/apps ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ icondir = $(datadir)/icons/HighContrastLargePrintInverse/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/scalable/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/scalable/apps/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-iconDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-iconDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/Makefile.am0000664000175000017500000000002714003367605022403 00000000000000SUBDIRS = apps actions gobby-0.6.0/icons/HighContrastLargePrintInverse/scalable/Makefile.in0000664000175000017500000004616614005503644022427 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = icons/HighContrastLargePrintInverse/scalable ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \ $(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ HAVE_CXX11 = @HAVE_CXX11@ HELP_DIR = @HELP_DIR@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLLIBS = @INTLLIBS@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ INTLTOOL_MERGE = @INTLTOOL_MERGE@ INTLTOOL_PERL = @INTLTOOL_PERL@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ ITSTOOL = @ITSTOOL@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ XMLLINT = @XMLLINT@ YELP_LC_DIST = @YELP_LC_DIST@ YELP_LC_MEDIA_LINKS = @YELP_LC_MEDIA_LINKS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = apps actions all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/scalable/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/scalable/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic cscopelist-am ctags ctags-am \ distclean distclean-generic distclean-tags distdir dvi dvi-am \ html html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.6.0/configure0000775000175000017500000110357614005503643011466 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for gobby 0.6.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and crew@0x539.de $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='gobby' PACKAGE_TARNAME='gobby' PACKAGE_VERSION='0.6.0' PACKAGE_STRING='gobby 0.6.0' PACKAGE_BUGREPORT='crew@0x539.de' PACKAGE_URL='' ac_unique_file="code/window.hpp" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS GSETTINGS_RULES GLIB_COMPILE_SCHEMAS gsettingsschemadir GSETTINGS_DISABLE_SCHEMAS_COMPILE HAVE_YELP_FALSE HAVE_YELP_TRUE YELP_HELP_RULES XMLLINT ITSTOOL HELP_DIR YELP_LC_DIST YELP_LC_MEDIA_LINKS GETTEXT_PACKAGE ALL_LINGUAS INTLTOOL_PERL MSGMERGE INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE intltool__v_merge_options_0 intltool__v_merge_options_ INTLTOOL_V_MERGE_OPTIONS INTLTOOL__v_MERGE_0 INTLTOOL__v_MERGE_ INTLTOOL_V_MERGE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS XGETTEXT GMSGFMT MSGFMT_OPTS MSGFMT INTL_MACOSX_LIBS USE_NLS EGREP GREP infinote_LIBS infinote_CFLAGS gobby_LIBS gobby_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG WIN32_FALSE WIN32_TRUE WINDRES HAVE_CXX11 RANLIB LN_S CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX host_os host_vendor host_cpu host build_os build_vendor build_cpu build AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_nls enable_docs with_help_dir enable_schemas_compile ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR gobby_CFLAGS gobby_LIBS infinote_CFLAGS infinote_LIBS ITSTOOL XMLLINT GLIB_COMPILE_SCHEMAS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures gobby 0.6.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gobby] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of gobby 0.6.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-nls do not use Native Language Support --enable-docs Builds and installs the documentation [[default=yes]] --disable-schemas-compile Disable regeneration of gschemas.compiled on install Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-help-dir=DIR path where help files are installed Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path gobby_CFLAGS C compiler flags for gobby, overriding pkg-config gobby_LIBS linker flags for gobby, overriding pkg-config infinote_CFLAGS C compiler flags for infinote, overriding pkg-config infinote_LIBS linker flags for infinote, overriding pkg-config ITSTOOL Path to the `itstool` command XMLLINT Path to the `xmllint` command GLIB_COMPILE_SCHEMAS value of glib_compile_schemas for gio-2.0, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF gobby configure 0.6.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ---------------------------- ## ## Report this to crew@0x539.de ## ## ---------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by gobby $as_me 0.6.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in . "$srcdir"/.; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in . \"$srcdir\"/." "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gobby' VERSION='0.6.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ac_config_headers="$ac_config_headers code/features.hpp" # Extract host information. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 $as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 $as_echo "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache # Recent versions of glib/gtkmm need c++11 support ax_cxx_compile_cxx11_required=true ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_success=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5 $as_echo_n "checking whether $CXX supports C++11 features by default... " >&6; } if ${ax_cv_cxx_compile_cxx11+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ // If the compiler admits that it is not ready for C++11, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201103L #error "This is not a C++11 compiler" #else namespace cxx11 { namespace test_static_assert { template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; } namespace test_final_override { struct Base { virtual void f() {} }; struct Derived : public Base { virtual void f() override {} }; } namespace test_double_right_angle_brackets { template < typename T > struct check {}; typedef check single_type; typedef check> double_type; typedef check>> triple_type; typedef check>>> quadruple_type; } namespace test_decltype { int f() { int a = 1; decltype(a) b = 2; return a + b; } } namespace test_type_deduction { template < typename T1, typename T2 > struct is_same { static const bool value = false; }; template < typename T > struct is_same { static const bool value = true; }; template < typename T1, typename T2 > auto add(T1 a1, T2 a2) -> decltype(a1 + a2) { return a1 + a2; } int test(const int c, volatile int v) { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == false, ""); auto ac = c; auto av = v; auto sumi = ac + av + 'x'; auto sumf = ac + av + 1.0; static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == true, ""); return (sumf > 0.0) ? sumi : add(c, v); } } namespace test_noexcept { int f() { return 0; } int g() noexcept { return 0; } static_assert(noexcept(f()) == false, ""); static_assert(noexcept(g()) == true, ""); } namespace test_constexpr { template < typename CharT > unsigned long constexpr strlen_c_r(const CharT *const s, const unsigned long acc) noexcept { return *s ? strlen_c_r(s + 1, acc + 1) : acc; } template < typename CharT > unsigned long constexpr strlen_c(const CharT *const s) noexcept { return strlen_c_r(s, 0UL); } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("1") == 1UL, ""); static_assert(strlen_c("example") == 7UL, ""); static_assert(strlen_c("another\0example") == 7UL, ""); } namespace test_rvalue_references { template < int N > struct answer { static constexpr int value = N; }; answer<1> f(int&) { return answer<1>(); } answer<2> f(const int&) { return answer<2>(); } answer<3> f(int&&) { return answer<3>(); } void test() { int i = 0; const int c = 0; static_assert(decltype(f(i))::value == 1, ""); static_assert(decltype(f(c))::value == 2, ""); static_assert(decltype(f(0))::value == 3, ""); } } namespace test_uniform_initialization { struct test { static const int zero {}; static const int one {1}; }; static_assert(test::zero == 0, ""); static_assert(test::one == 1, ""); } namespace test_lambdas { void test1() { auto lambda1 = [](){}; auto lambda2 = lambda1; lambda1(); lambda2(); } int test2() { auto a = [](int i, int j){ return i + j; }(1, 2); auto b = []() -> int { return '0'; }(); auto c = [=](){ return a + b; }(); auto d = [&](){ return c; }(); auto e = [a, &b](int x) mutable { const auto identity = [](int y){ return y; }; for (auto i = 0; i < a; ++i) a += b--; return x + identity(a + b); }(0); return a + b + c + d + e; } int test3() { const auto nullary = [](){ return 0; }; const auto unary = [](int x){ return x; }; using nullary_t = decltype(nullary); using unary_t = decltype(unary); const auto higher1st = [](nullary_t f){ return f(); }; const auto higher2nd = [unary](nullary_t f1){ return [unary, f1](unary_t f2){ return f2(unary(f1())); }; }; return higher1st(nullary) + higher2nd(nullary)(unary); } } namespace test_variadic_templates { template struct sum; template struct sum { static constexpr auto value = N0 + sum::value; }; template <> struct sum<> { static constexpr auto value = 0; }; static_assert(sum<>::value == 0, ""); static_assert(sum<1>::value == 1, ""); static_assert(sum<23>::value == 23, ""); static_assert(sum<1, 2>::value == 3, ""); static_assert(sum<5, 5, 11>::value == 21, ""); static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); } // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function // because of this. namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } } // namespace cxx11 #endif // __cplusplus >= 201103L _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ax_cv_cxx_compile_cxx11=yes else ax_cv_cxx_compile_cxx11=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5 $as_echo "$ax_cv_cxx_compile_cxx11" >&6; } if test x$ax_cv_cxx_compile_cxx11 = xyes; then ac_success=yes fi if test x$ac_success = xno; then for switch in -std=gnu++11 -std=gnu++0x; do cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 $as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } if eval \${$cachevar+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ // If the compiler admits that it is not ready for C++11, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201103L #error "This is not a C++11 compiler" #else namespace cxx11 { namespace test_static_assert { template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; } namespace test_final_override { struct Base { virtual void f() {} }; struct Derived : public Base { virtual void f() override {} }; } namespace test_double_right_angle_brackets { template < typename T > struct check {}; typedef check single_type; typedef check> double_type; typedef check>> triple_type; typedef check>>> quadruple_type; } namespace test_decltype { int f() { int a = 1; decltype(a) b = 2; return a + b; } } namespace test_type_deduction { template < typename T1, typename T2 > struct is_same { static const bool value = false; }; template < typename T > struct is_same { static const bool value = true; }; template < typename T1, typename T2 > auto add(T1 a1, T2 a2) -> decltype(a1 + a2) { return a1 + a2; } int test(const int c, volatile int v) { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == false, ""); auto ac = c; auto av = v; auto sumi = ac + av + 'x'; auto sumf = ac + av + 1.0; static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == true, ""); return (sumf > 0.0) ? sumi : add(c, v); } } namespace test_noexcept { int f() { return 0; } int g() noexcept { return 0; } static_assert(noexcept(f()) == false, ""); static_assert(noexcept(g()) == true, ""); } namespace test_constexpr { template < typename CharT > unsigned long constexpr strlen_c_r(const CharT *const s, const unsigned long acc) noexcept { return *s ? strlen_c_r(s + 1, acc + 1) : acc; } template < typename CharT > unsigned long constexpr strlen_c(const CharT *const s) noexcept { return strlen_c_r(s, 0UL); } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("1") == 1UL, ""); static_assert(strlen_c("example") == 7UL, ""); static_assert(strlen_c("another\0example") == 7UL, ""); } namespace test_rvalue_references { template < int N > struct answer { static constexpr int value = N; }; answer<1> f(int&) { return answer<1>(); } answer<2> f(const int&) { return answer<2>(); } answer<3> f(int&&) { return answer<3>(); } void test() { int i = 0; const int c = 0; static_assert(decltype(f(i))::value == 1, ""); static_assert(decltype(f(c))::value == 2, ""); static_assert(decltype(f(0))::value == 3, ""); } } namespace test_uniform_initialization { struct test { static const int zero {}; static const int one {1}; }; static_assert(test::zero == 0, ""); static_assert(test::one == 1, ""); } namespace test_lambdas { void test1() { auto lambda1 = [](){}; auto lambda2 = lambda1; lambda1(); lambda2(); } int test2() { auto a = [](int i, int j){ return i + j; }(1, 2); auto b = []() -> int { return '0'; }(); auto c = [=](){ return a + b; }(); auto d = [&](){ return c; }(); auto e = [a, &b](int x) mutable { const auto identity = [](int y){ return y; }; for (auto i = 0; i < a; ++i) a += b--; return x + identity(a + b); }(0); return a + b + c + d + e; } int test3() { const auto nullary = [](){ return 0; }; const auto unary = [](int x){ return x; }; using nullary_t = decltype(nullary); using unary_t = decltype(unary); const auto higher1st = [](nullary_t f){ return f(); }; const auto higher2nd = [unary](nullary_t f1){ return [unary, f1](unary_t f2){ return f2(unary(f1())); }; }; return higher1st(nullary) + higher2nd(nullary)(unary); } } namespace test_variadic_templates { template struct sum; template struct sum { static constexpr auto value = N0 + sum::value; }; template <> struct sum<> { static constexpr auto value = 0; }; static_assert(sum<>::value == 0, ""); static_assert(sum<1>::value == 1, ""); static_assert(sum<23>::value == 23, ""); static_assert(sum<1, 2>::value == 3, ""); static_assert(sum<5, 5, 11>::value == 21, ""); static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); } // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function // because of this. namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } } // namespace cxx11 #endif // __cplusplus >= 201103L _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval $cachevar=yes else eval $cachevar=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then CXXCPP="$CXXCPP $switch" fi ac_success=yes break fi done fi if test x$ac_success = xno; then for switch in -std=c++11 -std=c++0x +std=c++11 "-h std=c++11"; do cachevar=`$as_echo "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5 $as_echo_n "checking whether $CXX supports C++11 features with $switch... " >&6; } if eval \${$cachevar+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_CXX="$CXX" CXX="$CXX $switch" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ // If the compiler admits that it is not ready for C++11, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201103L #error "This is not a C++11 compiler" #else namespace cxx11 { namespace test_static_assert { template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; } namespace test_final_override { struct Base { virtual void f() {} }; struct Derived : public Base { virtual void f() override {} }; } namespace test_double_right_angle_brackets { template < typename T > struct check {}; typedef check single_type; typedef check> double_type; typedef check>> triple_type; typedef check>>> quadruple_type; } namespace test_decltype { int f() { int a = 1; decltype(a) b = 2; return a + b; } } namespace test_type_deduction { template < typename T1, typename T2 > struct is_same { static const bool value = false; }; template < typename T > struct is_same { static const bool value = true; }; template < typename T1, typename T2 > auto add(T1 a1, T2 a2) -> decltype(a1 + a2) { return a1 + a2; } int test(const int c, volatile int v) { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == false, ""); auto ac = c; auto av = v; auto sumi = ac + av + 'x'; auto sumf = ac + av + 1.0; static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == true, ""); return (sumf > 0.0) ? sumi : add(c, v); } } namespace test_noexcept { int f() { return 0; } int g() noexcept { return 0; } static_assert(noexcept(f()) == false, ""); static_assert(noexcept(g()) == true, ""); } namespace test_constexpr { template < typename CharT > unsigned long constexpr strlen_c_r(const CharT *const s, const unsigned long acc) noexcept { return *s ? strlen_c_r(s + 1, acc + 1) : acc; } template < typename CharT > unsigned long constexpr strlen_c(const CharT *const s) noexcept { return strlen_c_r(s, 0UL); } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("1") == 1UL, ""); static_assert(strlen_c("example") == 7UL, ""); static_assert(strlen_c("another\0example") == 7UL, ""); } namespace test_rvalue_references { template < int N > struct answer { static constexpr int value = N; }; answer<1> f(int&) { return answer<1>(); } answer<2> f(const int&) { return answer<2>(); } answer<3> f(int&&) { return answer<3>(); } void test() { int i = 0; const int c = 0; static_assert(decltype(f(i))::value == 1, ""); static_assert(decltype(f(c))::value == 2, ""); static_assert(decltype(f(0))::value == 3, ""); } } namespace test_uniform_initialization { struct test { static const int zero {}; static const int one {1}; }; static_assert(test::zero == 0, ""); static_assert(test::one == 1, ""); } namespace test_lambdas { void test1() { auto lambda1 = [](){}; auto lambda2 = lambda1; lambda1(); lambda2(); } int test2() { auto a = [](int i, int j){ return i + j; }(1, 2); auto b = []() -> int { return '0'; }(); auto c = [=](){ return a + b; }(); auto d = [&](){ return c; }(); auto e = [a, &b](int x) mutable { const auto identity = [](int y){ return y; }; for (auto i = 0; i < a; ++i) a += b--; return x + identity(a + b); }(0); return a + b + c + d + e; } int test3() { const auto nullary = [](){ return 0; }; const auto unary = [](int x){ return x; }; using nullary_t = decltype(nullary); using unary_t = decltype(unary); const auto higher1st = [](nullary_t f){ return f(); }; const auto higher2nd = [unary](nullary_t f1){ return [unary, f1](unary_t f2){ return f2(unary(f1())); }; }; return higher1st(nullary) + higher2nd(nullary)(unary); } } namespace test_variadic_templates { template struct sum; template struct sum { static constexpr auto value = N0 + sum::value; }; template <> struct sum<> { static constexpr auto value = 0; }; static_assert(sum<>::value == 0, ""); static_assert(sum<1>::value == 1, ""); static_assert(sum<23>::value == 23, ""); static_assert(sum<1, 2>::value == 3, ""); static_assert(sum<5, 5, 11>::value == 21, ""); static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); } // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function // because of this. namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } } // namespace cxx11 #endif // __cplusplus >= 201103L _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval $cachevar=yes else eval $cachevar=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CXX="$ac_save_CXX" fi eval ac_res=\$$cachevar { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test x\$$cachevar = xyes; then CXX="$CXX $switch" if test -n "$CXXCPP" ; then CXXCPP="$CXXCPP $switch" fi ac_success=yes break fi done fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x$ax_cxx_compile_cxx11_required = xtrue; then if test x$ac_success = xno; then as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5 fi fi if test x$ac_success = xno; then HAVE_CXX11=0 { $as_echo "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5 $as_echo "$as_me: No compiler with C++11 support was found" >&6;} else HAVE_CXX11=1 $as_echo "#define HAVE_CXX11 1" >>confdefs.h fi ################################### # Check for Win32 ################################### { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable WIN32 specific flags" >&5 $as_echo_n "checking whether to enable WIN32 specific flags... " >&6; } case "$host_os" in *mingw*) win32=true { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi ;; *) win32=false { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac if test x$win32 = xtrue; then WIN32_TRUE= WIN32_FALSE='#' else WIN32_TRUE='#' WIN32_FALSE= fi required_libs="libxml++-2.6 glibmm-2.4 >= 2.39.93 giomm-2.4 >= 2.39.93 libgsasl >= 0.2.21 gnutls >= 3.0.20 gtkmm-3.0 >= 3.6.0 gtksourceview-3.0 >= 3.0.0" ################################### # Check for libraries. ################################### if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gobby" >&5 $as_echo_n "checking for gobby... " >&6; } if test -n "$gobby_CFLAGS"; then pkg_cv_gobby_CFLAGS="$gobby_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$required_libs\""; } >&5 ($PKG_CONFIG --exists --print-errors "$required_libs") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_gobby_CFLAGS=`$PKG_CONFIG --cflags "$required_libs" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$gobby_LIBS"; then pkg_cv_gobby_LIBS="$gobby_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$required_libs\""; } >&5 ($PKG_CONFIG --exists --print-errors "$required_libs") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_gobby_LIBS=`$PKG_CONFIG --libs "$required_libs" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then gobby_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$required_libs" 2>&1` else gobby_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$required_libs" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$gobby_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($required_libs) were not met: $gobby_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables gobby_CFLAGS and gobby_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables gobby_CFLAGS and gobby_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else gobby_CFLAGS=$pkg_cv_gobby_CFLAGS gobby_LIBS=$pkg_cv_gobby_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for infinote" >&5 $as_echo_n "checking for infinote... " >&6; } if test -n "$infinote_CFLAGS"; then pkg_cv_infinote_CFLAGS="$infinote_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libinfinity-0.7 libinftext-0.7 libinfgtk-0.7 libinftextgtk-0.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "libinfinity-0.7 libinftext-0.7 libinfgtk-0.7 libinftextgtk-0.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_infinote_CFLAGS=`$PKG_CONFIG --cflags "libinfinity-0.7 libinftext-0.7 libinfgtk-0.7 libinftextgtk-0.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$infinote_LIBS"; then pkg_cv_infinote_LIBS="$infinote_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libinfinity-0.7 libinftext-0.7 libinfgtk-0.7 libinftextgtk-0.7\""; } >&5 ($PKG_CONFIG --exists --print-errors "libinfinity-0.7 libinftext-0.7 libinfgtk-0.7 libinftextgtk-0.7") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_infinote_LIBS=`$PKG_CONFIG --libs "libinfinity-0.7 libinftext-0.7 libinfgtk-0.7 libinftextgtk-0.7" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then infinote_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libinfinity-0.7 libinftext-0.7 libinfgtk-0.7 libinftextgtk-0.7" 2>&1` else infinote_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libinfinity-0.7 libinftext-0.7 libinfgtk-0.7 libinftextgtk-0.7" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$infinote_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libinfinity-0.7 libinftext-0.7 libinfgtk-0.7 libinftextgtk-0.7) were not met: $infinote_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables infinote_CFLAGS and infinote_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables infinote_CFLAGS and infinote_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else infinote_CFLAGS=$pkg_cv_infinote_CFLAGS infinote_LIBS=$pkg_cv_infinote_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache ################################### # Glib i18n/gettext support. ################################### ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs $INTL_MACOSX_LIBS" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" cat >>confdefs.h <<_ACEOF #define GOBBY_LOCALEDIR "$localedir" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.35.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "0.35.0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.35.0" >&5 $as_echo_n "checking for intltool >= 0.35.0... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool 0.35.0 or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 $as_echo "$INTLTOOL_PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_PERL"; then as_fn_error $? "perl not found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 $as_echo_n "checking for perl >= 5.8.1... " >&6; } $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5 else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 $as_echo "$IT_PERL_VERSION" >&6; } fi if test "x" != "xno-xml"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 $as_echo_n "checking for XML::Parser... " >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5 fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile GETTEXT_PACKAGE=gobby05 cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "${GETTEXT_PACKAGE}" _ACEOF ################################### # Help file building ################################### # Check whether --enable-docs was given. if test "${enable_docs+set}" = set; then : enableval=$enable_docs; enable_docs=$withval else enable_docs=yes fi if test "x$enable_docs" = "xyes"; then YELP_LC_MEDIA_LINKS=true YELP_LC_DIST=true for yelpopt in ; do case $yelpopt in lc-media-links) YELP_LC_MEDIA_LINKS=true ;; no-lc-media-links) YELP_LC_MEDIA_LINKS= ;; lc-dist) YELP_LC_DIST=true ;; no-lc-dist) YELP_LC_DIST= ;; *) as_fn_error $? "Unrecognized YELP_HELP_INIT option $yelpopt\"" "$LINENO" 5 ;; esac done; # Check whether --with-help-dir was given. if test "${with_help_dir+set}" = set; then : withval=$with_help_dir; else with_help_dir='${datadir}/help' fi HELP_DIR="$with_help_dir" # Extract the first word of "itstool", so it can be a program name with args. set dummy itstool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ITSTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ITSTOOL"; then ac_cv_prog_ITSTOOL="$ITSTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ITSTOOL="itstool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ITSTOOL=$ac_cv_prog_ITSTOOL if test -n "$ITSTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ITSTOOL" >&5 $as_echo "$ITSTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$ITSTOOL" = x; then as_fn_error $? "itstool not found" "$LINENO" 5 fi # Extract the first word of "xmllint", so it can be a program name with args. set dummy xmllint; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_XMLLINT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$XMLLINT"; then ac_cv_prog_XMLLINT="$XMLLINT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_XMLLINT="xmllint" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi XMLLINT=$ac_cv_prog_XMLLINT if test -n "$XMLLINT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5 $as_echo "$XMLLINT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x"$XMLLINT" = x; then as_fn_error $? "xmllint not found" "$LINENO" 5 fi YELP_HELP_RULES=' HELP_ID ?= HELP_POT ?= HELP_FILES ?= HELP_EXTRA ?= HELP_MEDIA ?= HELP_LINGUAS ?= _HELP_LINGUAS = $(if $(filter environment,$(origin LINGUAS)),$(filter $(LINGUAS),$(HELP_LINGUAS)),$(HELP_LINGUAS)) _HELP_POTFILE = $(if $(HELP_POT),$(HELP_POT),$(if $(HELP_ID),$(HELP_ID).pot)) _HELP_POFILES = $(if $(HELP_ID),$(foreach lc,$(_HELP_LINGUAS),$(lc)/$(lc).po)) _HELP_MOFILES = $(patsubst %.po,%.mo,$(_HELP_POFILES)) _HELP_C_FILES = $(foreach f,$(HELP_FILES),C/$(f)) _HELP_C_EXTRA = $(foreach f,$(HELP_EXTRA),C/$(f)) _HELP_C_MEDIA = $(foreach f,$(HELP_MEDIA),C/$(f)) _HELP_LC_FILES = $(foreach lc,$(_HELP_LINGUAS),$(foreach f,$(HELP_FILES),$(lc)/$(f))) _HELP_LC_STAMPS = $(foreach lc,$(_HELP_LINGUAS),$(lc)/$(lc).stamp) _HELP_DEFAULT_V = $(if $(AM_DEFAULT_VERBOSITY),$(AM_DEFAULT_VERBOSITY),1) _HELP_V = $(if $(V),$(V),$(_HELP_DEFAULT_V)) _HELP_LC_VERBOSE = $(_HELP_LC_VERBOSE_$(_HELP_V)) _HELP_LC_VERBOSE_ = $(_HELP_LC_VERBOSE_$(_HELP_DEFAULT_V)) _HELP_LC_VERBOSE_0 = @echo " GEN "$(dir $@); all: $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(_HELP_C_MEDIA) $(_HELP_LC_FILES) $(_HELP_POFILES) .PHONY: pot pot: $(_HELP_POTFILE) $(_HELP_POTFILE): $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(_HELP_C_MEDIA) $(AM_V_GEN)if test -d "C"; then d=; else d="$(srcdir)/"; fi; \ $(ITSTOOL) -o "$@" $(foreach f,$(_HELP_C_FILES),"$${d}$(f)") .PHONY: repo repo: $(_HELP_POTFILE) $(AM_V_at)for po in $(_HELP_POFILES); do \ if test "x$(_HELP_V)" = "x0"; then echo " GEN $${po}"; fi; \ msgmerge -q -o "$${po}" "$${po}" "$(_HELP_POTFILE)"; \ done $(_HELP_POFILES): $(AM_V_at)if ! test -d "$(dir $@)"; then mkdir "$(dir $@)"; fi $(AM_V_at)if test ! -f "$@" -a -f "$(srcdir)/$@"; then cp "$(srcdir)/$@" "$@"; fi $(AM_V_GEN)if ! test -f "$@"; then \ (cd "$(dir $@)" && \ $(ITSTOOL) -o "$(notdir $@).tmp" $(_HELP_C_FILES) && \ mv "$(notdir $@).tmp" "$(notdir $@)"); \ else \ (cd "$(dir $@)" && \ $(ITSTOOL) -o "$(notdir $@).tmp" $(_HELP_C_FILES) && \ msgmerge -o "$(notdir $@)" "$(notdir $@)" "$(notdir $@).tmp" && \ rm "$(notdir $@).tmp"); \ fi $(_HELP_MOFILES): %.mo: %.po $(AM_V_at)if ! test -d "$(dir $@)"; then mkdir "$(dir $@)"; fi $(AM_V_GEN)msgfmt -o "$@" "$<" $(_HELP_LC_FILES): $(_HELP_LINGUAS) $(_HELP_LINGUAS): $(_HELP_LC_STAMPS) $(_HELP_LC_STAMPS): %.stamp: %.mo $(_HELP_LC_STAMPS): $(_HELP_C_FILES) $(_HELP_C_EXTRA) $(AM_V_at)if ! test -d "$(dir $@)"; then mkdir "$(dir $@)"; fi $(_HELP_LC_VERBOSE)if test -d "C"; then d="../"; else d="$(abs_srcdir)/"; fi; \ mo="$(dir $@)$(patsubst %/$(notdir $@),%,$@).mo"; \ if test -f "$${mo}"; then mo="../$${mo}"; else mo="$(abs_srcdir)/$${mo}"; fi; \ (cd "$(dir $@)" && $(ITSTOOL) -m "$${mo}" $(foreach f,$(_HELP_C_FILES),$${d}/$(f))) && \ touch "$@" .PHONY: clean-help mostlyclean-am: $(if $(HELP_ID),clean-help) clean-help: rm -f $(_HELP_LC_FILES) $(_HELP_LC_STAMPS) $(_HELP_MOFILES) EXTRA_DIST ?= EXTRA_DIST += $(_HELP_C_EXTRA) $(_HELP_C_MEDIA) EXTRA_DIST += $(if $(YELP_LC_DIST),$(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).stamp)) EXTRA_DIST += $(foreach lc,$(HELP_LINGUAS),$(lc)/$(lc).po) EXTRA_DIST += $(foreach f,$(HELP_MEDIA),$(foreach lc,$(HELP_LINGUAS),$(wildcard $(lc)/$(f)))) distdir: distdir-help-files distdir-help-files: $(_HELP_LC_FILES) @for lc in C $(if $(YELP_LC_DIST),$(HELP_LINGUAS)) ; do \ $(MKDIR_P) "$(distdir)/$$lc"; \ for file in $(HELP_FILES); do \ if test -f "$$lc/$$file"; then d=./; else d=$(srcdir)/; fi; \ cp -p "$$d$$lc/$$file" "$(distdir)/$$lc/" || exit 1; \ done; \ done; \ .PHONY: check-help check: check-help check-help: for lc in C $(_HELP_LINGUAS); do \ if test -d "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ for page in $(HELP_FILES); do \ echo "$(XMLLINT) --nonet --noout --noent --path $$xmlpath --xinclude $$d$$lc/$$page"; \ $(XMLLINT) --nonet --noout --noent --path "$$xmlpath" --xinclude "$$d$$lc/$$page"; \ done; \ done .PHONY: install-help install-data-am: $(if $(HELP_ID),install-help) install-help: $(_HELP_LC_FILES) @for lc in C $(_HELP_LINGUAS); do \ $(mkinstalldirs) "$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)" || exit 1; \ done @for lc in C $(_HELP_LINGUAS); do for f in $(HELP_FILES); do \ if test -f "$$lc/$$f"; then d=; else d="$(srcdir)/"; fi; \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ if ! test -d "$$helpdir"; then $(mkinstalldirs) "$$helpdir"; fi; \ echo "$(INSTALL_DATA) $$d$$lc/$$f $$helpdir`basename $$f`"; \ $(INSTALL_DATA) "$$d$$lc/$$f" "$$helpdir`basename $$f`" || exit 1; \ done; done @for f in $(_HELP_C_EXTRA); do \ lc=`dirname "$$f"`; lc=`basename "$$lc"`; \ if test -f "$$f"; then d=; else d="$(srcdir)/"; fi; \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ if ! test -d "$$helpdir"; then $(mkinstalldirs) "$$helpdir"; fi; \ echo "$(INSTALL_DATA) $$d$$f $$helpdir`basename $$f`"; \ $(INSTALL_DATA) "$$d$$f" "$$helpdir`basename $$f`" || exit 1; \ done @for f in $(HELP_MEDIA); do \ for lc in C $(_HELP_LINGUAS); do \ if test -f "$$lc$$f"; then d=; else d="$(srcdir)/"; fi; \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ mdir=`dirname "$$f"`; \ if test "x$mdir" = "x."; then mdir=""; fi; \ if ! test -d "$$helpdir$$mdir"; then $(mkinstalldirs) "$$helpdir$$mdir"; fi; \ if test -f "$$d$$lc/$$f"; then \ echo "$(INSTALL_DATA) $$d$$lc/$$f $$helpdir$$f"; \ $(INSTALL_DATA) "$$d$$lc/$$f" "$$helpdir$$f" || exit 1; \ elif test "x$$lc" != "xC"; then \ if test "x$(YELP_LC_MEDIA_LINKS)" != "x"; then \ echo "$(LN_S) -f $(HELP_DIR)/C/$(HELP_ID)/$$f $$helpdir$$f"; \ dname="$$f"; \ pars="../"; \ while test "$$dname" != "." -a "$$dname" != "/"; do \ pars="../$$pars"; \ dname=$$(dirname "$$dname"); \ done; \ $(LN_S) -f $$pars"C/$(HELP_ID)/$$f" "$$helpdir$$f" || exit 1; \ fi; \ fi; \ done; \ done .PHONY: uninstall-help uninstall-am: $(if $(HELP_ID),uninstall-help) uninstall-help: for lc in C $(_HELP_LINGUAS); do for f in $(HELP_FILES); do \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ echo "rm -f $$helpdir`basename $$f`"; \ rm -f "$$helpdir`basename $$f`"; \ done; done @for f in $(_HELP_C_EXTRA); do \ lc=`dirname "$$f"`; lc=`basename "$$lc"`; \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ echo "rm -f $$helpdir`basename $$f`"; \ rm -f "$$helpdir`basename $$f`"; \ done @for f in $(HELP_MEDIA); do \ for lc in C $(_HELP_LINGUAS); do \ helpdir="$(DESTDIR)$(HELP_DIR)/$$lc/$(HELP_ID)/"; \ echo "rm -f $$helpdir$$f"; \ rm -f "$$helpdir$$f"; \ done; \ done; ' if true; then HAVE_YELP_TRUE= HAVE_YELP_FALSE='#' else HAVE_YELP_TRUE='#' HAVE_YELP_FALSE= fi else if false; then HAVE_YELP_TRUE= HAVE_YELP_FALSE='#' else HAVE_YELP_TRUE='#' HAVE_YELP_FALSE= fi fi ################################### # GSettings ################################### # Check whether --enable-schemas-compile was given. if test "${enable_schemas_compile+set}" = set; then : enableval=$enable_schemas_compile; case ${enableval} in yes) GSETTINGS_DISABLE_SCHEMAS_COMPILE="" ;; no) GSETTINGS_DISABLE_SCHEMAS_COMPILE="1" ;; *) as_fn_error $? "bad value ${enableval} for --enable-schemas-compile" "$LINENO" 5 ;; esac fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.16 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi gsettingsschemadir=${datadir}/glib-2.0/schemas if test x$cross_compiling != xyes; then : if test -n "$GLIB_COMPILE_SCHEMAS"; then pkg_cv_GLIB_COMPILE_SCHEMAS="$GLIB_COMPILE_SCHEMAS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gio-2.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "gio-2.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_COMPILE_SCHEMAS=`$PKG_CONFIG --variable="glib_compile_schemas" "gio-2.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi GLIB_COMPILE_SCHEMAS=$pkg_cv_GLIB_COMPILE_SCHEMAS if test "x$GLIB_COMPILE_SCHEMAS" = x""; then : fi else # Extract the first word of "glib-compile-schemas", so it can be a program name with args. set dummy glib-compile-schemas; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GLIB_COMPILE_SCHEMAS+:} false; then : $as_echo_n "(cached) " >&6 else case $GLIB_COMPILE_SCHEMAS in [\\/]* | ?:[\\/]*) ac_cv_path_GLIB_COMPILE_SCHEMAS="$GLIB_COMPILE_SCHEMAS" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GLIB_COMPILE_SCHEMAS="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GLIB_COMPILE_SCHEMAS=$ac_cv_path_GLIB_COMPILE_SCHEMAS if test -n "$GLIB_COMPILE_SCHEMAS"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GLIB_COMPILE_SCHEMAS" >&5 $as_echo "$GLIB_COMPILE_SCHEMAS" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "x$GLIB_COMPILE_SCHEMAS" = "x"; then as_fn_error $? "glib-compile-schemas not found." "$LINENO" 5 else : fi GSETTINGS_RULES=' .PHONY : uninstall-gsettings-schemas install-gsettings-schemas clean-gsettings-schemas mostlyclean-am: clean-gsettings-schemas gsettings__enum_file = $(addsuffix .enums.xml,$(gsettings_ENUM_NAMESPACE)) %.gschema.valid: %.gschema.xml $(gsettings__enum_file) $(AM_V_GEN) $(GLIB_COMPILE_SCHEMAS) --strict --dry-run $(addprefix --schema-file=,$(gsettings__enum_file)) --schema-file=$< && mkdir -p $(@D) && touch $@ all-am: $(gsettings_SCHEMAS:.xml=.valid) uninstall-am: uninstall-gsettings-schemas install-data-am: install-gsettings-schemas .SECONDARY: $(gsettings_SCHEMAS) install-gsettings-schemas: $(gsettings_SCHEMAS) $(gsettings__enum_file) @$(NORMAL_INSTALL) if test -n "$^"; then \ test -z "$(gsettingsschemadir)" || $(MKDIR_P) "$(DESTDIR)$(gsettingsschemadir)"; \ $(INSTALL_DATA) $^ "$(DESTDIR)$(gsettingsschemadir)"; \ test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir); \ fi uninstall-gsettings-schemas: @$(NORMAL_UNINSTALL) @list='\''$(gsettings_SCHEMAS) $(gsettings__enum_file)'\''; test -n "$(gsettingsschemadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e '\''s|^.*/||'\''`; \ test -n "$$files" || exit 0; \ echo " ( cd '\''$(DESTDIR)$(gsettingsschemadir)'\'' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(gsettingsschemadir)" && rm -f $$files test -n "$(GSETTINGS_DISABLE_SCHEMAS_COMPILE)$(DESTDIR)" || $(GLIB_COMPILE_SCHEMAS) $(gsettingsschemadir) clean-gsettings-schemas: rm -f $(gsettings_SCHEMAS:.xml=.valid) $(gsettings__enum_file) ifdef gsettings_ENUM_NAMESPACE $(gsettings__enum_file): $(gsettings_ENUM_FILES) $(AM_V_GEN) glib-mkenums --comments '\'''\'' --fhead "" --vhead " <@type@ id='\''$(gsettings_ENUM_NAMESPACE).@EnumName@'\''>" --vprod " " --vtail " " --ftail "" $^ > $@.tmp && mv $@.tmp $@ endif ' ################################### # Output ################################### ac_config_files="$ac_config_files Makefile m4/Makefile po/Makefile.in icons/Makefile icons/hicolor/Makefile icons/hicolor/48x48/Makefile icons/hicolor/48x48/apps/Makefile icons/hicolor/48x48/actions/Makefile icons/hicolor/48x48/status/Makefile icons/hicolor/scalable/Makefile icons/hicolor/scalable/apps/Makefile icons/hicolor/scalable/actions/Makefile icons/hicolor/scalable/status/Makefile icons/HighContrastLargePrint/Makefile icons/HighContrastLargePrint/48x48/Makefile icons/HighContrastLargePrint/48x48/apps/Makefile icons/HighContrastLargePrint/48x48/actions/Makefile icons/HighContrastLargePrint/scalable/Makefile icons/HighContrastLargePrint/scalable/apps/Makefile icons/HighContrastLargePrint/scalable/actions/Makefile icons/HighContrastLargePrintInverse/Makefile icons/HighContrastLargePrintInverse/48x48/Makefile icons/HighContrastLargePrintInverse/48x48/apps/Makefile icons/HighContrastLargePrintInverse/48x48/actions/Makefile icons/HighContrastLargePrintInverse/scalable/Makefile icons/HighContrastLargePrintInverse/scalable/apps/Makefile icons/HighContrastLargePrintInverse/scalable/actions/Makefile help/Makefile de.0x539.gobby.gschema.xml win32/gobby.iss" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WIN32_TRUE}" && test -z "${WIN32_FALSE}"; then as_fn_error $? "conditional \"WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi ac_config_commands="$ac_config_commands po/stamp-it" if test -z "${HAVE_YELP_TRUE}" && test -z "${HAVE_YELP_FALSE}"; then as_fn_error $? "conditional \"HAVE_YELP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_YELP_TRUE}" && test -z "${HAVE_YELP_FALSE}"; then as_fn_error $? "conditional \"HAVE_YELP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by gobby $as_me 0.6.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ gobby config.status 0.6.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "code/features.hpp") CONFIG_HEADERS="$CONFIG_HEADERS code/features.hpp" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "icons/Makefile") CONFIG_FILES="$CONFIG_FILES icons/Makefile" ;; "icons/hicolor/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/Makefile" ;; "icons/hicolor/48x48/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/48x48/Makefile" ;; "icons/hicolor/48x48/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/48x48/apps/Makefile" ;; "icons/hicolor/48x48/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/48x48/actions/Makefile" ;; "icons/hicolor/48x48/status/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/48x48/status/Makefile" ;; "icons/hicolor/scalable/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/scalable/Makefile" ;; "icons/hicolor/scalable/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/scalable/apps/Makefile" ;; "icons/hicolor/scalable/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/scalable/actions/Makefile" ;; "icons/hicolor/scalable/status/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/scalable/status/Makefile" ;; "icons/HighContrastLargePrint/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/Makefile" ;; "icons/HighContrastLargePrint/48x48/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/48x48/Makefile" ;; "icons/HighContrastLargePrint/48x48/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/48x48/apps/Makefile" ;; "icons/HighContrastLargePrint/48x48/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/48x48/actions/Makefile" ;; "icons/HighContrastLargePrint/scalable/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/scalable/Makefile" ;; "icons/HighContrastLargePrint/scalable/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/scalable/apps/Makefile" ;; "icons/HighContrastLargePrint/scalable/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/scalable/actions/Makefile" ;; "icons/HighContrastLargePrintInverse/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/Makefile" ;; "icons/HighContrastLargePrintInverse/48x48/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/48x48/Makefile" ;; "icons/HighContrastLargePrintInverse/48x48/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/48x48/apps/Makefile" ;; "icons/HighContrastLargePrintInverse/48x48/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/48x48/actions/Makefile" ;; "icons/HighContrastLargePrintInverse/scalable/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/scalable/Makefile" ;; "icons/HighContrastLargePrintInverse/scalable/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/scalable/apps/Makefile" ;; "icons/HighContrastLargePrintInverse/scalable/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/scalable/actions/Makefile" ;; "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;; "de.0x539.gobby.gschema.xml") CONFIG_FILES="$CONFIG_FILES de.0x539.gobby.gschema.xml" ;; "win32/gobby.iss") CONFIG_FILES="$CONFIG_FILES win32/gobby.iss" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. Try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # vim:set et sw=2 ts=2: