gwenhywfar-5.12.0/0000775000175000017500000000000014730345123010765 500000000000000gwenhywfar-5.12.0/RELEASES0000644000175000017500000000000013142134462012015 00000000000000gwenhywfar-5.12.0/Makefile.in0000664000175000017500000014350514730344661012770 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@ @IF_MAKE_I18N_FILES_TRUE@am__append_1 = $(I18NCATALOGS) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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) $(dist_M4_DATA) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = Doxyfile gwenhywfar-config.in gwenhywfar.pc \ gwenhywfar-config.cmake gwenhywfar-config-version.cmake \ gwenhywfar.spec gwenhywfar.iss CONFIG_CLEAN_VPATH_FILES = 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)$(bindir)" "$(DESTDIR)$(cmakeconfigdir)" \ "$(DESTDIR)$(M4dir)" "$(DESTDIR)$(pkgconfigdir)" SCRIPTS = $(bin_SCRIPTS) 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 DATA = $(cmakeconfig_DATA) $(dist_M4_DATA) $(pkgconfig_DATA) 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)config.h.in # 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 am__DIST_COMMON = $(srcdir)/Doxyfile.in $(srcdir)/Makefile.in \ $(srcdir)/config.h.in \ $(srcdir)/gwenhywfar-config-version.cmake.in \ $(srcdir)/gwenhywfar-config.cmake.in \ $(srcdir)/gwenhywfar-config.in.in $(srcdir)/gwenhywfar.iss.in \ $(srcdir)/gwenhywfar.pc.in $(srcdir)/gwenhywfar.spec.in \ AUTHORS COPYING ChangeLog INSTALL NEWS README TODO compile \ config.guess config.rpath config.sub install-sh ltmain.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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = admin data m4 src plugins tools gui test po doc checks DIST_SUBDIRS = admin data m4 src plugins tools gui test doc po checks AUTOMAKE_OPTIONS = foreign EXTRA_DIST = config.rpath \ ChangeLog \ README.W32 \ README.DARWIN \ README.SOLARIS \ RELEASES \ gwenhywfar.spec \ Makefile.cvs \ i18nsources bin_SCRIPTS = gwenhywfar-config M4dir = $(datadir)/aclocal dist_M4_DATA = gwenhywfar.m4 ACLOCAL_AMFLAGS = -I m4 BUILT_SOURCES = $(gwenhywfar_symlinkdir)/gwenhywfar/version.h $(gwenhywfar_symlinkdir)/gwenhywfar/types.h $(gwenhywfar_symlinkdir)/gwenhywfar/system.h pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gwenhywfar.pc cmakeconfigdir = $(libdir)/cmake/gwenhywfar-@GWENHYWFAR_VERSION_MAJOR@.@GWENHYWFAR_VERSION_MINOR@ cmakeconfig_DATA = gwenhywfar-config.cmake gwenhywfar-config-version.cmake CLEANFILES = gwenhywfar-config $(PACKAGE).tag listdoc.h \ $(am__append_1) DISTCLEANFILES = gwenhywfar-config.in @CROSS_COMPILING_TRUE@mklistdoc_preqreq = @CROSS_COMPILING_FALSE@mklistdoc_exe = admin/mklistdoc @CROSS_COMPILING_TRUE@mklistdoc_exe = mklistdoc @CROSS_COMPILING_FALSE@mklistdoc_prereq = $(top_builddir)/admin/mklistdoc # Rule for using the Inno Setup compiler. The path to iscc.exe is # set manually here for now and can be overridden if you set an # env variable with the same name. ISCC = "C:\Program Files\Inno Setup 5\iscc.exe" wintmpdir = distribution # We directly read that file list. For old make programs, you would # set this to an empty variable, because they are only needed by the # developers and release technicians. @IF_MAKE_I18N_FILES_TRUE@I18NFILES = $(shell cat $(srcdir)/i18nsources) @IF_MAKE_I18N_FILES_TRUE@DLGFILES = $(shell cat $(srcdir)/dlgsources) @IF_MAKE_I18N_FILES_TRUE@PDFILES = $(shell cat $(srcdir)/pdsources) # Could also be solved this way: Read the I18NFILES variable from file #include $(srcdir)/i18nsources # (Needs the following build rule:) #sources: # rm -f $(srcdir)/i18nsources # make -C $(top_srcdir)/src sources # mv $(srcdir)/i18nsources $(srcdir)/i18nsources.tmp # echo "I18NFILES = \\" > $(srcdir)/i18nsources # $(SED) 's!\(^.*$$\)!$$(top_srcdir)/\1 \\!' \ # $(srcdir)/i18nsources.tmp >> $(srcdir)/i18nsources # echo '$$(top_srcdir)/config.h' >> $(srcdir)/i18nsources # rm -f $(srcdir)/i18nsources.tmp # make Makefile # The list of available languages (makes file name transformations much easier) @IF_MAKE_I18N_FILES_TRUE@ALL_LINGUAS = $(basename $(notdir $(shell ls $(srcdir)/po/*.po))) # For old make programs, the locales would directly be written here: #ALL_LINGUAS = de # List of po files. Only necessary in the dependency of the catalogs # rule. For old make programs, you would simpy set this to an empty # variable. @IF_MAKE_I18N_FILES_TRUE@I18NLINGUAS = $(foreach lang,$(ALL_LINGUAS),$(srcdir)/po/$(lang).po) # List of mo files. Only necessary for cleanup. For old make programs, # you would simply set this to an empty variable. @IF_MAKE_I18N_FILES_TRUE@I18NCATALOGS = $(foreach lang,$(ALL_LINGUAS),$(top_builddir)/po/$(lang).mo) @IF_MAKE_I18N_FILES_TRUE@MSGHACK = "$(srcdir)/tools/msghack" all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/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; $(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): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 Doxyfile: $(top_builddir)/config.status $(srcdir)/Doxyfile.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar-config.in: $(top_builddir)/config.status $(srcdir)/gwenhywfar-config.in.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar.pc: $(top_builddir)/config.status $(srcdir)/gwenhywfar.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar-config.cmake: $(top_builddir)/config.status $(srcdir)/gwenhywfar-config.cmake.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar-config-version.cmake: $(top_builddir)/config.status $(srcdir)/gwenhywfar-config-version.cmake.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar.spec: $(top_builddir)/config.status $(srcdir)/gwenhywfar.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ gwenhywfar.iss: $(top_builddir)/config.status $(srcdir)/gwenhywfar.iss.in cd $(top_builddir) && $(SHELL) ./config.status $@ install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; 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 \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | 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; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$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_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-cmakeconfigDATA: $(cmakeconfig_DATA) @$(NORMAL_INSTALL) @list='$(cmakeconfig_DATA)'; test -n "$(cmakeconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(cmakeconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(cmakeconfigdir)" || 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)$(cmakeconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(cmakeconfigdir)" || exit $$?; \ done uninstall-cmakeconfigDATA: @$(NORMAL_UNINSTALL) @list='$(cmakeconfig_DATA)'; test -n "$(cmakeconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(cmakeconfigdir)'; $(am__uninstall_files_from_dir) install-dist_M4DATA: $(dist_M4_DATA) @$(NORMAL_INSTALL) @list='$(dist_M4_DATA)'; test -n "$(M4dir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(M4dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(M4dir)" || 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)$(M4dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(M4dir)" || exit $$?; \ done uninstall-dist_M4DATA: @$(NORMAL_UNINSTALL) @list='$(dist_M4_DATA)'; test -n "$(M4dir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(M4dir)'; $(am__uninstall_files_from_dir) install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || 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)$(pkgconfigdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \ done uninstall-pkgconfigDATA: @$(NORMAL_UNINSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(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) $(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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -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 $(SCRIPTS) $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(cmakeconfigdir)" "$(DESTDIR)$(M4dir)" "$(DESTDIR)$(pkgconfigdir)"; 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) -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) @IF_MAKE_I18N_FILES_FALSE@install-data-local: @IF_MAKE_I18N_FILES_FALSE@uninstall-local: clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ distclean-libtool distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-cmakeconfigDATA install-data-local \ install-dist_M4DATA install-pkgconfigDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binSCRIPTS 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 $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binSCRIPTS uninstall-cmakeconfigDATA \ uninstall-dist_M4DATA uninstall-local uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \ dist-tarZ dist-xz dist-zip distcheck distclean \ distclean-generic distclean-hdr distclean-libtool \ distclean-local distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binSCRIPTS install-cmakeconfigDATA \ install-data install-data-am install-data-local \ install-dist_M4DATA 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-pkgconfigDATA install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binSCRIPTS \ uninstall-cmakeconfigDATA uninstall-dist_M4DATA \ uninstall-local uninstall-pkgconfigDATA .PRECIOUS: Makefile $(gwenhywfar_symlinkdir)/gwenhywfar/version.h: $(top_builddir)/src/version.h make -C ` dirname $< ` ` basename $< ` ( cd $(gwenhywfar_symlinkdir)/gwenhywfar && $(LN_S) -f ../../$< ` basename $@ ` ) $(gwenhywfar_symlinkdir)/gwenhywfar/types.h: $(top_builddir)/src/types.h make -C ` dirname $< ` ` basename $< ` ( cd $(gwenhywfar_symlinkdir)/gwenhywfar && $(LN_S) -f ../../$< ` basename $@ ` ) $(gwenhywfar_symlinkdir)/gwenhywfar/system.h: $(top_builddir)/src/os/$(OS_TYPE)/system.h make -C ` dirname $< ` ` basename $< ` ( cd $(gwenhywfar_symlinkdir)/gwenhywfar && $(LN_S) -f ../../$< ` basename $@ ` ) gwenhywfar-config: gwenhywfar-config.in echo "#! /bin/sh" >gwenhywfar-config && \ echo 'dir="@prefix@"' >>gwenhywfar-config && \ cat gwenhywfar-config.in >>gwenhywfar-config && \ chmod a+x gwenhywfar-config distclean-local: distclean-local-check .PHONY: distclean-local distclean-local-check: rm -rf apidoc gwenhywfar5 listdoc.h: $(mklistdoc_prereq) $(mklistdoc_exe) -v -I $(top_srcdir)/src/base `find "$(top_builddir)/gwenhywfar5/gwenhywfar" -name "*.h" | LC_ALL=C sort` >$@ $(top_builddir)/admin/mklistdoc: $(MAKE) -C "$(top_builddir)/admin" mklistdoc srcdoc: Doxyfile listdoc.h doxygen $(PACKAGE).tag: Doxyfile listdoc.h doxygen install-srcdoc: $(PACKAGE).tag test -d "$(DESTDIR)@docpath@/$(PACKAGE)" || \ mkdir -p "$(DESTDIR)@docpath@/$(PACKAGE)" for f in apidoc/*; do \ cp -dR $$f "$(DESTDIR)@docpath@/$(PACKAGE)/"; \ done cp "$(PACKAGE).tag" "$(DESTDIR)@docpath@/" if test -x "$(DESTDIR)@docpath@/$(PACKAGE)/installdox"; then \ cd "$(DESTDIR)@docpath@/$(PACKAGE)" && \ ID_OPT="-q" ; \ for ff in ${DOXYGEN_TAGFILES}; do \ ID_OPT="$$ID_OPT -l `basename $$ff`@../`basename $$ff | $(SED) -e s/.tag//`";\ done ;\ ( cd "$(DESTDIR)@docpath@/$(PACKAGE)" && \ ./installdox -q $$ID_OPT \ ); \ fi rpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz setup: gwenhywfar.iss mkdir -p $(wintmpdir) make prefix="`pwd`/$(wintmpdir)/usr" \ WIN_PATH_WINDOWS_MINGW="`pwd`/$(wintmpdir)/usr/windows" \ install \ && $(ISCC) gwenhywfar.iss \ && rm -rf $(wintmpdir) # Rule for only building the source rpm srpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild --nodeps -ts $(PACKAGE)-$(VERSION).tar.gz # Current build rule: @IF_MAKE_I18N_FILES_TRUE@sources: @IF_MAKE_I18N_FILES_TRUE@ rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources @IF_MAKE_I18N_FILES_TRUE@ for d in $(SUBDIRS); do \ @IF_MAKE_I18N_FILES_TRUE@ $(MAKE) -C $$d sources; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@static-sources: @IF_MAKE_I18N_FILES_TRUE@ rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources @IF_MAKE_I18N_FILES_TRUE@ for d in src plugins; do \ @IF_MAKE_I18N_FILES_TRUE@ $(MAKE) -C $$d sources; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@$(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources: @IF_MAKE_I18N_FILES_TRUE@ $(MAKE) sources @IF_MAKE_I18N_FILES_TRUE@$(srcdir)/po/$(PACKAGE).pot: i18nsources dlgsources pdsources $(I18NFILES) @IF_MAKE_I18N_FILES_TRUE@ rm -f po/tmp* @IF_MAKE_I18N_FILES_TRUE@ if test -n "$(I18NFILES)"; then \ @IF_MAKE_I18N_FILES_TRUE@ cd $(srcdir); \ @IF_MAKE_I18N_FILES_TRUE@ $(XGETTEXT) -C -c -ki18n -ktr2i18n -kI18N -kI18S\ @IF_MAKE_I18N_FILES_TRUE@ -kI18N_NOOP -ktranslate -kaliasLocale \ @IF_MAKE_I18N_FILES_TRUE@ -ktr -ktrUtf8 \ @IF_MAKE_I18N_FILES_TRUE@ '--msgid-bugs-address=aqbanking-user@lists.aqbanking.de' \ @IF_MAKE_I18N_FILES_TRUE@ -o po/tmppot \ @IF_MAKE_I18N_FILES_TRUE@ $(I18NFILES) ; \ @IF_MAKE_I18N_FILES_TRUE@ fi @IF_MAKE_I18N_FILES_TRUE@ for i in $(DLGFILES); do \ @IF_MAKE_I18N_FILES_TRUE@ cd $(srcdir); \ @IF_MAKE_I18N_FILES_TRUE@ po4a-gettextize -f xml -m $$i -p po/tmppot1 -o attributes=text && \ @IF_MAKE_I18N_FILES_TRUE@ $(MSGHACK) -o po/tmppot2 --append po/tmppot po/tmppot1 && \ @IF_MAKE_I18N_FILES_TRUE@ mv po/tmppot2 po/tmppot; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@ for i in $(PDFILES); do \ @IF_MAKE_I18N_FILES_TRUE@ po4a-gettextize -f xml -m $$i -p $(srcdir)/po/tmppot1 -o wrap \ @IF_MAKE_I18N_FILES_TRUE@ -o translated=" " \ @IF_MAKE_I18N_FILES_TRUE@ -o untranslated=" " \ @IF_MAKE_I18N_FILES_TRUE@ && \ @IF_MAKE_I18N_FILES_TRUE@ $(MSGHACK) -o $(srcdir)/po/tmppot2 --append $(srcdir)/po/tmppot $(srcdir)/po/tmppot1 && \ @IF_MAKE_I18N_FILES_TRUE@ mv $(srcdir)/po/tmppot2 $(srcdir)/po/tmppot; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@ mv $(srcdir)/po/tmppot $(srcdir)/po/$(PACKAGE).pot @IF_MAKE_I18N_FILES_TRUE@ rm -f $(srcdir)/po/tmppot1 # This rule is called automatically at install time. However, it is # necessary only for the translators, so maybe it shouldn't be called # at install time. @IF_MAKE_I18N_FILES_TRUE@merge: $(srcdir)/po/$(PACKAGE).pot @IF_MAKE_I18N_FILES_TRUE@ @catalogs=$(I18NLINGUAS); \ @IF_MAKE_I18N_FILES_TRUE@ for cat in $$catalogs; do \ @IF_MAKE_I18N_FILES_TRUE@ echo msgmerge -o $$cat.new $$cat $(srcdir)/po/$(PACKAGE).pot ; \ @IF_MAKE_I18N_FILES_TRUE@ msgmerge -o $$cat.new $$cat $(srcdir)/po/$(PACKAGE).pot ; \ @IF_MAKE_I18N_FILES_TRUE@ if test -s $$cat.new; then \ @IF_MAKE_I18N_FILES_TRUE@ grep -v "\"POT-Creation" $$cat.new > $$cat.new.2 ; \ @IF_MAKE_I18N_FILES_TRUE@ grep -v "\"POT-Creation" $$cat >> $$cat.new.1; \ @IF_MAKE_I18N_FILES_TRUE@ if diff $$cat.new.1 $$cat.new.2; then \ @IF_MAKE_I18N_FILES_TRUE@ echo " $$cat unchanged; leaving existing po file untouched."; \ @IF_MAKE_I18N_FILES_TRUE@ rm $$cat.new; \ @IF_MAKE_I18N_FILES_TRUE@ else \ @IF_MAKE_I18N_FILES_TRUE@ mv $$cat.new $$cat ; \ @IF_MAKE_I18N_FILES_TRUE@ fi; \ @IF_MAKE_I18N_FILES_TRUE@ rm -f $$cat.new.1 $$cat.new.2 ;\ @IF_MAKE_I18N_FILES_TRUE@ fi ;\ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@catalogs: $(I18NLINGUAS) @IF_MAKE_I18N_FILES_TRUE@ @for i in $(ALL_LINGUAS); do \ @IF_MAKE_I18N_FILES_TRUE@ filelingua=$(srcdir)/po/$$i.po; \ @IF_MAKE_I18N_FILES_TRUE@ filecat=$(top_builddir)/po/$$i.mo; \ @IF_MAKE_I18N_FILES_TRUE@ echo "Creating translation catalogs for language \"$$i\""; \ @IF_MAKE_I18N_FILES_TRUE@ echo $(MSGFMT) -o $${filecat} $${filelingua} ; \ @IF_MAKE_I18N_FILES_TRUE@ $(MSGFMT) -o $${filecat} $${filelingua} || touch $${filelingua}; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@install-mo-catalogs: catalogs @IF_MAKE_I18N_FILES_TRUE@ @for i in $(ALL_LINGUAS); do \ @IF_MAKE_I18N_FILES_TRUE@ filecat=$(top_builddir)/po/$$i.mo; \ @IF_MAKE_I18N_FILES_TRUE@ echo "Installing translation catalog for language \"$$i\""; \ @IF_MAKE_I18N_FILES_TRUE@ $(mkinstalldirs) "$(DESTDIR)$(localedir)/$$i/LC_MESSAGES"; \ @IF_MAKE_I18N_FILES_TRUE@ echo $(INSTALL_DATA) $${filecat} $(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \ @IF_MAKE_I18N_FILES_TRUE@ $(INSTALL_DATA) $${filecat} $(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@uninstall-mo-catalogs: @IF_MAKE_I18N_FILES_TRUE@ @$(NORMAL_UNINSTALL) @IF_MAKE_I18N_FILES_TRUE@ @for i in $(ALL_LINGUAS); do \ @IF_MAKE_I18N_FILES_TRUE@ echo " rm -f '$(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo'"; \ @IF_MAKE_I18N_FILES_TRUE@ rm -f "$(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo"; \ @IF_MAKE_I18N_FILES_TRUE@ done @IF_MAKE_I18N_FILES_TRUE@install-data-local: install-mo-catalogs @IF_MAKE_I18N_FILES_TRUE@uninstall-local: uninstall-mo-catalogs format: find . -name '*.[c,h,cpp]' -exec $(ASTYLE) \ --style=stroustrup \ -s2 \ --min-conditional-indent=0 \ --indent-labels \ --max-continuation-indent=80 \ --pad-comma \ --pad-header \ --unpad-paren \ --align-pointer=name \ --break-closing-braces \ --break-one-line-headers \ --attach-return-type \ --convert-tabs \ --max-code-length=120 \ --break-after-logical \ --preserve-date \ --suffix=none \{\} \; cppcheck: for f in `find . -name \*.c -o -name \*.cpp`; do cppcheck $$f; done ChangeLog: if test -d .git; then \ git log --pretty="format:------------------------------------------------------------------%n%ai %an%n%s%n%b" -n 100 >ChangeLog ;\ else \ touch ChangeLog; \ fi dist-hook: rm -f ChangeLog 2>/dev/null $(MAKE) 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: gwenhywfar-5.12.0/checks/0000775000175000017500000000000014730345123012225 500000000000000gwenhywfar-5.12.0/checks/syncio_https.c0000644000175000017500000001103013142134474015031 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include #include static int check_syncio_https1() { GWEN_SYNCIO *sio; GWEN_SYNCIO *baseLayer; int rv; GWEN_DB_NODE *db; int j; /* create socket layer */ sio=GWEN_SyncIo_Socket_new(GWEN_SocketTypeTCP, GWEN_AddressFamilyIP); if (sio==NULL) { fprintf(stderr, "ERROR in check_syncio_http1: Could not create socket io layer.\n"); return 2; } GWEN_SyncIo_Socket_SetAddress(sio, "devel.aqbanking.de"); GWEN_SyncIo_Socket_SetPort(sio, 443); baseLayer=sio; sio=GWEN_SyncIo_Tls_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_syncio_http1: Could not create TLS io layer.\n"); return 2; } baseLayer=sio; sio=GWEN_SyncIo_Buffered_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_syncio_http1: Could not create Buffered io layer.\n"); return 2; } baseLayer=sio; sio=GWEN_SyncIo_Http_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_io_tls1: Could not create HTTP io layer.\n"); return 2; } for (j=0; j<2; j++) { int firstRead=1; int bodySize=-1; int bytesRead=0; GWEN_BUFFER *tbuf; rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not connect (%d)\n", rv); return 2; } db=GWEN_SyncIo_Http_GetDbCommandOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "command", "GET"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocol", "HTTP/1.0"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", "/index.html"); db=GWEN_SyncIo_Http_GetDbHeaderOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Host", "devel.aqbanking.de"); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-length", 0); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Connection", "close"); rv=GWEN_SyncIo_Write(sio, (uint8_t *)"", 0); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not write (%d)\n", rv); return 2; } tbuf=GWEN_Buffer_new(0, 1024, 0, 1); for (;;) { uint8_t *p; uint32_t l; rv=GWEN_Buffer_AllocRoom(tbuf, 1024); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not allocRoom (%d)\n", rv); return 2; } p=(uint8_t *) GWEN_Buffer_GetPosPointer(tbuf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); do { rv=GWEN_SyncIo_Read(sio, p, l-1); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv==0) break; else if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (bodySize!=-1 && bytesRead=bodySize) { break; } firstRead=0; } #if 0 fprintf(stderr, "Received:\n"); GWEN_Buffer_Dump(tbuf, stderr, 2); #endif GWEN_Buffer_free(tbuf); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not disconnect (%d)\n", rv); return 2; } } return 0; } int check_syncio_https() { int errs=0; int chks=0; fprintf(stderr, "SyncIO https checks... "); chks++; if (check_syncio_https1()) errs++; if (chks) { if (chks==errs) { fprintf(stderr, "SyncIO https checks: all failed.\n"); } else if (errs) { fprintf(stderr, "SyncIO https checks: some failed.\n"); } else { fprintf(stderr, "passed.\n"); } } return errs; } gwenhywfar-5.12.0/checks/syncio_http.c0000644000175000017500000001045613142134474014661 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include static int check_syncio_http1() { GWEN_SYNCIO *sio; GWEN_SYNCIO *baseLayer; int rv; GWEN_DB_NODE *db; int j; /* create socket layer */ sio=GWEN_SyncIo_Socket_new(GWEN_SocketTypeTCP, GWEN_AddressFamilyIP); if (sio==NULL) { fprintf(stderr, "ERROR in check_syncio_http1: Could not create socket io layer.\n"); return 2; } GWEN_SyncIo_Socket_SetAddress(sio, "devel.aqbanking.de"); GWEN_SyncIo_Socket_SetPort(sio, 80); baseLayer=sio; sio=GWEN_SyncIo_Buffered_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_syncio_http1: Could not create Buffered io layer.\n"); return 2; } baseLayer=sio; sio=GWEN_SyncIo_Http_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_io_tls1: Could not create HTTP io layer.\n"); return 2; } for (j=0; j<2; j++) { int firstRead=1; int bodySize=-1; int bytesRead=0; GWEN_BUFFER *tbuf; rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not connect (%d)\n", rv); return 2; } db=GWEN_SyncIo_Http_GetDbCommandOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "command", "GET"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "protocol", "HTTP/1.0"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", "/index.html"); db=GWEN_SyncIo_Http_GetDbHeaderOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Host", "devel.aqbanking.de"); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-length", 0); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Connection", "close"); rv=GWEN_SyncIo_Write(sio, (uint8_t *)"", 0); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not write (%d)\n", rv); return 2; } tbuf=GWEN_Buffer_new(0, 1024, 0, 1); for (;;) { uint8_t *p; uint32_t l; rv=GWEN_Buffer_AllocRoom(tbuf, 1024); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not allocRoom (%d)\n", rv); return 2; } p=(uint8_t *) GWEN_Buffer_GetPosPointer(tbuf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); do { rv=GWEN_SyncIo_Read(sio, p, l-1); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv==0) break; else if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (bodySize!=-1 && bytesRead=bodySize) { break; } firstRead=0; } #if 0 fprintf(stderr, "Received:\n"); GWEN_Buffer_Dump(tbuf, stderr, 2); #endif GWEN_Buffer_free(tbuf); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not disconnect (%d)\n", rv); return 2; } } return 0; } int check_syncio_http() { int errs=0; int chks=0; fprintf(stderr, "SyncIO http checks... "); chks++; if (check_syncio_http1()) errs++; if (chks) { if (chks==errs) { fprintf(stderr, "SyncIO http checks: all failed.\n"); } else if (errs) { fprintf(stderr, "SyncIO http checks: some failed.\n"); } else { fprintf(stderr, "passed.\n"); } } return errs; } gwenhywfar-5.12.0/checks/Makefile.am0000666000175000017500000000111313545472064014207 00000000000000AM_CPPFLAGS= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ noinst_PROGRAMS=checks check_urlfns checks_SOURCES=\ main.c \ db.c \ syncio_tls.c \ syncio_http.c \ syncio_https.c check_urlfns_SOURCES = check_urlfns.c noinst_HEADERS = checks.h checks_LDADD=$(top_builddir)/src/libgwenhywfar.la check_urlfns_LDADD = $(top_builddir)/src/libgwenhywfar.la TESTS = checks check_urlfns sources: gwenhywfar-5.12.0/checks/main.c0000644000175000017500000000205513606371422013237 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include "checks.h" #include #include int GWENHYWFAR_CB checkCert(GWEN_UNUSED GWEN_GUI *gui, GWEN_UNUSED const GWEN_SSLCERTDESCR *cert, GWEN_UNUSED GWEN_SYNCIO *sio, GWEN_UNUSED uint32_t guiid) { /* automatically accept any cert for non-interactive checks */ return 0; } int main(GWEN_UNUSED int argc, GWEN_UNUSED char **argv) { int errs=0; GWEN_GUI *gui; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetCheckCertFn(gui, checkCert); GWEN_Gui_SetGui(gui); if (check_db()) errs++; #ifdef GWENHYWFAR_SKIP_NETWORK_CHECKS fprintf(stderr, "Skipping all checks that assume available network connectivity\n" "Run ./configure without --disable-network-checks to enable the skipped checks\n"); #else if (check_syncio_tls()) errs++; if (check_syncio_http()) errs++; if (check_syncio_https()) errs++; #endif if (errs) return 2; return 0; } gwenhywfar-5.12.0/checks/Makefile.in0000664000175000017500000011610614730344661014225 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@ noinst_PROGRAMS = checks$(EXEEXT) check_urlfns$(EXEEXT) TESTS = checks$(EXEEXT) check_urlfns$(EXEEXT) subdir = checks ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_check_urlfns_OBJECTS = check_urlfns.$(OBJEXT) check_urlfns_OBJECTS = $(am_check_urlfns_OBJECTS) check_urlfns_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_checks_OBJECTS = main.$(OBJEXT) db.$(OBJEXT) syncio_tls.$(OBJEXT) \ syncio_http.$(OBJEXT) syncio_https.$(OBJEXT) checks_OBJECTS = $(am_checks_OBJECTS) checks_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/check_urlfns.Po ./$(DEPDIR)/db.Po \ ./$(DEPDIR)/main.Po ./$(DEPDIR)/syncio_http.Po \ ./$(DEPDIR)/syncio_https.Po ./$(DEPDIR)/syncio_tls.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(check_urlfns_SOURCES) $(checks_SOURCES) DIST_SOURCES = $(check_urlfns_SOURCES) $(checks_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ AM_CPPFLAGS = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ checks_SOURCES = \ main.c \ db.c \ syncio_tls.c \ syncio_http.c \ syncio_https.c check_urlfns_SOURCES = check_urlfns.c noinst_HEADERS = checks.h checks_LDADD = $(top_builddir)/src/libgwenhywfar.la check_urlfns_LDADD = $(top_builddir)/src/libgwenhywfar.la all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(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) --gnu checks/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu checks/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): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list check_urlfns$(EXEEXT): $(check_urlfns_OBJECTS) $(check_urlfns_DEPENDENCIES) $(EXTRA_check_urlfns_DEPENDENCIES) @rm -f check_urlfns$(EXEEXT) $(AM_V_CCLD)$(LINK) $(check_urlfns_OBJECTS) $(check_urlfns_LDADD) $(LIBS) checks$(EXEEXT): $(checks_OBJECTS) $(checks_DEPENDENCIES) $(EXTRA_checks_DEPENDENCIES) @rm -f checks$(EXEEXT) $(AM_V_CCLD)$(LINK) $(checks_OBJECTS) $(checks_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check_urlfns.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/db.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_http.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_https.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syncio_tls.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? checks.log: checks$(EXEEXT) @p='checks$(EXEEXT)'; \ b='checks'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) check_urlfns.log: check_urlfns$(EXEEXT) @p='check_urlfns$(EXEEXT)'; \ b='check_urlfns'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) 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 $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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 clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/check_urlfns.Po -rm -f ./$(DEPDIR)/db.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/syncio_http.Po -rm -f ./$(DEPDIR)/syncio_https.Po -rm -f ./$(DEPDIR)/syncio_tls.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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 ./$(DEPDIR)/check_urlfns.Po -rm -f ./$(DEPDIR)/db.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/syncio_http.Po -rm -f ./$(DEPDIR)/syncio_https.Po -rm -f ./$(DEPDIR)/syncio_tls.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-generic clean-libtool \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ 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 \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am recheck tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile sources: # 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: gwenhywfar-5.12.0/checks/db.c0000644000175000017500000002647013142134474012706 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include int check_db1() { GWEN_DB_NODE *cfg; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db1: Could not create group.\n"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db2() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db2: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1].\n"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db3() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db3: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db3: Could not create group [test1].\n"); return 2; } db2=GWEN_DB_GetGroup(cfg, 0, "test1/test11"); if (db2==NULL) { fprintf(stderr, "ERROR in db3: Could not create group [test1/test11].\n"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db4() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; const char *v1; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db4: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1].\n"); return 2; } db2=GWEN_DB_GetGroup(cfg, 0, "test1/test11"); if (db2==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1/test11].\n"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1111"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db4: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db4: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db5() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; const char *v1; const char *v2; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db5: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1].\n"); return 2; } db2=GWEN_DB_GetGroup(cfg, 0, "test1/test11"); if (db2==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1/test11].\n"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1111"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db5: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db5: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1112"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db5: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db5: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } v2=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 1, NULL); if (v2==NULL) { fprintf(stderr, "ERROR in db5: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v2, "value1112")!=0) { fprintf(stderr, "ERROR in db5: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v2, "value1112"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db6() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; const char *v1; const char *v2; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db6: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1].\n"); return 2; } db2=GWEN_DB_GetGroup(cfg, 0, "test1/test11"); if (db2==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1/test11].\n"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1111"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db6: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db6: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1112"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db6: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db6: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } v2=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 1, NULL); if (v2==NULL) { fprintf(stderr, "ERROR in db6: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v2, "value1112")!=0) { fprintf(stderr, "ERROR in db6: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v2, "value1112"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "test1/test11/var111", "value1113"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db6: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1113")!=0) { fprintf(stderr, "ERROR in db6: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1113"); return 2; } v2=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 1, NULL); if (v2!=NULL) { fprintf(stderr, "ERROR in db6: Var [test1/test11/var111] should not exist.\n"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db7() { GWEN_DB_NODE *cfg; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; const char *v1; const char *v2; const char *v3; int rv; cfg=GWEN_DB_Group_new("config"); if (cfg==NULL) { fprintf(stderr, "ERROR in db7: Could not create group.\n"); return 2; } db1=GWEN_DB_GetGroup(cfg, 0, "test1"); if (db1==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1].\n"); return 2; } db2=GWEN_DB_GetGroup(cfg, 0, "test1/test11"); if (db2==NULL) { fprintf(stderr, "ERROR in db2: Could not create group [test1/test11].\n"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1111"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db7: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db7: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_DEFAULT, "test1/test11/var111", "value1112"); v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db7: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db7: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } v2=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 1, NULL); if (v2==NULL) { fprintf(stderr, "ERROR in db7: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v2, "value1112")!=0) { fprintf(stderr, "ERROR in db7: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v2, "value1112"); return 2; } { #ifndef MAX_PATH # define MAX_PATH 200 #endif char tmpfile[MAX_PATH]; GWEN_Directory_GetTmpDirectory(tmpfile, MAX_PATH); strncat(tmpfile, #ifdef OS_WIN32 "\\" #else "/" #endif "db1.conf", MAX_PATH - strlen(tmpfile)); rv=GWEN_DB_WriteFile(cfg, tmpfile, GWEN_DB_FLAGS_DEFAULT); if (rv) { fprintf(stderr, "ERROR in db7: Could not write DB file (%d)\n", rv); return 2; } GWEN_DB_ClearGroup(cfg, NULL); rv=GWEN_DB_ReadFile(cfg, tmpfile, GWEN_DB_FLAGS_DEFAULT); if (rv) { fprintf(stderr, "ERROR in db7: Could not read DB file (%d)\n", rv); return 2; } } v1=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 0, NULL); if (v1==NULL) { fprintf(stderr, "ERROR in db7: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v1, "value1111")!=0) { fprintf(stderr, "ERROR in db7: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v1, "value1111"); return 2; } v2=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 1, NULL); if (v2==NULL) { fprintf(stderr, "ERROR in db7: Could not get var [test1/test11/var111].\n"); return 2; } if (strcmp(v2, "value1112")!=0) { fprintf(stderr, "ERROR in db7: Value for var [test1/test11/var111] does not " "match [%s]!=[%s].\n", v2, "value1112"); return 2; } v3=GWEN_DB_GetCharValue(cfg, "test1/test11/var111", 2, NULL); if (v3!=NULL) { fprintf(stderr, "ERROR in db7: Var [test1/test11/var111:2] not empty.\n"); return 2; } GWEN_DB_Group_free(cfg); return 0; } int check_db() { int errs=0; int chks=0; fprintf(stderr, "DB-checks... "); chks++; if (check_db1()) errs++; chks++; if (check_db2()) errs++; chks++; if (check_db3()) errs++; chks++; if (check_db4()) errs++; chks++; if (check_db5()) errs++; chks++; if (check_db6()) errs++; chks++; if (check_db7()) errs++; if (chks) { if (chks==errs) { fprintf(stderr, "DB-checks: all failed.\n"); } else if (errs) { fprintf(stderr, "DB-checks: some failed.\n"); } else { fprintf(stderr, "passed.\n"); } } return errs; } gwenhywfar-5.12.0/checks/check_urlfns.c0000644000175000017500000001267113606371437014774 00000000000000// This is a unittest for the function, notably // GWEN_Url_fromString #include #include #include #include #include // Global variable for storing the test result int g_testSuccess = 0; // Macro to test for one assertion #define test_assert(expr) if (!(expr)) { printf("%s: Failed test in line %d\n", __FILE__, (int)__LINE__); g_testSuccess = -1; } // Macro to test for string equality. Since this is C, we also check // for NULL pointers already here. #define test_strcmp(str1, str2) if (!(str1) || !(str2) || strcmp((str1), (str2)) != 0) { printf("%s: Failed strcmp test in line %d, \"%s\" != \"%s\"\n", __FILE__, (int)__LINE__, (str1) ? (str1) : "NULL", (str2) ? (str2) : "NULL"); g_testSuccess = -1; } // Convenience function to check the interesting fields in one single // GWEN_URL, which is also free'd here in this function already. int verify_url(GWEN_URL *url, const char *path, int port, const char *protocol, const char *server) { int prev_g_testSuccess = g_testSuccess; g_testSuccess = 0; if (path) { test_strcmp(GWEN_Url_GetPath(url), path); } else { test_assert(GWEN_Url_GetPath(url) == NULL); } test_assert(GWEN_Url_GetPort(url) == port); if (protocol) { test_strcmp(GWEN_Url_GetProtocol(url), protocol); } else { test_assert(GWEN_Url_GetProtocol(url) == NULL); } if (server) { test_strcmp(GWEN_Url_GetServer(url), server); } else { test_assert(GWEN_Url_GetServer(url) == NULL); } GWEN_Url_free(url); { int result = !g_testSuccess; g_testSuccess = g_testSuccess || prev_g_testSuccess; return result; } } int main(GWEN_UNUSED int argc, GWEN_UNUSED char **argv) { GWEN_URL *url = GWEN_Url_fromString("http://www.aqbanking.de/foo/bar"); test_assert(GWEN_Url_GetPassword(url) == NULL); test_strcmp(GWEN_Url_GetPath(url), "/foo/bar"); test_assert(GWEN_Url_GetPort(url) == 80); test_strcmp(GWEN_Url_GetProtocol(url), "http"); test_strcmp(GWEN_Url_GetServer(url), "www.aqbanking.de"); test_assert(GWEN_Url_GetUserName(url) == NULL); GWEN_Url_free(url); // Check some error conditions: No Server, should return NULL test_assert(GWEN_Url_fromString("http://") == NULL); // No server after user, should return NULL test_assert(GWEN_Url_fromString("http://cs@") == NULL); // No numerical port number, should return NULL test_assert(GWEN_Url_fromString("http://a.b.c:aa/foo") == NULL); DBG_WARN(GWEN_LOGDOMAIN, "The 3 error messages above are just fine - all works as expected."); // And some very weird URL url = GWEN_Url_fromString("rsync://foo:bar@a.b.c.d.e.f:4711/some space /in here"); test_strcmp(GWEN_Url_GetProtocol(url), "rsync"); test_strcmp(GWEN_Url_GetUserName(url), "foo"); test_strcmp(GWEN_Url_GetPassword(url), "bar"); test_strcmp(GWEN_Url_GetServer(url), "a.b.c.d.e.f"); test_assert(GWEN_Url_GetPort(url) == 4711); test_strcmp(GWEN_Url_GetPath(url), "/some space /in here"); GWEN_Url_free(url); url = GWEN_Url_fromString("file:/home/aquamaniac"); test_strcmp(GWEN_Url_GetPath(url), "/home/aquamaniac"); test_assert(GWEN_Url_GetPort(url) == 0); test_assert(GWEN_Url_GetProtocol(url) == NULL); // no "file" here? Probably correct because of missing extra slashes. test_strcmp(GWEN_Url_GetServer(url), "file"); GWEN_Url_free(url); test_assert((verify_url(GWEN_Url_fromString("file:///home/aquamaniac"), /*GetPath*/ "/home/aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ "file", // now the protocol it is here /*GetServer*/ NULL))); test_assert((verify_url(GWEN_Url_fromString("/home/aquamaniac"), /*GetPath*/ "/home/aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ NULL, /*GetServer*/ NULL))); test_assert((verify_url(GWEN_Url_fromString("dir:///home/aquamaniac/.aqbanking/settings"), /*GetPath*/ "/home/aquamaniac/.aqbanking/settings", /*GetPort*/ 0, /*GetProtocol*/ "dir", /*GetServer*/ NULL))); // Also some windows paths test_assert((verify_url(GWEN_Url_fromString("c:/home/aquamaniac"), /*GetPath*/ "c:/home/aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ NULL, /*GetServer*/ NULL))); test_assert((verify_url(GWEN_Url_fromString("c:\\home\\aquamaniac"), /*GetPath*/ "c:\\home\\aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ NULL, /*GetServer*/ NULL))); // This path caused the crash in the windows gnucash binary; is // fixed now. test_assert((verify_url(GWEN_Url_fromString("dir://c:\\home\\aquamaniac"), /*GetPath*/ "c:\\home\\aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ "dir", /*GetServer*/ NULL))); test_assert((verify_url(GWEN_Url_fromString("file://c:\\home\\aquamaniac"), /*GetPath*/ "c:\\home\\aquamaniac", /*GetPort*/ 0, /*GetProtocol*/ "file", /*GetServer*/ NULL))); return g_testSuccess; } gwenhywfar-5.12.0/checks/syncio_tls.c0000644000175000017500000000466113142134474014505 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #define TEST_PATTERN1 \ "GET / HTTP/1.1\r\n" \ "host: sourceforge.net\r\n" \ "Connection: close\r\n" \ "\r\n" static int check_syncio_tls1() { GWEN_SYNCIO *sio; GWEN_SYNCIO *baseLayer; int rv; char buffer[2048]; /* create socket layer */ sio=GWEN_SyncIo_Socket_new(GWEN_SocketTypeTCP, GWEN_AddressFamilyIP); if (sio==NULL) { fprintf(stderr, "ERROR in check_io_tls1: Could not create socket io layer.\n"); return 2; } GWEN_SyncIo_Socket_SetAddress(sio, "sourceforge.net"); GWEN_SyncIo_Socket_SetPort(sio, 443); baseLayer=sio; sio=GWEN_SyncIo_Tls_new(baseLayer); if (sio==NULL) { fprintf(stderr, "ERROR in check_io_tls1: Could not create TLS io layer.\n"); return 2; } //GWEN_SyncIo_Tls_SetLocalTrustFile(sio, "test.crt"); rv=GWEN_SyncIo_Connect(sio); if (rv) { fprintf(stderr, "ERROR in check_io_tls1: Could not connect (%d)\n", rv); return 2; } rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *)TEST_PATTERN1, strlen(TEST_PATTERN1)); if (rv<1) { fprintf(stderr, "ERROR in check_io_tls1: Could not write (%d)\n", rv); return 2; } for (;;) { rv=GWEN_SyncIo_Read(sio, (uint8_t *)buffer, sizeof(buffer)-1); if (rv==0) break; else if (rv<1) { if (rv==GWEN_ERROR_TIMEOUT || rv==GWEN_ERROR_EOF || rv==GWEN_ERROR_SSL_PREMATURE_CLOSE) break; fprintf(stderr, "ERROR in check_io_tls1: Could not read (%d)\n", rv); return 2; } else { buffer[rv]=0; fprintf(stderr, "Data received: %s\n", buffer); } } rv=GWEN_SyncIo_Disconnect(sio); if (rv) { fprintf(stderr, "WARNING in check_io_tls1: Could not disconnect (%d)\n", rv); } return 0; } int check_syncio_tls() { int errs=0; int chks=0; fprintf(stderr, "IO tls checks... "); chks++; if (check_syncio_tls1()) errs++; if (chks) { if (chks==errs) { fprintf(stderr, "IO tls checks: all failed.\n"); } else if (errs) { fprintf(stderr, "IO tls checks: some failed.\n"); } else { fprintf(stderr, "passed.\n"); } } return errs; } gwenhywfar-5.12.0/checks/checks.h0000644000175000017500000000021213142134462013545 00000000000000 #ifndef CHECKS_H #define CHECKS_H int check_db(); int check_syncio_tls(); int check_syncio_http(); int check_syncio_https(); #endif gwenhywfar-5.12.0/README.W320000644000175000017500000000501313142134462012132 00000000000000 1. Using Gwenhywfar =================== 1.1. Needed Components ---------------------- 1.1.1. GNU TLS We use the precompiled packages from the wireshark project (gnutls 1.6.0) which also contain all needed libraries such as libgcrypt and libgpg-error. 2. Compiling Gwenhywfar ======================= 2.1. Needed Components ---------------------- 2.1.1. MinGW32 Gwenhywfar uses MinGW32 on Windows platforms. MinGW32 is a project with the goal to provide a free compiler system and a nearly complete shell environment which allows to execute the configure script. The resulting DLLs and EXEs only link against Windows libraries, so there are no licence issues when releasing binary packages. These EXEs and DLLs don't need MinGW32 to be installed on the target system. The compiler itself is the very well known GCC. One configure command line that used to work is the following: ./configure CPPFLAGS="$REGEX_INCLUDES $GNUTLS_INCLUDES $INTL_INCLUDES" \ LDFLAGS="$REGEX_LDFLAGS -lregex $GNUTLS_LDFLAGS $INTL_LDFLAGS -lintl -liconv" which just means you have to manually supply the -I/some/dir flags and -L/some/dir/lib flags for libregex, libintl, libiconv, and gnutls. 2.1.2. GnuTLS We use the precompiled packages from the wireshark project (gnutls 1.6.0) which also contain all needed libraries such as libgcrypt and libgpg-error. To compile gwenhywfar you will also need the developer files (ending in *.dll.a and *.h). 3.2. Cross-compiling on Linux ----------------------------- 3.2.1. Compiling Gwenhywfar can be cross-compiled. The author uses Debian and its mingw package. To compile Gwenhywfar in that environment just use the following commands: >$ make -fMakefile.cvs mp-w32 >$ make >$ make install DESTDIR=/tmp/gwen 3.2.2. Preparing Files for Shipping You must then take the DLLs and executables (EXE) from the folder /tmp/gwen and copy them into a folder for shipping. When preparing the application shipping folder you should have the expected file hierarchy (see above) in mind so that the application will find all DLLs and data. 3.2.3. Installing to the Cross-Compiler Environment If you want to compile other projects which depend on Gwenhywfar you will have to install some files to the cross-compilers environment. On Debian this is /usr/i586-mingw32/. Header files go to /usr/i586-mingw32/include and libraries must be installed to /usr/i586-mingw32/lib. Please don't install the DLLs, only the *.dll.a files, because those are the ones needed to compile depending projects (like AqBanking and Libchipcard). gwenhywfar-5.12.0/test/0000775000175000017500000000000014730345123011744 500000000000000gwenhywfar-5.12.0/test/testdialog.xml0000664000175000017500000000133414176567107014562 00000000000000 gwenhywfar-5.12.0/test/testthread.c0000664000175000017500000000327114043240674014204 00000000000000/*************************************************************************** begin : Thu Feb 04 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "testthread_p.h" #include #include #include GWEN_INHERIT(GWEN_THREAD, TEST_THREAD) static void GWENHYWFAR_CB _freeData(GWEN_UNUSED void *bp, void *p); static GWENHYWFAR_CB void _threadRun_cb(GWEN_UNUSED GWEN_THREAD *thr); GWEN_THREAD *TestThread_new(int threadId, int loops) { GWEN_THREAD *thr; TEST_THREAD *xthr; thr=GWEN_Thread_new(); GWEN_NEW_OBJECT(TEST_THREAD, xthr); GWEN_INHERIT_SETDATA(GWEN_THREAD, TEST_THREAD, thr, xthr, _freeData); xthr->threadId=threadId; xthr->loops=loops; GWEN_Thread_SetRunFn(thr, _threadRun_cb); return thr; } void GWENHYWFAR_CB _freeData(GWEN_UNUSED void *bp, void *p) { TEST_THREAD *xthr; xthr=(TEST_THREAD*) p; GWEN_FREE_OBJECT(xthr); } void GWENHYWFAR_CB _threadRun_cb(GWEN_UNUSED GWEN_THREAD *thr) { GWEN_GUI *gui; TEST_THREAD *xthr; int i; xthr=GWEN_INHERIT_GETDATA(GWEN_THREAD, TEST_THREAD, thr); assert(xthr); sleep(2); gui=GWEN_NoGui_new(); GWEN_Gui_SetGui(gui); for (i=0; iloops; i++) { DBG_ERROR(GWEN_LOGDOMAIN, "GUI: Thread %2d: Loop %d", xthr->threadId, i); fprintf(stdout, "STD: Thread %2d: Loop %d\n", xthr->threadId, i); } GWEN_Gui_SetGui(NULL); } gwenhywfar-5.12.0/test/README.MSVC0000644000175000017500000000417413142134464013317 00000000000000This README file contains instructions to compile the test program "gwentest.c" with the Microsoft Visual Studio compiler. It is possible to compile gwenhywfar by some other compiler (e.g. the mingw/gcc system) but still use the resulting DLL with some other compiler, e.gg. the Microsoft Visual Studio C compiler (MSVC). We will describe how to setup your MSVC project in order to use a MSVC-compiled executable together with a gcc-compiled gwenhywfar32.dll In order to test this possibility, according to http://www.mingw.org/mingwfaq.shtml#faq-msvcdll you need the gwenhywfar DLL and DEF files. These are already generated automatically when you run "make" under a Mingw system. Now, quoting from that mingw website, "MSVC cannot use the MinGW library, but since you have already the DEF file you may easily produce one by the Microsoft LIB tool". With the new libtool, there is no DEF file anymore. Nevertheless the required LIB file can be created by the following: In the directory gwenhywfar/src/.libs, do the following: dlltool --export-all-symbols -l libgwenhywfar.lib libgwenhywfar-38.dll and this will create the libgwenhywfar.lib file needed by MSVC. (Historical note: Previously, this was achieved by the followint: In the directory gwenhywfar/src you have to do "lib /machine:i386 /def:gwenhywfar32.def" and there you have the gwenhywfar32.lib file that is needed in MSVC.) Now you need to compile gwentest.c by MSVC. We have provided a MSVC project file in test/gwentest.vcproj. The include and library paths should already be set up correctly, except maybe for the library path to your mingw library directory (c:\msys\1.0\mingw\lib for me). This might need to be adapted by right-clicking on the "gwentest" project, then "Properties"-> "Linker"-> "General" -> "Additional library directories", and you have to insert the directory where mingw's library "libmingwex.a" can be found. After that, MSVC should be able to compile and link the gwentest program. If you run it, you don't see anything, because the program expects some command line arguments. Therefore you have to run the program from the command line, e.g. "gwentest.exe db" Enjoy! gwenhywfar-5.12.0/test/gwentest.c0000664000175000017500000052121414677050126013703 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #ifndef OS_WIN32 # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef OS_WIN32 # include # define sleep(x) Sleep(x*1000) # define strcasecmp(a, b) strcmp(a, b) #else # include # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef WITH_ZIP_TEST # include #endif #ifdef USE_LIBXML2 # include # include #endif #include #include #include #if 0 #include #include #include #endif #include "buffer-t.h" #include "funcs.h" #include "simpleptrlist-t.h" #include "idlist64-t.h" #include "testthread.h" #include #ifdef HAVE_ARPA_INET_H # include #endif extern char **environ; //#define TEST_GPARSER static int readFile(const char *fname, GWEN_BUFFER *dbuf) { FILE *f; f=fopen(fname, "rb"); if (f) { while (!feof(f)) { uint32_t l; ssize_t s; char *p; GWEN_Buffer_AllocRoom(dbuf, 1024); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); p=GWEN_Buffer_GetPosPointer(dbuf); s=fread(p, 1, l, f); if (s==0) break; if (s==(ssize_t)-1) { DBG_ERROR(0, "fread(%s): %s", fname, strerror(errno)); fclose(f); return GWEN_ERROR_IO; } GWEN_Buffer_IncrementPos(dbuf, s); GWEN_Buffer_AdjustUsedBytes(dbuf); } fclose(f); return 0; } else { DBG_ERROR(0, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } } static int removeCTRL(GWEN_BUFFER *dbuf) { char *p1; char *p2; p1=GWEN_Buffer_GetStart(dbuf); p2=p1; while (*p1) { if ((*p1)>31) *(p2++)=*p1; p1++; } GWEN_Buffer_Crop(dbuf, 0, p2-GWEN_Buffer_GetStart(dbuf)); return 0; } static int writeToFile(FILE *f, const char *p, int len) { while (len>0) { ssize_t l; ssize_t s; l=1024; if (l>len) l=len; s=fwrite(p, 1, l, f); if (s==(ssize_t)-1 || s==0) { DBG_ERROR(0, "fwrite: %s", strerror(errno)); return GWEN_ERROR_IO; } p+=s; len-=s; } return 0; } static int writeFile(const char *fname, const char *p, int len) { FILE *f; f=fopen(fname, "wb"); if (f) { int rv; rv=writeToFile(f, p, len); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); fclose(f); return rv; } if (fclose(f)) { DBG_ERROR(0, "here (%d)", rv); return rv; } } else { DBG_ERROR(0, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } return 0; } static int zip_inflate(GWEN_UNUSED const char *ptr, GWEN_UNUSED unsigned int size, GWEN_UNUSED GWEN_BUFFER *buf) { #ifdef WITH_ZIP_TEST z_stream z; char outbuf[512]; int rv; int mode; z.next_in=(unsigned char *)ptr; z.avail_in=size; z.next_out=(unsigned char *)outbuf; z.avail_out=sizeof(outbuf); z.zalloc=Z_NULL; z.zfree=Z_NULL; rv=inflateInit(&z); if (rv!=Z_OK) { DBG_ERROR(0, "Error on deflateInit (%d)", rv); return -1; } mode=Z_NO_FLUSH; for (;;) { rv=inflate(&z, mode); if (z.avail_out!=sizeof(outbuf)) { GWEN_Buffer_AppendBytes(buf, outbuf, sizeof(outbuf)-z.avail_out); z.next_out=(unsigned char *)outbuf; z.avail_out=sizeof(outbuf); } if (rv==Z_STREAM_END) break; if (rv!=Z_OK) { DBG_ERROR(0, "Error on inflate (%d) [%d, %d]", rv, z.avail_out, z.avail_in); deflateEnd(&z); return -1; } if (z.avail_in==0) mode=Z_FINISH; if (z.avail_out==0) { GWEN_Buffer_AppendBytes(buf, outbuf, sizeof(outbuf)); z.next_out=(unsigned char *)outbuf; z.avail_out=sizeof(outbuf); } } if (z.avail_out!=sizeof(outbuf)) { GWEN_Buffer_AppendBytes(buf, outbuf, sizeof(outbuf)-z.avail_out); z.next_out=(unsigned char *)outbuf; z.avail_out=sizeof(outbuf); } inflateEnd(&z); #endif return 0; } int testDB(void) { GWEN_DB_NODE *cfg; int rv; const char *p; GWEN_DB_NODE *dbT; fprintf(stderr, "Creating DB\n"); cfg=GWEN_DB_Group_new("Config"); /* test var 1 */ fprintf(stderr, "Setting char values\n"); rv=GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "testgroup/charvar", "charvalue1"); if (rv) { fprintf(stderr, "ERROR: Could not set value1.\n"); return 2; } dbT=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "testgroup"); if (!dbT) { fprintf(stderr, "ERROR: Could not get group \"testgroup\".\n"); return 2; } p=GWEN_DB_GetCharValue(dbT, "charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar.\n"); return 2; } if (strcmp(p, "charvalue1")!=0) { fprintf(stderr, "ERROR: Value for charvar does not equal.\n"); return 2; } p=GWEN_DB_GetCharValue(cfg, "testgroup/charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar with path.\n"); return 2; } if (strcmp(p, "charvalue1")!=0) { fprintf(stderr, "ERROR: Value for charvar from path does not equal.\n"); return 2; } /* test var 2 */ fprintf(stderr, "Setting char values 2\n"); rv=GWEN_DB_SetCharValue(cfg, 0, "testgroup/charvar", "charvalue2"); if (rv) { fprintf(stderr, "ERROR: Could not set value2.\n"); return 2; } /* test whether charvar1 has changed (it should not) */ dbT=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "testgroup"); if (!dbT) { fprintf(stderr, "ERROR: Could not get group \"testgroup\".\n"); return 2; } p=GWEN_DB_GetCharValue(dbT, "charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar.\n"); return 2; } if (strcmp(p, "charvalue1")!=0) { fprintf(stderr, "ERROR: Value 1 for charvar does not equal [%s]!=[%s].\n", p, "charvalue1"); return 2; } p=GWEN_DB_GetCharValue(cfg, "testgroup/charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar with path.\n"); return 2; } if (strcmp(p, "charvalue1")!=0) { fprintf(stderr, "ERROR: Value for charvar from path does not equal.\n"); return 2; } /* test whether charvar value 2 exists (it should) */ p=GWEN_DB_GetCharValue(dbT, "charvar", 1, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar 2.\n"); return 2; } if (strcmp(p, "charvalue2")!=0) { fprintf(stderr, "ERROR: Value 2 for charvar does not equal.\n"); return 2; } p=GWEN_DB_GetCharValue(cfg, "testgroup/charvar", 1, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar with path.\n"); return 2; } if (strcmp(p, "charvalue2")!=0) { fprintf(stderr, "ERROR: Value for charvar 2 from path does not equal.\n"); return 2; } /* test var 2 again, this time overwrite*/ fprintf(stderr, "Setting char values 2 (overwrite)\n"); rv=GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "testgroup/charvar", "charvalue2"); if (rv) { fprintf(stderr, "ERROR: Could not overwrite value2.\n"); return 2; } /* test whether charvar1 has changed (it should have) */ dbT=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "testgroup"); if (!dbT) { fprintf(stderr, "ERROR: Could not get group \"testgroup\".\n"); return 2; } p=GWEN_DB_GetCharValue(dbT, "charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar.\n"); return 2; } if (strcmp(p, "charvalue2")!=0) { fprintf(stderr, "ERROR: Value 2 (overwrite) for charvar does not " "equal [%s]!=[%s].\n", p, "charvalue2"); return 2; } p=GWEN_DB_GetCharValue(cfg, "testgroup/charvar", 0, NULL); if (p==NULL) { fprintf(stderr, "ERROR: Could not get charvar with path.\n"); return 2; } if (strcmp(p, "charvalue2")!=0) { fprintf(stderr, "ERROR: Value for overwritten charvar from " "path does not equal.\n"); return 2; } /* test whether charvar value 2 exists (it should not) */ p=GWEN_DB_GetCharValue(dbT, "charvar", 1, NULL); if (p!=NULL) { fprintf(stderr, "ERROR: charvar 2 should have been overwritten.\n"); return 2; } p=GWEN_DB_GetCharValue(cfg, "testgroup/charvar", 1, NULL); if (p!=NULL) { fprintf(stderr, "ERROR: Could not get charvar with path.\n"); return 2; } /* test int values */ fprintf(stderr, "Setting int values\n"); rv=GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "testgroup/intvar", 11); rv=GWEN_DB_SetIntValue(cfg, 0, "testgroup/intvar", 22); fprintf(stderr, "Retrieving int values\n"); rv=GWEN_DB_GetIntValue(cfg, "testgroup/intvar", 0, -1); if (rv!=11) { fprintf(stderr, "ERROR: int value 1 is not 11: %d\n", rv); return 2; } rv=GWEN_DB_GetIntValue(cfg, "testgroup/intvar", 1, -1); if (rv!=22) { fprintf(stderr, "ERROR: int value 1 is not 22: %d\n", rv); return 2; } GWEN_DB_Dump(cfg, 2); fprintf(stderr, "Releasing DB\n"); GWEN_DB_Group_free(cfg); return 0; } int testDB2(void) { GWEN_DB_NODE *cfg; int rv; const char *p; fprintf(stderr, "Creating DB\n"); cfg=GWEN_DB_Group_new("Config"); fprintf(stderr, "Setting char values\n"); GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_CREATE_GROUP, "testgroup"); GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_CREATE_GROUP, "testgroup"); rv=GWEN_DB_SetCharValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "testgroup[1]/charvar", "charvalue1"); rv=GWEN_DB_SetCharValue(cfg, 0, "testgroup[1]/charvar", "charvalue2"); fprintf(stderr, "Retrieving char values\n"); p=GWEN_DB_GetCharValue(cfg, "testgroup[1]/charvar", 0, "defaultValue"); fprintf(stderr, " Retrieved value 1 is: %s\n", p); p=GWEN_DB_GetCharValue(cfg, "testgroup[1]/charvar", 1, "defaultValue"); fprintf(stderr, " Retrieved value 2 is: %s\n", p); fprintf(stderr, "Setting int values\n"); rv=GWEN_DB_SetIntValue(cfg, GWEN_DB_FLAGS_OVERWRITE_VARS, "testgroup[1]/intvar", 11); rv=GWEN_DB_SetIntValue(cfg, 0, "testgroup[1]/intvar", 22); fprintf(stderr, "Retrieving int values\n"); rv=GWEN_DB_GetIntValue(cfg, "testgroup[1]/intvar", 0, -1); fprintf(stderr, " Retrieved int value 1 is: %d\n", rv); rv=GWEN_DB_GetIntValue(cfg, "testgroup[1]/intvar", 1, -1); fprintf(stderr, " Retrieved int value 2 is: %d\n", rv); GWEN_DB_Dump(cfg, 2); fprintf(stderr, "Releasing DB\n"); GWEN_DB_Group_free(cfg); return 0; } int testDBfile(void) { GWEN_DB_NODE *db; fprintf(stderr, "Creating DB\n"); db=GWEN_DB_Group_new("Config"); fprintf(stderr, "Reading file\n"); if (GWEN_DB_ReadFile(db, "test.db", GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr, "Error reading file.\n"); return 1; } fprintf(stderr, "DB is:\n"); GWEN_DB_Dump(db, 2); fprintf(stderr, "Releasing DB\n"); GWEN_DB_Group_free(db); return 0; } int testDBfile2(int argc, char **argv) { GWEN_DB_NODE *db; if (argc<4) { fprintf(stderr, "%s dbfile2 src dest\n", argv[0]); return 1; } fprintf(stderr, "Creating DB\n"); db=GWEN_DB_Group_new("Config"); fprintf(stderr, "Reading file\n"); if (GWEN_DB_ReadFile(db, argv[2], GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr, "Error reading file.\n"); return 1; } if (GWEN_DB_WriteFile(db, argv[3], GWEN_DB_FLAGS_DEFAULT &~GWEN_DB_FLAGS_ESCAPE_CHARVALUES)) { fprintf(stderr, "Error writing file.\n"); return 1; } fprintf(stderr, "Releasing DB\n"); GWEN_DB_Group_free(db); return 0; } int testDBfile3(int argc, char **argv) { GWEN_DB_NODE *db; if (argc<4) { fprintf(stderr, "%s dbfile3 src dest\n", argv[0]); return 1; } fprintf(stderr, "Creating DB\n"); db=GWEN_DB_Group_new("Config"); fprintf(stderr, "Reading file\n"); if (GWEN_DB_ReadFile(db, argv[2], GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr, "Error reading file.\n"); return 1; } if (GWEN_DB_WriteFile(db, argv[3], GWEN_DB_FLAGS_DEFAULT &~GWEN_DB_FLAGS_ESCAPE_CHARVALUES)) { fprintf(stderr, "Error writing file.\n"); return 1; } fprintf(stderr, "Releasing DB\n"); GWEN_DB_Group_free(db); return 0; } int testDBfile4(void) { GWEN_DB_NODE *db; fprintf(stderr, "Creating DB\n"); db=GWEN_DB_Group_new("Config"); fprintf(stderr, "Reading file\n"); if (GWEN_DB_ReadFile(db, "test.db", GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { fprintf(stderr, "Error reading file.\n"); return 1; } fprintf(stderr, "Releasing DB\n"); GWEN_DB_Group_free(db); return 0; } int testXML(int argc, char **argv) { GWEN_XMLNODE *n; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } fprintf(stderr, "XML file:\n"); GWEN_XMLNode_Dump(n, 2); GWEN_XMLNode_free(n); return 0; } int testXML2(int argc, char **argv) { GWEN_XMLNODE *n; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS | GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } fprintf(stderr, "XML file:\n"); GWEN_XMLNode_Dump(n, 2); if (GWEN_XMLNode_WriteFile(n, "xml.out", GWEN_XML_FLAGS_SIMPLE)) { fprintf(stderr, "Could not write file xml.out\n"); return 2; } GWEN_XMLNode_free(n); return 0; } int testXML3(int argc, char **argv) { GWEN_XMLNODE *n; GWEN_XMLNODE *nXml; int rv; GWEN_XMLNODE_NAMESPACE_LIST *l; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS | GWEN_XML_FLAGS_HANDLE_NAMESPACES | GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); GWEN_XMLNode_Dump(n, 2); return 1; } nXml=GWEN_XMLNode_GetFirstTag(n); assert(nXml); l=GWEN_XMLNode_GetNameSpaces(nXml); if (l) { GWEN_XMLNODE_NAMESPACE *ns; ns=GWEN_XMLNode_NameSpace_List_First(l); while (ns) { fprintf(stderr, "- [%s] = [%s]\n", GWEN_XMLNode_NameSpace_GetName(ns), GWEN_XMLNode_NameSpace_GetUrl(ns)); ns=GWEN_XMLNode_NameSpace_List_Next(ns); } } rv=GWEN_XMLNode_Globalize(nXml); if (rv) { fprintf(stderr, "Could not globalize (%d)\n", rv); return 2; } if (GWEN_XMLNode_WriteFile(n, "xml.out", GWEN_XML_FLAGS_HANDLE_NAMESPACES | GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Could not write file xml.out\n"); return 2; } GWEN_XMLNode_free(n); return 0; } int testXML4(int argc, char **argv) { GWEN_XMLNODE *n; time_t startTime; time_t stopTime; int i; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); startTime=time(0); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } stopTime=time(0); GWEN_XMLNode_free(n); i=difftime(stopTime, startTime); fprintf(stderr, "Time for loading: %d secs\n", i); return 0; } int testXML5(void) { #ifdef USE_LIBXML2 xmlDocPtr doc; time_t startTime; time_t stopTime; int i; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } startTime=time(0); doc=xmlParseFile(argv[2]); stopTime=time(0); if (doc==0) { fprintf(stderr, "Error loading file \"%s\"", argv[2]); return -1; } i=difftime(stopTime, startTime); fprintf(stderr, "Time for loading: %d secs\n", i); #else fprintf(stderr, "Compiled without support for LibXML\n"); #endif return 0; } int testXML6(int argc, char **argv) { GWEN_XMLNODE *n; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS | GWEN_XML_FLAGS_HANDLE_NAMESPACES | GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } if (GWEN_XMLNode_WriteFile(n, "xml.out", GWEN_XML_FLAGS_HANDLE_NAMESPACES | GWEN_XML_FLAGS_SIMPLE)) { fprintf(stderr, "Could not write file xml.out\n"); return 2; } GWEN_XMLNode_free(n); return 0; } int testXML7(int argc, char **argv) { GWEN_XMLNODE *n; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS | GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS | GWEN_XML_FLAGS_SGML)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } fprintf(stderr, "XML file:\n"); GWEN_XMLNode_Dump(n, 2); GWEN_XMLNode_free(n); return 0; } int testXML8(int argc, char **argv) { GWEN_XMLNODE *n; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); if (GWEN_XML_ReadFile(n, argv[2], GWEN_XML_FLAGS_TOLERANT_ENDTAGS | GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS | GWEN_XML_FLAGS_SGML | GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } fprintf(stderr, "XML file:\n"); GWEN_XMLNode_Dump(n, 2); if (GWEN_XMLNode_WriteFile(n, "xml.out", GWEN_XML_FLAGS_SIMPLE)) { fprintf(stderr, "Could not write file xml.out\n"); return 2; } GWEN_XMLNode_free(n); return 0; } int testMsg(void) { GWEN_XMLNODE *n; GWEN_MSGENGINE *e; GWEN_XMLNODE *sn; GWEN_DB_NODE *da; GWEN_DB_NODE *din; GWEN_BUFFER *gbuf; e=GWEN_MsgEngine_new(); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); da=GWEN_DB_Group_new("Data"); din=GWEN_DB_Group_new("ParsedData"); gbuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_XML_ReadFile(n, "test.xml", GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } GWEN_MsgEngine_SetDefinitions(e, n, 1); sn=GWEN_MsgEngine_FindNodeByProperty(e, "SEG", "code", 3, "HKTAN"); if (!sn) { fprintf(stderr, "Segment not found.\n"); return 2; } fprintf(stderr, "Node:\n"); GWEN_XMLNode_Dump(sn, 2); GWEN_DB_SetIntValue(da, GWEN_DB_FLAGS_OVERWRITE_VARS, "head/seq", 77); GWEN_DB_SetIntValue(da, GWEN_DB_FLAGS_OVERWRITE_VARS, "process", 4); GWEN_DB_SetCharValue(da, GWEN_DB_FLAGS_OVERWRITE_VARS, "tanMediumId", "TESTMEDIUM"); if (GWEN_MsgEngine_CreateMessageFromNode(e, sn, gbuf, da)) { fprintf(stderr, "Error creating message.\n"); return 3; } GWEN_Text_DumpString(GWEN_Buffer_GetStart(gbuf), GWEN_Buffer_GetUsedBytes(gbuf), 1); GWEN_Buffer_SetPos(gbuf, 0); if (GWEN_MsgEngine_ParseMessage(e, sn, gbuf, din, GWEN_MSGENGINE_READ_FLAGS_TRUSTINFO)) { fprintf(stderr, "Error parsing message.\n"); return 3; } GWEN_Buffer_free(gbuf); GWEN_MsgEngine_free(e); GWEN_DB_Group_free(da); GWEN_DB_Group_free(din); return 0; } int testListMsg(int argc, char **argv) { GWEN_XMLNODE *n; GWEN_MSGENGINE *e; GWEN_XMLNODE *sn; const char *segname; if (argc<3) { fprintf(stderr, "Segment name needed.\n"); return 1; } segname=argv[2]; e=GWEN_MsgEngine_new(); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); if (GWEN_XML_ReadFile(n, "test.xml", GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "Error reading XML file.\n"); return 1; } GWEN_MsgEngine_SetDefinitions(e, n, 1); sn=GWEN_MsgEngine_ListMessage(e, "SEG", segname, 0, /*GWEN_MSGENGINE_SHOW_FLAGS_NOSET*/ 0); if (!sn) { fprintf(stderr, "Error listing message.\n"); return 3; } fprintf(stderr, "Node:\n"); GWEN_XMLNode_Dump(sn, 2); GWEN_MsgEngine_free(e); return 0; } int testSnprintf(void) { unsigned int i; char buffer[256]; unsigned int p; p=0xdeadbeef; i=GWEN_Debug_Snprintf(buffer, sizeof(buffer), "Test %010x %s [%s]\n", p, "Some crazy cow", 0); buffer[sizeof(buffer)-1]=0; fprintf(stderr, "Result: \"%s\" (%d)\n", buffer, i); return 0; } int testProcess(int argc, char **argv) { GWEN_Logger_Open(0, "test", "gwentest.log", GWEN_LoggerType_File, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Verbous); if (argc<3) { fprintf(stderr, "%s process client|server\n", argv[0]); return 1; } fprintf(stderr, "Ping...\n"); fprintf(stderr, "argv2 is \"%s\"\n", argv[2]); if (strcasecmp(argv[2], "server")==0) { GWEN_PROCESS *pr; GWEN_PROCESS_STATE pst; GWEN_SYNCIO *sio; GWEN_BUFFER *tbuf; int err; fprintf(stderr, "Creating process\n"); pr=GWEN_Process_new(); fprintf(stderr, "Creating process: done\n"); fprintf(stderr, "Setting flags\n"); GWEN_Process_AddFlags(pr, GWEN_PROCESS_FLAGS_REDIR_STDOUT); fprintf(stderr, "Setting flags: done\n"); fprintf(stderr, "Starting process\n"); pst=GWEN_Process_Start(pr, argv[0], "process client"); //pst=GWEN_ProcessStateNotStarted; if (pst!=GWEN_ProcessStateRunning) { fprintf(stderr, "Bad process state \"%d\"", pst); return 2; } fprintf(stderr, "Started process\n"); //Sleep(15000); //return 0; sio=GWEN_Process_GetStdout(pr); assert(sio); sio=GWEN_SyncIo_Buffered_new(sio); assert(sio); tbuf=GWEN_Buffer_new(0, 512, 0, 1); do { fprintf(stderr, "Will read from client\n"); err=GWEN_SyncIo_Buffered_ReadLineToBuffer(sio, tbuf); if (err<0) { fprintf(stderr, "ERROR: Reading from clients output (%d)\n", err); return 2; } fprintf(stderr, "DATA: %s\n", GWEN_Buffer_GetStart(tbuf)); } while (err>=0); err=GWEN_SyncIo_Disconnect(sio); if (err<0) { fprintf(stderr, "ERROR: Closing clients output stream (%d)\n", err); return 2; } fprintf(stderr, "INFO: Client disconnected.\n"); return 0; } /* if server */ else { fprintf(stderr, "Hello, I'm the client...\n"); if (fprintf(stdout, "Hello, I'm the client...\n")<1) { fprintf(stderr, "ERROR: Client could not write.\n"); } sleep(10); fprintf(stderr, "Client exiting\n"); return 0; } } int testProcess2() { GWEN_BUFFER *stdOutBuffer; GWEN_BUFFER *stdErrBuffer; int rv; stdOutBuffer=GWEN_Buffer_new(0, 256, 0, 1); stdErrBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); rv=GWEN_Process_RunCommandWaitAndGather("bash", "-c set", stdOutBuffer, stdErrBuffer); if (rv<0) { fprintf(stderr, "Error (%d)\n", rv); } fprintf(stdout, "Result of command:\n%s\n", GWEN_Buffer_GetStart(stdOutBuffer)); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); return 0; } int testOptions(int argc, char **argv) { int rv; GWEN_DB_NODE *db; GWEN_BUFFER *ubuf; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "charOption", /* name */ 1, /* minnum */ 0, /* maxnum */ "c", /* short option */ "char", /* long option */ "char option", /* short description */ "this is a char option" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "boolOption", /* name */ 0, /* minnum */ 0, /* maxnum */ "b", /* short option */ "bool", /* long option */ "bool option", /* short description */ "This is a bool option.\n" /* long description */ "It is used to show how the mere existence of an option is interpreted\n" "by the command line argument parser" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "intOption", /* name */ 0, /* minnum */ 0, /* maxnum */ "i", /* short option */ "int", /* long option */ "int option", /* short description */ "this is an int option" /* long description */ } }; db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv<1) { fprintf(stderr, "ERROR: Could not parse (%d)\n", rv); } else { GWEN_DB_Dump(db, 2); } GWEN_DB_Group_free(db); ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); return 0; } int testBase64(int argc, char **argv) { GWEN_BUFFER *dst; GWEN_BUFFER *src; GWEN_BUFFER *tmp; FILE *f; char buffer[1024]; int i; if (argc<2) { fprintf(stderr, "Name of a file needed\n"); return 1; } dst=GWEN_Buffer_new(0, 600000, 0, 1); src=GWEN_Buffer_new(0, 600000, 0, 1); f=fopen(argv[2], "r"); if (!f) { perror(argv[2]); return 1; } while (!feof(f)) { i=fread(buffer, 1, sizeof(buffer), f); if (i<1) { perror("fread"); return 2; } GWEN_Buffer_AppendBytes(src, buffer, i); } /* while */ fclose(f); if (GWEN_Base64_Encode(/* GCC4 pointer-signedness fix: */ (unsigned char *)GWEN_Buffer_GetStart(src), GWEN_Buffer_GetUsedBytes(src), dst, 76)) { fprintf(stderr, "Error encoding file.\n"); return 3; } f=fopen("base64.out", "w+"); if (!f) { perror(argv[2]); return 1; } if (fwrite(GWEN_Buffer_GetStart(dst), GWEN_Buffer_GetUsedBytes(dst), 1, f)!=1) { perror("fwrite"); fclose(f); return 4; } if (fclose(f)) { perror("fclose"); return 4; } tmp=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(src), 0, 1); if (GWEN_Base64_Decode(/* GCC4 pointer-signedness fix: */ (unsigned char *)GWEN_Buffer_GetStart(dst), GWEN_Buffer_GetUsedBytes(src), tmp)) { fprintf(stderr, "Error decoding file.\n"); return 3; } f=fopen("base64.out.bin", "w+"); if (!f) { perror(argv[2]); return 1; } if (fwrite(GWEN_Buffer_GetStart(tmp), GWEN_Buffer_GetUsedBytes(tmp), 1, f)!=1) { perror("fwrite"); return 4; } if (fclose(f)) { perror("fclose"); return 4; } return 0; } int testBase64_2(int argc, char **argv) { GWEN_BUFFER *dst; GWEN_BUFFER *src; FILE *f; char buffer[1024]; int i; if (argc<2) { fprintf(stderr, "Name of a file needed\n"); return 1; } dst=GWEN_Buffer_new(0, 600000, 0, 1); src=GWEN_Buffer_new(0, 600000, 0, 1); f=fopen(argv[2], "r"); if (!f) { perror(argv[2]); return 1; } while (!feof(f)) { i=fread(buffer, 1, sizeof(buffer), f); if (i<1) { perror("fread"); fclose(f); return 2; } GWEN_Buffer_AppendBytes(src, buffer, i); } /* while */ fclose(f); DBG_ERROR(0, "Size of src data: %d bytes", GWEN_Buffer_GetUsedBytes(src)); removeCTRL(src); DBG_ERROR(0, "Size of raw data: %d bytes", GWEN_Buffer_GetUsedBytes(src)); if (GWEN_Base64_Decode(/* GCC4 pointer-signedness fix: */ (unsigned char *)GWEN_Buffer_GetStart(src), 0, dst)) { fprintf(stderr, "Error decoding file.\n"); return 3; } f=fopen("base64.out.bin", "w+"); if (!f) { perror(argv[2]); return 1; } if (fwrite(GWEN_Buffer_GetStart(dst), GWEN_Buffer_GetUsedBytes(dst), 1, f)!=1) { perror("fwrite"); return 4; } if (fclose(f)) { perror("fclose"); return 4; } return 0; } int testTime(void) { GWEN_TIME *ti1; GWEN_TIME *ti2; GWEN_DB_NODE *db1; GWEN_DB_NODE *db2; ti1=GWEN_CurrentTime(); assert(ti1); db1=GWEN_DB_Group_new("time"); if (GWEN_Time_toDb(ti1, db1)) { fprintf(stderr, "Error saving time.\n"); return 1; } DBG_NOTICE(0, "Time 1:"); GWEN_DB_Dump(db1, 2); ti2=GWEN_Time_fromDb(db1); db2=GWEN_DB_Group_new("time"); if (GWEN_Time_toDb(ti2, db2)) { fprintf(stderr, "Error saving time.\n"); return 1; } DBG_NOTICE(0, "Time 2:"); GWEN_DB_Dump(db2, 2); return 0; } int testTimeToString(int argc, char **argv) { GWEN_TIME *t; GWEN_BUFFER *tbuf; const char *tmpl; if (argc<3) tmpl="YYYY/MM/DD hh:mm:ss"; else tmpl=argv[2]; t=GWEN_CurrentTime(); assert(t); tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Time_toString(t, tmpl, tbuf)) { fprintf(stderr, "Could not convert time to string.\n"); return 2; } fprintf(stdout, "Current date/time: %s\n", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); if (GWEN_Time_toUtcString(t, tmpl, tbuf)) { fprintf(stderr, "Could not convert time to string.\n"); return 2; } fprintf(stdout, "Current UTC date/time: %s\n", GWEN_Buffer_GetStart(tbuf)); return 0; } int testTimeFromString(int argc, char **argv) { GWEN_TIME *t; const char *s; const char *tmpl; GWEN_BUFFER *tbuf; if (argc!=4) { fprintf(stderr, "Arguments needed: %s %s TEMPLATE DATA\n", argv[0], argv[1]); return 1; } tmpl=argv[2]; s=argv[3]; t=GWEN_Time_fromUtcString(s, tmpl); if (!t) { fprintf(stderr, "Could not convert string to time.\n"); return 2; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Time_toUtcString(t, "YYYY/MM/DD-hh:mm:ss", tbuf)) { fprintf(stderr, "Could not convert time to string.\n"); return 2; } fprintf(stdout, "UTC date/time \"%s\": %s\n", s, GWEN_Buffer_GetStart(tbuf)); return 0; } int testDateFromString(int argc, char **argv) { GWEN_DATE *dt; const char *s; const char *tmpl; GWEN_BUFFER *tbuf; if (argc>3) tmpl=argv[3]; else tmpl="YYYYMMDD"; if (argc<3) { fprintf(stderr, "Arguments needed: %s %s DATE [TEMPLATE]\n", argv[0], argv[1]); return 1; } s=argv[2]; dt=GWEN_Date_fromStringWithTemplate(s, tmpl); if (!dt) { fprintf(stderr, "Could not convert string to date.\n"); return 2; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Date_toStringWithTemplate(dt, "YYYY/MM/DD", tbuf)) { fprintf(stderr, "Could not convert date to string.\n"); return 2; } fprintf(stdout, "date \"%s\": %s\n", s, GWEN_Buffer_GetStart(tbuf)); return 0; } int testDateAddDays(int argc, char **argv) { GWEN_DATE *dt; const char *s; int toAdd=1; GWEN_BUFFER *tbuf; if (argc>3) { if (1!=sscanf(argv[3], "%d", &toAdd)) { } } if (argc<3) { fprintf(stderr, "Arguments needed: %s %s DATE [DAYS_TO_ADD]\n", argv[0], argv[1]); return 1; } s=argv[2]; dt=GWEN_Date_fromStringWithTemplate(s, "YYYYMMDD"); if (!dt) { fprintf(stderr, "Could not convert string to date.\n"); return 2; } GWEN_Date_AddDays(dt, toAdd); tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (GWEN_Date_toStringWithTemplate(dt, "YYYY/MM/DD", tbuf)) { fprintf(stderr, "Could not convert date to string.\n"); return 2; } fprintf(stdout, "date \"%s\" + %d days: %s\n", s, toAdd, GWEN_Buffer_GetStart(tbuf)); return 0; } int testOldDbImport(void) { GWEN_DB_NODE *db; GWEN_DB_NODE *dbParams; db=GWEN_DB_Group_new("test"); dbParams=GWEN_DB_Group_new("params"); if (GWEN_DB_ReadFileAs(db, "test.olddb", "olddb", dbParams, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP)) { DBG_ERROR(0, "Could not read test file"); return 2; } if (GWEN_DB_WriteFile(db, "test.out", GWEN_DB_FLAGS_DEFAULT)) { DBG_ERROR(0, "Could not write outfile"); } return 0; } int testRfc822Import(void) { GWEN_DB_NODE *db; GWEN_DB_NODE *dbParams; db=GWEN_DB_Group_new("test"); dbParams=GWEN_DB_Group_new("params"); if (GWEN_DB_ReadFileAs(db, "test.822", "rfc822", dbParams, GWEN_PATH_FLAGS_CREATE_GROUP | GWEN_DB_FLAGS_UNTIL_EMPTY_LINE)) { GWEN_DB_Dump(db, 2); DBG_ERROR(0, "Could not read test file"); return 2; } if (GWEN_DB_WriteFile(db, "test.out", GWEN_DB_FLAGS_DEFAULT)) { DBG_ERROR(0, "Could not write outfile"); } return 0; } int testRfc822Export(void) { GWEN_DB_NODE *db; GWEN_DB_NODE *dbParams; GWEN_GUI *gui; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); db=GWEN_DB_Group_new("test"); dbParams=GWEN_DB_Group_new("params"); if (GWEN_DB_ReadFileAs(db, "test.822", "rfc822", dbParams, GWEN_PATH_FLAGS_CREATE_GROUP | GWEN_DB_FLAGS_UNTIL_EMPTY_LINE)) { DBG_ERROR(0, "Could not read test file"); return 2; } //GWEN_DB_Dump(db, stderr, 2); if (GWEN_DB_WriteFileAs(db, "test.822.out", "rfc822", dbParams, GWEN_DB_FLAGS_DEFAULT)) { DBG_ERROR(0, "Could not write outfile"); } return 0; } int testFsLock(int argc, char **argv) { GWEN_FSLOCK *fl; GWEN_FSLOCK_RESULT res; if (argc<3) { fprintf(stderr, "Usage: %s fslock FILENAME\n", argv[0]); return 1; } fl=GWEN_FSLock_new(argv[2], GWEN_FSLock_TypeFile); fprintf(stderr, "Locking %s\n", argv[2]); res=GWEN_FSLock_Lock(fl, 30000, 0); if (res!=GWEN_FSLock_ResultOk) { fprintf(stderr, "Error locking %s: %d\n", argv[2], res); return 2; } fprintf(stderr, "Holding lock on %s ...\n", argv[2]); sleep(10); fprintf(stderr, "Unlocking %s\n", argv[2]); res=GWEN_FSLock_Unlock(fl); if (res!=GWEN_FSLock_ResultOk) { fprintf(stderr, "Error unlocking %s: %d\n", argv[2], res); return 3; } fprintf(stderr, "Success.\n"); return 0; } int testFsLock2(int argc, char **argv) { GWEN_FSLOCK *fl; GWEN_FSLOCK_RESULT res; if (argc<3) { fprintf(stderr, "Usage: %s fslock2 FOLDERNAME\n", argv[0]); return 1; } fl=GWEN_FSLock_new(argv[2], GWEN_FSLock_TypeDir); fprintf(stderr, "Locking %s\n", argv[2]); res=GWEN_FSLock_Lock(fl, 3000, 0); if (res!=GWEN_FSLock_ResultOk) { fprintf(stderr, "Error locking %s: %d\n", argv[2], res); return 2; } fprintf(stderr, "Holding lock on %s ...\n", argv[2]); sleep(10); fprintf(stderr, "Unlocking %s\n", argv[2]); res=GWEN_FSLock_Unlock(fl); if (res!=GWEN_FSLock_ResultOk) { fprintf(stderr, "Error unlocking %s: %d\n", argv[2], res); return 3; } fprintf(stderr, "Success.\n"); return 0; } int testPtr(void) { GWEN_REFPTR *rp; GWEN_REFPTR *rp2; char *dp1; char *dp2; dp1=strdup("Hello, World"); dp2=strdup("Goodbye ;-)"); rp=GWEN_RefPtr_new(dp1, 0); fprintf(stderr, "Data is: %s\n", (char *)GWEN_RefPtr_GetData(rp)); GWEN_RefPtr_SetData(rp, dp2, 0); fprintf(stderr, "Data is now: %s\n", (char *)GWEN_RefPtr_GetData(rp)); rp2=GWEN_RefPtr_dup(rp); fprintf(stderr, "Data2 is: %s\n", (char *)GWEN_RefPtr_GetData(rp2)); GWEN_RefPtr_SetData(rp2, dp2, 0); fprintf(stderr, "Data2 is now: %s\n", (char *)GWEN_RefPtr_GetData(rp2)); GWEN_RefPtr_free(rp); return 0; } int testStringList2(void) { GWEN_STRINGLIST2 *sl2; GWEN_STRINGLIST2 *sl2copy; GWEN_STRINGLIST2_ITERATOR *it; GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); sl2=GWEN_StringList2_new(); GWEN_StringList2_AppendString(sl2, "1:First string", 0, GWEN_StringList2_IntertMode_NoDouble); GWEN_StringList2_AppendString(sl2, "2:Second string", 0, GWEN_StringList2_IntertMode_NoDouble); GWEN_StringList2_AppendString(sl2, "3:Third string", 0, GWEN_StringList2_IntertMode_NoDouble); GWEN_StringList2_AppendString(sl2, "4:Fourth string", 0, GWEN_StringList2_IntertMode_NoDouble); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while (t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_AppendString(sl2, strdup("3:Third string"), 1, GWEN_StringList2_IntertMode_NoDouble); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while (t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_AppendString(sl2, "3:Third string", 0, GWEN_StringList2_IntertMode_Reuse); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while (t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_RemoveString(sl2, "3:Third string"); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while (t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } sl2copy=GWEN_StringList2_dup(sl2); fprintf(stderr, "CopyList:\n"); it=GWEN_StringList2_First(sl2copy); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while (t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_RemoveString(sl2, "3:Third string"); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while (t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } fprintf(stderr, "CopyList:\n"); it=GWEN_StringList2_First(sl2copy); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while (t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_RemoveString(sl2copy, "2:Second string"); fprintf(stderr, "List:\n"); it=GWEN_StringList2_First(sl2); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while (t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } fprintf(stderr, "CopyList:\n"); it=GWEN_StringList2_First(sl2copy); if (it) { const char *t; int i; t=GWEN_StringList2Iterator_Data(it); i=0; while (t) { fprintf(stderr, "String %d: %s [%d]\n", i, t, GWEN_StringList2Iterator_GetLinkCount(it)); t=GWEN_StringList2Iterator_Next(it); } GWEN_StringList2Iterator_free(it); } GWEN_StringList2_free(sl2); return 0; } int testSort(int argc, char **argv) { GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; unsigned int j; char *x; if (argc<3) { fprintf(stderr, "At least one argument for stringlist needed.\n"); return 1; } sl=GWEN_StringList_new(); GWEN_StringList_SetSenseCase(sl, 1); for (j=2; jsin_family=PF_INET; #else aptr->sin_family=AF_INET; #endif DBG_ERROR(0, "ping"); aptr->sin_addr.s_addr=inet_addr("85.10.225.70"); aptr->sin_port=htons(443); DBG_ERROR(0, "ping"); sd=socket(PF_INET, SOCK_STREAM, 0); if (sd==-1) { DBG_ERROR(0, "socket: %s", strerror(errno)); return 2; } DBG_ERROR(0, "ping"); rv=connect(sd, address, size); DBG_ERROR(0, "ping"); if (rv) { DBG_ERROR(0, "connect: %s", strerror(errno)); return 2; } DBG_ERROR(0, "ping"); rv=gnutls_init(&session, GNUTLS_CLIENT); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_init: %d (%s)", rv, gnutls_strerror(rv)); return GWEN_ERROR_GENERIC; } rv=gnutls_set_default_priority(session); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_set_default_priority: %d (%s)", rv, gnutls_strerror(rv)); return GWEN_ERROR_GENERIC; } rv=gnutls_certificate_allocate_credentials(&credentials); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_certificate_allocate_credentials: %d (%s)", rv, gnutls_strerror(rv)); return GWEN_ERROR_GENERIC; } rv=gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, credentials); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_credentials_set: %d (%s)", rv, gnutls_strerror(rv)); gnutls_certificate_free_credentials(credentials); gnutls_deinit(session); return GWEN_ERROR_GENERIC; } gnutls_transport_set_ptr(session, (gnutls_transport_ptr_t)(intptr_t)sd); DBG_ERROR(0, "ping"); rv=gnutls_handshake(session); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "gnutls_handshake: %d (%s)", rv, gnutls_strerror(rv)); return GWEN_ERROR_GENERIC; } DBG_ERROR(0, "Ok."); return 0; } static void print_mpi(const char *text, gcry_mpi_t a) { char *buf; void *bufaddr = &buf; gcry_error_t rc; rc = gcry_mpi_aprint(GCRYMPI_FMT_HEX, bufaddr, NULL, a); if (rc) fprintf(stderr, "%s=[error printing number: %s]\n", text, gpg_strerror(rc)); else { fprintf(stderr, "%s=0x%s\n", text, buf); gcry_free(buf); } } static void check_generated_rsa_key(gcry_sexp_t key, unsigned long expected_e) { gcry_sexp_t skey, pkey, list; pkey = gcry_sexp_find_token(key, "public-key", 0); if (!pkey) { DBG_ERROR(0, "public part missing in return value"); exit(2); } else { gcry_mpi_t e = NULL; list = gcry_sexp_find_token(pkey, "e", 0); if (!list || !(e=gcry_sexp_nth_mpi(list, 1, 0))) { DBG_ERROR(0, "public exponent not found"); exit(2); } else if (!expected_e) { print_mpi("e", e); } else { if (gcry_mpi_cmp_ui(e, expected_e)) { print_mpi("e", e); fprintf(stderr, "public exponent is not %lu\n", expected_e); exit(2); } else { fprintf(stderr, "public exponent is as expected\n"); print_mpi("e", e); } } gcry_sexp_release(list); gcry_mpi_release(e); gcry_sexp_release(pkey); } skey = gcry_sexp_find_token(key, "private-key", 0); if (!skey) { DBG_ERROR(0, "private part missing in return value"); exit(2); } else { int rc = gcry_pk_testkey(skey); if (rc) { DBG_ERROR(0, "gcry_pk_testkey failed: %s", gpg_strerror(rc)); exit(2); } gcry_sexp_release(skey); } } static int check_rsa_keys(void) { gcry_sexp_t keyparm, key; int rc; fprintf(stderr, "creating 1024 bit RSA key using old interface\n"); rc = gcry_sexp_new(&keyparm, "(genkey\n" " (rsa\n" " (nbits 4:1024)\n" " ))", 0, 1); if (rc) { DBG_ERROR(0, "error creating S-expression: %s", gpg_strerror(rc)); exit(2); } rc = gcry_pk_genkey(&key, keyparm); gcry_sexp_release(keyparm); if (rc) { DBG_ERROR(0, "error generating RSA key: %s", gpg_strerror(rc)); exit(2); } check_generated_rsa_key(key, 65537); gcry_sexp_release(key); fprintf(stderr, "creating 512 bit RSA key with e=257\n"); rc = gcry_sexp_new(&keyparm, "(genkey\n" " (rsa\n" " (nbits 3:512)\n" " (rsa-use-e 3:257)\n" " ))", 0, 1); if (rc) { DBG_ERROR(0, "error creating S-expression: %s", gpg_strerror(rc)); exit(2); } rc = gcry_pk_genkey(&key, keyparm); gcry_sexp_release(keyparm); if (rc) { DBG_ERROR(0, "error generating RSA key: %s", gpg_strerror(rc)); exit(2); } check_generated_rsa_key(key, 257); gcry_sexp_release(key); fprintf(stderr, "creating 512 bit RSA key with default e\n"); rc = gcry_sexp_new(&keyparm, "(genkey\n" " (rsa\n" " (nbits 3:512)\n" " (rsa-use-e 1:0)\n" " ))", 0, 1); if (rc) { DBG_ERROR(0, "error creating S-expression: %s", gpg_strerror(rc)); exit(2); } rc = gcry_pk_genkey(&key, keyparm); gcry_sexp_release(keyparm); if (rc) { DBG_ERROR(0, "error generating RSA key: %s", gpg_strerror(rc)); exit(2); } check_generated_rsa_key(key, 0); /* We don't expect a constant exponent. */ gcry_sexp_release(key); fprintf(stderr, "creating 768 bit RSA key with e=65537\n"); rc = gcry_sexp_new(&keyparm, "(genkey\n" " (rsa\n" " (nbits 3:768)\n" " (rsa-use-e 5:65537)\n" " ))", 0, 1); if (rc) { DBG_ERROR(0, "error creating S-expression: %s", gpg_strerror(rc)); exit(2); } rc = gcry_pk_genkey(&key, keyparm); gcry_sexp_release(keyparm); if (rc) { DBG_ERROR(0, "error generating RSA key: %s", gpg_strerror(rc)); exit(2); } check_generated_rsa_key(key, 65537); gcry_sexp_release(key); return 0; } int testHttpSession(int argc, char **argv) { GWEN_GUI *gui; const char *urlString; GWEN_HTTP_SESSION *sess; int rv; GWEN_BUFFER *buf; if (argc<3) { fprintf(stderr, "%s %s URL\n", argv[0], argv[1]); return 1; } urlString=argv[2]; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); sess=GWEN_HttpSession_new(urlString, "http", 80); rv=GWEN_HttpSession_Init(sess); if (rv<0) { fprintf(stderr, "ERROR: Could not init http session.\n"); return 3; } rv=GWEN_HttpSession_SendPacket(sess, "GET", NULL, 0); if (rv<0) { fprintf(stderr, "ERROR: Could not send request.\n"); return 3; } buf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_HttpSession_RecvPacket(sess, buf); if (rv<0) { fprintf(stderr, "ERROR: Could not receive response.\n"); return 3; } GWEN_Buffer_Dump(buf, 2); return 0; } GWEN_SOCKET *createListeningSocket(const char *sAddr, int port) { int rv; GWEN_INETADDRESS *addrServer; GWEN_SOCKET *skServer; addrServer=GWEN_InetAddr_new(GWEN_AddressFamilyIP); rv=GWEN_InetAddr_SetAddress(addrServer, sAddr); if (rv<0) { fprintf(stderr, "ERROR: GWEN_InetAddr_SetAddress(): %d\n", rv); return NULL; } rv=GWEN_InetAddr_SetPort(addrServer, port); if (rv<0) { fprintf(stderr, "ERROR: GWEN_InetAddr_SetPort(): %d\n", rv); return NULL; } skServer=GWEN_Socket_new(GWEN_SocketTypeTCP); rv=GWEN_Socket_Open(skServer); if (rv<0) { fprintf(stderr, "ERROR: GWEN_Socket_Open(): %d\n", rv); return NULL; } GWEN_Socket_SetReuseAddress(skServer, 1); rv=GWEN_Socket_Bind(skServer, addrServer); if (rv<0) { fprintf(stderr, "ERROR: GWEN_Socket_Bind(): %d\n", rv); return NULL; } rv=GWEN_Socket_Listen(skServer, 10); if (rv<0) { fprintf(stderr, "ERROR: GWEN_Socket_Listen(): %d\n", rv); return NULL; } return skServer; } int testSocketServer(int argc, char **argv) { GWEN_GUI *gui; int port; int rv; GWEN_SOCKET *skServer; GWEN_SOCKET *skClient=NULL; GWEN_INETADDRESS *addrClient=NULL; if (argc<3) { fprintf(stderr, "%s %s PORT\n", argv[0], argv[1]); return 1; } port=atoi(argv[2]); fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); skServer=createListeningSocket("127.0.0.1", port); if (skServer==NULL) { fprintf(stderr, "ERROR: createListeningSocketServer()\n"); return 2; } rv=GWEN_Socket_Accept(skServer, &addrClient, &skClient); if (rv<0) { fprintf(stderr, "ERROR: GWEN_Socket_Accept(): %d\n", rv); return 2; } else { char sPeerAddr[256]; fprintf(stdout, "Received a connection\n"); rv=GWEN_InetAddr_GetAddress(addrClient, sPeerAddr, sizeof(sPeerAddr)-1); if (rv<0) { fprintf(stderr, "ERROR: GWEN_InetAddr_GetAddress(): %d\n", rv); return 2; } sPeerAddr[sizeof(sPeerAddr)-1]=0; fprintf(stdout, " Peer addr=%s (%d)\n", sPeerAddr, GWEN_InetAddr_GetPort(addrClient)); GWEN_Socket_Close(skClient); GWEN_Socket_free(skClient); GWEN_InetAddr_free(addrClient); } GWEN_Socket_Close(skServer); GWEN_Socket_free(skServer); return 0; } int testTlsServer(int argc, char **argv) { GWEN_GUI *gui; int port; int rv; GWEN_SOCKET *skServer; GWEN_SOCKET *skClient=NULL; GWEN_INETADDRESS *addrClient=NULL; if (argc<3) { fprintf(stderr, "%s %s PORT\n", argv[0], argv[1]); return 1; } port=atoi(argv[2]); fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); skServer=createListeningSocket("127.0.0.1", port); if (skServer==NULL) { fprintf(stderr, "ERROR: createListeningSocketServer()\n"); return 2; } rv=GWEN_Socket_Accept(skServer, &addrClient, &skClient); if (rv<0) { fprintf(stderr, "ERROR: GWEN_Socket_Accept(): %d\n", rv); return 2; } else { char sPeerAddr[256]; GWEN_SYNCIO *sioBase; GWEN_SYNCIO *sioTls; fprintf(stdout, "Received a connection\n"); rv=GWEN_InetAddr_GetAddress(addrClient, sPeerAddr, sizeof(sPeerAddr)-1); if (rv<0) { fprintf(stderr, "ERROR: GWEN_InetAddr_GetAddress(): %d\n", rv); return 2; } sPeerAddr[sizeof(sPeerAddr)-1]=0; fprintf(stdout, " Peer addr=%s (%d)\n", sPeerAddr, GWEN_InetAddr_GetPort(addrClient)); sioBase=GWEN_SyncIo_Socket_TakeOver(skClient); if (sioBase==NULL) { fprintf(stderr, "No syncIo socket created.\n"); return 2; } fprintf(stdout, " SyncIo socket created.\n"); GWEN_SyncIo_AddFlags(sioBase, GWEN_SYNCIO_FLAGS_PASSIVE); sioTls=GWEN_SyncIo_Tls_new(sioBase); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_FLAGS_PASSIVE); fprintf(stdout, " SyncIo TLS created.\n"); GWEN_SyncIo_Tls_SetLocalCertFile(sioTls, "./testcert.pem"); GWEN_SyncIo_Tls_SetLocalKeyFile(sioTls, "./testkey.pem"); fprintf(stdout, " Connecting.\n"); rv=GWEN_SyncIo_Connect(sioTls); if (rv<0) { fprintf(stderr, "ERROR: GWEN_SyncIo_Connect(): %d\n", rv); return 2; } fprintf(stdout, " TLS connection established\n"); GWEN_SyncIo_Disconnect(sioTls); GWEN_SyncIo_free(sioTls); GWEN_InetAddr_free(addrClient); } GWEN_Socket_Close(skServer); GWEN_Socket_free(skServer); return 0; } int testHttpsServer(int argc, char **argv) { GWEN_GUI *gui; int port; int rv; GWEN_SOCKET *skServer; GWEN_SOCKET *skClient=NULL; GWEN_INETADDRESS *addrClient=NULL; if (argc<3) { fprintf(stderr, "%s %s PORT\n", argv[0], argv[1]); return 1; } port=atoi(argv[2]); fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); skServer=createListeningSocket("127.0.0.1", port); if (skServer==NULL) { fprintf(stderr, "ERROR: createListeningSocketServer()\n"); return 2; } rv=GWEN_Socket_Accept(skServer, &addrClient, &skClient); if (rv<0) { fprintf(stderr, "ERROR: GWEN_Socket_Accept(): %d\n", rv); return 2; } else { char sPeerAddr[256]; GWEN_SYNCIO *sioBase; GWEN_SYNCIO *sio; GWEN_HTTP_SESSION *sess; fprintf(stdout, "Received a connection\n"); rv=GWEN_InetAddr_GetAddress(addrClient, sPeerAddr, sizeof(sPeerAddr)-1); if (rv<0) { fprintf(stderr, "ERROR: GWEN_InetAddr_GetAddress(): %d\n", rv); return 2; } sPeerAddr[sizeof(sPeerAddr)-1]=0; fprintf(stdout, " Peer addr=%s (%d)\n", sPeerAddr, GWEN_InetAddr_GetPort(addrClient)); sioBase=GWEN_SyncIo_Socket_TakeOver(skClient); if (sioBase==NULL) { fprintf(stderr, "No syncIo socket created.\n"); return 2; } fprintf(stdout, " SyncIo socket created.\n"); GWEN_SyncIo_AddFlags(sioBase, GWEN_SYNCIO_FLAGS_PASSIVE); sio=GWEN_SyncIo_Tls_new(sioBase); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FLAGS_PASSIVE); fprintf(stdout, " SyncIo TLS created.\n"); GWEN_SyncIo_Tls_SetLocalCertFile(sio, "./testcert.pem"); GWEN_SyncIo_Tls_SetLocalKeyFile(sio, "./testkey.pem"); sioBase=sio; sio=GWEN_SyncIo_Buffered_new(sioBase); if (sio==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "here"); GWEN_SyncIo_free(sioBase); return 2; } sioBase=sio; sio=GWEN_SyncIo_Http_new(sioBase); if (sio==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "here"); GWEN_SyncIo_free(sioBase); return 2; } fprintf(stdout, " Connecting.\n"); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "ERROR: GWEN_SyncIo_Connect(): %d\n", rv); return 2; } fprintf(stdout, " TLS connection established\n"); sess=GWEN_HttpSession_fromSyncIoPassive(sio); if (sess==NULL) { fprintf(stderr, "ERROR: GWEN_HttpSession_fromSyncIoPassive(): NULL\n"); return 2; } else { GWEN_DB_NODE *dbCommandAndHeader; GWEN_BUFFER *bufBody; rv=GWEN_HttpSession_Init(sess); if (rv<0) { fprintf(stderr, "ERROR: GWEN_HttpSession_Init(): %d\n", rv); return 2; } dbCommandAndHeader=GWEN_DB_Group_new("commandAndHeader"); bufBody=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_HttpSession_RecvCommand(sess, dbCommandAndHeader, bufBody); if (rv<0) { fprintf(stderr, "ERROR: GWEN_InetAddr_GetAddress(): %d\n", rv); return 2; } fprintf(stdout, "Received this:\n"); GWEN_DB_Dump(dbCommandAndHeader, 2); GWEN_HttpSession_Fini(sess); GWEN_HttpSession_free(sess); GWEN_Buffer_free(bufBody); GWEN_DB_Group_free(dbCommandAndHeader); } GWEN_InetAddr_free(addrClient); } GWEN_Socket_Close(skServer); GWEN_Socket_free(skServer); return 0; } int testDES(void) { GWEN_CRYPT_KEY *skey; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; GWEN_BUFFER *buf3; uint32_t l; int rv; const char testString[]= { 0x90, 0x80, 0x70, 0x60, 0x50, 0x40, 0x30, 0x20, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x18, 0x27, 0x36, 0x45, 0x54, 0x63, 0x72, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; skey=GWEN_Crypt_KeyDes3K_Generate(GWEN_Crypt_CryptMode_Cbc, 24, 2); if (skey==NULL) { DBG_ERROR(0, "Unable to generate DES key"); return 2; } buf1=GWEN_Buffer_new(0, sizeof(testString), 0, 1); buf2=GWEN_Buffer_new(0, sizeof(testString), 0, 1); buf3=GWEN_Buffer_new(0, sizeof(testString), 0, 1); GWEN_Buffer_AppendBytes(buf1, testString, sizeof(testString)); /* encrypt buf1 */ l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf2); rv=GWEN_Crypt_Key_Encipher(skey, (uint8_t *)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), (uint8_t *)GWEN_Buffer_GetPosPointer(buf2), &l); if (rv<0) { DBG_ERROR(0, "Unable to encipher"); return 2; } GWEN_Buffer_IncrementPos(buf2, l); GWEN_Buffer_AdjustUsedBytes(buf2); /* decrypt buf2 */ l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf3); rv=GWEN_Crypt_Key_Decipher(skey, (uint8_t *)GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2), (uint8_t *)GWEN_Buffer_GetPosPointer(buf3), &l); if (rv<0) { DBG_ERROR(0, "Unable to decipher"); return 2; } GWEN_Buffer_IncrementPos(buf3, l); GWEN_Buffer_AdjustUsedBytes(buf3); if (GWEN_Buffer_GetUsedBytes(buf1)!= GWEN_Buffer_GetUsedBytes(buf3)) { DBG_ERROR(0, "Buffer size does not match"); return 2; } if (memcmp(GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetStart(buf3), GWEN_Buffer_GetUsedBytes(buf1))!=0) { DBG_ERROR(0, "Buffers do not match"); DBG_ERROR(0, "Expected:"); GWEN_Buffer_Dump(buf1, 2); DBG_ERROR(0, "Found:"); GWEN_Buffer_Dump(buf3, 2); DBG_ERROR(0, "Encrypted:"); GWEN_Buffer_Dump(buf2, 2); return 2; } GWEN_Buffer_free(buf3); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); GWEN_Crypt_Key_free(skey); return 0; } int testDES2(void) { GWEN_CRYPT_KEY *skey; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; GWEN_BUFFER *buf3; uint32_t l; int rv; uint8_t kd[24]; const char testString[]= { 0x90, 0x80, 0x70, 0x60, 0x50, 0x40, 0x30, 0x20, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x18, 0x27, 0x36, 0x45, 0x54, 0x63, 0x72, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; GWEN_Crypt_Random(2, kd, 16); memmove(kd+16, kd, 8); skey=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 24, kd, 24); if (skey==NULL) { DBG_ERROR(0, "Unable to generate DES key"); return 2; } buf1=GWEN_Buffer_new(0, sizeof(testString), 0, 1); buf2=GWEN_Buffer_new(0, sizeof(testString), 0, 1); buf3=GWEN_Buffer_new(0, sizeof(testString), 0, 1); GWEN_Buffer_AppendBytes(buf1, testString, sizeof(testString)); /* encrypt buf1 */ l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf2); rv=GWEN_Crypt_Key_Encipher(skey, (uint8_t *)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), (uint8_t *)GWEN_Buffer_GetPosPointer(buf2), &l); if (rv<0) { DBG_ERROR(0, "Unable to encipher"); return 2; } GWEN_Buffer_IncrementPos(buf2, l); GWEN_Buffer_AdjustUsedBytes(buf2); /* decrypt buf2 */ l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf3); rv=GWEN_Crypt_Key_Decipher(skey, (uint8_t *)GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2), (uint8_t *)GWEN_Buffer_GetPosPointer(buf3), &l); if (rv<0) { DBG_ERROR(0, "Unable to decipher"); return 2; } GWEN_Buffer_IncrementPos(buf3, l); GWEN_Buffer_AdjustUsedBytes(buf3); if (GWEN_Buffer_GetUsedBytes(buf1)!= GWEN_Buffer_GetUsedBytes(buf3)) { DBG_ERROR(0, "Buffer size does not match"); return 2; } if (memcmp(GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetStart(buf3), GWEN_Buffer_GetUsedBytes(buf1))!=0) { DBG_ERROR(0, "Buffers do not match"); DBG_ERROR(0, "Expected:"); GWEN_Buffer_Dump(buf1, 2); DBG_ERROR(0, "Found:"); GWEN_Buffer_Dump(buf3, 2); DBG_ERROR(0, "Encrypted:"); GWEN_Buffer_Dump(buf2, 2); return 2; } GWEN_Buffer_free(buf3); GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); GWEN_Crypt_Key_free(skey); return 0; } int testDES3(void) { GWEN_CRYPT_KEY *skey; uint32_t l2; uint32_t l3; int rv; const uint8_t iv[8]= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const uint8_t testString[]= { 0x90, 0x80, 0x70, 0x60, 0x50, 0x40, 0x30, 0x20, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x18, 0x27, 0x36, 0x45, 0x54, 0x63, 0x72, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88 }; uint8_t buf2[sizeof(testString)]; uint8_t buf3[sizeof(testString)]; skey=GWEN_Crypt_KeyDes3K_Generate(GWEN_Crypt_CryptMode_Cbc, 24, 2); if (skey==NULL) { DBG_ERROR(0, "Unable to generate DES key"); return 2; } /* encrypt buf1 */ l2=sizeof(buf2); rv=GWEN_Crypt_Key_Encipher(skey, testString, sizeof(testString), buf2, &l2); if (rv<0) { DBG_ERROR(0, "Unable to encipher"); return 2; } GWEN_Crypt_KeyDes3K_SetIV(skey, iv, sizeof(iv)); /* decrypt buf2 */ l3=sizeof(buf3); rv=GWEN_Crypt_Key_Decipher(skey, buf2, l2, buf3, &l3); if (rv<0) { DBG_ERROR(0, "Unable to decipher"); return 2; } if (l2!=l3) { DBG_ERROR(0, "Buffer size does not match"); return 2; } if (l2!=sizeof(testString)) { DBG_ERROR(0, "Buffer size does not match size of testString"); return 2; } if (memcmp(testString, buf3, l3)!=0) { DBG_ERROR(0, "Buffers do not match"); DBG_ERROR(0, "Expected:"); GWEN_Text_DumpString((const char *)testString, sizeof(testString), 2); DBG_ERROR(0, "Found:"); GWEN_Text_DumpString((const char *)buf3, l3, 2); DBG_ERROR(0, "Encrypted:"); GWEN_Text_DumpString((const char *)buf2, l2, 2); return 2; } GWEN_Crypt_Key_free(skey); return 0; } int testDES4(int argc, char **argv) { GWEN_CRYPT_KEY *skey; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; GWEN_BUFFER *buf3; uint32_t l; int rv; const char *fname; #ifdef NEU1 const uint8_t keyData[]= { 0x2a, 0x79, 0xc4, 0x45, 0xbc, 0x13, 0x5d, 0x13, 0xe0, 0xec, 0xe6, 0x43, 0x6d, 0x73, 0x91, 0x0b }; #else const uint8_t keyData[]= { 0x01, 0x3e, 0x1f, 0xf1, 0xab, 0xbf, 0x13, 0x79, 0x5b, 0x68, 0x9d, 0x26, 0x31, 0xdc, 0xe0, 0x52 }; #endif if (argc<3) { DBG_ERROR(0, "Missing filename"); return 1; } fname=argv[2]; skey=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 16, keyData, 16); if (skey==NULL) { DBG_ERROR(0, "Unable to create DES key"); return 2; } buf1=GWEN_Buffer_new(0, 256, 0, 1); rv=readFile(fname, buf1); if (rv<0) { DBG_ERROR(0, "Unable to read file [%s]: %d", fname, rv); return 2; } #ifdef NEU1 GWEN_Buffer_FillWithBytes(buf1, 0, 7); #endif buf2=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes(buf1)+16, 0, 1); /* decrypt buf1 */ fprintf(stderr, "Decrypting %d bytes", GWEN_Buffer_GetUsedBytes(buf1)); l=GWEN_Buffer_GetMaxUnsegmentedWrite(buf2); GWEN_Crypt_KeyDes3K_SetIV(skey, NULL, 0); rv=GWEN_Crypt_Key_Decipher(skey, (uint8_t *)GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), (uint8_t *)GWEN_Buffer_GetPosPointer(buf2), &l); if (rv<0) { DBG_ERROR(0, "Unable to decipher"); return 2; } fprintf(stderr, "Decrypted %d bytes", l); GWEN_Buffer_IncrementPos(buf2, l); GWEN_Buffer_AdjustUsedBytes(buf2); writeFile("des4.out1", GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2)); buf3=GWEN_Buffer_new(0, 256, 0, 1); rv=zip_inflate(GWEN_Buffer_GetStart(buf2), GWEN_Buffer_GetUsedBytes(buf2), buf3); writeFile("des4.out2", GWEN_Buffer_GetStart(buf3), GWEN_Buffer_GetUsedBytes(buf3)); if (rv<0) { DBG_ERROR(0, "Unable to unzip"); return 2; } GWEN_Buffer_free(buf2); GWEN_Buffer_free(buf1); GWEN_Crypt_Key_free(skey); return 0; } int _testDES5(void) { GWEN_CRYPT_KEY *desKey1; GWEN_CRYPT_KEY *desKey2; uint8_t testData[]= "This is the test data " "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; uint8_t buffer[1024]; uint32_t len; uint8_t *p; uint8_t keyBuffer[16]; uint32_t len2; GWEN_BUFFER *mbuf; GWEN_BUFFER *dbuf; int rv; dbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dbuf, "Generating key ...\n"); desKey1=GWEN_Crypt_KeyDes3K_Generate(GWEN_Crypt_CryptMode_Cbc, 24, 2); if (desKey1==NULL) { DBG_INFO(0, "Could not generate DES key"); return 2; } /* store key */ GWEN_Buffer_AppendString(dbuf, "Storing key ...\n"); p=GWEN_Crypt_KeySym_GetKeyDataPtr(desKey1); len2=GWEN_Crypt_KeySym_GetKeyDataLen(desKey1); if (p==NULL || len2<16) { DBG_ERROR(0, "Invalid key size (%d)", len2); return 2; } memmove(keyBuffer, p, 16); /* dump */ GWEN_Buffer_AppendString(dbuf, "Key1:\n"); GWEN_Text_DumpString2Buffer((const char*) keyBuffer, 16, dbuf, 2); GWEN_Buffer_AppendString(dbuf, "\n\n"); GWEN_Buffer_AppendString(dbuf, "Padding data ...\n"); mbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendBytes(mbuf, (const char*) testData, sizeof(testData)); /* dump */ GWEN_Buffer_AppendString(dbuf, "Unpadded raw data:\n"); GWEN_Text_DumpString2Buffer(GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), dbuf, 2); GWEN_Buffer_AppendString(dbuf, "\n\n"); rv=GWEN_Padd_PaddWithAnsiX9_23(mbuf); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); fprintf(stderr, "Data so far: \n%s\n", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); return 2; } /* dump */ GWEN_Buffer_AppendString(dbuf, "Padded data:\n"); GWEN_Text_DumpString2Buffer(GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), dbuf, 2); GWEN_Buffer_AppendString(dbuf, "\n\n"); GWEN_Buffer_AppendString(dbuf, "Encrypting data ...\n"); len=sizeof(buffer); rv=GWEN_Crypt_Key_Encipher(desKey1, (uint8_t *)GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), buffer, &len); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); fprintf(stderr, "Data so far: \n%s\n", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); return 2; } /* dump */ GWEN_Buffer_AppendString(dbuf, "Encrypted data:\n"); GWEN_Text_DumpString2Buffer((const char*) buffer, len, dbuf, 2); GWEN_Buffer_AppendString(dbuf, "\n\n"); /* buffer, len contain encrypted data */ GWEN_Buffer_free(mbuf); GWEN_Buffer_AppendString(dbuf, "Generating 2nd key ...\n"); desKey2=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 24, keyBuffer, 16); if (desKey2==NULL) { DBG_INFO(0, "Could not generate DES key 2"); fprintf(stderr, "Data so far: \n%s\n", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); return 2; } GWEN_Buffer_AppendString(dbuf, "Decipher data ...\n"); len2=len*2; mbuf=GWEN_Buffer_new(0, len2, 0, 1); rv=GWEN_Crypt_Key_Decipher(desKey2, (const uint8_t *)buffer, len, (uint8_t *)GWEN_Buffer_GetPosPointer(mbuf), &len2); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); fprintf(stderr, "Data so far: \n%s\n", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); return 2; } GWEN_Buffer_IncrementPos(mbuf, len2); GWEN_Buffer_AdjustUsedBytes(mbuf); /* dump */ GWEN_Buffer_AppendString(dbuf, "Padded decrypted data:\n"); GWEN_Text_DumpString2Buffer(GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), dbuf, 2); GWEN_Buffer_AppendString(dbuf, "\n\n"); GWEN_Buffer_AppendString(dbuf, "Unpadding data ...\n"); rv=GWEN_Padd_UnpaddWithAnsiX9_23(mbuf); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); fprintf(stderr, "Data so far: \n%s\n", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); return 2; } /* dump */ GWEN_Buffer_AppendString(dbuf, "Unpadded decrypted data:\n"); GWEN_Text_DumpString2Buffer(GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), dbuf, 2); GWEN_Buffer_AppendString(dbuf, "\n\n"); if (GWEN_Buffer_GetUsedBytes(mbuf)!=sizeof(testData)) { fprintf(stderr, "Deciphered message does not match src\n"); fprintf(stderr, "Data so far: \n%s\n", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); return 2; } if (memcmp(testData, GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf))) { fprintf(stderr, "Deciphered message does not match src\n"); GWEN_Text_DumpString(GWEN_Buffer_GetStart(mbuf), GWEN_Buffer_GetUsedBytes(mbuf), 1); GWEN_Text_DumpString((const char*) testData, sizeof(testData), 1); fprintf(stderr, "Data so far: \n%s\n", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); return 2; } GWEN_Buffer_free(dbuf); GWEN_Buffer_free(mbuf); return 0; } int testDES5(void) { int i; for (i=0; i<1000000; i++) { int rv; fprintf(stdout, "%d\n", i); rv=_testDES5(); if (rv) { fprintf(stderr, "ERROR in loop %d\n", i); } } return 0; } int _byteHasEvenParity(uint8_t x) { return ( (x>>7) ^ (x>>6) ^ (x>>5) ^ (x>>4) ^ (x>>3) ^ (x>>2) ^ (x>>1) ^ (x) ) & 1; } int _hasEvenParity(const uint8_t *ptr, uint32_t len) { int x=0; uint32_t i; for (i=0; i0) { fprintf(stderr, "Received %d bytes\n", rv); GWEN_Buffer_IncrementPos(tbuf, rv); GWEN_Buffer_AdjustUsedBytes(tbuf); } else if (rv==0) { fprintf(stderr, "EOF met.\n"); } } while (rv>0); fprintf(stderr, "File received.\n"); GWEN_Buffer_Dump(tbuf, 2); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "Error closing file: %d\n", rv); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testSyncIo2(int argc, char **argv) { int rv; const char *fname; GWEN_SYNCIO *baseIo; GWEN_SYNCIO *sio; GWEN_BUFFER *tbuf; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } fname=argv[2]; baseIo=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); sio=GWEN_SyncIo_Buffered_new(baseIo); fprintf(stderr, "Opening file\n"); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "Error opening file: %d\n", rv); return 2; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); do { uint8_t *p; GWEN_Buffer_AllocRoom(tbuf, 1024); p=(uint8_t *) GWEN_Buffer_GetPosPointer(tbuf); rv=GWEN_SyncIo_Read(sio, p, 1024); if (rv<0) { fprintf(stderr, "Error reading file: %d\n", rv); GWEN_Buffer_Dump(tbuf, 2); return 2; } else if (rv>0) { fprintf(stderr, "Received %d bytes\n", rv); GWEN_Buffer_IncrementPos(tbuf, rv); GWEN_Buffer_AdjustUsedBytes(tbuf); if (p[rv-1]==10) { fprintf(stderr, "Received line:\n"); GWEN_Buffer_Dump(tbuf, 2); GWEN_Buffer_Reset(tbuf); getchar(); } } else if (rv==0) { fprintf(stderr, "EOF met.\n"); } } while (rv>0); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "Error closing file: %d\n", rv); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testSyncIo3(int argc, char **argv) { int rv; const char *fname; GWEN_SYNCIO *baseIo; GWEN_SYNCIO *sio; GWEN_BUFFER *tbuf; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } fname=argv[2]; baseIo=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); sio=GWEN_SyncIo_Buffered_new(baseIo); fprintf(stderr, "Opening file\n"); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "Error opening file: %d\n", rv); return 2; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); do { uint8_t *p; GWEN_Buffer_AllocRoom(tbuf, 1024); p=(uint8_t *) GWEN_Buffer_GetPosPointer(tbuf); rv=GWEN_SyncIo_Read(sio, p, 1024); if (rv<0) { fprintf(stderr, "Error reading file: %d\n", rv); GWEN_Buffer_Dump(tbuf, 2); return 2; } else if (rv>0) { fprintf(stderr, "Received %d bytes\n", rv); GWEN_Buffer_IncrementPos(tbuf, rv); GWEN_Buffer_AdjustUsedBytes(tbuf); if (p[rv-1]==10) { fprintf(stderr, "Received line:\n"); GWEN_Buffer_Dump(tbuf, 2); getchar(); } } else if (rv==0) { fprintf(stderr, "EOF met.\n"); } GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FLAGS_TRANSPARENT); } while (rv>0); fprintf(stderr, "File received.\n"); GWEN_Buffer_Dump(tbuf, 2); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "Error closing file: %d\n", rv); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testHttp1(int argc, char **argv) { int rv; const char *fname; GWEN_SYNCIO *sio=NULL; GWEN_SYNCIO *sioTls; int firstRead=1; int bodySize=-1; int bytesRead=0; GWEN_BUFFER *tbuf; GWEN_GUI *gui; GWEN_DB_NODE *db; if (argc<3) { fprintf(stderr, "Name of testfile needed.\n"); return 1; } fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); fname=argv[2]; rv=GWEN_Gui_GetSyncIo(fname, "http", 80, &sio); if (rv<0) { fprintf(stderr, "ERROR: Could not get SyncIO (%d)\n", rv); return 2; } sioTls=GWEN_SyncIo_GetBaseIoByTypeName(sio, GWEN_SYNCIO_TLS_TYPE); if (sioTls) { GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_ALLOW_V1_CA_CRT); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_ADD_TRUSTED_CAS); fprintf(stderr, "Remote host: %s\n", GWEN_SyncIo_Tls_GetRemoteHostName(sioTls)); } rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "ERROR: Could not connect (%d)\n", rv); return 2; } /* send request */ db=GWEN_SyncIo_Http_GetDbHeaderOut(sio); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-length", 0); rv=GWEN_SyncIo_Write(sio, (uint8_t *)"", 0); if (rv<0) { fprintf(stderr, "ERROR: Could not write (%d)\n", rv); return 2; } /* get response */ tbuf=GWEN_Buffer_new(0, 1024, 0, 1); for (;;) { uint8_t *p; uint32_t l; rv=GWEN_Buffer_AllocRoom(tbuf, 1024); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not allocRoom (%d)\n", rv); return 2; } p=(uint8_t *) GWEN_Buffer_GetPosPointer(tbuf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); do { rv=GWEN_SyncIo_Read(sio, p, l-1); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv==0) break; else if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (bodySize!=-1 && bytesRead=bodySize) { break; } firstRead=0; } #if 1 fprintf(stderr, "Received:\n"); GWEN_Buffer_Dump(tbuf, 2); #endif GWEN_Buffer_free(tbuf); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not disconnect (%d)\n", rv); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testHttp2(int argc, char **argv) { int rv; const char *foutName; const char *finName; const char *url; GWEN_SYNCIO *sio=NULL; GWEN_SYNCIO *sioTls; int firstRead=1; int bodySize=-1; int bytesRead=0; GWEN_BUFFER *ibuf; GWEN_BUFFER *tbuf; GWEN_GUI *gui; GWEN_DB_NODE *db; if (argc<5) { fprintf(stderr, "Usage: %s url sendfile recvfile\n", argv[0]); return 1; } fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); url=argv[2]; foutName=argv[3]; finName=argv[4]; ibuf=GWEN_Buffer_new(0, 256, 0, 1); rv=readFile(foutName, ibuf); if (rv<0) { fprintf(stderr, "ERROR: Could not read file (%d)\n", rv); return 2; } rv=GWEN_Gui_GetSyncIo(url, "http", 80, &sio); if (rv<0) { fprintf(stderr, "ERROR: Could not get SyncIO (%d)\n", rv); return 2; } sioTls=GWEN_SyncIo_GetBaseIoByTypeName(sio, GWEN_SYNCIO_TLS_TYPE); if (sioTls) { GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_ALLOW_V1_CA_CRT); GWEN_SyncIo_AddFlags(sioTls, GWEN_SYNCIO_TLS_FLAGS_ADD_TRUSTED_CAS); fprintf(stderr, "Remote host: %s\n", GWEN_SyncIo_Tls_GetRemoteHostName(sioTls)); } rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "ERROR: Could not connect (%d)\n", rv); return 2; } /* send request */ db=GWEN_SyncIo_Http_GetDbCommandOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Command", "POST"); db=GWEN_SyncIo_Http_GetDbHeaderOut(sio); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-Type", "application/x-www-form-urlencoded"); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "Content-length", GWEN_Buffer_GetUsedBytes(ibuf)); rv=GWEN_SyncIo_WriteForced(sio, (uint8_t *) GWEN_Buffer_GetStart(ibuf), GWEN_Buffer_GetUsedBytes(ibuf)); if (rv<0) { fprintf(stderr, "ERROR: Could not write (%d)\n", rv); return 2; } /* get response */ tbuf=GWEN_Buffer_new(0, 1024, 0, 1); for (;;) { uint8_t *p; uint32_t l; rv=GWEN_Buffer_AllocRoom(tbuf, 1024); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not allocRoom (%d)\n", rv); return 2; } p=(uint8_t *) GWEN_Buffer_GetPosPointer(tbuf); l=GWEN_Buffer_GetMaxUnsegmentedWrite(tbuf); do { rv=GWEN_SyncIo_Read(sio, p, l-1); } while (rv==GWEN_ERROR_INTERRUPTED); if (rv==0) break; else if (rv<0) { if (rv==GWEN_ERROR_EOF) { if (bodySize!=-1 && bytesRead=bodySize) { break; } firstRead=0; } rv=writeFile(finName, GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf)); if (rv<0) { fprintf(stderr, "ERROR in writeFile (%d)\n", rv); return 2; } #if 1 fprintf(stderr, "Received:\n"); GWEN_Buffer_Dump(tbuf, 2); #endif GWEN_Buffer_free(tbuf); rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "ERROR in check_syncio_http1: Could not disconnect (%d)\n", rv); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testTresor1(void) { int rv; const char *testData="This is the actual test data"; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; int l; buf1=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SmallTresor_Encrypt((const uint8_t *) testData, strlen(testData), "TESTPASSWORD", buf1, 1546, 1937); if (rv<0) { fprintf(stderr, "ERROR in checkTresor1: Could not encrypt (%d)\n", rv); return 2; } buf2=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SmallTresor_Decrypt((const uint8_t *) GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), "TESTPASSWORD", buf2, 1546, 1937); if (rv<0) { fprintf(stderr, "ERROR in checkTresor1: Could not decrypt (%d)\n", rv); return 2; } l=strlen(testData); if (l!=GWEN_Buffer_GetUsedBytes(buf2)) { fprintf(stderr, "Bad result (len):\n"); GWEN_Buffer_Dump(buf2, 2); return 2; } if (strcmp(testData, GWEN_Buffer_GetStart(buf2))!=0) { fprintf(stderr, "Bad result (content):\n"); GWEN_Buffer_Dump(buf2, 2); return 2; } fprintf(stderr, "Finished.\n"); return 0; } int testTresor2(void) { int i; for (i=0; i<100; i++) { int rv; const char *testData="This is the actual test data"; GWEN_BUFFER *buf1; GWEN_BUFFER *buf2; int l; fprintf(stderr, "Round %d...\n", i); buf1=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SmallTresor_Encrypt((const uint8_t *) testData, strlen(testData), "TESTPASSWORD", buf1, 1546, 1937); if (rv<0) { fprintf(stderr, "ERROR in checkTresor1: Could not encrypt (%d)\n", rv); return 2; } buf2=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SmallTresor_Decrypt((const uint8_t *) GWEN_Buffer_GetStart(buf1), GWEN_Buffer_GetUsedBytes(buf1), "TESTPASSWORD", buf2, 1546, 1937); if (rv<0) { fprintf(stderr, "ERROR in checkTresor1: Could not decrypt (%d)\n", rv); return 2; } l=strlen(testData); if (l!=GWEN_Buffer_GetUsedBytes(buf2)) { fprintf(stderr, "Bad result (len):\n"); GWEN_Buffer_Dump(buf2, 2); return 2; } if (strcmp(testData, GWEN_Buffer_GetStart(buf2))!=0) { fprintf(stderr, "Bad result (content):\n"); GWEN_Buffer_Dump(buf2, 2); return 2; } fprintf(stderr, "Round %d... Ok.\n", i); } fprintf(stderr, "Finished.\n"); return 0; } int testHashTree(int argc, char **argv) { int rv; GWEN_MDIGEST *md; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; if (argc<3) { fprintf(stderr, "Folder needed\n"); return 1; } sl=GWEN_StringList_new(); md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_HashFileTree(md, argv[2], NULL, sl); if (rv<0) { fprintf(stderr, "ERROR on HASHTREE (%d)\n", rv); return 2; } se=GWEN_StringList_FirstEntry(sl); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) fprintf(stderr, " %s\n", s); se=GWEN_StringListEntry_Next(se); } return 0; } int testDate1(void) { GWEN_DATE *ti1; int j; int i; ti1=GWEN_Date_CurrentDate(); assert(ti1); j=GWEN_Date_GetJulian(ti1); DBG_NOTICE(0, "Current Julian date: %d (%s)", j, GWEN_Date_GetString(ti1)); for (i=1; i<20; i++) { GWEN_DATE *ti2; ti2=GWEN_Date_fromJulian(j+i); if (ti2==NULL) { DBG_ERROR(0, "Bad julian date value %d", j+i); } else { DBG_NOTICE(0, " - Julian date %2d: %s (%d)", j+i, GWEN_Date_GetString(ti2), GWEN_Date_WeekDay(ti1)); GWEN_Date_free(ti2); } } for (i=1; i<4; i++) { GWEN_DATE *ti2; ti2=GWEN_Date_fromJulian(j+(i*7)); if (ti2==NULL) { DBG_ERROR(0, "Bad julian date value %d", j+(i*7)); } else { DBG_NOTICE(0, " + Julian date %2d: %s (%d)", j+(i*7), GWEN_Date_GetString(ti2), GWEN_Date_WeekDay(ti2)); GWEN_Date_free(ti2); } } return 0; } int testDate2(void) { GWEN_DATE *ti1; GWEN_BUFFER *dbuf; ti1=GWEN_Date_CurrentDate(); assert(ti1); dbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Date_toStringWithTemplate(ti1, "w*, DDDD.MM.YYYY", dbuf); DBG_NOTICE(0, "Current date: %s", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_Reset(dbuf); GWEN_Date_toStringWithTemplate(ti1, "www, DD.M*.YYYY (W)", dbuf); DBG_NOTICE(0, "or like this: %s", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_Reset(dbuf); GWEN_Date_toStringWithTemplate(ti1, "w*, D.M.YYYY (W)", dbuf); DBG_NOTICE(0, "or like this: %s", GWEN_Buffer_GetStart(dbuf)); return 0; } int testSar1(int argc, char **argv) { GWEN_SAR *sr; const char *aname; const char *fname; int rv; if (argc<4) { fprintf(stderr, "%s sar1 archive file\n", argv[0]); return 1; } aname=argv[2]; fname=argv[3]; sr=GWEN_Sar_new(); rv=GWEN_Sar_CreateArchive(sr, aname); if (rv<0) { fprintf(stderr, "Error creating archive (%d)\n", rv); return 2; } fprintf(stderr, "Adding file \"%s\"\n", fname); rv=GWEN_Sar_AddFile(sr, fname); if (rv<0) { fprintf(stderr, "Error adding file \"%s\" to archive \"%s\" (%d)\n", fname, aname, rv); return 2; } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "Error closing archive (%d)\n", rv); return 2; } return 0; } int testSar2(int argc, char **argv) { GWEN_SAR *sr; const char *aname; int rv; const GWEN_SAR_FILEHEADER_LIST *fhl; if (argc<3) { fprintf(stderr, "%s sar2 archive\n", argv[0]); return 1; } aname=argv[2]; sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "Error opening archive (%d)\n", rv); return 2; } fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while (fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); rv=GWEN_Sar_CheckFile(sr, fh); if (rv<0) { fprintf(stderr, "%s: CRC error\n", s?s:"(noname)"); } else { fprintf(stderr, "%s: Ok\n", s?s:"(noname)"); } fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "Error closing archive (%d)\n", rv); return 2; } return 0; } int testSar3(int argc, char **argv) { GWEN_SAR *sr; const char *aname; int rv; const GWEN_SAR_FILEHEADER_LIST *fhl; if (argc<3) { fprintf(stderr, "%s sar2 archive\n", argv[0]); return 1; } aname=argv[2]; sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "Error opening archive (%d)\n", rv); return 2; } fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while (fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); rv=GWEN_Sar_ExtractFile(sr, fh); if (rv<0) { fprintf(stderr, "%s: CRC error\n", s?s:"(noname)"); } else { fprintf(stderr, "%s: Ok\n", s?s:"(noname)"); } fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "Error closing archive (%d)\n", rv); return 2; } return 0; } int testSar4(int argc, char **argv) { GWEN_SAR *sr; const char *aname; const char *fname; int rv; if (argc<4) { fprintf(stderr, "%s sar1 archive file\n", argv[0]); return 1; } aname=argv[2]; fname=argv[3]; sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ| GWEN_SYNCIO_FILE_FLAGS_WRITE); if (rv<0) { fprintf(stderr, "Error opening archive (%d)\n", rv); return 2; } fprintf(stderr, "Adding file \"%s\"\n", fname); rv=GWEN_Sar_AddFile(sr, fname); if (rv<0) { fprintf(stderr, "Error adding file \"%s\" to archive \"%s\" (%d)\n", fname, aname, rv); return 2; } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "Error closing archive (%d)\n", rv); return 2; } return 0; } int testStringListFromString(void) { GWEN_STRINGLIST *sl; #if 1 const char delims[]="\n"; const char td[]="test1\ntest2\ntest3"; #else const char delims[]=","; const char td[]="test1,test2,test3"; #endif sl=GWEN_StringList_fromString(td, delims, 1); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); fprintf(stderr, "Got this: [%s]\n", s?s:"(empty)"); se=GWEN_StringListEntry_Next(se); } } return 0; } int testPasswordStore1(void) { GWEN_PASSWD_STORE *sto; const char *pw1="Secret1"; char pw[256]; int rv; GWEN_GUI *gui; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); rv=GWEN_PasswordStore_SetPassword(sto, "TestVar1", pw1); if (rv<0) { DBG_ERROR(0, "Error setting password: %d", rv); return 2; } rv=GWEN_PasswordStore_GetPassword(sto, "TestVar1", pw, 4, sizeof(pw)-1); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(pw1, pw)!=0) { DBG_ERROR(0, "Bad password, expected [%s], got [%s].", pw1, pw); return 2; } GWEN_PasswordStore_free(sto); return 0; } int testPasswordStore2(void) { GWEN_PASSWD_STORE *sto; const char *pw1="Secret1"; char pw[256]; int rv; GWEN_GUI *gui; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); rv=GWEN_PasswordStore_GetPassword(sto, "TestVar1", pw, 4, sizeof(pw)-1); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(pw1, pw)!=0) { DBG_ERROR(0, "Bad password, expected [%s], got [%s].", pw1, pw); return 2; } GWEN_PasswordStore_free(sto); return 0; } int testPasswordStore3(void) { GWEN_PASSWD_STORE *sto; GWEN_DB_NODE *dbPasswords; const char *pw1="Secret1"; char pw[256]; int rv; GWEN_GUI *gui; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); dbPasswords=GWEN_DB_Group_new("TempPasswords"); GWEN_Gui_SetPasswdStore(gui, sto); GWEN_Gui_SetPasswordDb(gui, dbPasswords, 0); rv=GWEN_Gui_GetPassword(0, "TestVar1", "Get Password 1", "Please enter password 1", pw, 4, sizeof(pw)-1, GWEN_Gui_PasswordMethod_Text, NULL, 0); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(pw1, pw)!=0) { DBG_ERROR(0, "Bad password, expected [%s], got [%s].", pw1, pw); return 2; } return 0; } int testPasswordStore4(int argc, char **argv) { GWEN_PASSWD_STORE *sto; GWEN_DB_NODE *dbPasswords; const char *token; const char *epw; char pw[256]; int rv; GWEN_GUI *gui; if (argc<4) { DBG_ERROR(0, "Expected token and secret"); return 1; } token=argv[2]; epw=argv[3]; gui=GWEN_Gui_CGui_new(); GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_PERMPASSWORDS); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); dbPasswords=GWEN_DB_Group_new("TempPasswords"); GWEN_Gui_SetPasswdStore(gui, sto); GWEN_Gui_SetPasswordDb(gui, dbPasswords, 0); rv=GWEN_Gui_GetPassword(0, token, "Get Password", "Please enter password 1", pw, 4, sizeof(pw)-1, GWEN_Gui_PasswordMethod_Text, NULL, 0); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(epw, pw)!=0) { DBG_ERROR(0, "Bad password for token [%s], expected [%s], got [%s].", token, epw, pw); return 2; } return 0; } int testPasswordStore5(int argc, char **argv) { GWEN_PASSWD_STORE *sto; GWEN_DB_NODE *dbPasswords; const char *token; const char *epw; char pw[256]; int rv; GWEN_GUI *gui; if (argc<4) { DBG_ERROR(0, "Expected token and secret"); return 1; } token=argv[2]; epw=argv[3]; gui=GWEN_Gui_CGui_new(); GWEN_Gui_AddFlags(gui, GWEN_GUI_FLAGS_PERMPASSWORDS); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); sto=GWEN_PasswordStore_new("/tmp/pwstore.pw"); dbPasswords=GWEN_DB_Group_new("TempPasswords"); GWEN_Gui_SetPasswdStore(gui, sto); GWEN_Gui_SetPasswordDb(gui, dbPasswords, 0); rv=GWEN_Gui_GetPassword(0, token, "Get Password", "Please enter password 1", pw, 4, sizeof(pw)-1, GWEN_Gui_PasswordMethod_Text, NULL, 0); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(epw, pw)!=0) { DBG_ERROR(0, "Bad password for token [%s], expected [%s], got [%s].", token, epw, pw); return 2; } /* 2nd time: Should read password from temporary storage */ memset(pw, 0, sizeof(pw)-1); rv=GWEN_Gui_GetPassword(0, token, "Get Password", "Please enter password 1", pw, 4, sizeof(pw)-1, GWEN_Gui_PasswordMethod_Text, NULL, 0); if (rv<0) { DBG_ERROR(0, "Error getting password: %d", rv); return 2; } if (strcmp(epw, pw)!=0) { DBG_ERROR(0, "Bad password for token [%s], expected [%s], got [%s].", token, epw, pw); return 2; } return 0; } int testCSV(void) { GWEN_DB_NODE *dbData; GWEN_DB_NODE *dbParams; GWEN_DBIO *dbio; GWEN_SYNCIO *sio; int rv; GWEN_GUI *gui; const char params[]= { "quote=\"1\"\n" "title=\"1\"\n" "delimiter=\";\n" "columns {\n" " 1=\"column-1\"\n" " 2=\"column-2\"\n" " 3=\"column-3\"\n" "}\n" }; const char data[]= { "\"col1\";\"col2\";\"col3\"\n" "\"1-1\";\"1-2\";\"1-3\"\n" "\"2-1\";\"2-2\";\"2-3\"\n" "\"3-1\";\"3-2\";\"3-3\"" }; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); dbParams=GWEN_DB_Group_new("params"); rv=GWEN_DB_ReadFromString(dbParams, params, strlen(params), GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); return rv; } dbData=GWEN_DB_Group_new("transactions"); dbio=GWEN_DBIO_GetPlugin("csv"); if (!dbio) { DBG_ERROR(0, "GWEN DBIO plugin \"CSV\" not available"); return 0; } sio=GWEN_SyncIo_Memory_fromBuffer((const uint8_t *) data, strlen(data)); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); return rv; } rv=GWEN_DBIO_Import(dbio, sio, dbData, dbParams, GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP); if (rv) { DBG_ERROR(0, "Error importing data (%d)", rv); return GWEN_ERROR_GENERIC; } fprintf(stderr, "Imported this:\n"); GWEN_DB_Dump(dbData, 2); return 0; } int testParams1(void) { int rv; GWEN_GUI *gui; GWEN_PARAM_LIST *pl; GWEN_PARAM_LIST *pl2; GWEN_PARAM *prm; GWEN_BUFFER *tbuf; GWEN_XMLNODE *xn; GWEN_XMLNODE *xn2; int vInt; double vDouble; int errors=0; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); /* setup params */ pl=GWEN_Param_List_new(); /* var 1: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar1"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 1); GWEN_Param_List_Add(prm, pl); /* var 2: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar2"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 2); GWEN_Param_List_Add(prm, pl); /* var 3: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar1"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 101.7); GWEN_Param_List_Add(prm, pl); /* var 4: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar2"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 102.4); GWEN_Param_List_Add(prm, pl); /* var 5: string */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "stringVar1"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_String); GWEN_Param_SetCurrentValue(prm, "first string"); GWEN_Param_List_Add(prm, pl); /* to XML */ xn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "params"); GWEN_Param_List_WriteXml(pl, xn); tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(xn, tbuf, GWEN_XML_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "Error on GWEN_XMLNode_toBuffer(): %d\n", rv); return 2; } fprintf(stdout, "Buffer:\n%s\n", GWEN_Buffer_GetStart(tbuf)); /* read into second list */ pl2=GWEN_Param_List_new(); xn2=GWEN_XMLNode_fromString(GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), GWEN_XML_FLAGS_DEFAULT); if (xn2==NULL) { fprintf(stderr, "Error on GWEN_XMLNode_fromString(): %d\n", rv); return 2; } GWEN_Param_List_ReadXml(pl2, xn2); /* check values */ vInt=GWEN_Param_List_GetCurrentValueAsInt(pl2, "intVar1", -1); if (vInt!=1) { fprintf(stderr, "intVar1: Bad value (%d)\n", vInt); errors++; } vInt=GWEN_Param_List_GetCurrentValueAsInt(pl2, "intVar2", -1); if (vInt!=2) { fprintf(stderr, "intVar2: Bad value (%d)\n", vInt); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl2, "doubleVar1", -1.0); if (vDouble!=101.7) { fprintf(stderr, "intDouble1: Bad value (%f)\n", vDouble); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl2, "doubleVar2", -1.0); if (vDouble!=102.4) { fprintf(stderr, "intDouble2: Bad value (%f)\n", vDouble); errors++; } if (errors) { fprintf(stderr, "%d errors occurred\n", errors); return 2; } else { fprintf(stdout, "no errors.\n"); } return 0; } int testParams2(void) { GWEN_GUI *gui; GWEN_PARAM_LIST *pl; GWEN_PARAM *prm; int vInt; double vDouble; int errors=0; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); /* setup params */ pl=GWEN_Param_List_new(); /* var 1: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar1"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 99); GWEN_Param_List_Add(prm, pl); /* var 2: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar2"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 88); GWEN_Param_List_Add(prm, pl); /* var 3: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar1"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 77.5); GWEN_Param_List_Add(prm, pl); /* var 4: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar2"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 99.3); GWEN_Param_List_Add(prm, pl); /* var 5: string */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "stringVar1"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_String); GWEN_Param_SetCurrentValue(prm, "first real string"); GWEN_Param_List_Add(prm, pl); GWEN_Param_List_SetCurrentValueAsInt(pl, "intVar1", 1); GWEN_Param_List_SetCurrentValueAsInt(pl, "intVar2", 2); GWEN_Param_List_SetCurrentValueAsDouble(pl, "doubleVar1", 101.7); GWEN_Param_List_SetCurrentValueAsDouble(pl, "doubleVar2", 102.4); /* check values */ vInt=GWEN_Param_List_GetCurrentValueAsInt(pl, "intVar1", -1); if (vInt!=1) { fprintf(stderr, "intVar1: Bad value (%d)\n", vInt); errors++; } vInt=GWEN_Param_List_GetCurrentValueAsInt(pl, "intVar2", -1); if (vInt!=2) { fprintf(stderr, "intVar2: Bad value (%d)\n", vInt); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl, "doubleVar1", -1.0); if (vDouble!=101.7) { fprintf(stderr, "intDouble1: Bad value (%f)\n", vDouble); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl, "doubleVar2", -1.0); if (vDouble!=102.4) { fprintf(stderr, "intDouble2: Bad value (%f)\n", vDouble); errors++; } if (errors) { fprintf(stderr, "%d errors occurred\n", errors); return 2; } else { fprintf(stdout, "no errors.\n"); } return 0; } int testParams3(void) { int rv; GWEN_GUI *gui; GWEN_PARAM_LIST *pl; GWEN_PARAM *prm; GWEN_BUFFER *tbuf; GWEN_XMLNODE *xn; GWEN_XMLNODE *xn2; int vInt; double vDouble; int errors=0; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Verbous); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); /* setup params */ pl=GWEN_Param_List_new(); /* var 1: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar1"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 1); GWEN_Param_List_Add(prm, pl); /* var 2: int */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "intVar2"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Int); GWEN_Param_SetCurrentValueAsInt(prm, 2); GWEN_Param_List_Add(prm, pl); /* var 3: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar1"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 101.7); GWEN_Param_List_Add(prm, pl); /* var 4: float */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "doubleVar2"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_Float); GWEN_Param_SetCurrentValueAsDouble(prm, 102.4); GWEN_Param_List_Add(prm, pl); /* var 5: string */ prm=GWEN_Param_new(); GWEN_Param_SetName(prm, "stringVar1"); GWEN_Param_SetDataType(prm, GWEN_Param_DataType_String); GWEN_Param_SetCurrentValue(prm, "first string"); GWEN_Param_List_Add(prm, pl); /* to XML */ xn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "params"); GWEN_Param_List_WriteValuesToXml(pl, xn); tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(xn, tbuf, GWEN_XML_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "Error on GWEN_XMLNode_toBuffer(): %d\n", rv); return 2; } fprintf(stdout, "Buffer:\n%s\n", GWEN_Buffer_GetStart(tbuf)); /* overwrite values */ GWEN_Param_List_SetCurrentValueAsInt(pl, "intVar1", 77); GWEN_Param_List_SetCurrentValueAsInt(pl, "intVar2", 88); GWEN_Param_List_SetCurrentValueAsDouble(pl, "doubleVar1", 77.7); GWEN_Param_List_SetCurrentValueAsDouble(pl, "doubleVar2", 99.9); /* read into second list */ xn2=GWEN_XMLNode_fromString(GWEN_Buffer_GetStart(tbuf), GWEN_Buffer_GetUsedBytes(tbuf), GWEN_XML_FLAGS_DEFAULT); if (xn2==NULL) { fprintf(stderr, "Error on GWEN_XMLNode_fromString(): %d\n", rv); return 2; } GWEN_Param_List_ReadValuesFromXml(pl, xn2); /* check values */ vInt=GWEN_Param_List_GetCurrentValueAsInt(pl, "intVar1", -1); if (vInt!=1) { fprintf(stderr, "intVar1: Bad value (%d)\n", vInt); errors++; } vInt=GWEN_Param_List_GetCurrentValueAsInt(pl, "intVar2", -1); if (vInt!=2) { fprintf(stderr, "intVar2: Bad value (%d)\n", vInt); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl, "doubleVar1", -1.0); if (vDouble!=101.7) { fprintf(stderr, "intDouble1: Bad value (%f)\n", vDouble); errors++; } vDouble=GWEN_Param_List_GetCurrentValueAsDouble(pl, "doubleVar2", -1.0); if (vDouble!=102.4) { fprintf(stderr, "intDouble2: Bad value (%f)\n", vDouble); errors++; } if (errors) { fprintf(stderr, "%d errors occurred\n", errors); return 2; } else { fprintf(stdout, "no errors.\n"); } return 0; } int testModules(int argc, char **argv) { GWEN_GUI *gui; GWEN_TEST_FRAMEWORK *tf; int rv; gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); tf=TestFramework_new(); rv=GWEN_IdList64_AddTests(TestFramework_GetModulesRoot(tf)); if (rv<0) { fprintf(stderr, "Adding module failed.\n"); return 2; } rv=GWEN_SimplePtrList_AddTests(TestFramework_GetModulesRoot(tf)); if (rv<0) { fprintf(stderr, "Adding module failed.\n"); return 2; } rv=GWEN_Buffer_AddTests(TestFramework_GetModulesRoot(tf)); if (rv<0) { fprintf(stderr, "Adding module failed.\n"); return 2; } rv=GWEN_Timestamp_AddTests(TestFramework_GetModulesRoot(tf)); if (rv<0) { fprintf(stderr, "Adding module failed.\n"); return 2; } rv=GWEN_Tag16_AddTests(TestFramework_GetModulesRoot(tf)); if (rv<0) { fprintf(stderr, "Adding module failed.\n"); return 2; } argc--; argv++; rv=TestFramework_Run(tf, argc, argv); if (rv) { fprintf(stderr, "SomeError in tests failed.\n"); GWEN_Gui_SetGui(NULL); GWEN_Gui_free(gui); return 2; } TestFramework_free(tf); GWEN_Gui_SetGui(NULL); GWEN_Gui_free(gui); return 0; } int _verifyPkcs1Pss(GWEN_UNUSED const uint8_t *ptrSrcBuffer, GWEN_UNUSED uint32_t lenSrcBuffer, GWEN_UNUSED uint32_t nbits, GWEN_UNUSED const uint8_t *ptrHash, GWEN_UNUSED uint32_t lenHash, GWEN_UNUSED uint32_t lenSalt, GWEN_UNUSED GWEN_MDIGEST *md) { return -1; } int testPss3() { GWEN_MDIGEST *md; int rv; const char srcBufAsText[]={ "47 18 72 30 11 08 67 1d 9b 40 4d 7c 1f 84 2f a7 " "77 cc 6c 5c 77 4f 75 14 96 99 9b fb 6b e4 00 40 " "3f e4 b4 0d 73 ac 95 cd ca d9 3f 84 9a dc 6f 5f " "81 3b 98 08 a4 c6 f6 1e 47 33 d8 57 d4 3f 87 d3 " "93 6d 6e 3b d4 74 59 b2 8d 2e b9 5c 3e 4d 01 38 " "77 25 94 f3 83 f3 77 d0 34 db 5d ee 5f 68 02 cb " "3e 23 d3 2f da d0 b1 3d 32 4e b0 09 81 ea 3f fb " "50 df 23 88 e9 42 65 bd 4d 4f 3d b8 05 4a 6a 1e " "d5 a0 2b 0e e9 c5 ba 0a 28 8c 89 ce 37 23 91 ca " "d1 2e 19 0c 4a 07 68 b9 af 43 a4 47 55 9d 35 43 " "65 64 17 cc dc 06 5a a7 78 a3 dd b9 f6 27 13 15 " "b2 42 31 f5 af 55 0c 80 13 06 2e 70 87 21 f0 69 " "ec ac 97 7b 8f a6 4c b9 7a 69 6f 77 a9 2f e8 f2 " "b9 8a 17 7f 27 ae 03 96 ff 6b 08 bc 90 e5 4c e9 " "67 20 fd fd ee fb cd 42 61 aa 06 2e 22 18 b7 1a " "08 c8 c9 88 2c 87 f0 cd 7b e8 91 4e d4 9e 9c bc " }; const char hashBufAsText[]={ "86 b0 19 f9 ab ad bf 4d 5c a2 09 8e 73 ac f7 53 " "21 3f 52 1a a2 39 76 5a a1 44 33 1d 59 6f e4 c7" }; GWEN_BUFFER *srcBuf; GWEN_BUFFER *hashBuf; srcBuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Text_FromHexBuffer(srcBufAsText, srcBuf); if (rv<0) { fprintf(stderr, "Bad input data in srcBuf.\n"); return 2; } hashBuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Text_FromHexBuffer(hashBufAsText, hashBuf); if (rv<0) { fprintf(stderr, "Bad input data in hashBuf.\n"); return 2; } md=GWEN_MDigest_Sha256_new(); rv=_verifyPkcs1Pss((const uint8_t*) GWEN_Buffer_GetStart(srcBuf), GWEN_Buffer_GetUsedBytes(srcBuf), 2048, (const uint8_t*) GWEN_Buffer_GetStart(hashBuf), GWEN_Buffer_GetUsedBytes(hashBuf), 32, md); if (rv<0) { fprintf(stderr, "Hash does not match\n"); return 2; } fprintf(stderr, "Hash is okay!\n"); return 0; } static GWENHYWFAR_CB void _threadTestFn(GWEN_UNUSED GWEN_THREAD *thr) { fprintf(stdout, "This is from the thread, now sleeping for 10 secs.\n"); sleep(10); fprintf(stdout, "10 secs over, returning.\n"); } int testThreads1() { GWEN_THREAD *thread1; int rv; thread1=GWEN_Thread_new(); GWEN_Thread_SetRunFn(thread1, _threadTestFn); fprintf(stdout, "Starting thread1.\n"); rv=GWEN_Thread_Start(thread1); if (rv<0) { fprintf(stderr, "Error starting thread (%d)\n", rv); return 2; } fprintf(stdout, "Waiting for thread1.\n"); rv=GWEN_Thread_Join(thread1); if (rv<0) { fprintf(stderr, "Error joining thread (%d)\n", rv); return 2; } fprintf(stdout, "thread1 finished.\n"); GWEN_Thread_free(thread1); return 0; } int testThreads2() { GWEN_GUI *gui; GWEN_THREAD *thread1; GWEN_THREAD *thread2; int rv; fprintf(stderr, "Creating gui.\n"); gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); thread1=TestThread_new(1, 10); thread2=TestThread_new(2, 5); fprintf(stdout, "Starting thread1.\n"); rv=GWEN_Thread_Start(thread1); if (rv<0) { fprintf(stderr, "Error starting thread (%d)\n", rv); return 2; } fprintf(stdout, "Starting thread2.\n"); rv=GWEN_Thread_Start(thread2); if (rv<0) { fprintf(stderr, "Error starting thread (%d)\n", rv); return 2; } fprintf(stdout, "Waiting for thread1.\n"); rv=GWEN_Thread_Join(thread1); if (rv<0) { fprintf(stderr, "Error joining thread (%d)\n", rv); return 2; } fprintf(stdout, "thread1 finished.\n"); GWEN_Thread_free(thread1); fprintf(stdout, "Waiting for thread2.\n"); rv=GWEN_Thread_Join(thread2); if (rv<0) { fprintf(stderr, "Error joining thread (%d)\n", rv); return 2; } fprintf(stdout, "thread2 finished.\n"); GWEN_Thread_free(thread2); return 0; } int testSetBinDataDb(int argc, char **argv) { GWEN_DB_NODE *db; GWEN_BUFFER *fileBuf; int rv; if (argc<4) { fprintf(stderr, "%s setBinDataDb src dest\n", argv[0]); return 1; } fprintf(stderr, "Reading source file\n"); fileBuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Helper_ReadFile(argv[2], fileBuf); if (rv<0) { fprintf(stderr, "Error reading file (%d)\n", rv); return 2; } fprintf(stderr, "Creating DB\n"); db=GWEN_DB_Group_new("Config"); GWEN_DB_SetBinValue(db, GWEN_DB_FLAGS_DEFAULT, "var", GWEN_Buffer_GetStart(fileBuf), GWEN_Buffer_GetUsedBytes(fileBuf)); if (GWEN_DB_WriteFile(db, argv[3], GWEN_DB_FLAGS_DEFAULT &~GWEN_DB_FLAGS_ESCAPE_CHARVALUES)) { fprintf(stderr, "Error writing file.\n"); return 2; } fprintf(stderr, "Releasing DB\n"); GWEN_DB_Group_free(db); GWEN_Buffer_free(fileBuf); return 0; } int testEnviron(void) { char **s = environ; printf("Environment:\n"); for (; *s; s++) { printf("%s\n", *s); } return 0; } GWEN_MSG_ENDPOINT *_acceptTcpConnection(GWEN_UNUSED GWEN_MSG_ENDPOINT *ep, GWEN_SOCKET *sk, GWEN_UNUSED const GWEN_INETADDRESS *addr, GWEN_UNUSED void *data) { GWEN_MSG_ENDPOINT *epIncoming; DBG_INFO(GWEN_LOGDOMAIN, "Incoming connection"); epIncoming=GWEN_IpcEndpoint_CreateIpcTcpServiceForSocket(sk, NULL, 1); return epIncoming; } int testIpcDaemon() { GWEN_MSG_ENDPOINT *epServer; int loop; epServer=GWEN_TcpdEndpoint_new("127.0.0.1", 55555, NULL, 1); GWEN_TcpdEndpoint_SetAcceptFn(epServer, _acceptTcpConnection, NULL); for (loop=0;; loop++) { GWEN_MSG_ENDPOINT *ep; DBG_INFO(GWEN_LOGDOMAIN, "Loop %d:", loop); GWEN_MsgEndpoint_IoLoop(epServer, 2000); /* 2000 ms */ ep=GWEN_MsgEndpoint_Tree2_GetFirstChild(epServer); while(ep) { GWEN_MSG *msg; DBG_INFO(GWEN_LOGDOMAIN, "- Checking endpoint"); while( (msg=GWEN_MsgEndpoint_TakeFirstReceivedMessage(ep)) ) { DBG_INFO(GWEN_LOGDOMAIN, " - received msg: protoId=%d, protoVer=%d, code=%d", GWEN_IpcMsg_GetProtoId(msg), GWEN_IpcMsg_GetProtoVersion(msg), GWEN_IpcMsg_GetCode(msg)); GWEN_Msg_free(msg); } /* while */ ep=GWEN_MsgEndpoint_Tree2_GetNext(ep); } GWEN_MsgEndpoint_RemoveUnconnectedAndEmptyChildren(epServer); } return 0; } int testIpcClient() { GWEN_MSG_ENDPOINT *epClient; int loop; GWEN_MSG *msg; epClient=GWEN_IpcEndpoint_CreateIpcTcpClient("127.0.0.1", 55555, NULL, 1); msg=GWEN_IpcMsg_new(1, 2, 3, GWEN_MsgEndpoint_GetNextMessageId(epClient), 0, 0, NULL); /* simple test message without payload */ GWEN_MsgEndpoint_AddSendMessage(epClient, msg); for (loop=0;; loop++) { DBG_INFO(GWEN_LOGDOMAIN, "Loop %d:", loop); GWEN_MsgEndpoint_IoLoop(epClient, 2000); /* 2000 ms */ DBG_INFO(GWEN_LOGDOMAIN, "- Checking endpoint"); while( (msg=GWEN_MsgEndpoint_TakeFirstReceivedMessage(epClient)) ) { DBG_INFO(GWEN_LOGDOMAIN, " - received msg: protoId=%d, protoVer=%d, code=%d", GWEN_IpcMsg_GetProtoId(msg), GWEN_IpcMsg_GetProtoVersion(msg), GWEN_IpcMsg_GetCode(msg)); GWEN_Msg_free(msg); } /* while */ } return 0; } const GWEN_FUNCS tests[] = { GWEN_FUNCS_ENTRY("ipcd", testIpcDaemon), GWEN_FUNCS_ENTRY("ipcc", testIpcClient), GWEN_FUNCS_ENTRY("3rsa", testCrypt3Rsa), GWEN_FUNCS_ENTRY("3rsa2", testCrypt3Rsa2), GWEN_FUNCS_ENTRY("3rsa3", testCrypt3Rsa3), GWEN_FUNCS_ENTRY("3rsa4", testCrypt3Rsa4), GWEN_FUNCS_ENTRY("822", testRfc822Import), GWEN_FUNCS_ENTRY("822x", testRfc822Export), GWEN_FUNCS_ENTRY_ARGS("base64", testBase64), GWEN_FUNCS_ENTRY_ARGS("base64_2", testBase64_2), GWEN_FUNCS_ENTRY("buf2", testBuffer2), GWEN_FUNCS_ENTRY("cryptmgr1", testCryptMgr1), GWEN_FUNCS_ENTRY("cryptmgr2", testCryptMgr2), GWEN_FUNCS_ENTRY("cryptmgr3", testCryptMgr3), GWEN_FUNCS_ENTRY("csv", testCSV), GWEN_FUNCS_ENTRY("date1", testDate1), GWEN_FUNCS_ENTRY("date2", testDate2), GWEN_FUNCS_ENTRY_ARGS("date3", testDateFromString), GWEN_FUNCS_ENTRY_ARGS("date4", testDateAddDays), GWEN_FUNCS_ENTRY("db", testDB), GWEN_FUNCS_ENTRY("db2", testDB2), GWEN_FUNCS_ENTRY("dbfile", testDBfile), GWEN_FUNCS_ENTRY_ARGS("dbfile2", testDBfile2), GWEN_FUNCS_ENTRY_ARGS("dbfile3", testDBfile3), GWEN_FUNCS_ENTRY("dbfile4", testDBfile4), GWEN_FUNCS_ENTRY("des", testDES), GWEN_FUNCS_ENTRY("des2", testDES2), GWEN_FUNCS_ENTRY("des3", testDES3), GWEN_FUNCS_ENTRY_ARGS("des4", testDES4), GWEN_FUNCS_ENTRY("des5", testDES5), GWEN_FUNCS_ENTRY_ARGS("des6", testDES6), GWEN_FUNCS_ENTRY_ARGS("dlg", testDialog), GWEN_FUNCS_ENTRY("env", testEnviron), GWEN_FUNCS_ENTRY("floatdouble", testFloatDouble), GWEN_FUNCS_ENTRY_ARGS("fslock", testFsLock), GWEN_FUNCS_ENTRY_ARGS("fslock2", testFsLock2), GWEN_FUNCS_ENTRY("gtls", testGnutls), GWEN_FUNCS_ENTRY_ARGS("hashtree", testHashTree), GWEN_FUNCS_ENTRY_ARGS("http1", testHttp1), GWEN_FUNCS_ENTRY_ARGS("http2", testHttp2), GWEN_FUNCS_ENTRY_ARGS("httpsServer", testHttpsServer), GWEN_FUNCS_ENTRY_ARGS("httpsession", testHttpSession), GWEN_FUNCS_ENTRY_ARGS("list", testListMsg), GWEN_FUNCS_ENTRY("map", testMap), GWEN_FUNCS_ENTRY("map2", testMap2), GWEN_FUNCS_ENTRY("map3", testMap3), GWEN_FUNCS_ENTRY("map4", testMap4), GWEN_FUNCS_ENTRY("mem", testMem), GWEN_FUNCS_ENTRY_ARGS("modules", testModules), GWEN_FUNCS_ENTRY("msg", testMsg), GWEN_FUNCS_ENTRY_ARGS("newxml", testNewXML), GWEN_FUNCS_ENTRY("olddb", testOldDbImport), GWEN_FUNCS_ENTRY_ARGS("option", testOptions), GWEN_FUNCS_ENTRY("params1", testParams1), GWEN_FUNCS_ENTRY("params2", testParams2), GWEN_FUNCS_ENTRY("params3", testParams3), GWEN_FUNCS_ENTRY_ARGS("parity", testParity), GWEN_FUNCS_ENTRY_ARGS("process", testProcess), GWEN_FUNCS_ENTRY("process2", testProcess2), GWEN_FUNCS_ENTRY("pss1", testPss1), GWEN_FUNCS_ENTRY("pss2", testPss2), GWEN_FUNCS_ENTRY("pss3", testPss3), GWEN_FUNCS_ENTRY("ptr", testPtr), GWEN_FUNCS_ENTRY("pw1", testPasswordStore1), GWEN_FUNCS_ENTRY("pw2", testPasswordStore2), GWEN_FUNCS_ENTRY("pw3", testPasswordStore3), GWEN_FUNCS_ENTRY_ARGS("pw4", testPasswordStore4), GWEN_FUNCS_ENTRY_ARGS("pw5", testPasswordStore5), GWEN_FUNCS_ENTRY("rsa", check_rsa_keys), GWEN_FUNCS_ENTRY_ARGS("sar1", testSar1), GWEN_FUNCS_ENTRY_ARGS("sar2", testSar2), GWEN_FUNCS_ENTRY_ARGS("sar3", testSar3), GWEN_FUNCS_ENTRY_ARGS("sar4", testSar4), GWEN_FUNCS_ENTRY_ARGS("setBinDataDb", testSetBinDataDb), GWEN_FUNCS_ENTRY("signals1", testSignals1), GWEN_FUNCS_ENTRY("signals2", testSignals2), GWEN_FUNCS_ENTRY("signals3", testSignals3), GWEN_FUNCS_ENTRY_ARGS("sio1", testSyncIo1), GWEN_FUNCS_ENTRY_ARGS("sio2", testSyncIo2), GWEN_FUNCS_ENTRY_ARGS("sio3", testSyncIo3), GWEN_FUNCS_ENTRY("sl", testStringListFromString), GWEN_FUNCS_ENTRY("sl2", testStringList2), GWEN_FUNCS_ENTRY("sn", testSnprintf), GWEN_FUNCS_ENTRY_ARGS("socketServer", testSocketServer), GWEN_FUNCS_ENTRY_ARGS("sort", testSort), GWEN_FUNCS_ENTRY("threads1", testThreads1), GWEN_FUNCS_ENTRY("threads2", testThreads2), GWEN_FUNCS_ENTRY("time", testTime), GWEN_FUNCS_ENTRY_ARGS("time1", testTimeToString), GWEN_FUNCS_ENTRY_ARGS("time2", testTimeFromString), GWEN_FUNCS_ENTRY_ARGS("tlsServer", testTlsServer), GWEN_FUNCS_ENTRY("tresor1", testTresor1), GWEN_FUNCS_ENTRY("tresor2", testTresor2), GWEN_FUNCS_ENTRY_ARGS("url", testUrl), GWEN_FUNCS_ENTRY_ARGS("xml", testXML), GWEN_FUNCS_ENTRY_ARGS("xml2", testXML2), GWEN_FUNCS_ENTRY_ARGS("xml3", testXML3), GWEN_FUNCS_ENTRY_ARGS("xml4", testXML4), GWEN_FUNCS_ENTRY("xml5", testXML5), GWEN_FUNCS_ENTRY_ARGS("xml6", testXML6), GWEN_FUNCS_ENTRY_ARGS("xml7", testXML7), GWEN_FUNCS_ENTRY_ARGS("xml8", testXML8), GWEN_FUNCS_ENTRY("xmldb1", testXmlDbExport), GWEN_FUNCS_ENTRY("xmldb2", testXmlDbImport), GWEN_FUNCS_ENTRY_END() }; static void print_usage(const char *app_name) { fprintf(stderr, "Usage: %s \n where is one of", app_name); GWEN_Funcs_Usage(tests); } int main(int argc, char **argv) { const GWEN_FUNCS *test; int rv; GWEN_Init(); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Debug); //GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Info); if (argc < 2) { print_usage(argv[0]); fprintf(stderr, "\nNote: \"modules\" is the test for gwen's modules using the internal TestFramework, " "use with \"-L LOGFILE\" for best readability.\n\n" "This test is only available if Gwen has been configured with \"--enable-testcode\".\n"); GWEN_Fini(); return 1; } test=GWEN_Funcs_Find(tests, argv[1]); if (test==NULL) { fprintf(stderr, "Unknown test \"%s\"\n", argv[1]); print_usage(argv[0]); GWEN_Fini(); return 1; } if (GWEN_Funcs_Has_Call(test)) rv=GWEN_Funcs_Call(test); else rv=GWEN_Funcs_Call_Args(test, argc, argv); GWEN_Fini(); return rv; } gwenhywfar-5.12.0/test/gwentest.vcproj0000644000175000017500000000355613142134464014760 00000000000000 gwenhywfar-5.12.0/test/Makefile.in0000664000175000017500000006047214730344662013751 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@ noinst_PROGRAMS = gwentest$(EXEEXT) subdir = test ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_gwentest_OBJECTS = gwentest.$(OBJEXT) testthread.$(OBJEXT) gwentest_OBJECTS = $(am_gwentest_OBJECTS) am__DEPENDENCIES_1 = gwentest_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(top_builddir)/src/base/libbase.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/gwentest.Po \ ./$(DEPDIR)/testthread.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(gwentest_SOURCES) DIST_SOURCES = $(gwentest_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ AM_CPPFLAGS = -I$(gwenhywfar_symlinkdir) \ $(LIBGNUTLS_CFLAGS) $(GPG_ERROR_CFLAGS) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ noinst_HEADERS = \ testthread.h \ testthread_p.h gwentest_SOURCES = gwentest.c testthread.c gwentest_LDADD = $(top_builddir)/src/libgwenhywfar.la \ $(LIBGCRYPT_LIBS) $(LIBGNUTLS_LIBS) $(GPG_ERROR_LIBS) \ $(top_builddir)/src/base/libbase.la EXTRA_DIST = README.MSVC gwentest.vcproj testdialog.xml all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/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): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gwentest$(EXEEXT): $(gwentest_OBJECTS) $(gwentest_DEPENDENCIES) $(EXTRA_gwentest_DEPENDENCIES) @rm -f gwentest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gwentest_OBJECTS) $(gwentest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwentest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testthread.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) 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 clean-libtool clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/gwentest.Po -rm -f ./$(DEPDIR)/testthread.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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 ./$(DEPDIR)/gwentest.Po -rm -f ./$(DEPDIR)/testthread.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool 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 maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: # 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: gwenhywfar-5.12.0/test/testthread_p.h0000664000175000017500000000114014043240674014521 00000000000000/*************************************************************************** begin : Thu Feb 04 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_TEST_THREAD_P_H #define GWEN_TEST_THREAD_P_H #include "testthread.h" typedef struct TEST_THREAD TEST_THREAD; struct TEST_THREAD { int threadId; int loops; }; #endif gwenhywfar-5.12.0/test/Makefile.am0000664000175000017500000000116514203136643013723 00000000000000AM_CPPFLAGS= -I$(gwenhywfar_symlinkdir) \ $(LIBGNUTLS_CFLAGS) $(GPG_ERROR_CFLAGS) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ noinst_HEADERS=\ testthread.h \ testthread_p.h noinst_PROGRAMS=gwentest gwentest_SOURCES=gwentest.c testthread.c gwentest_LDADD=$(top_builddir)/src/libgwenhywfar.la \ $(LIBGCRYPT_LIBS) $(LIBGNUTLS_LIBS) $(GPG_ERROR_LIBS) \ $(top_builddir)/src/base/libbase.la EXTRA_DIST = README.MSVC gwentest.vcproj testdialog.xml sources: gwenhywfar-5.12.0/test/testthread.h0000664000175000017500000000110714043240674014205 00000000000000/*************************************************************************** begin : Thu Feb 04 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_TEST_THREAD_H #define GWEN_TEST_THREAD_H #include GWEN_THREAD *TestThread_new(int threadId, int loops); #endif gwenhywfar-5.12.0/INSTALL0000644000175000017500000002203013142134462011727 00000000000000Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. gwenhywfar-5.12.0/gwenhywfar-config.in.in0000666000175000017500000000477713560106416015307 00000000000000# $Id$ # Author of this file: Martin Preuss result="" for d in $*; do case $d in --includes) result="$result `@PKG_CONFIG@ --cflags gwenhywfar`" ;; --libraries) result="$result `@PKG_CONFIG@ --libs gwenhywfar`" ;; --bindir) result="$result `@PKG_CONFIG@ --variable=bindir gwenhywfar`" ;; --headers) result="`$result @PKG_CONFIG@ --variable=headerdir gwenhywfar`" ;; --plugins) result="$result `@PKG_CONFIG@ --variable=plugindir gwenhywfar`" ;; --vmajor) result="$result `@PKG_CONFIG@ --variable=vmajor gwenhywfar`" ;; --vminor) result="$result `@PKG_CONFIG@ --variable=vminor gwenhywfar`" ;; --vpatchlevel) result="$result `@PKG_CONFIG@ --variable=vpatchlevel gwenhywfar`" ;; --vbuild) result="$result `@PKG_CONFIG@ --variable=vbuild gwenhywfar`" ;; --vtag) result="$result `@PKG_CONFIG@ --variable=vtag gwenhywfar`" ;; --vstring) result="$result `@PKG_CONFIG@ --variable=vstring gwenhywfar`" ;; --has-crypt) # Keep this argument in order not to completely break # the old gwenhywfar.m4 macro. result="This argument is obsolete. See $0 --help for current arguments." ;; --has-ui) # Keep this argument in order not to completely break # the old gwenhywfar.m4 macro. result="This argument is obsolete. See $0 --help for current arguments." ;; --libraries++) # Keep this argument in order not to completely break # the old gwenhywfar.m4 macro. result="This argument is obsolete. See $0 --help for current arguments." ;; --libraries-ui) # Keep this argument in order not to completely break # the old gwenhywfar.m4 macro. result="This argument is obsolete. See $0 --help for current arguments." ;; *) echo "Usage:" echo "$0 --includes gives you the include flags" echo "$0 --libraries gives you the library flags" echo "$0 --bindir returns the folder for binary tools" echo "$0 --headers gives you the location of the header files" echo "$0 --vmajor gives the major version of LibGwenhywfar" echo "$0 --vminor gives the minor version of LibGwenhywfar" echo "$0 --vpatchlevel gives the patchlevel of LibGwenhywfar" echo "$0 --vbuild gives the build number of LibGwenhywfar" echo "$0 --vtag gives the tag of LibGwenhywfar (cvs, beta or stable)" echo "$0 --vstring returns a version string" exit 1 ;; esac done echo $result gwenhywfar-5.12.0/gwenhywfar.pc.in0000666000175000017500000000167113560106416014026 00000000000000# pkg-config configuration for gwenhywfar # For information about the syntax, see pkg-config(1) # General installation directories prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ pkgincludedir=@gwenhywfar_headerdir@ datarootdir=@datarootdir@ datadir=@datadir@ bindir=@bindir@ sysconfdir=@sysconfdir@ # Particular variables of gwenhywfar plugindir=@gwenhywfar_plugindir@ headerdir=@gwenhywfar_headerdir@/gwenhywfar vmajor=@GWENHYWFAR_VERSION_MAJOR@ vminor=@GWENHYWFAR_VERSION_MINOR@ vpatchlevel=@GWENHYWFAR_VERSION_PATCHLEVEL@ vbuild=@GWENHYWFAR_VERSION_BUILD@ vtag=@GWENHYWFAR_VERSION_TAG@ vstring=@GWENHYWFAR_VERSION_MAJOR@.@GWENHYWFAR_VERSION_MINOR@.@GWENHYWFAR_VERSION_PATCHLEVEL@ # Human-readable name Name: gwenhywfar # Human-readable description Description: A multi-platform helper library for other libraries Version: @VERSION@ Libs: @gwenhywfar_ldflags@ @gwenhywfar_libs@ Cflags: -I@gwenhywfar_headerdir@ gwenhywfar-5.12.0/gwenhywfar.iss.in0000664000175000017500000002131514043240674014217 00000000000000; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Input configuration for the Inno Setup Compiler ; Copyright (c) 2004-2005 Christian Stimming ; ; Inno Setup Compiler: See http://www.jrsoftware.org/isdl.php ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Setup] ; Using the name here directly because we want it capitalized AppName=Gwenhywfar AppVerName=Gwenhywfar @VERSION@ AppPublisher=Gwenhywfar Development Team AppPublisherURL=http://sourceforge.net/projects/gwenhywfar AppSupportURL=http://sourceforge.net/support/getsupport.php?group_id=88769 AppUpdatesURL=http://sourceforge.net/project/showfiles.php?group_id=88769 DefaultDirName={pf}\@PACKAGE@ LicenseFile=COPYING Compression=lzma OutputDir=. OutputBaseFilename=@PACKAGE@-@VERSION@-setup UninstallFilesDir={app}\uninstall\@PACKAGE@ InfoAfterFile=README [Types] Name: "full"; Description: "{cm:FullInstall}" Name: "binary"; Description: "{cm:BinaryInstall}" Name: "custom"; Description: "{cm:CustomInstall}"; Flags: iscustom [Components] Name: "main"; Description: "{cm:MainFiles}"; Types: full binary custom; Flags: fixed Name: "devel"; Description: "{cm:DevelFiles}"; Types: full Name: "doc"; Description: "{cm:DocFiles}"; Types: full ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Here we configure the included files and the place of their ; installation ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Files] ; The main DLL Source: "distribution\usr\bin\*.dll"; DestDir: "{win}"; Flags: sharedfile; Components: main ; The lib file for linking against it Source: "distribution\usr\lib\lib@PACKAGE@.la"; DestDir: "{app}\lib"; Flags: sharedfile; Components: devel Source: "distribution\usr\lib\*.dll.a"; DestDir: "{app}\lib"; Flags: sharedfile; Components: devel ; The config-script. It is post-processed by the Pascal script below. Source: "@PACKAGE@-config.in.in"; DestDir: "{app}\bin"; Flags: recursesubdirs; Components: devel; AfterInstall: MyAfterInstallConfig(ExpandConstant('{app}\bin\@PACKAGE@-config')) ; The tools executables Source: "distribution\usr\bin\*.exe"; DestDir: "{app}\bin"; Flags: ignoreversion; Components: devel ; The headers, and the aclocal macro. Source: "distribution\usr\include\*"; DestDir: "{app}\include"; Flags: ignoreversion recursesubdirs; Components: devel Source: "distribution\usr\share\*"; DestDir: "{app}\share"; Flags: ignoreversion recursesubdirs; Components: devel ; The plugins Source: "distribution\usr\lib\@PACKAGE@\plugins\@GWENHYWFAR_SO_EFFECTIVE@\*"; DestDir: "{app}\lib\@PACKAGE@\plugins\@GWENHYWFAR_SO_EFFECTIVE@"; Flags: ignoreversion recursesubdirs; Components: main ; The certificate file Source: "distribution\usr\etc\gwen-public-ca.crt"; DestDir: "{app}\etc"; Components: main ; And all the documentation Source: "README"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc Source: "COPYING"; DestDir: "{app}\doc\@PACKAGE@"; Flags: ignoreversion; Components: doc Source: "README.W32"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc Source: "AUTHORS"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc Source: "ChangeLog"; DestDir: "{app}\doc\@PACKAGE@"; Components: doc ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Define the registry keys Setup should create (HKCU = HKEY_CURRENT_USER) ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Registry] Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "prefix"; ValueData: "{app}" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "libdir"; ValueData: "{app}\lib" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "pkglibdir"; ValueData: "{app}\lib\@PACKAGE@" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "plugindir"; ValueData: "{app}\lib\@PACKAGE@\plugins\@GWENHYWFAR_SO_EFFECTIVE@" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "dbio-plugins"; ValueData: "{app}\lib\@PACKAGE@\plugins\@GWENHYWFAR_SO_EFFECTIVE@\dbio" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "crypttoken-plugins"; ValueData: "{app}\lib\@PACKAGE@\plugins\@GWENHYWFAR_SO_EFFECTIVE@\crypttoken" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "sysconfdir"; ValueData: "{app}\etc" Root: HKLM; Subkey: "Software\Gwenhywfar\Paths"; ValueType: string; ValueName: "localedir"; ValueData: "{app}\share\locale" ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Delete the created config script on uninstall ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [UninstallDelete] Type: files; Name: "{app}\bin\@PACKAGE@-config" ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; This large section is a Pascal scripting program that will modify ; the gwenhywfar-config shell script so that it then includes the ; correct values according to our local installation. See ; http://www.remobjects.com/?ps for a syntax reference. ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Code] function MingwBacksl(const S: String): String; begin { Modify the path name S so that it can be used by MinGW } if Length(ExtractFileDrive(S)) = 0 then Result := S else begin Result := '/'+S; StringChange(Result, ':\', '\'); end; StringChange(Result, '\', '/'); end; procedure MyAfterInstallConfig(FileName: String); var FileString, appdir, windir, includedir, plugindir: String; Res: Boolean; begin { Load the unchanged original file } Res := LoadStringFromFile(Format('%s.in.in',[FileName]), FileString); if Res = False then MsgBox('Error on loading '+FileName+'.in.in for final adaptation', mbInformation, MB_OK); { Insert the custom file header; #10 is the linefeed character } Insert('#!/bin/sh '#10'dir="@prefix'+'@"'#10, FileString, 0); { Get the installation-specific paths } windir := MingwBacksl(ExpandConstant('{win}')); appdir := MingwBacksl(ExpandConstant('{app}')); includedir := appdir + '/include'; plugindir := appdir + '/lib/@PACKAGE@/plugins/@GWENHYWFAR_SO_EFFECTIVE@'; { Now make all the replacements } { Explanation: StringChange(S,FromStr,ToStr): Change all occurances in S of FromStr to ToStr. } StringChange(FileString, '@'+'prefix@', appdir); StringChange(FileString, '@'+'libdir@', windir); StringChange(FileString, '@'+'gwenhywfar_headerdir@', includedir); StringChange(FileString, '@'+'gwenhywfar_ldflags@', '-L'+windir); StringChange(FileString, '@'+'gwenhywfar_libs@', '@gwenhywfar_libs@'); StringChange(FileString, '@'+'gwenhywfar_libspp@', '@gwenhywfar_libspp@'); StringChange(FileString, '@'+'gwenhywfar_libsui@', '@gwenhywfar_libsui@'); StringChange(FileString, '@'+'gwenhywfar_pkgincludedir@', includedir+'/@PACKAGE@'); StringChange(FileString, '@'+'gwenhywfar_plugindir@', plugindir); StringChange(FileString, '@'+'GWENHYWFAR_VERSION_MAJOR@', '@GWENHYWFAR_VERSION_MAJOR@'); StringChange(FileString, '@'+'GWENHYWFAR_VERSION_MINOR@', '@GWENHYWFAR_VERSION_MINOR@'); StringChange(FileString, '@'+'GWENHYWFAR_VERSION_PATCHLEVEL@', '@GWENHYWFAR_VERSION_PATCHLEVEL@'); StringChange(FileString, '@'+'GWENHYWFAR_VERSION_BUILD@', '@GWENHYWFAR_VERSION_BUILD@'); StringChange(FileString, '@'+'GWENHYWFAR_VERSION_TAG@', '@GWENHYWFAR_VERSION_TAG@'); { Save the final file } Res := SaveStringToFile(FileName, FileString, False); if Res = False then MsgBox('Error on saving '+FileName+' for final adaptation', mbInformation, MB_OK); end; [Languages] Name: "en"; MessagesFile: "compiler:Default.isl" Name: "de"; MessagesFile: "compiler:Languages\German.isl" Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl" Name: "fr"; MessagesFile: "compiler:Languages\French.isl" ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; These are only for improved text messages ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; [Messages] ; *** "Select Destination" wizard page SelectDirLabel3=Setup will install [name] into the following folder. If you have MinGW installed on your system, you can safely choose MinGW's root folder here as well (e.g. c:\msys\1.0). de.SelectDirLabel3=Das Setup wird [name] in den folgenden Ordner installieren. Wenn Sie MinGW auf Ihrem Computer installiert haben, können Sie hier problemlos das Root-Verzeichnis von MinGW angeben (z.B. c:\msys\1.0). [CustomMessages] ; *** "Select Components" wizard page FullInstall=Full installation BinaryInstall=Install only libraries CustomInstall=Custom installation MainFiles=Gwenhywfar DLL Library DevelFiles=Development files DocFiles=Documentation files de.FullInstall=Komplett-Installation de.BinaryInstall=Nur Bibliotheken installieren de.CustomInstall=Benutzerdefiniert de.MainFiles=Gwenhywfar DLL Bibliothek de.DevelFiles=Entwickler-Dateien de.DocFiles=Dokumentations-Dateien gwenhywfar-5.12.0/doc/0000775000175000017500000000000014730345123011532 500000000000000gwenhywfar-5.12.0/doc/testdialog.xml0000644000175000017500000001150013142134462014324 00000000000000 WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_BORDER WIDGET_FLAGS_MODAL WINDOW_FLAGS_TITLE 53 10 Enter Connection Data 1
20 1 Connection type WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_BORDER WIDGET_FLAGS_HIGHLIGHT 30 1 local private secure This allows setting the connection type. type char 3 16
20 1 Address WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_BORDER WIDGET_FLAGS_HIGHLIGHT EDITBOX_FLAGS_EDIT EDITBOX_FLAGS_CLEARALL EDITBOX_FLAGS_INSERT EDITBOX_FLAGS_DYNAMIC 30 1 64 This allows setting the address. addr char 64
20 1 TCP Port WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_BORDER WIDGET_FLAGS_HIGHLIGHT EDITBOX_FLAGS_EDIT EDITBOX_FLAGS_CLEARALL EDITBOX_FLAGS_INSERT EDITBOX_FLAGS_DYNAMIC 8 1 6 This allows setting the TCP port. port int 1 65535
1 HLINE_FLAGS_EMPTY 1
WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_HCENTER WIDGET_FLAGS_BORDER WIDGET_FLAGS_HIGHLIGHT 8 1 1 Ok Press this button when finished.. WIDGET_FLAGS_DEFAULT WIDGET_FLAGS_HCENTER WIDGET_FLAGS_BORDER WIDGET_FLAGS_HIGHLIGHT 8 1 2 Abort Press this button when to abort.
gwenhywfar-5.12.0/doc/Makefile.in0000664000175000017500000006056614730344661013542 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 = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h CONFIG_CLEAN_FILES = plugindescr.xsd 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 $(srcdir)/plugindescr.xsd.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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = \ apidoc.h \ STYLE \ db2.png \ testdialog.xml \ plugindescr.xml \ plugindescr.xsd.in \ widgets.h \ widgets_be.h SUBDIRS = inherit dialog 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) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/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): plugindescr.xsd: $(top_builddir)/config.status $(srcdir)/plugindescr.xsd.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 clean-libtool 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 mostlyclean-libtool 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 clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ 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 mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: # 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: gwenhywfar-5.12.0/doc/apidoc.h0000664000175000017500000000476514460564441013104 00000000000000 /* * This file is only to define a basic structure for the API documentation */ #ifndef GWENHYWFAR_APIDOC_H #define GWENHYWFAR_APIDOC_H /** @defgroup MOD_BASE Basic Stuff */ /** @defgroup MOD_OS Operating System Abstraction */ /** @defgroup MOD_IOLAYER Input Output Layer Functions */ /** @defgroup MOD_IO Input Output Functions */ /** @defgroup MOD_NET Networking Functions */ /** @defgroup MOD_MSGIO Message Input/Output */ /** @defgroup MOD_PARSER Data Management And Parsing */ /** @defgroup MOD_CRYPT Cryptographic Functions */ /** @defgroup MOD_GUI Graphical User Interface */ /** @defgroup MOD_DIALOG Toolkit Independent Dialog Framework */ /** @mainpage Gwenhywfar Documentation Main Page * This is Gwenhywfar, a multi-platform helper library for networking and security applications and libraries. It is heavily used by Libchipcard and OpenHBCI-TNG (The Next Generation). @section GWEN_features Features This library is written in C, and it follows the object-oriented programming paradigm for most of its parts. The header files can directly be used from C++, too. Gwenhywfar includes the following features:
  • Basic Data types for binary buffers, linked lists, error objects, string lists (src/base/), buffered IO operations (src/io/)
  • OS abstraction functions for directory and Internet address handling (src/os/)
  • extensive data type and function collections for Inter-Process communication (IPC, in src/ipc/ and src/impl/ipc/)
  • High-level cryptographic functions on top of OpenSSL functionality (src/crypt/)
  • High-level functions for parsing XML-like files and accessing them like a hierarchical database (src/parser/)
@section GWEN_contact Contact For questions about this library please ask on the mailing list of the AqBanking project aqbanking-user (subscriber-only, please subscribe on http://lists.aqbanking.de/cgi-bin/mailman/listinfo/aqbanking-user), since this is where the author(s) hang out. @section GWEN_author Authors This library is being written by and is being maintained by Martin Preuss Special thanks go to Christian Stimming and Micha Lenk. */ #endif gwenhywfar-5.12.0/doc/widgets_be.h0000644000175000017500000001103513142134462013733 00000000000000 /** * @defgroup MOD_DIALOG_IMPL Implementation Notes * @ingroup MOD_DIALOG * * @brief Implementation hints. * * * The dialog framework is part of the GWEN_GUI framework (@ref MOD_GUI). * To make your implementation available to the application you will have to * set the following callbacks in GWEN_GUI: *
    *
  • @ref GWEN_Gui_ExecDialog (use @ref GWEN_Gui_SetExecDialogFn)
  • *
  • @ref GWEN_Gui_OpenDialog (use @ref GWEN_Gui_SetOpenDialogFn)
  • *
  • @ref GWEN_Gui_CloseDialog (use @ref GWEN_Gui_SetCloseDialogFn)
  • *
  • @ref GWEN_Gui_RunDialog (use @ref GWEN_Gui_SetRunDialogFn)
  • *
* * The function @ref GWEN_Gui_ExecDialog can be implemented by just calling the other * functions (first @ref GWEN_Gui_OpenDialog followed by @ref GWEN_Gui_RunDialog and * @ref GWEN_Gui_CloseDialog). * * Your implementation of @ref GWEN_Gui_OpenDialog must set the follwing callbacks in * the object pointed to by the first argument (@ref GWEN_DIALOG): *
    *
  • @ref GWEN_Dialog_SetIntProperty (use @ref GWEN_Dialog_SetSetIntPropertyFn)
  • *
  • @ref GWEN_Dialog_GetIntProperty (use @ref GWEN_Dialog_SetGetIntPropertyFn)
  • *
  • @ref GWEN_Dialog_SetCharProperty (use @ref GWEN_Dialog_SetSetCharPropertyFn)
  • *
  • @ref GWEN_Dialog_GetCharProperty (use @ref GWEN_Dialog_SetGetCharPropertyFn)
  • *
* * The GKT2 implementation does it like this: * @code * GWEN_INHERIT(GWEN_DIALOG, GTK2_GUI_DIALOG) * * void Gtk2Gui_Dialog_Extend(GWEN_DIALOG *dlg) { * GTK2_GUI_DIALOG *xdlg; * * GWEN_NEW_OBJECT(GTK2_GUI_DIALOG, xdlg); * GWEN_INHERIT_SETDATA(GWEN_DIALOG, GTK2_GUI_DIALOG, dlg, xdlg, Gtk2Gui_Dialog_FreeData); * * GWEN_Dialog_SetSetIntPropertyFn(dlg, Gtk2Gui_Dialog_SetIntProperty); * GWEN_Dialog_SetGetIntPropertyFn(dlg, Gtk2Gui_Dialog_GetIntProperty); * GWEN_Dialog_SetSetCharPropertyFn(dlg, Gtk2Gui_Dialog_SetCharProperty); * GWEN_Dialog_SetGetCharPropertyFn(dlg, Gtk2Gui_Dialog_GetCharProperty); * } * @endcode * * It must also create the actual widgets used by your GUI toolkit (e.g. QLabel for label * widgets with QT). To do that you should call @ref GWEN_Dialog_GetWidgets to get the * tree of widget descriptions. The most important information about a widget is its type * (@ref GWEN_Widget_GetType). The implementation of @ref GWEN_Gui_OpenDialog can use that * information to decide what GUI widget should be created to represent that widget description. * * For example the QT implementation creates a QLabel object for the widget type * @ref GWEN_Widget_TypeLabel. * * You can call the function @ref GWEN_Widget_SetImplData to store a pointer to the GUI widget * created (e.g. the QT implementation stores a pointer to the created QLabel object for widgets * of type @ref GWEN_Widget_TypeLabel). To retrieve that pointer later call * @ref GWEN_Widget_GetImplData. Currently up to 4 pointers can be stored per GWEN_WIDGET object * (in the case that there are multiple GUI objects required to represent a given GWEN_WIDGET). * * Another important hint comes from the widget flags (get them with @ref GWEN_Widget_GetFlags). * Those flag tell the implementation about some layout options and other things. * * For widgets using media like icons or images the implementation can call * @ref GWEN_Dialog_GetMediaPaths to get a list of paths where those icons can be found. This * information is provided by the dialog itself. You can use functions like * @ref GWEN_Directory_FindFileInPaths to actually find the icon or image file using the media * paths. * * * This example shows how the GTK2 implementation creates a GUI representation of type * @ref GWEN_Widget_TypeLabel: * @code * #define GTK2_DIALOG_WIDGET_REAL 0 * #define GTK2_DIALOG_WIDGET_CONTENT 1 * * int Gtk2Gui_WLabel_Setup(GWEN_WIDGET *w) { * GtkWidget *g; * const char *s; * uint32_t flags; * GWEN_WIDGET *wParent; * * flags=GWEN_Widget_GetFlags(w); * wParent=GWEN_Widget_Tree_GetParent(w); * s=GWEN_Widget_GetText(w, 0); * * g=gtk_label_new(s); * GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_REAL, (void*) g); * GWEN_Widget_SetImplData(w, GTK2_DIALOG_WIDGET_CONTENT, (void*) g); * * GWEN_Widget_SetSetIntPropertyFn(w, Gtk2Gui_WLabel_SetIntProperty); * GWEN_Widget_SetGetIntPropertyFn(w, Gtk2Gui_WLabel_GetIntProperty); * GWEN_Widget_SetSetCharPropertyFn(w, Gtk2Gui_WLabel_SetCharProperty); * GWEN_Widget_SetGetCharPropertyFn(w, Gtk2Gui_WLabel_GetCharProperty); * * if (wParent) * GWEN_Widget_AddChildGuiWidget(wParent, w); * * return 0; * } * @endcode * * */ gwenhywfar-5.12.0/doc/Makefile.am0000644000175000017500000000026013142134462013500 00000000000000EXTRA_DIST= \ apidoc.h \ STYLE \ db2.png \ testdialog.xml \ plugindescr.xml \ plugindescr.xsd.in \ widgets.h \ widgets_be.h SUBDIRS=inherit dialog sources: gwenhywfar-5.12.0/doc/widgets.h0000644000175000017500000002613313142134474013275 00000000000000 /** * @defgroup MOD_DIALOG Toolkit Independent Dialog Framework * * @brief Platform and toolkit independent XML-based dialog framework. * * @section SEC_Dialog GWEN_Dialog Framework * * A dialog consists of a tree of widgets. * * Widgets can have integer and string properties. Some widgets also emit signals * (like a push button which emits the "Activated" signal when clicked). * See @ref GWEN_Dialog_SetIntProperty, @ref GWEN_Dialog_GetIntProperty, * @ref GWEN_Dialog_SetCharProperty and @ref GWEN_Dialog_GetCharProperty about * how to get or manipulate widget properties. * * There is a special signal @ref GWEN_DialogEvent_TypeInit which is emitted * immediately before a dialog is shown to the user (e.g. upon @ref GWEN_Gui_ExecDialog). * It is only after the reception of this signal that properties become available for the * property retrieval and manipulation functions mentioned above. * * * * @section SEC_STRING String Properties * * Some widgets may allow for HTML text, e.g. the FOX and QT3/4 implementations allow for * HTML text as title property. However, not all implementations might have HTML support, * so it must still be possible to set standard text which is then used by HTML-agnostic * implementations. The chosen way to do this in the GWEN_Dialog framework is to specify both * formats in a single string. * String properties with the "html" mark in the following list may contain text in the following * format: * @code * "this is the html version and this is the standard text" * @endcode * * As you can see HTML text is enclosed by the HTML element "html". Everything outside that is * supposed to be standard text. * * Implementations which are aware of HTML text will only use that enclosed part and ignore the * rest. HTML-agnostic implementations will use the text outside those "html" markings. * * * * @section SEC_ALL_WIDGETS All Widgets * * @subsection SUBSEC_INT Integer Properties * * The following properties are handled by all widgets. *
    *
  • * GWEN_DialogProperty_Width (rw): The preferred width of * the widget. This is only guaranteed to work for * widgets of type @ref GWEN_Widget_TypeDialog. *
  • *
  • * GWEN_DialogProperty_Height (rw): The preferred height of * the widget. This is only guaranteed to work for * widgets of type @ref GWEN_Widget_TypeDialog. *
  • *
  • * GWEN_DialogProperty_Enabled (rw): The enabled state of * a widget (0=disabled, 1=enabled). This only works for * widgets, not for the dialog itself (which woudn't make sense * anyway). *
  • *
  • * GWEN_DialogProperty_Focus (rw): Whether a widget * has the focus (0=no focus, 1=has focus) *
  • *
* * * * * @section SEC_LABEL GWEN_Widget_TypeLabel * * This is a simple label widget (e.g. QLabel in QT or * FXLabel in FOX). * * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Title (rw, html): Text of the label. *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * * This widget does not emit special signals. * * * * * @section SEC_PUSHBUTTON GWEN_Widget_TypePushButton * * This is a simple push button widget (e.g. QPushButton in QT or * FXButton in FOX). * * * @subsection SUBSEC_INT Integer Properties * * This widget does not have special integer properties. * * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Title (rw): Text of the button. *
  • *
  • * GWEN_DialogProperty_ToolTip (wo): Tooltip text. *
  • *
* * * * * @section SEC_LINEEDIT GWEN_Widget_TypeLineEdit * * This is a one line edit field widget (e.g. QLineEdit in QT or * FXTextField in FOX). * * * @subsection SUBSEC_INT Integer Properties * * This widget does not have special integer properties. * * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (rw): Entered text. *
  • *
  • * GWEN_DialogProperty_ToolTip (wo): Tooltip text. *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * *
    *
  • * GWEN_DialogEvent_TypeValueChanged: This signal is * emitted whenever the content of the line edit changes. *
  • *
  • * GWEN_DialogEvent_TypeValueCommand: This signal is * emitted as soon as the enter key is pressed or * the widget looses focus. *
  • *
* * * * * @section SEC_TEXTEDIT GWEN_Widget_TypeTextEdit * * This is a multi line edit field widget (e.g. Q?? in QT or * FXText in FOX). * * * @subsection SUBSEC_INT Integer Properties * * This widget does not have special integer properties. * * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (rw): Entered text. *
  • *
  • * GWEN_DialogProperty_ToolTip (wo): Tooltip text. *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * * No special signals for now. * * * * * @section SEC_COMBOBOX GWEN_Widget_TypeComboBox * * This is a combobox widget (e.g. QComboBox in QT or FXComboBox in FOX). * * * @subsection SUBSEC_INT Integer Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (rw): Represents the index of the * currently selected entry. *
  • *
  • * GWEN_DialogProperty_ClearChoices (wo): Any value set here will clear * the list of entries of this widget. *
  • *
  • * GWEN_DialogProperty_ChoiceCount (ro): Number of entries in the combobox. *
  • *
* * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (ro): Text of an entry of a given index. *
  • *
  • * GWEN_DialogProperty_AddChoice (wo): Appends an entry at the end *
  • *
  • * GWEN_DialogProperty_ToolTip (wo): Tooltip text. *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * *
    *
  • * GWEN_DialogEvent_TypeValueChanged: This signal is * emitted when an entry has been chosen from the combo box * and also when the widget looses focus. *
  • *
* * * * * @section SEC_PROGRESSBAR GWEN_Widget_TypeProgressBar * * This widget is a simple progress bar. It has a total value which * represents 100 percent and a progress value (from which the percentage * is calculated and shown). * * * @subsection SUBSEC_INT Integer Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (rw): Progress value *
  • *
  • * GWEN_DialogProperty_MaxValue (rw): The value which represents 100 percent. *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * * No special signals. * * * * * @section SEC_GROUPBOX GWEN_Widget_TypeGroupBox * * This widget is a box surrounding other widgets with a thin line. It may also * have a title. * * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Title (rw): Text written at the border of the widget *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * * This widget does not emit special signals. * * * * * @section SEC_LISTBOX GWEN_Widget_TypeListBox * * A list box is a simple list with a horizontal title header at the top. * Entries of a list may have multiple columns. * * * @subsection SUBSEC_INT Integer Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Value (rw): Represents the index of the * currently selected entry. *
  • *
  • * GWEN_DialogProperty_ClearChoices (wo): Any value set here will clear * the list of entries of this widget. *
  • *
  • * GWEN_DialogProperty_ChoiceCount (ro): Number of entries in the combobox. *
  • *
  • * GWEN_DialogProperty_ColumnWidth (rw): Width of the column given by @c index * (see @ref GWEN_Dialog_SetIntProperty). When setting this property * @c index is the column whose width is to be changed and @c value is the new * width. *
  • *
  • * GWEN_DialogProperty_SelectionMode (rw): Determines how to handle selecting of * entries in this widget. *
  • *
  • * GWEN_DialogProperty_SelectionState (rw): Selection state of the item given by * @c index (see @ref GWEN_Dialog_SetIntProperty). *
  • *
  • * GWEN_DialogProperty_SortDirection (rw): Sorting direction of the column given * by @c index (see @ref GWEN_Dialog_SetIntProperty). Only one column can determine * the sort direction at any given time, so setting the direction of one column will * remove the direction tag from every other column. If a column has a sorting * direction other than @ref GWEN_DialogSortDirection_None then that column will * determine how the list will be sorted. *
  • *
  • * GWEN_DialogProperty_Sort (wo): Any value written here will make the widget * sort its entries according to the current sort direction. Applications should * be aware that the implementation might or might not automatically sort items * when adding them to the list. So if the application wants to make sure the list * is always sorted it should set this property after adding items. *
  • *
* * * @subsection SUBSEC_STRING String Properties * * The following properties are handled by this widget. *
    *
  • * GWEN_DialogProperty_Title (rw): String of the header line. * Since list boxes might have multiple columns the title might * contain multiple strings divided by tab ("\t"). *
  • *
  • * GWEN_DialogProperty_AddChoice (wo): Appends an entry to the list. * Please note that the implementation might or might not sort-in new * entries. So if the application needs to be sure that the list is properly * sorted it should use the property @ref GWEN_DialogProperty_Sort after * appending items. * Since list boxes might have multiple columns an entry might * contain multiple strings divided by tab ( e.g. "col1\tcol2"). *
  • *
* * * @subsection SUBSEC_SIGNALS Signals * *
    *
  • * GWEN_DialogEvent_TypeValueChanged: This signal is * emitted when the current entry changes (e.g. another entry * becomes the current entry). *
  • *
* * * * * * * GWEN_Widget_TypeHSpacer * GWEN_Widget_TypeVSpacer * GWEN_Widget_TypeHLayout * GWEN_Widget_TypeVLayout * GWEN_Widget_TypeGridLayout * GWEN_Widget_TypeDialog * GWEN_Widget_TypeTabBook * GWEN_Widget_TypeTabPage * GWEN_Widget_TypeCheckBox * GWEN_Widget_TypeWidgetStack * GWEN_Widget_TypeScrollArea * GWEN_Widget_TypeHLine * GWEN_Widget_TypeVLine * GWEN_Widget_TypeRadioButton * * */ gwenhywfar-5.12.0/doc/plugindescr.xsd.in0000644000175000017500000000316713142134462015121 00000000000000 gwenhywfar-5.12.0/doc/STYLE0000644000175000017500000002534413142134462012301 00000000000000$Id$ Table of Content 1. Introduction 2. Names of Header Files 3. Definitions of Types, Functions etc 3.1. Prefixes 3.2. Function Definitions 3.3. Type Definitions 3.4. Enum Elements 3.5. Macro Definitions 3.6. Callbacks 4. Formal Style 4.1. Indent Style 4.2. Brackets 4.3. Start of Files 5. ChangeLog 6. BUILD Version Number 7. Versioning 8. CVS Usage 9. Documentation 1. Introduction =============== This file contains some style guidelines which I would like to see respected by all authors contributing code to this project. Nobody will wrench off your head if your submission does not follow these guidelines, but you should be aware that your code will most likely be modified to comply to this document. The goal of these guidelines is to keep the project files uniform and thus making it easier to read them. This document is subject to changes, and the project admin is open for discussion and suggestions. I know that many parts of this project do not fully comply to this style guide but I am working on it. 2. Names of Header Files ======================== For every module there may optionally be these header files: - MODULENAME.h prototypes and type definitions to be exported - MODULENAME_p.h prototypes and type definitions to be used by the module only (these files are not installed) - MODULENAME_l.h prototypes and type definitions to be used by the library only (these files are not installed) MODULENAME must be the name of the module (like error) in all-lowercase letters (this is to avoid problems with file systems which do not support case sensitive file names). 3. Definitions of Types, Functions etc ====================================== Every type, function, macro etc that is exported must be introduced by the keyword "GWENHYWFAR_API". This is needed for WIN32 platforms to inform the compiler about which symbols are to be imported from this project. Every function must have a prototype. For exported functions they should be in the modules header file, for non-exported functions these should be in the "MODULENAME_p.h" or in the "MODULENAME_l.h" file. Example: GWENHYWFAR_API void GWEN_DB_Group_free(GWEN_DB_NODE *n); 3.1. Prefixes ------------- Every function or type name has two prefixes: - GWEN_ This forms a namespace "GWEN" which prevents function name collisions - a module name This makes every function name unique within GWEN. The module name should be all-capitals if the name is shorter than three characters or is an abbreviation. It should start with a capital otherwise. Please note that even internal functions (i.e. those which are not to be used outside the library) MUST have these prefixes. Examples: GWEN_DB_Values_Count, GWEN_Error_GetType 3.2. Function Definitions ------------------------- Function names consist of multiple words combined by underscores. Every word after the prefixes starts with a capital. If any word itself consists of multiple sub-words (like in GetType) then every sub-word should start with a capital, too. This improves the readability of the code. There is one exceptions from this rule (for historical reasons): Functions which are constructors, destructors or duplication functions (like GWEN_Buffer_new, GWEN_Buffer_free, GWEN_Buffer_dup) need to have the last word start with a lowercase letter. These functions also should use the given words below: - _new for constructors - _free for destructors - _dup for deep copy duplications Example: GWEN_DB_Values_Count, GWEN_Error_GetCode, GWEN_Error_new 3.3. Type Definitions --------------------- Types are written in all-capitals, like in GWEN_DB_NODE. Do not export structs per se. It is important that the real structure of the structs used within Gwen is hidden. Members of structs must be accessed using getter and setter functions. This makes sure that applications always use pointers instead of creating objects directly. This also reduces the number of incompatible API changes (those changes make it necessary for every depending package to be recompiled and thus should be avoided where possible). 3.4. Enum Elements ------------------ New enum elements should consist of multiple words which are concatenated (like in GWEN_LoggerLevelError). Unfortunately the enum definitions inside the GWEN_DB module do not follow this guideline in this regard. Since changing this would produce many problems this rule only applies to new enum definitions. 3.5. Macro Definitions ---------------------- Macro names are written in all-capitals, like in GWEN_DB_FLAGS_DEFAULT. 3.6. Callbacks -------------- Callbacks must be attributed using "GWENHYWFAR_CB" to make them work. Best known callbacks in Gwenhywfar are those of the GWEN_INHERIT framework. The following example illustrates this: void GWENHYWFAR_CB MyType_FreeData(void *bp, void *p); As you can see the return type is followed by the keyword GWENHYWFAR_CB which expands on WIN32 platforms to "__stdcall". This makes it possible to use such callbacks on WIN32, too. BTW: In a Linux environment this macro is expanded to an empty string because Linux doesn't need such an attribute. However, using the macro GWENHYWFAR_CB make the source code protable. 4. Formal Style =============== 4.1. Indent Style ----------------- The preferred style is GNU: two space indent. 4.2. Brackets ------------- The preferred style here is to have the opening bracket at the very same line as the keyword which introduces the block, like in: if (pos) { if (pos>=bf->bufferSize) { DBG_ERROR(0, "Position outside buffer"); return -1; } } The closing bracket is supposed to be alone in the next line following the block (as seen above). 4.3. Start of Files ------------------- Every source file (*.{c, cpp, h}) should have a header like this: ------------------------------------------------- X8 cut here /*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Tue Sep 09 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ ------------------------------------------------- X8 cut here The copyright and email entry should of course be adapted ;-) All files within this project are licensed under the GNU LGPL, and the header of every file must reflect that (as is in the header above). 5. ChangeLog ============ Every change to the CVS version of this project should be accompanied by a descriptive text in the file ChangeLog. The format of such an entry should match that of the existing entries, currently these are emacs-style and "my style" ;-) However, the format does not really matter, as long as it contains the following information: - date of change - name of the author of the changes - description of the change If the change breaks compatiblity with the previously existing version of this project then this should be marked. 6. BUILD Version Number ======================= The file "configure.ac" contains a line which sets the BUILD version number (GWENHYWFAR_VERSION_BUILD=xyz). Please update this number after a change (and just before committing your changes).. This has to do with the latency of the CVS server: Public CVS lags some hours behind developer CVS, because public access is served from the CVS backup. The BUILD version number allows to identify the version if some user wants to try the current CVS version of this project but only draws an older version because of the latency. 7. Versioning ============= Starting with version 1.0 the following versioning scheme is to be used: - if there are changes to the API which do not make it necessary to change the SO_MAJOR version (no addition to the API etc) then only the patchlevel version is incremented - if there are changes which require the SO_MAJOR version to be incremented then: - if the SO_AGE is also incremented (i.e. there are downward compatible additions to the API) the minor version number is incremented and the patchlevel is reset to 0. - if the SO_AGE is reset to 0 (i.e. the new API is not compatible to the old one) the major version is incremented and the other version parts are reset to 0. Starting with version 1.4.2 the version numbers of released packages always use three digits. Examples: - version 1.2.1 has the same SO_MAJOR as 1.2.2, so 1.2.2 can completely replace 1.2.1 and vice versa without any problems - version 1.3.0 is downward compatible to 1.2 - version 1.4.0 as well - version 2.0.0 is incompatible with 1.x 8. CVS Usage ============ Please make sure that a commit to CVS does not make the CVS repository unusable, so before committing: - check whether your local version compiles correctly - check whether the library/executable created actually DOES work This is necessary because the CVS version is actually used by testers and the developers. So rendering the CVS version unusable would be disastrous... 9. Documentation ================ Every exported function and type should be documented inside a header file. This project uses doxygen for this purpose. Well, not every function is documented right now, but I am working on that ;-) Martin Preuss, Hamburg/Germany, Feb 27 2006 gwenhywfar-5.12.0/doc/inherit/0000775000175000017500000000000014730345123013174 500000000000000gwenhywfar-5.12.0/doc/inherit/baseclass_p.h0000644000175000017500000000100313142134462015532 00000000000000 #ifndef GWEN_EXAMPLE_INHERIT_BASECLASS_P_H #define GWEN_EXAMPLE_INHERIT_BASECLASS_P_H #include "baseclass.h" struct BASECLASS { /* the following line creates the necessary structs which are needed by * GWEN's inheritance code. They are later initialized by invocation of * GWEN_INHERIT_INIT from the constructor of this struct. */ GWEN_INHERIT_ELEMENT(BASECLASS) /* the rest are private elements defined by the developer */ int someMember; }; #endif /* GWEN_EXAMPLE_INHERIT_BASECLASS_P_H */ gwenhywfar-5.12.0/doc/inherit/baseclass.h0000644000175000017500000000075613142134462015231 00000000000000 #ifndef GWEN_EXAMPLE_INHERIT_BASECLASS_H #define GWEN_EXAMPLE_INHERIT_BASECLASS_H #include typedef struct BASECLASS BASECLASS; /* this macro defines some internal inheritance functions which are needed * by GWEN's inheritance code. Please consider this macro a black box, don't * rely on its members! */ GWEN_INHERIT_FUNCTION_DEFS(BASECLASS) BASECLASS *BaseClass_new(); void BaseClass_free(BASECLASS *baseClass); #endif /* GWEN_EXAMPLE_INHERIT_BASECLASS_H */ gwenhywfar-5.12.0/doc/inherit/derivedclass.c0000644000175000017500000000364513606371341015740 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include "derivedclass_p.h" /* this macro announces to the inheritance code that we are about to * extend BASECLASS with DERIVEDCLASS. Please consider this macro a black box, * don't rely on the implementation of this macro! */ GWEN_INHERIT(BASECLASS, DERIVEDCLASS) BASECLASS *DerivedClass_new(const char *data) { BASECLASS *baseClass; DERIVEDCLASS *derivedClass; /* first create the base class by calling its constructor. This also sets * up the inheritance data stored with the base object */ baseClass=BaseClass_new(); /* create our private data which is to be assigned to the base object * in the next step */ GWEN_NEW_OBJECT(DERIVEDCLASS, derivedClass) derivedClass->testData=strdup(data); /* now link our private data to the base object. This makes also sure that * out provided cleanup function "DerivedClass_FreeData()" is called as * soon as the destructor of the base object is called. */ GWEN_INHERIT_SETDATA(BASECLASS, DERIVEDCLASS, baseClass, derivedClass, DerivedClass_FreeData); /* return the pointer to the created base class */ return baseClass; } /* the first pointer is a pointer to the base class (in our case BASECLASS) * the second is a pointer to the private data (here DERIVEDCLASS). * When this function is called the base object still exists. */ void GWENHYWFAR_CB DerivedClass_FreeData(GWEN_UNUSED void *bp, void *p) { DERIVEDCLASS *derivedClass; derivedClass=(DERIVEDCLASS *) p; free(derivedClass->testData); GWEN_FREE_OBJECT(derivedClass); } const char *DerivedClass_GetTestData(const BASECLASS *baseClass) { DERIVEDCLASS *derivedClass; assert(baseClass); /* get the pointer to our private data which we assigned via * "GWEN_INHERIT_SETDATA" */ derivedClass=GWEN_INHERIT_GETDATA(BASECLASS, DERIVEDCLASS, baseClass); assert(derivedClass); return derivedClass->testData; } gwenhywfar-5.12.0/doc/inherit/testinherit.c0000644000175000017500000000065313606371362015631 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include "derivedclass.h" #include int main(GWEN_UNUSED int argc, GWEN_UNUSED char *argv[]) { BASECLASS *object = DerivedClass_new("some data"); assert(object); printf("DerivedClass_new: Test object created with data \"%s\"\n", DerivedClass_GetTestData(object)); BaseClass_free(object); printf("BaseClass_free: Object freed.\n"); return 0; } gwenhywfar-5.12.0/doc/inherit/baseclass.c0000644000175000017500000000205313142134474015217 00000000000000 #ifdef HAVE_CONFIG_H # include #endif #include "baseclass_p.h" /* This implements the inherit functions which are specific to this * module. */ GWEN_INHERIT_FUNCTIONS(BASECLASS) BASECLASS *BaseClass_new() { BASECLASS *baseClass; /* this macro simply allocates memory for a BASECLASS object and * presets the memory area with zeroes */ GWEN_NEW_OBJECT(BASECLASS, baseClass) /* this macro allows GWEN to initialize the inheritance data defined * in baseclass_p.h within the struct definition (GWEN_INHERIT_ELEMENT) */ GWEN_INHERIT_INIT(BASECLASS, baseClass) /* the rest is specific to our example module */ baseClass->someMember=12345; return baseClass; } void BaseClass_free(BASECLASS *baseClass) { if (baseClass) { /* this macro calls the cleanup functions of all registered private * data pointers (if any) */ GWEN_INHERIT_FINI(BASECLASS, baseClass) /* this macro simply calls free() for now, maybe later we can do some * memory leak checking with it */ GWEN_FREE_OBJECT(baseClass); } } gwenhywfar-5.12.0/doc/inherit/Makefile.am0000666000175000017500000000073213545472064015164 00000000000000AM_CPPFLAGS= -I$(gwenhywfar_symlinkdir) $(GPG_ERROR_CFLAGS) EXTRA_DIST=README noinst_LTLIBRARIES=libinherit.la libinherit_la_SOURCES=baseclass.c derivedclass.c noinst_HEADERS=baseclass.h baseclass_p.h derivedclass.h derivedclass_p.h libinherit_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la noinst_PROGRAMS = testinherit testinherit_SOURCES = testinherit.c testinherit_LDADD = libinherit.la $(top_builddir)/src/libgwenhywfar.la \ $(GPG_ERROR_LIBS) TESTS = testinherit gwenhywfar-5.12.0/doc/inherit/derivedclass.h0000644000175000017500000000200413142134462015725 00000000000000 #ifndef GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_H #define GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_H #include "baseclass.h" /* constructor of the derived class. Please note that a pointer to the * underlying base class is returned, not to the derived class! * Functions of the derived class can get their private data (in this case * DERIVEDCLASS*) via GWEN_INHERIT_GETDATA (see "derivedclass.c"). * Please note also that there is no destructor: This constructor registers * a callback function which does a cleanup of the DERIVEDCLASS data when * the destructor of the base class (in our example "BaseClass_free()") is * called. */ BASECLASS *DerivedClass_new(const char *data); /* This is a function of the derived class. It can only operate on BASECLASS * object which have been created by "DerivedClass_new()" because only then * a private pointer to DERIVEDCLASS is registered with the base object. */ const char *DerivedClass_GetTestData(const BASECLASS *baseClass); #endif /* GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_H */ gwenhywfar-5.12.0/doc/inherit/README0000644000175000017500000000567113142134462014001 00000000000000 This folder contains an example of how to use GWEN's inheritance functions. The Problem =========== GWEN follows the object oriented pragma as far as possible. There are structs on which groups of functions operate. The module defined in "src/sio/syncio*.{c,h}" consists of a struct and functions which create a network connection. However, this module is very basic, i.e. it only knows how to deal with network connections in general, but it doesn't have a clue about special protocols like HTTP, HBCI etc. These protocols are implemented by extending the base module via GWEN's inherit module. Traditional Approach ==================== The easiest and therefore traditional way is to define a private pointer to user data stored within the struct and get this pointer by setter and getter functions, as in: myData=GetPrivateData(BASECLASS *baseClass); This approach only works if there is only one module extending an existing one. If there are multiple modules which extend a base module then each extending code has to know about the other module. This is not always possible with base modules, because in many cases we don't know how many other modules will extend a base module. Things get even more complicated if the private data is to be freed by using callbacks. GWEN's Approach =============== Inheritance in GWEN is established by assigning private data to an already existing struct (like in the traditional approach). However, GWEN stores the type of the data pointer along with the data itself. It also stores an optional pointer to a function which frees this private data. So inheritance data in GWEN consists of these elements: - pointer to private data - type of that pointer - optional pointer to a cleanup function GWEN keeps a list of those triplets with every element that is prepared for inheritance (see example definition in "baseclass_p.h"). For every module which wants to extend an existing object (and therefore needs to assign private data to that base object) one of those triplets is stored in the object's internal list. If the cleanup function of the base object is called (in our example this is BaseClass_free()) then all registered cleanup functions are called in reversed order. This has certain advantages: 1) we always use the pointer to the base module. Every module that extends another one also has access to the base module and may call the functions of that base module. 2) the caller of the base modules cleanup function (as well as that function itself) doesn't have to know how many private data pointers are stored with the object to be cleaned up, nor how to cleanup these pointers. This is all done transparently. This folder contains an example of how inheritance works practically. The files "baseclass*.{,c,h}" contain the declaration and implementation of a fictional base class, "derivedclass*.{c,h}" implements a module which extends the module "BaseClass". Hamburg, Germany, 2005/10/25 gwenhywfar-5.12.0/doc/inherit/Makefile.in0000664000175000017500000011520614730344661015174 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@ noinst_PROGRAMS = testinherit$(EXEEXT) TESTS = testinherit$(EXEEXT) subdir = doc/inherit ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) LTLIBRARIES = $(noinst_LTLIBRARIES) libinherit_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_libinherit_la_OBJECTS = baseclass.lo derivedclass.lo libinherit_la_OBJECTS = $(am_libinherit_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_testinherit_OBJECTS = testinherit.$(OBJEXT) testinherit_OBJECTS = $(am_testinherit_OBJECTS) am__DEPENDENCIES_1 = testinherit_DEPENDENCIES = libinherit.la \ $(top_builddir)/src/libgwenhywfar.la $(am__DEPENDENCIES_1) 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/baseclass.Plo \ ./$(DEPDIR)/derivedclass.Plo ./$(DEPDIR)/testinherit.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(libinherit_la_SOURCES) $(testinherit_SOURCES) DIST_SOURCES = $(libinherit_la_SOURCES) $(testinherit_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp \ $(top_srcdir)/test-driver README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ AM_CPPFLAGS = -I$(gwenhywfar_symlinkdir) $(GPG_ERROR_CFLAGS) EXTRA_DIST = README noinst_LTLIBRARIES = libinherit.la libinherit_la_SOURCES = baseclass.c derivedclass.c noinst_HEADERS = baseclass.h baseclass_p.h derivedclass.h derivedclass_p.h libinherit_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la testinherit_SOURCES = testinherit.c testinherit_LDADD = libinherit.la $(top_builddir)/src/libgwenhywfar.la \ $(GPG_ERROR_LIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(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) --gnu doc/inherit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/inherit/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): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libinherit.la: $(libinherit_la_OBJECTS) $(libinherit_la_DEPENDENCIES) $(EXTRA_libinherit_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libinherit_la_OBJECTS) $(libinherit_la_LIBADD) $(LIBS) testinherit$(EXEEXT): $(testinherit_OBJECTS) $(testinherit_DEPENDENCIES) $(EXTRA_testinherit_DEPENDENCIES) @rm -f testinherit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(testinherit_OBJECTS) $(testinherit_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/baseclass.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/derivedclass.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testinherit.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? testinherit.log: testinherit$(EXEEXT) @p='testinherit$(EXEEXT)'; \ b='testinherit'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) 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 $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) $(LTLIBRARIES) $(HEADERS) 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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 clean-libtool clean-noinstLTLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/baseclass.Plo -rm -f ./$(DEPDIR)/derivedclass.Plo -rm -f ./$(DEPDIR)/testinherit.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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 ./$(DEPDIR)/baseclass.Plo -rm -f ./$(DEPDIR)/derivedclass.Plo -rm -f ./$(DEPDIR)/testinherit.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-TESTS \ check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool 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 maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck 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: gwenhywfar-5.12.0/doc/inherit/derivedclass_p.h0000644000175000017500000000072613142134462016255 00000000000000 #ifndef GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_P_H #define GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_P_H #include "derivedclass.h" typedef struct DERIVEDCLASS DERIVEDCLASS; struct DERIVEDCLASS { /* this struct only contains private data for the derived class. * The inheritance administration data is only needed in the base class. */ char *testData; }; void GWENHYWFAR_CB DerivedClass_FreeData(void *bp, void *p); #endif /* GWEN_EXAMPLE_INHERIT_DERIVEDCLASS_P_H */ gwenhywfar-5.12.0/doc/dialog/0000775000175000017500000000000014730345123012771 500000000000000gwenhywfar-5.12.0/doc/dialog/testdialog_p.h0000644000175000017500000000152513142134474015542 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /** @file dialog/testdialog_p.h * This is the private header file for the dialog only to be used by * testdialog.c. */ #ifndef TESTDIALOG_P_H #define TESTDIALOG_P_H #include "testdialog.h" static int GWENHYWFAR_CB TestDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender); #endif gwenhywfar-5.12.0/doc/dialog/images/0000775000175000017500000000000014730345123014236 500000000000000gwenhywfar-5.12.0/doc/dialog/images/qt4-1.jpg0000644000175000017500000012117213142134462015526 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀ£†"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ú/GÑíæµÎMÃåg =MdxÏTðï†Ú)ôÑ{¨^1KKVÝ,Äu<Gv$]…ÿ {s²?¹ýï­|ßñ›[ÕtÿŒº¬Ð¸ŒÃkíŒíŒ s·êå«êrŒñøÇAJÉ_Ëc‚N1‚m£?ˆ¦Óáûf³ðýa±2Ig~·2Ä=Z<.@ï´±ö5ÙéÞÕôË}KMŽÂêÒáÅ*JpÃúcȯ–|IüZ‹0ô(¸þUé?²®§w=¿‰4ÙZÚÞé&ˆ@F6åƒåõêçy \º‚ªçÖÚ7ú“ BNÉÑý‹¦Ï•§ýü£ûLÿŸ+Oûù\'í«êz'Ã;CI¹k+¥¿±ŒM ႽÔJÃèT~µÎü1ñÿ‹žÏÅ×¾*´‹Z‹Lñ ÞŸ ¾MuÉ„ª®è”tsóõòn¬ÓµßÞl¡^Ç®ÿbéŸóåiÿ(þÅÓ?çÊÓþþW€j:×âf¡ho5$´“Å:u­½±ŸÊò#“OiYH9†JñÏ~+Ã?|s‹8dþ˻ԯ¼/¨j6Z—Úškˆ¤µÉw mÉ\ìÊqœO·—v?f»LbéŸóåiÿ(þÅÓ?çÊÓþþW‡Ü|\ñ†™¡xJÃû LÖµÝcImA¥¶3Iˆˆ„.ØÓ"V-ó`OqZúÅr×YÐëÃi&¥odó]Þ åË;a¡-‘/1# æŸ¶—ó1{5ØõŸì]3þ|­?ïåغgüùZßÊó_>%ñ‡ˆn|Y‰çÑ®#ÓµëË(DD±yr@1÷Y¾cÞ½C?ôÎ/ûèÕ*“j÷bqŠèCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾>y÷x­Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ+Ÿñö‰¥_Å¥ÚèÉ©ê“&ôµ·¸7»„_¯'°5Ógþ™Åÿ}ð{Ý_Rµñ—ˆæI<¹Þýã-Œˆv í·ÃÆÔÃSRMê{Ü?“Ã4Ä:nÚ+úž…s¬[éaeñ„#±²$º·ºûJEîàÀ{€k«IÑ&¶Yâµ²’)rÓô–KÉîÖ]£¹P¤œþê+Ò|)áÛ? x^ Ì,‹³I+ŸšY–sîMtTVxuOðDßÄãÚu§{1ñpb+!²1ó·ñ{QV¾9ô»q¹~÷Ls÷Eõ”êsSŒ»£ÆjÍ£Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|Î'øÒõ;(ÿ W1uâ-sÏcaáiî-O1M$®†EìÛDm€zŽzœ1‹–Ź(îtôW'ÿ ‰ÿèOoü “ÿŒÑÿ ‰ÿèOoü “ÿŒÕû)í"u”W'ÿ ‰ÿèOoü “ÿŒÑÿ ‰ÿèOoü “ÿŒÑì¤Ò'YErð‘xŸþ„öÿÀ™?øÍð‘xŸþ„öÿÀ™?øÍÊAí"u”W'ÿ ‰ÿèOoü “ÿŒÑÿ ‰ÿèOoü “ÿŒÑì¤Ò'YErð‘xŸþ„öÿÀ™?øÍMeâ=P]Fš·‡n, ‘‚,±´“äáWo–¤äð1“’8ÆHNœ’¸*‘gMEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ* -QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"_ÄÙ o¨HÊvº%„Ìñœ‡P™\‚È"€-ÑU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµET7ñ. ¶ú„ H]óØMN,ÈÉ y$ô¿nôÖ?ðUsÿÄPª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿGÛ‡ýõü\ÿñjŠ«öáÿ@ýcÿW?üEnôÖ?ðUsÿÄPª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄR}¾-ÛßPI,±½„Ë#Œ•R™ldgã#8  tU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QUüD”ú•pL_`›Íç ³fí¼»È#9¥ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµE6#š$–'Y#pYNCЃéN Š( Š( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐQ¥¶4}8Ó¿þŠZ*=9±¤éÃþœmÿôR×9¡ãzçÃÞþⱆþéï-,á‚kƒ3Ü\Ç–pŽT(' zt¬æñUÞ‘¾_6‘£y:}î¡%½œ³ßn¶·ò7Ì%1G·g˜AËbÛ©ùXTß4øJ|24fŠÒh_P±žâ+¥Ý°Ãw Ò¡!·$l#Ms.økk5õ—„tÝDµ¹ðÞ±¦`€[¡¹¼¡$+c[Í×îàÀΕþ!ø]m`¸óõ'[—t·Hô‹·’pKIkgˆOÞ¨)󚙥xûMÔ¼w?…­­uÛ§ÚÞÁz¶7 DÂfÁ“ËòÑBĤ9|33 ù‘…Vø‘áëým,$Òìl&¸µ*K&§q§Íý¿4s@±òüÈF ÈÇ-ðþ‰âM+ÅvÚÍÍŽ©·e§jwRJÑMç[†óR0…\HÓò &Üdné@*ñ¹câ]/AÐ4]?Q¹¾³º¼v½Ô^Ñ#HÝa”³p;6žj•—ĽèðÞjI{gt|áui¤×jbšHd.aF ™€;`¤ö8w‹|"ž#ñ†©ÝÜÝEca§ÞÛºÙêWs4“IjÉóBÊY1 ™±’¼£Äþ ÖMÕŸ†¤Š !ošëwšwÙ¥ÞìÓmó\ ¹WuåIÎXšëu¯økGû/Û5oµAö˜Íµ´·AÇï˜Ä­²>GÎØ_z‚ïâ…-tÍ7Q}Fi-õ+5¾¶0YO3›fPÂgDBѦeœ(ñ^{uÿÃ=C–ãWðÚ]7†-4[¡¨\K-°ð313?îˆFp`áºOÃÝløsÂwðÆí{…¬4«Û'ׯt¯-¡BwoµÎò Ž ºö#œ€{E½Ä76ñÜ[Ê’Ã*ŽDl«)ÔY>0oø–ÛŸKëoýµ'†lFðæ™¤GQ¥œVÊ‘(¡( \–#Ž7}I5WÆ-ÿ¨O¥å¹ÿÈ«LE6²üIâ}ÚÞImî®ç»œ[ÚÚÚ ig”«>ÕÜB•‰b y©|ïzÀñݺ_èÑÄú늓¬†®„G€q$NJáÁÀûÉÁ<ö Ú/ˆšú§¿Ñõ- Ú¨yF ±…Úrw #wŒ´ç ‘Æq‘V4Ïhšž›&¥¦ë:uíŒ[„—6÷)$I´e²ÊHyâ¼¾çÃÞ&Õ¼'â 21ªéÖwÑôû=OQK»•h¥ó&F3(YQ»HÜHÁÅ2 ëwº7ˆ&šÛX’öõ¬ÉÖf±j[i¼Æ‹m¢UuýÙf$@ äéðø§ÃÓh²kpëÚ\šTd‡½K¸Ì ƒƒ™Ú9÷¢Oxz=* VM{KM>à‘Ó]Æ!”…f;_88TsÁè¤ö5Åë‘jº­†™ªÅáI-åÓõ…½—K–x<Û´X Ä«˜÷©ueÿå’ò: ûjWZ–›¨Þè±ÛA'ŠäÕä±y#±ÅýŸ,*Í‚T¹›k…°Òg'У'‰´Ðκšæ˜ÚJŒ›áv†Ü ã>fvõã­PðoŠÄ7~ 6÷W66Š[YÏjûÖXÚÒÞmÅ!Žéœd``ù'‹Ô´ZKQÔ­´•¼‚Å«Cb²Æ¦îìø¡b»ˆPÂbòårÑç# Ö¿ÃK=BÊoÞj(ц§­È-¼ØÜì6ÖèY¼²@bñ¹#=sÉ$õ¯Ä+i¯Ë kVº{jriqêr¬ÝçIÚßIZE *•HéšÞ°ñ.ƒ¨jsévæ™wmŸ>Ö ¤ybÁÁÜ€åyã‘\'…üwµä×u}TÀší¾l ¾–h)˜ÝRM­!Ã@ƆtoøR}JÆöÞÛK¸›íq¯ö|v0£ZÌ€[,+ç÷”vî’§PV·ñO‡n5VÒ`×ô©uÄÖ‰yL+1R€îݵXã“ØÔ¶~"ÑouK*ÏXÓ®u a›‹X®Q拜|ÈWñãº]Ùk¿4 æÑï.¢“RKˆd;,î#’DÅÀg*_x\9QÉæ­ü>𞽤êú ¾ªuÙÓE3báåÓÖÎBñ:_.1rÛ‹*äsÉf*2ìþmP‚_ø¨oý:Aÿ¡ÍGïT¡—þ'—G?òíþ…-7<Úä5^Ùø‰t%ð/‰nneŽy­Ú)lO/<ŠZä3,x ¾nœtw½`_Z]ËñGÕ’,ÙÛi7öòɸ|²K5›"ã99HrÞzŒ€?Â9Ó5V’ÂÿVÒ Ö?´oí¢±[…Yž8.æ…FX±%#‘ÆrFüÞ.Ðì,þÑ­kšž¦[…V}E6Šo-ŽæÛó)(ÛnNéZá$ò£“P[V”„•Y7¼lNÚØÆEdÙøsSµñd7[JÖ0ø¡oVYn|Ç6ÃCû ‘™˜»7å;²ÇïŽj tM^ïÂWþºÐäd_Ç~$’XZ»i5µ9Q¼·Ë;•Õrx]Ô ô_ÑõËg¹Ñuk N}%¥ÂLªÞ„© jçµ_ˆVÚn¡«Å6­I§èÓ,:†§ÀÖð s+æù¥U%BHŒÏ¥e…ůÄkTë•Þ™aH¥Fù£’ë~@ç!^Hä` àãø:ïU×|XÚ®¯ªÛhú¦£ÿgÀðo!vѱvòÌ ШuÈ^˜9 ßü$ºößööæ™ý«Œý‡íIçãÏ—Ý9éL¹ñO‡mµ_ì›J‡QʲIyÍ—`¨6»æfP8äZògFñ­Þ½ic{¤>$‚ùVÛû>;n.ÕÚNTÜ™Œ{‹ò¹%ðX­ˆÒîÀâM¡ÃpÒxÚÖù51q ÿY|“…Ù»ÍóV&Ù¸ò×;±Å{ñŠºØÐα§ T®ñdnSÏ+ŒçËÎìcœâ´<Úñˆ|'¯Eâ‰"¹:íÅ“ø‡û]%‚]=-óüÕÞZ?µnUù ‚C€Ê§Ö<ïzËÿ ™ÿ§Iÿô8jÿ›XsKÿËSŸùv›ÿBŠ®ùÞôŸ®x±tý[û&ËEÕ5«õne‚ÄD<˜™™U™¥‘æ(àI;O,&·qg-ו¦E<Èñj.Q’HãÀŒŒ2åð\6hñ¸8#–ñ݈ºÕ ºÿ„OVÔ¤X<´¾Ò5U³¹æ$£,D§B>f䟔w̃KñJÿdÝêšjë3Á¢j–sC=Äd1žæÔÁ ¬p÷QîcIƒ;xÛÃÞµ†}wTµ´ó®!KˆÑÏ™*Ç¿Ãä]ŘöUcÚ³ßâ‹m⛫=G\Ñ-4“¥Ø^ØÝËvˆ.âK v¹m®»aŒ®ßï“‘Ž"ßÂ>!Ñ|?w¦ùo¯Üý³LÔ÷ÎU–ams kû×à(¼²Nߘî!²ÏÖiúcÞxëR×õ Eæƒch‚ãËy„·O4-µ˜p$‹8%Obq@WˆµÛ]ÃzŽ¿t$–ÓO³–òQ ì‘¡s·$HdïYzg šþ[ cIÔ|;s«]…Ôš 2«¸’)]0¥“ °#pãšæEÖ_ö|>{bÚÓxSû<Àe\›²y{7çoßã9Ç|â“Ä^Ô¢Ó/5]NûÄšàŠ8m›SKR"‹ÏŽIH±Ç™ûµe.Ή“@Þ™âMSÓeÔôÝkM½±‡w›sot’D›FN]I““LÒüQáíVÞk/^Òï¡‚1,Ò[]Ç"Æ„° ÅIe“ÇÊÞ†¼Š=Å3Ûø²÷T†ôÃs—Ì¢4 S-»†l +o,µk>;‚ÏJmê{šhIZç‘–B¾dA™6®xÚÈX`â€=›E×tnÐÞhÚ¥Ž¥l¡šÒáeMèܤŒûUß6¼ïá¾›¨ÙêZ¾©©Ç®¤÷©o:¤–%ÛËó9 h¡æ%ˆ`í|ïz\ðÉΖÇÖîçÿGÉZu•áS>·7?ú=ëV€ (¢€ (¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU¬:VœGCcoÿ¢’¬ÕM7þ@úoýx[蔬 òhÉ¢Š2hÉ¢Š2hÉ¢Š2hÉ¢Š2j†½e6¡b¶ð¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅÌZx6ÞÓT¸Õ-lü;ýÈÄ÷Q#¬²öœC–éÜÕÿì}Cþ~tÏûû/ÿ­Š(ý¨ÏΙÿeÿãU h‚ÞËsöÍ3÷‘¢mó%ãicŸõ_í~•½E1ÿ±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ­Š(ûPÿŸ3þþËÿƨþÇÔ?ççLÿ¿²ÿñªØ¢€1ÿ±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ­Š(ûPÿŸ3þþËÿƪ¦¯á4Ö,Í–­¨Z’ÃtT$t;Z"3] Ä·Ðn­àŽ y4ˆaB$hòªªŽE€)ÿØú‡üüéŸ÷ö_þ5[P#÷@Ô.l§¶ûf˜¾ll›¼ÉN21ŸõU7ö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅÌ_x6ÞÿP¶Ô/¬ü;uyjsoq2;É Î~F0å ¿ý¨ÏΙÿeÿãU±Ecÿcêóó¦ßÙøÕCq jËo'Û4ÁäÈ_d¼üŒ¸ÿUþ×é[ÔP?ö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±Ecÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5[P?ö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±Ecÿcêóó¦ßÙøÕPoÛ¶²ºÓYøtêj›ð£ùáqŒoòwc³]= ÇþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¶( F èƒ^ÅsöÍ3÷qºmó%çqSŸõ_ìþµ7ö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@²èw’ÄñK6•$n¥YZIH`z‚<®ETÑü#hm4{oéÖå‹ùVªñ&ãÔíX@Ͻt´P?ö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±EPÒlõ>È[ҥĒ>ï´Ì¿}Ù±$ôÝ­ÄËûºWþÍÿÆjZ(/ø™wJÿÀ¹¿øÍG%ÕÜv°ÜEdVâChnŠŒÜ†xùqÖ¬ÕCþB:Wý|·þ‰’€4¨¢Šò/ŽGý.Ün_½ÓýÑEú]¸Ü¿{¦9û¢ŠúªÁ‡¢8%ñ3Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|æ'øÒõ:èÿ TÓä¦ÿ×…·þ‰J·U4ßùé¿õámÿ¢R°4'®sÅZÆ©­¦èV‡SÔ#šq5Øf†Þ|°îUH.wK…~ñ9祅S˸slÀÄ¡™™œg§AÓÒ¹ÿè7¥Õާ¦jGLÕ¬<ÁopaFÉ ]ñÈ™íCÃ)Ê)ÔŸ‡Ç#HÓµ‰õkCñšeݵ¤Ñøy?Ò"–iü°4®P‡#øòpÿ.Wý÷Ž>Èb¼+âoþÌnîlaKy&´ƒ{*É!l;¶1UFf — Z_jWóÝßëZý½Æ£s>”Ìöºy‚ŽÆðÝ*i]²ÅÝK8È qƒ{Ä~ÕîµÙu¯ø‚-"êêÉ,nÌÖ?i3´lƒzl‘L²`ÃæåN) ÑÑ|I¦k“Ùiï$ÁtëMI'yrCrÓÊœç?¸brzóŽr/‰¶Kftßx‹R7:-®¶E´“ µÆý»·J>q圢î'øw`âTð=ö•qhþ×ÓJŠ-"ÛH•.,¾Ò͹“Êd;Ô$ƒÍ“’NFWŠçô?x£IñÒ´O {é:S^Í¥™cºhžíYyŠE[œ(ܧ Ч鷶º–m¨ØÌ³ÚÝB“A"ôt`X}A°< ©ëw·!Óõéôû›'T[EžÊÕíÒDkKyÁ(òHAr>÷8 ÙÐ4»]BÓô[ÂÖÂÖ;X‘¨UÉõÀƒà¿ø“GÖõ›ý_^Òuµkw,VºL–Ì“a„Íq'ɲ•#;˜Àq@޲Šr¸v÷xæFi|ÅÿŸ{Oüÿ‰¦(§ù‹ÿ>öŸø ÿG˜¿óïiÿ€Ñÿñ4Ê)þbÿϽ§þGÿÄÑæ/üûÚà4üM2Š˜¿óïiÿ€Ñÿñ4y‹ÿ>öŸø ÿ@ ¢Ÿæ/üûÚà4üMbÿϽ§þGÿÄÐ(§ù‹ÿ>öŸø ÿG˜¿óïiÿ€Ñÿñ4Ê)þbÿϽ§þGÿÄÑæ/üûÚà4üM2Š˜¿óïiÿ€Ñÿñ4y‹ÿ>öŸø ÿ@ ¢Ÿæ/üûÚà4üMbÿϽ§þGÿÄÐ(§ù‹ÿ>öŸø ÿG˜¿óïiÿ€Ñÿñ4Ê)þbÿϽ§þGÿÄÑæ/üûÚà4üM2Š˜¿óïiÿ€Ñÿñ4y‹ÿ>öŸø ÿ@ ¢Ÿæ/üûÚà4üMbÿϽ§þGÿÄÐ(§ù‹ÿ>öŸø ÿG˜¿óïiÿ€Ñÿñ4Ê)þbÿϽ§þGÿÄÑæ/üûÚà4üM2Š˜¿óïiÿ€Ñÿñ4y‹ÿ>öŸø ÿ@ ¢Ÿæ/üûÚà4üMbÿϽ§þGÿÄÐ(§ù‹ÿ>öŸø ÿG˜¿óïiÿ€Ñÿñ4Ê)þbÿϽ§þGÿÄÑæ/üûÚà4üM2Š˜¿óïiÿ€Ñÿñ4y‹ÿ>öŸø ÿ@ ¢Ÿæ/üûÚà4üMbÿϽ§þGÿÄÐ(§ù‹ÿ>öŸø ÿG˜¿óïiÿ€Ñÿñ4Ê)þbÿϽ§þGÿÄÑæ/üûÚà4üM2Š˜¿óïiÿ€Ñÿñ4y‹ÿ>öŸø ÿ@ ¢Ÿæ/üûÚà4üMbÿϽ§þGÿÄÐ(§ù‹ÿ>öŸø ÿG˜¿óïiÿ€Ñÿñ4Ê)þbÿϽ§þGÿÄÑæ/üûÚà4üM2Š˜¿óïiÿ€Ñÿñ4y‹ÿ>öŸø ÿ@ ¢Ÿæ/üûÚà4üMbÿϽ§þGÿÄÐ(§ù‹ÿ>öŸø ÿG˜¿óïiÿ€Ñÿñ4Ê)þbÿϽ§þGÿÄÑæ/üûÚà4üM2Š˜¿óïiÿ€Ñÿñ4y‹ÿ>öŸø ÿ@ ª:‡ü„t¯úùoý%h¿6Öç|¯À÷¯Øt¬íCþB:Wý|·þ‰’€4¨¢Šò/ŽGý.Ün_½ÓýÑEú]¸Ü¿{¦9û¢ŠúªÁ‡¢8%ñ3Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|æ'øÒõ:èÿ TÓä¦ÿ×…·þ‰J·U4ßùé¿õámÿ¢R°4-Eþ¢çýè¿””Ê|_ê.Þ‹ùIL Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ·üzÛºÿú5ë;PÿŽ•ÿ_-ÿ¢d­ÿ[o÷_ÿF½gjòÒ¿ëå¿ôL”¥EP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh*¦›ÿ }7þ¼-¿ôJUº©¦ÿÈMÿ¯ oý•¡j/õ?ïEü¤¦SâÿQsþô_ÊJeQU4mJËXÑìµ}6o>ÊúÞ;›iv•ߨel0dp@4nŠ( Š©¥e.±s¤G6om­â¹š-§åŽV‘clã&ÈÛÎ23SÅ~"Òü/£É«ë-w”Y2Ëoe5Ï”¡Kq1TI,@QÜò(Z³oµÍ>Îå­¤7RȘÞ-í%˜!#8bŠ@8 àó‚qZU‰iª_èÿÚïNŸÈšO[Z³lVÌSëÃ*á4r:ç¨ÎFšµ®Áöÿ &›ÿ›ÿ^ßú%*ÝTÓä¦ÿ×…·þ‰JÀеú‹Ÿ÷¢þRS)ñ¨¹ÿz/å%2€ ñŸ‡~±Õ“KOxi§ŽßÀÚ¢%õ³Žuû_š 0À•2™þ$Ü:nçÙ¨ Ÿl-tëRÃþ ëZÝøðŒ®‹§Ëq,7E®÷P ŠbÀâFÛ´†Ë.yìô+gÂÚÜ~#Ó5JòóÂÚ]¤“XÙÉt$½·k“2» !2gRÊ©çž+Ñ"Ól¢Ö.uxáÅíͼVÓK¸üÑÄÒ4kŒà`Í!È;¹Î-Òã?ü9c¤x‡Ã·º·„Þ RiAzúC‚ênád”'î_Ë0¡ÞT° œà í>5ÎÉð¯Ä–qYê—:†—uek •Œ×.òÉX•Š‚xÜØQ‘’2+²¢€*i„®ý¬wqÅ.v­Õ¤¶ÒŒc•UבÆ@ÈÁkûþIzÿØ÷§ÿéúÞºzñ¸ðÂxzoø§XM*hõåÕQ?•z·PXÈÆ5· †•Ó±-Ùž«Es?ð°<ÿCF—ÿÅð°<ÿCF—ÿÅ.Iv4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5ÌÿÂÀðOý _ýÿÂÀðOý _ýÿrK°sG¹ÓQ\Ïü,ÿÐÑ¥ÿßñGü,ÿÐÑ¥ÿßñG$»4{5r_¿ä]³ÿ°µ—þJŸþ‚èhÒÿïø¬?øBñŸg§hZ­®£t5iÚ;wÜV8åWv8è“ß©¸Å§ª¤š,ÑE†=¿ãÖÛý×ÿѯYÚ‡ü„t¯úùoý%h·üzÛºÿú5ë;PÿŽ•ÿ_-ÿ¢d  *(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÕM7þ@úoýx[蔬 Q¨¹ÿz/å%2Ÿú‹Ÿ÷¢þRS(¢Š(¢Š(¢Š( ’;⊛º.•¬XÜ]ê–1]Î.æŒ<ƒ$"± £Ð?™êM!îÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ£wû_­nÿÂ!áŸúÚßÂ!áŸúÚß\,anÿkõ {æ·áðÏým?ïŠÎñ…¤iZY½Ól"µ¸Yá@ñä­*+ê'¯±ê 袊bßñëmþëÿè׬íCþB:Wý|·þ‰’´[þ=m¿Ýýõ¨ÈGJÿ¯–ÿÑ2P•Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV…¨¿Ô\ÿ½ò’™O‹ýEÏûÑ))”WŒü1%ÕôMEÓ|Us¢ØÙøCºE·´‚Fiå[…$™Q¾\B¹^¼ ç>ÍU,4Í7OÛö >ÒÓm¼v«äB©ˆcÝåÆ0>âîm«Ðn8êiå:G‰üCâk«Y[ÆQøn'ð^›®4QÛ@ÀÍ1¸2¹2«(@À~îyÏIà¿Ýê:£M­ÏŸo'…t½XÛɵJ×_h;8"'¦Nt_À>ŸÄRjWºF“whº}••ŒÚ|m ¶{†V9 ‘8P99ãkWÐ4b{iõmMÔ&µmÖò]Z¤­ õBÀ•<” ó?„M«ë>/¶ñ£â=BIï<¡^\Û­–ÞE¼Ü"Þ|È6°ù¤ ’»U{‰QxQílωtxµÉÙÚ-?MhÄÍs+p±1ÚH ì0ƒ$•5·‡´î´û¸ô=1.4È|‹ VÑÚÇ·nÈŽ2‹´‘…ÀÇÏøgÃ~"ò?á ðþ“«ýŸw‘öë8çò·cvÝàã;W8ëé@ü¤Þh~²Ó/ä<^cYÖyÖfå–5a'’t®ÓáïünëþãÿFçt}3MÑ´è´í#O´Ó¬¢Ï—ok Åd’pª$Ÿ©5Ñ|=ÿ-ÏýÜèÃCttQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@bxßþE×ÿ¯›oýmÖ'ÿä]úù¶ÿÑñЀÁ¢Š*‰ßñëmþëÿè׬íCþB:Wý|·þ‰’´[þ=m¿Ýýõ¨ÈGJÿ¯–ÿÑ2P•Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV…¨¿Ô\ÿ½ò’™O‹ýEÏûÑ))”QEQEQESv.âÊgˆ·-äÝKcŒd„` À8ÏE7iÿŸCÿ7?ür§þ~5üÜÿñÊuݧþ~5üÜÿñÊ6ŸùøÔ?ðcsÿÇ)ÔPvŸùøÔ?ðcsÿÇ(ÚçãPÿÁÏÿ§Q@ ÚçãPÿÁÏÿ£iÿŸCÿ7?ürE7iÿŸCÿ7?ür§þ~5üÜÿñÊuݧþ~5üÜÿñÊ6ŸùøÔ?ðcsÿÇ)ÔPvŸùøÔ?ðcsÿÇ(ÚçãPÿÁÏÿ§Q@ ÚçãPÿÁÏÿ£iÿŸCÿ7?ürE7iÿŸCÿ7?ür§þ~5üÜÿñÊuݧþ~5üÜÿñÊ6ŸùøÔ?ðcsÿÇ)ÔPvŸùøÔ?ðcsÿÇ(ÚçãPÿÁÏÿ§Q@ ÚçãPÿÁÏÿ£iÿŸCÿ7?ürE7iÿŸCÿ7?ür§þ~5üÜÿñÊuݧþ~5üÜÿñÊ6ŸùøÔ?ðcsÿÇ)ÔPvŸùøÔ?ðcsÿÇ(ÚçãPÿÁÏÿ§Q@ ÚçãPÿÁÏÿ£iÿŸCÿ7?ürE7iÿŸCÿ7?ür§þ~5üÜÿñÊuݧþ~5üÜÿñÊ6ŸùøÔ?ðcsÿÇ)ÔPvŸùøÔ?ðcsÿÇ(ÚçãPÿÁÏÿ§Q@ ÚçãPÿÁÏÿ£iÿŸCÿ7?ürE7iÿŸCÿ7?ür§þ~5üÜÿñÊuݧþ~5üÜÿñÊ6ŸùøÔ?ðcsÿÇ)ÔPvŸùøÔ?ðcsÿÇ(ÚçãPÿÁÏÿ§Q@ ÚçãPÿÁÏÿ£iÿŸCÿ7?ürE7iÿŸCÿ7?ür§þ~5üÜÿñÊuݧþ~5üÜÿñÊ6ŸùøÔ?ðcsÿÇ)ÔPvŸùøÔ?ðcsÿÇ(ÚçãPÿÁÏÿ§Q@ ÚçãPÿÁÏÿ£iÿŸCÿ7?ürE7iÿŸCÿ7?ür§þ~5üÜÿñÊuݧþ~5üÜÿñÊ6&àÌg”¯+ç]K(SŒdbÁ#8Ï&EQE=¿ãÖÛý×ÿѯYÚ‡ü„t¯úùoý%h·üzÛºÿú5ë;PÿŽ•ÿ_-ÿ¢d  *(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÕM7þ@úoýx[蔬 q$†)‚"¶öL*/Ýߟ¼Àÿ¤ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š‘qÿ<Óÿ"ÿâ¨ò.?çšàD_üU2Š’U)¼lWr£n á±™ŽA#¡›¨ÈGJÿ¯–ÿÑ2U꣨ÈGJÿ¯–ÿÑ2P•Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV„ꋎGÚb¨HQÏ$Ž r>2{›ÿè^…ÞŸc}ÝÍÌ–²˜¥˜Âa È>dÏšÎJØ‹‚k±‹ýEÏûÑ)++Ä:•¯Ú%®«kç¤R bu‘£’'€èèC#`‘• à‘Þ€<öë\»ðÂkºf…g® JÚïJ޼Cö»y#»¾6Ë,R ¤”Û!ÃFÔ;:ƒ³yªøÜêòx~Âïí¨Xi©ys=”É þl³,QF‚bcÀ…·9gê^p6lüáËX%‰m.'i§¶žY®¯§¸™ÞÞQ,–Gg!n N9<`œÉâ_è#ž9õ[IžT‰¡ßܶìñ1ÉÌl»ÐŸàl¯µ!™Þ ñt¾$Ôø·ŽÞÊ_iš¼*Ùó®šçr±ÎÇ’ÙÎF9¿xÃÇ>%]?û+þ»V“šn·9º·™ƒÏsçî‰q(ÚŸºc¸¯pùã²Ö|á½Zâ îì$W‚ÜZ¨¶º–ÝZr"u‰”Içä`W“Ç&°áXhRø‰åžÕ—HƒB±Ò,`‚þâ)8à¼nQxÊÉÃ3n(w >…¨/‰üaªÀ× «iÑÜ!B<ر†$¹wwÈé\ϢƠjš½÷‡à¶x.徿–î9¯D‹%¥f#b‰í!2Êʶ;;½6ÊëG›H’–RÛµ³E ˜±]¥T¡xà ŽØ¬ x3Cð¹A£Z8£ƒÈŽ õ‹»˜cN0)ed\`@ Á4Ò,S°Ü–×§£$,Àþ Rù?óçwÿ€ïþÊ)ˆ‘sÿ>wøÿáG‘sÿ>wøÿáL¢€ä\ÿÏßþ¿øQä\ÿÏßþ¿øS( ù?óçwÿ€ïþy?óçwÿ€ïþÊ(þEÏüùÝÿà;ÿ…EÏüùÝÿà;ÿ…2Š‘sÿ>wøÿáG‘sÿ>wøÿáL¢€ä\ÿÏßþ¿øQä\ÿÏßþ¿øS( ù?óçwÿ€ïþy?óçwÿ€ïþÊ(þEÏüùÝÿà;ÿ…EÏüùÝÿà;ÿ…2Š‘sÿ>wøÿáG‘sÿ>wøÿáL¢€ä\ÿÏßþ¿øQä\ÿÏßþ¿øS( ù?óçwÿ€ïþy?óçwÿ€ïþÊ(þEÏüùÝÿà;ÿ…EÏüùÝÿà;ÿ…2Š‘sÿ>wøÿáG‘sÿ>wøÿáL¢€ä\ÿÏßþ¿øQä\ÿÏßþ¿øS( ù?óçwÿ€ïþy?óçwÿ€ïþÊ(þEÏüùÝÿà;ÿ…EÏüùÝÿà;ÿ…2Š‘sÿ>wøÿáG‘sÿ>wøÿáL¢€ä\ÿÏßþ¿øQä\ÿÏßþ¿øS( ù?óçwÿ€ïþy?óçwÿ€ïþÊ(þEÏüùÝÿà;ÿ…EÏüùÝÿà;ÿ…2Š‘sÿ>wøÿáG‘sÿ>wøÿáL¢€ä\ÿÏßþ¿øQä\ÿÏßþ¿øS( ù?óçwÿ€ïþy?óçwÿ€ïþÊ(þEÏüùÝÿà;ÿ…EÏüùÝÿà;ÿ…2Š‘sÿ>wøÿáG‘sÿ>wøÿáL¢€ä\ÿÏßþ¿øQä\ÿÏßþ¿øS( ù?óçwÿ€ïþy?óçwÿ€ïþÊ(þEÏüùÝÿà;ÿ…EÏüùÝÿà;ÿ…2Š‘sÿ>wøÿáG‘sÿ>wøÿáL¢€ä\ÿÏßþ¿øQä\ÿÏßþ¿øS( ù?óçwÿ€ïþy?óçwÿ€ïþÊ(J²ª–R»³€FƒÇnAª‡ü„t¯úùoý%h·üzÛºÿú5ë;PÿŽ•ÿ_-ÿ¢d  *(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÕM7þ@úoýx[蔬 Q¨¹ÿz/å%2Ÿú‹Ÿ÷¢þRS(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(íÿ¶ßî¿þzÎÔ?ä#¥×Ëè™+E¿ãÖÛý×ÿѯYÚ‡ü„t¯úùoý%iQEä_ú]¸Ü¿{¦9û¢Š>9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ ©¦ÿÈMÿ¯ oý•nªi¿òÓëÂÛÿD¥`hZ‹ýEÏûÑ))”ø¿Ô\ÿ½ò’™@W ¦üOðܺ&“y¨µÕ­íþk«½•½œ÷m3©!‰Š3•\Àœdd¹¢¹]Wâ„tÛ¤¶¸Ôä’G²Pf³žà}–BÁf-0ü–'Œã#;–z¾›y¨Ë§ÚÝ$×ZÃvÁ+äÌd¸oºC¤èOÝç¨Èê+ð÷Ä=]ñwöo¨K º]ž£k|,.D3%ÂÊã,c ÙÌÃs3 ù‘…møŠó^µû:h:%®¤òn2½ÕÿÙbˆ c$$ŒIÉÀ ŽHã õVÖ¯Õ¦Òí,ÙdhÃÜÝ4lì¬UˆU¸ äƒxÆ ¥àýqaóP2ÏöŠ¿çÏDÿÁ„¿üfìÿÏž‰ÿƒ øÍSÒ~ éš—§ð¥µ¦¢ûtëKè/VÆàÁ(œLØ2y~Z(X”‡/†fd20«º?Ž|5«k'H°Ô[’d3ZÊÎc8q¬¢9J÷ØÍŽôOìÿÏž‰ÿƒ øÍÙþ*ÿŸ=ÿÿñš—Á¾2Ð|abo¼=suwgåÇ"\=ŒðÅ"¸$lyUÈÁ ’§†Á®`øïÅ–^!¿ÓõßxcN³Òìíoõ Áâ9¤ÛÏ$È )³]î>Îÿ!*PÉÀEýŸâ¯ùóÑ?ða/ÿ£û?Å_óç¢àÂ_þ3Iaã¿ ÞZ=Ê_ÏEs´Ëwg5³Ã$ŸêüÄ•‘[ `’<Öo‹>&hº¹¦i_gÔuºÔÆå¬tû›‘lËm$øýÌNþDX;‚¹~ˆÔ§ýŸâ¯ùóÑ?ða/ÿ£û?Å_óç¢àÂ_þ3Z>#Õ#Òôø®e½†Í^öÖÜI,0c-ÄqÚ¤\¸@ݰbk_‰¹Õÿ²áÔ§iþÝ&œd6ºI6„ÌS˹H [-ÁdÇöŠ¿çÏDÿÁ„¿üfìÿÏž‰ÿƒ øÍYñˆ°lmš)5 ëë•´±´Gf™ƒ6 B£»pªp À5­z'þ %ÿã5ü,_®…y­O©Ëkgc<6÷j²ž `y]R0ñ: 1uÃÆs€MU?< Èou!qÝ5©Ñ¯>Ñc>cCåy‹ý4+·Þš?Ùþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ï^|IÒ´¿ßÚê:¬²hï iúˆµ²’ä$·‚YËDŒD{R ³ƒŽ™9è¼A㯠è_gþÐÔ\ý¢rŸe¶–ç ffò•¶GÈùÛ ï@ ýŸâ¯ùóÑ?ða/ÿ£û?Å_óç¢àÂ_þ3QøÇÅÚ-®‘©iº}†§¥Þ_ZZÜN×íÆ·7Á‘(‰ÖQ™wY8^ Ï>úsŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñš?³üUÿ>z'þ %ÿã5Ñï£}sŸÙþ*ÿŸ=ÿÿñšAcâ–zŒB^ÇþXú×I¾™nضO÷¤ÿÑ@ÿöŠ¿çÏDÿÁ„¿üf¢¸Ξ#›U´°Kg‘bßmtÒ2³!£^ drGÉG†þ0ëú§Å‹\ü2ñ}…åÛ†µ6r›¦ååRŸ»…ò“ÊíËà9ò½Æm!ÿOÖ¿ú=(”QE=¿ãÖÛý×ÿѯYÚ‡ü„t¯úùoý%h·üzÛºÿú5ë;PÿŽ•ÿ_-ÿ¢d  *(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÕM7þ@úoýx[蔬 Q¨¹ÿz/å%2Ÿú‹Ÿ÷¢þRS(®á§„5 }“ûBk9|Ÿ é:Cy,Í™­~Ñæ0ÊùÉ´õ89Œ÷Pø[Fñ†â$дˆô«½?Á.Ÿv×sÊ‘‰ïPIXÉu[ä!w9\WG§øSÄžº³>“J½‰t -VÔf’&ì¦]“(Do3>se Nƒæ¯A¢Îáÿ…»i-½…ŒúäPXÝÍ.¹{«È-WÍÞC]ŒnĬ6…‹1~¤ƒÁ:öƒ§èö>:]忇õ—Ô4Øïn¤…åŠ[{ˆ¤Ži7;•®Y„˜bàÜå[çkŸóí¦àlŸüf;\ÿŸm3ÿdÿã4 wŽt«wE·²´’’-WN¼&V l·½†wÉX˜Ù#$Fü"—ü!ؾ}ŸÚá*þÙß½¶y?Û?nÛ¹ßå|¸Æ7qœ|Õ¹çkŸóí¦àlŸüf;\ÿŸm3ÿdÿã49£–EÈä0rµ3ÅÞ%ðÍí–­…¦]¬ö·V mq-Ô~m¼ë8ó]£Œ•fx¹9ÕóµÏùöÓ?ð6Oþ3G®϶™ÿ²ñšåîü%âMfmCUÕÎi¨^^è¤ZÛ\I,1ÛØ^‹–Ì–‘ƒJÈÜêk©²Ò.!ø«ø…Þm{¥XÙF Ÿ0<Ý»’1¤\&9= `e<ísþ}´Ïü “ÿŒÑçkŸóí¦àlŸüfœ7‡<ãÏ .žtŸøFnÚ?éšÀº¹™Okçî•HˆïOß )Ú[¹Ls¥oáxgì?ð‰Ë¤_ìðõ¦‡7ö¤²E°[yž\˱~|×ÝÛœ/Ì+§óµÏùöÓ?ð6Oþ3G®϶™ÿ²ñšsž#ðLj­¾økÂ^ƒJ¿I}4Ëq¨ßÉlH²žÞT$2î/äI#nAùºWye-ËÙ@÷±C ÓF¦há”Ȉøù•\ª–äUIàt¬o;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýôo¬;\ÿŸm3ÿdÿã4yÚçüûiŸø'ÿ  ýô‘¶-¢ÿ¶Ÿú1ëÎ×?çÛLÿÀÙ?øÍ~¹µWìÚ^8ÿM“¹'þxú“@ÎÞø×Åiÿ¶~$ý¯ÀöÛn-ñ§Y­ÕæIż›a6ãç‘q¸Ù´³y^‹âæÎ•ÿ§Û_ý•®϶™ÿ²ñš†êNøÃ ÚYÃL“1†w‘‰F  (Ï<1Î@#FŠ( ·üzÛºÿú5ë;PÿŽ•ÿ_-ÿ¢d­ÿ[o÷_ÿF½gjòÒ¿ëå¿ôL”¥EP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh*¦›ÿ }7þ¼-¿ôJUº©¦ÿÈMÿ¯ oý•¡j/õ?ïEü¤¦SâÿQsþô_ÊJeQ\ÅŸ¼%.…¥ê÷ºî¤Ç©Y[Þáw¬s©h÷)n§ 8$­‚ph§¢²5_økI¸K}WÄ:E„Ò*2Gs{lÁË 1†(àzí8èkE.­žòK4¸…®b%’àº#–Åz€J8¾Öô45Ìi¾=ð–£âæð½ž»§Í¨ýŽ ¸U.âap’¬Ž¢0s‘bCÂId†­o뺑.¥v’ȨU@2M#°T f!FH<9  ¬’j7ÛMÑ/oáF(fŠH‘7†Ìu'‚@#9È Wðίmâ éšõšK¶¥gÜ+(Õ$@ê@8#8'ë[f·kᯆ¯ˆï£šKM)u+ÙÒ Œ‘M3°PH°§ g¸¤2—âú5ü µÿã´y~!ÿ¡SQÿÀ›_þ;[ZWŠ®æû\Úï„u¯ ØZ[=Ì×úµÕ‡ÙÑS²a¹®-–@S’8Iüwàˆ,þxv+Hî›Îúœ+Î&"ŰÞ¸#Š.0|¿ÿЩ¨ÿàM¯ÿ£Ëñý šþÚÿñÚ׳øá¯OàxuË­ÅiÒAö¸·N%°H×væuH¼ÆxI#nCq«aâ?jÍÖ‹a®éwz¥˜ÍÍ”7q¼ðsܼúŠ.9?/Ä?ô*j?økÿÇhòüCÿB¦£ÿ6¿üvº½ľñÌš¿¥jÍG$ÂÊò9Ìk &6m„à0©=@8®^Ëâ5ÔÞ"›Dºø}â>[X º½žêãMÚ[Ìò¢Ìì·g* ’3‡ŽFK…†y~!ÿ¡SQÿÀ›_þ;G—âú5ü µÿãµÔé>'ðÖ­eî•â"þÖiþÍÖ×±Ê63å†RA| íÖWŒ¾#ø/¶™¦x‡Ä:e…Æ¡pÐ(žö¼€!’_2]î Çò݃óÉþ,Ñp±—åø‡þ…MGÿmøí_ˆèTÔð&×ÿŽ×g¬ÞÿgÙÇ>û$Ýs»¹ò÷“$x ´åÎì"cçr«•Ý‘FøN}i4H|Q¢Kª;È‹d—ñÙ£fW0Û‰VFR1ÁRCEÂÇ5åø‡þ…MGÿmøí_ˆèTÔð&×ÿŽ×Wâ~ÇÚ`¾½[‰L’¤ööñù“\Jç /v<ú$€ ´/µýµìÚ®ƒ«xpY ’_í_$.ÂïE$‘6œÙ^2E ï—âú5ü µÿã´y~!ÿ¡SQÿÀ›_þ;]=Ÿ‹<-{¢nÏĺ5Ζ²¬&ö+èž#2¢§˜nâ̪rKÞ©ÂÂðöxÔá8ðÏØšo \jÁå™zìÝ»½ºÑp±‹åø‡þ…MGÿmøí_ˆèTÔð&×ÿŽÕËßé:WÄCA×µK°KÓ»ºXZy®&¼F@]€a‹xÈgæn¹è5ïø{@û7öî½¥é_j}–ÿm»Ž9¿º›ÈÜyZ.9?/Ä?ô*j?økÿÇhòüCÿB¦£ÿ6¿üv·¼Oâyô[¥‚Ûž!ÖÀ‡Ï–M:ŠD™#“$‰½¾Sò&æéÇ#:ú&¥e¬èÖZÆ›8žÆúÞ;›i@ ÆC„KÚ~ÑñóÅ“÷[ŒƒJ¢€<;Ã6Þ¬A¦\ø3ûwPƒÀ6ŸyÚ` 7]«#³¸ 2Å •pq uP1ð£LÕ´O†^ÑõÁê6Z]½¼éàFR0¡8f¨K† °Þ³¥ßëŸüW¢ip}¢ÿP°Ö-mbÞ«æK#\*.X€2Ä ’­\©¼?«Ë£Ø½ƒé7wag–T– ! Ë$&‘Ô‚ ÆGçœÆj>¿Ô¼ã=#KðgÄ >ÿQðÝõ©×üR·ÖóK$ER5F¿œ#–#U@aœ‡âw‡nÿâGwáWû^—öÖ’è³ÙÆö© Œl1]þéâo-s™v  äã¢ÿ„©¿è_Õïí¯ÿ£þ¦ÿ¡Uÿ¿¶¿üz•†sþÓ|K¤xÚÖïSБãÔ<1¦X]ÜéÏ ZÙ\Ú›·‘v3«ùlnSb¶1ÎÑÍrŸ ¼âm]ðͦ·ÿ -ÊxxÎVîIôµ°”¼2F]<¨…Û—.¬„|Øfg*7z_ü%MÿBþ«ÿmøõð•7ý ú¯ýýµÿãÔX ÿ4ü1ð£ÂšÝŒv7¶:E¬7!RàD¾nJ’¬wîÉ‚yÉ®câg‚µÿê^/:x0G¨hÚ,6²‰"t–·×sÍ\ É".]™È`W_ÿ SпªÿßÛ_þ=Gü%MÿBþ«ÿmøõÎì|#âKÍÅãJ׿Ô5ô³²ë÷hû?–dÿI `¨—¹JÆFeŒ~ì.á=¯…üSá»m SF»ñÚ‰eÔ¦¼†æºÕâšÊê5¼é ΊÁ™Tª ˜Eïá*oúõ_ûûkÿǨÿ„©¿è_Õïí¯ÿ¢À3â^—¬xrÒÓNƒÏš=oIºeÞ«ˆ Ôm敲Ä–8ݱÔã$\Œ^ Ô¢ð+ZG£Âš«øïûe¶´aÌÛ¾œ[8ÏÙ9Æwmù1Ÿ–»øJ›þ…ýWþþÚÿñê?á*oúõ_ûûkÿǨ°|CÒµ;ØôMWF·ŽîûCÔÆ¡¤’ÅʘfÐ1á[dîËž7*‚@9Þ-ľ4ðF§dÞ¸Ò¤Ž{;ˆ,õ+Ëvká ÂM,-伈ˆë—’Ç>aÈs½ÿ SпªÿßÛ_þ=Gü%MÿBþ«ÿmøõÖ<'®øœëº•Ï„ÿ³ Õu+iWS[»Ëž ²ÜÏ/–í16Ý¡˜•„ d…®ºËŠþ!×ît{Ce} éö1ÎÈ„Èé-áûØØöùÈÁG;N4?á*oúõ_ûûkÿǨÿ„©¿è_Õïí¯ÿ¢Àyg†<5âï6[ð»ü?Ò4+ôÛ\ÅuÚ<øœÉ ÌGÌM컳…ÚœlGáøgìü2ÍÖÀ(ÄGËfL¯O•ˆã‚G5‘ÿ SпªÿßÛ_þ=Gü%MÿBþ«ÿmøõ£¢¹ÏøJ›þ…ýWþþÚÿñê?á*oúõ_ûûkÿǨ°ÎÂTßô/ê¿÷ö×ÿQÿ SпªÿßÛ_þ=E€èè®sþ¦ÿ¡Uÿ¿¶¿üzøJ›þ…ýWþþÚÿñê,GEsŸð•7ý ú¯ýýµÿãÔÂTßô/ê¿÷ö×ÿQ`::+œÿ„©¿è_Õïí¯ÿ£þ¦ÿ¡Uÿ¿¶¿üz‹ÑÑ\çü%MÿBþ«ÿmøõð•7ý ú¯ýýµÿãÔXŽŠç?á*oúõ_ûûkÿǨÿ„©¿è_Õïí¯ÿ¢ÀttW9ÿ SпªÿßÛ_þ=Gü%MÿBþ«ÿmøõ£¢¹ÏøJ›þ…ýWþþÚÿñê?á*oúõ_ûûkÿǨ°ÎÂTßô/ê¿÷ö×ÿQÿ SпªÿßÛ_þ=E€èè®sþ¦ÿ¡Uÿ¿¶¿üzøJ›þ…ýWþþÚÿñê,GEsŸð•7ý ú¯ýýµÿãÔÂTßô/ê¿÷ö×ÿQ`::+œÿ„©¿è_Õïí¯ÿ£þ¦ÿ¡Uÿ¿¶¿üz‹ÑÑ\çü%MÿBþ«ÿmøõð•7ý ú¯ýýµÿãÔXŽŠç?á*oúõ_ûûkÿǨÿ„©¿è_Õïí¯ÿ¢ÀttW9ÿ SпªÿßÛ_þ=Gü%MÿBþ«ÿmøõ£¢¹ÏøJ›þ…ýWþþÚÿñê?á*oúõ_ûûkÿǨ°ÎÂTßô/ê¿÷ö×ÿQÿ SпªÿßÛ_þ=E€èè®sþ¦ÿ¡Uÿ¿¶¿üzøJ›þ…ýWþþÚÿñê,G\¾©wm«ÚJÓ,sÎÑ»C3Äà5¼ •t!óÃ)A¥ÿ„©¿è_Õïí¯ÿ¬k½ZòK›™#ÐïÀ–0fknž\kÿ=}Pþ”ÐÐ~|EO[xGZøƒ©\|/Ñ$‚óL†)„W³”rÑ[<¨E0¶ì`Eå„#÷>ÝâöΕÿ§Û_ý•ö–£ÿ@KßûÿmÿÇjµûßêK ³éÓÚ ž9žIe‰†Ãàv$’ç’sÆ JŠ( CÛþ=m¿Ýýõ¨ÈGJÿ¯–ÿÑ2V‹Ç­·û¯ÿ£^³µùé_õòßú&JÒ¢Š(Ⱦ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4SMÿ>›ÿ^ßú%*ÝTÓä¦ÿ×…·þ‰JÀеú‹Ÿ÷¢þRS)ñ¨¹ÿz/å%2€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ßñëmþëÿè׬íCþB:Wý|·þ‰’´[þ=m¿Ýýõ¨ÈGJÿ¯–ÿÑ2P•Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vë*Þ{ûk[{VÒn$6ðÇø¥Œ«„P¡†æd àŽ3ŽzÖ†šÂð«äŒ“#¯NŸu€î:\ÛÿÏ¢ßÙøºÎûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÛÿÏ¢ßÙøº3oÿ>‰ÿeÿâë;í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€4soÿ>‰ÿeÿâèÍ¿üú'ýý—ÿ‹¬ï¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøºÑÍ¿üú'ýý—ÿ‹£6ÿóèŸ÷ö_þ.³¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâèG6ÿóèŸ÷ö_þ.ŒÛÿÏ¢ßÙøºÎûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÛÿÏ¢ßÙøº3oÿ>‰ÿeÿâë;í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€4soÿ>‰ÿeÿâèÍ¿üú'ýý—ÿ‹¬ï¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøºÑÍ¿üú'ýý—ÿ‹£6ÿóèŸ÷ö_þ.³¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâèG6ÿóèŸ÷ö_þ.ŒÛÿÏ¢ßÙøºÎûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÛÿÏ¢ßÙøº3oÿ>‰ÿeÿâë;í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€4soÿ>‰ÿeÿâèÍ¿üú'ýý—ÿ‹¬ï¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøºÑÍ¿üú'ýý—ÿ‹£6ÿóèŸ÷ö_þ.³¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâèG6ÿóèŸ÷ö_þ.ŒÛÿÏ¢ßÙøºÎûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÛÿÏ¢ßÙøº3oÿ>‰ÿeÿâë;í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€4soÿ>‰ÿeÿâèÍ¿üú'ýý—ÿ‹¬ï¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøºÑÍ¿üú'ýý—ÿ‹£6ÿóèŸ÷ö_þ.³¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâèG6ÿóèŸ÷ö_þ.ŒÛÿÏ¢ßÙøºÎûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÛÿÏ¢ßÙøº3oÿ>‰ÿeÿâë;í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€4soÿ>‰ÿeÿâèÍ¿üú'ýý—ÿ‹¬ï¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøºÑÍ¿üú'ýý—ÿ‹£6ÿóèŸ÷ö_þ.³¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâèG6ÿóèŸ÷ö_þ.ŒÛÿÏ¢ßÙøºÎûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÛÿÏ¢ßÙøº3oÿ>‰ÿeÿâë;í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€4soÿ>‰ÿeÿâèÍ¿üú'ýý—ÿ‹¬ï¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøºÑÍ¿üú'ýý—ÿ‹£6ÿóèŸ÷ö_þ.³¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâèG6ÿóèŸ÷ö_þ.ŒÛÿÏ¢ßÙøºÎûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÛÿÏ¢ßÙøº3oÿ>‰ÿeÿâë;í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€4soÿ>‰ÿeÿâèÍ¿üú'ýý—ÿ‹¬ï¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøºÑÍ¿üú'ýý—ÿ‹£6ÿóèŸ÷ö_þ.³¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâèG6ÿóèŸ÷ö_þ.ŒÛÿÏ¢ßÙøºÎûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÛÿÏ¢ßÙøº3oÿ>‰ÿeÿâë;í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€4soÿ>‰ÿeÿâèÍ¿üú'ýý—ÿ‹¬ï¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøºÑÍ¿üú'ýý—ÿ‹£6ÿóèŸ÷ö_þ.³¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâèG6ÿóèŸ÷ö_þ.ŒÛÿÏ¢ßÙøºÎûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÛÿÏ¢ßÙøº3oÿ>‰ÿeÿâë;í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€4soÿ>‰ÿeÿâèÍ¿üú'ýý—ÿ‹¬ï¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøºÑÍ¿üú'ýý—ÿ‹£6ÿóèŸ÷ö_þ.³¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâèFG ¨«ƨ¤*©'©$òI=I¬íCþB:Wý|·þ‰’¶^ÿÐ÷þþCÿÅÓ]Þ_Ú;ØËk»´ŒÒºÄ£()?ÞÎN:wÏ´QEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚³óâùôпðe?ÿ#V…¡ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿù¤¶:Ïœ¿k·ÒRw/e‘ÇaZŸö‡ô«”PEP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh(¢ŠÀÐ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¨x‘Þ?êRFÌŽ¶’•e8 „8 Ðrø‡AŠWŠ]kOIвµÂ‚ê4ßøI|;ÿAÍ7ÿSük²Œ¤¬F‘EˆŠªŽtç·­qð’øwþƒšoþ§øÑÿ /‡è9¦ÿàJvž{zÑç·­qð’øwþƒšoþ§øÑÿ /‡è9¦ÿàJoÂYáßíïøGÿá!Ò¶1Ÿ°}²?´tÏú¼îéÏJ“H×íõMCY²·I–M"õlî €;[Ã8+‚r6΃œ†ã$ÿ„—ÿôÓð%?ÆøI|;ÿAÍ7ÿSük´óÛÖ=½h‹ÿ„—ÿôÓð%?Ƨ°Ö4›ùŒZÌ¡wŠec\]ožÞµ‡ãWÝ¥[±z_Ûn뙕Nl«0ú;Ð3ͼóÈ‘E–ws€ u$Öoü$¾ÿ æ›ÿ)þ5rà+k2:†CxÄ« ‚V YxöeR=µoêz­ž—a6¡©ÞÛYYÀ»æ¸¸•cŽ5õfbæ€9OøI|;ÿAÍ7ÿSühÿ„—ÿôÓð%?Æ·õYÙ]hpóÿmÝ›[I!Úɸ[Íq¸œýÒ6Ï%{Cõ}~ßKÔ4k+„™¤ÕïZÎÜ +­¼Ó’Ù#l8ÉÉ^1’9ßøI|;ÿAÍ7ÿSühÿ„—ÿôÓð%?Æ»O=½hóÛÖ€8¿øI|;ÿAÍ7ÿSühÿ„—ÿôÓð%?Æ»O=½k7Úý¾»§Ë{h“$q^ÝY°”wÛÜIž à´LG|ÿ„—ÿôÓð%?ÆøI|;ÿAÍ7ÿSük´óÛÖ=½h˜°¿²Ô"ilnàº[k4RúqV*-q³âÛ&ö‡#ø¶ÉÜúãscÓqõ5-QEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚Š(¬ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ³¼Qÿ"Ö©ÿ^sè´j‡‰äðî¥jÎíi(UQ’IC€t²?ïêi»ê—Ûa—÷°ºÉüÈêr„â´­]ßFú¥ö•£í+@+ý£ ÿ˜ÿ„+tðŸy;>Á·ý7û_9û^ß½·Îýï÷vóœUÉ/ï­¾*xž-RúçKð”ž"ƒÏ»³•£v»þÍÓü¸§ÑBÜr¿y°¬T?¯}¥hûJÐ2îú7Õ/´­iZ]ßXþ/léPú~µÿÑéVþÒµ•âyÖK+h‡.÷ÖÛW¹ÄªÇ@¤ý4%ÉÆ³¢Ÿú{“ÿI¦®o┺®µ¯h¾Ñ4ý?Q1Hº¾§o{xÖð´18òQbå¦Úàm ˆWC¨ºÅ¨é39 ‰vÛ˜ðè%UçÝ™@÷ w­O´­<#S¼fá/ x¾ù´#áÿ}žY¬oäÄv2i×­nV}¨á%¤ÂåH~\f¦Öµ; ´ÏI{âmLx^I¬}¶O5ìÿ²î7´çyŒJÓGæîÈAÜn¯qûJÑö•¥`<ŠÒâëXAÒì|K­ÉáûMkc¡(šòÅt»‰Y<üï‘<õ‘Cä’Hl€Õ™ñ Tñ—âíWM‡\¶ÒšÆ+hü8ú—Šo-šU¡/öu†_·±—ÌVÌçn0¤†opûJÑö•¦>¥`ßïí|Iâ]GM¼ŠòÕ4 ¯¤‚;¸(Ë0‰NÙó)™pmŠ üŸz¹í&Æm/ÇÅ6zγáñäö µò&×ÞÞHÌùg+#¶â¥ƒ‚½í+GÚV€9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬Õm#?Øö¹e?)è1Þ¬×Îb/S®—À‚Š(¬ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  M£èîìï£é®ÌIfkHÉ$õ$‘Í'ö.‹ÿ@]/ÿãÿâjõGûEÿ .—ÿ€qÿñ4bè¿ôÒÿð?þ&¯Q@±t_úéøÿGö.‹ÿ@]/ÿãÿâjõGûEÿ .—ÿ€qÿñ4bè¿ôÒÿð?þ&¯Q@±t_úéøÿRÛiÚu¬¾m®eo&1¾tCL€*ÍÙ¢Žhš)£I#q†G =5OûEÿ .—ÿ€qÿñ5zŠ£ý‹¢ÿÐKÿÀ8ÿøš?±t_úéøÿW¨  ?غ/ýt¿üÿ‰£ûEÿ .—ÿ€qÿñ5zŠ£ý‹¢ÿÐKÿÀ8ÿøš?±t_úéøÿW¨  ?غ/ýt¿üÿ‰£ûEÿ .—ÿ€qÿñ5zІÒÒÒÑ--m핎Jà'×TÔQ@Q@EñÈÿ¥ÛË÷ºcŸº(£ã™ÅÝ·Ì o=Gû"Šú¬:ýÌ=Á/‰ž©¤6í׿SòžƒÞ¬Öƒuý+WðåÝ•ô2Á,+,.ABñ¸Ü­µ€# ƒÈÍl}¦Ûþ~"ÿ¾Å|ö&ö²Ðê¥%ȉh¨¾Ómÿ?ßb´ÛÏÄ_÷ج9%ØÒè–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨Mݨësýö(û]§üýAÿÎ]ƒ™QñÌÿ¥[ É÷ϲ(¬Ú Äú›q Ú–© µ²Ê#žP]“!~Ecœ+~TWÒRÄÓ¥N”¬ìŽ7NRm¤xì·â}uKÿ NoìË]>[¨ .C4JJ¶7†o—;rÄã$š÷FÖõ`?ãþoΊ+¶MÑÕõ é)è4ëz±ÿ—ùÿïªOí­Wþçÿ¾¨¢½+ þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²ë¡ÿ—éÿïª?µõ3Á¾Ÿýª(¡$|›ñ{]Õµê–Ú•ëÏŸ}qok,h%aŒ2p,rNOŠ(¯¨Û›lô–ÇÿÙgwenhywfar-5.12.0/doc/dialog/images/qt4-6.jpg0000644000175000017500000006437413142134462015545 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀ£†"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ú/GÑíæµÎMÃåg =MdxÏTðï†Ú)ôÑ{¨^1KKVÝ,Äu<Gv$]…ÿ {s²?¹ýï­|ßñ›[ÕtÿŒº¬Ð¸ŒÃkíŒíŒ s·êå«êrŒñøÇAJÉ_Ëc‚N1‚m£?ˆ¦Óáûf³ðýa±2Ig~·2Ä=Z<.@ï´±ö5ÙéÞÕôË}KMŽÂêÒáÅ*JpÃúcȯ–|IüZ‹0ô(¸þUé?²®§w=¿‰4ÙZÚÞé&ˆ@F6åƒåõêçy \º‚ªçÖÚ7ú“ BNÉÑý‹¦Ï•§ýü£ûLÿŸ+Oûù\'í«êz'Ã;CI¹k+¥¿±ŒM ႽÔJÃèT~µÎü1ñÿ‹žÏÅ×¾*´‹Z‹Lñ ÞŸ ¾MuÉ„ª®è”tsóõòn¬ÓµßÞl¡^Ç®ÿbéŸóåiÿ(þÅÓ?çÊÓþþW€j:×âf¡ho5$´“Å:u­½±ŸÊò#“OiYH9†JñÏ~+Ã?|s‹8dþ˻ԯ¼/¨j6Z—Úškˆ¤µÉw mÉ\ìÊqœO·—v?f»LbéŸóåiÿ(þÅÓ?çÊÓþþW‡Ü|\ñ†™¡xJÃû LÖµÝcImA¥¶3Iˆˆ„.ØÓ"V-ó`OqZúÅr×YÐëÃi&¥odó]Þ åË;a¡-‘/1# æŸ¶—ó1{5ØõŸì]3þ|­?ïåغgüùZßÊó_>%ñ‡ˆn|Y‰çÑ®#ÓµëË(DD±yr@1÷Y¾cÞ½C?ôÎ/ûèÕ*“j÷bqŠèCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾>y÷x­Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ+Ÿñö‰¥_Å¥ÚèÉ©ê“&ôµ·¸7»„_¯'°5Ógþ™Åÿ}ð{Ý_Rµñ—ˆæI<¹Þýã-Œˆv í·ÃÆÔÃSRMê{Ü?“Ã4Ä:nÚ+úž…s¬[éaeñ„#±²$º·ºûJEîàÀ{€k«IÑ&¶Yâµ²’)rÓô–KÉîÖ]£¹P¤œþê+Ò|)áÛ? x^ Ì,‹³I+ŸšY–sîMtTVxuOðDßÄãÚu§{1ñpb+!²1ó·ñ{QV¾9ô»q¹~÷Ls÷Eõ”êsSŒ»£ÆjÍ£Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|Î'øÒõ;(ÿ Ug½E‘Ñmu¶1BÐØM*înT Až ò+BÍWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠô{‚½¾¡lìØÍò;WrÍ€NÑ’pxâ€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠAd%¾¡#)Úè–3ÆpBer# dŠ·EUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕPßĸ2Ûê)!wÏa4H 8³ $€9ä;Òý¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿGÛ‡ýõü\ÿñjŠ«öáÿ@ýcÿW?üEnôÖ?ðUsÿÄPª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿIöø·lk}A$ ²Æö,Ž2UJe±‘œŒŒâ€-ÑU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEfê«ÛÚ³Á¥j“Ü!…ìf‹Ìlg™“ÔàÆ+þ/ÿÐžßø'ÿªŒ¶%ÍGs¬¢¹?øH¼OÿB{àLŸüføH¼OÿB{àLŸüf«ÙH^Ò'YErð‘xŸþ„öÿÀ™?øÍð‘xŸþ„öÿÀ™?øÍÊAí"u”W'ÿ ‰ÿèOoü “ÿŒÑÿ ‰ÿèOoü “ÿŒÑì¤Ò'YErð‘xŸþ„öÿÀ™?øÍð‘xŸþ„öÿÀ™?øÍÊAí"u”W'ÿ ‰ÿèOoü “ÿŒÑÿ ‰ÿèOoü “ÿŒÑì¤Ò'YEVÓ/bÔ,c»…dE|‚’.HõÆGVk2Š( Š( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐVe³ôûPû¹ÀÌJMiÖ“mµÏü¸Û蔬 þ+ñ^Ñ[S–Îê÷÷ð[Çok³Ì’I¦HQFöU4‹É`ÍU³ñK·ï5;þè’ ‰åMRöÝfÅåfP±<ˆbC¹Ë©B*C‚2þ$i—÷†L¶I\¾¥§Ë'•9…Ö(ï!’FWJˆÄ!¸ãœW/ãÞ5¥õ®ýäsø_Z²SyªIrææàZˆ£q#0 ä·p£œÈ3Ð&ñ¯„¡³{ɼS¡Çl—Ù¦mB ‹0˜ËnÀp;zò*_xjãÆSxJ-^ÈêÑÛCp°ý¦<Ê$0T]Û™•#ÞÃ+£tjæ¼}¤ÜÄ¢ç@Ó5?´éðÍ´šT¶¨Öèá>CÇîÚ3±süChÀäÒøbÛ]Ó|Wos¤£%îags=“F¶ö“Û›–uØÌa3(]ŠÝ9Àæ€:oø­´}ZÃJ¶Ðu]fòöÞ{•ŽÄÀ»#…¢Wf3Kë2` ž¾”Ëx]´‹=J÷Z²Ò£¼wŽ8õÒÞO1¤‘•r>eu*@Ï"±€úâ¤ë!‚+¡ÑàI’¸pp>òpO=ˆ¶‹â&¾†éïô}KC6ªQ¨,avœÂHÝã m9ÃdqœdU3ÄZ&§¦É©iºÎ{cá%ͽÊIml²’^x¯/¹ð÷‰µo øƒLŒjºuÁ´}>ÏSÔRîåZ)|É‘ŒÊET@®Òw0qL‡Ã:Ýîâ ¦¶Ö$½½kòu™¬GÚ–Úo1¢Ûh]vY‰$yz|>)ðôÚ,šÜ:ö—&•!ïRî3ààæ@vŽ}è“ÅJƒU“^ÒÓO¸$At×qˆe!YŽ×Îðz)=qzäZ®«a¦j±xRKytýaoeÒåž6íˆ1*æ=ê]YAùd¼Žƒ>ÇÚ•Ö¥¦ê7º,vÐIâ¹5y,^HßìqgË ³`•.fÚä!l4™ÉÁ4èÉâmô3®¦¹¦6’£&ø]¡·8Ï™½xëT<â…ñ ߈ ½Å•͆¢–ÖsÚ¾õ–6´·›q`Hcºg¾Iâõ-V‡RÔu+m%o ‡Å1jÐØ¬±©»‡û>(X®â0˜¼€9\´yÈÈ5¯ðÒÏP²›Ä÷š†Š4a©ëFò o67; µºo,¼nHÏ\òF ½kñ ÚkÀ²èÕ®žÚœš\zœ«·yÒv·ÆV‘CJ¥Ad’:f·¬ŸR±½·¶Òî&û\kýŸŒ(Ö³ Ë ùÆ=åû¤©ÆTÕ­üSáÛU´˜5ý*]E$15¢^FÓ ÌT ;·mV8Æp¤ö5-Ÿˆ´[ÝRãJ³Ö4ëBØfâÖ+”y¢ç2•üExî„—vZïÃçC†9´{˨¤Ô’âÎË;ˆä‘1pÊ—ÞTry«¼'¯i:¾ƒoªvtÑLظytõ³¼N…—ËŒ\¶âÁйòYŠŒ€{?›T —þ*ÃÿNèsQç{Õ(eÿ‰åÑÏü»Cÿ¡K@Ï6¹ GÇW¶~"] | â[›™cžkvŠ[“Å Æ"–¹ Ëo›§ïXÖ—rüCÑõd‹6vÚMý¼²n,’ÍfȸÎNDR·ž£ ð‡ŽtÍU¤°¿Õ´ˆ5íûh¬VáVgŽ ¹¡F–,IHÁ$qœ‘À¿7‹´; ?´kZ懧©–áUŸQM…b›Ëc¹¶üÊJ_àvÛ“€O†ocðƒ[&™ê âÿíFà cö¿æîÏ_³vÎì|¸Ïï øsP¶ñV•¨jzyVoâŒèÆ6ºÔc–0IËDñÐdŠtÞ2ñ¶Ÿ£´6z¦•&°Ú……»ØÉ:™„SÝà ·–7 ! ôÎ Èâ´Ô‡­¤¿ú«þmaëÒçC¿ëm'þ‚jïï@ˆ|Wâ¼=¢¶§-Õïïà·ŽÞ×g™$“L¢ìª>i’ÀšeŸˆÐhÓêºí„þ‚!ÿµ.-ÔÀùËE+ RN9`r3‰ñ#L¸×¼0ºe²Jåõ->Y<©Ì.±Gy ’2¸*T„F © Çâ³¼EáײÓô—Ñ­¯õtÓµeÔ%³¼Ô丒àyOK™ —YK܉Í;{MwI»¶³¹´Õ,n ¾r–’Ep¬· ˜ˆÈ8cµàg…cØÔwþ#Ðôô•ïõ­6Ña›ÈÏtˆO/ÍØrxo/çÁçoÍÓšóhô~ßÈñ Z ‰SÄÒjÿØñÜB%H^ÅíH XEæs)ñ–a»4–:&¹©øŽ-WVЬ-âÿíC³Å)ŽÒ>χk¸L`dƒÈȨwRø«áë¯ øÂëÂÚÆ•¨ê^°¸¹Ž!s©?—n²‰Fûš-Ò*ãæ ½³]n“â=Wžâ 'YÓµ ­[mÄv×I+D})%O­y爴½rãLø—£ÛéÍý¿k<Ö"hDR;iðÛH.\¼dä®Ìu`x®´–·ñö¨ØÙEŸk£^YÈÑíP¥¥´hSoR1¸ÀÀç¦F@.ë¾4m7^¸Ò-¼5­êòZÙE{s%ˆ·+r<ª¼I*;6a“„Vè;œUÈ|iáy³Wþ.9uHcžÆn’9nÀ(Q†9Ò¹m[Ú®§ãíSQMsVÑôùô‹+]Ö n ä·lêÆHÝ×h•0Wgß<’8ãüá7]ðÿ†4»Èté,cƒLKa·DQpó©˜È6©LaU>e ëúÇŠ|;£Ü­¶¯¯éZtïJ±]^GPK0 AÚ9= Kâ-ÃQ¶Óoõ:ÖúìâÚÚk”Ifç"“–çÒ¼wâú]Øè mQ5»5–“q ý›ýaH݃çÌž=ŠÙw#ƒ“Vüoá=z÷Ä^!1væÃ]àiÒéñ¤A"TÛ#\FÒ¦K†ˆ¶ 0Éö6¨j’æûJö»oý-w½RÔeÍæ›ÏK–ÿÑ2P#sͬø­ô^ÃIµÐu]föö î;·]‘ÂÑ+³¥Œu™“×Ò´<ïzä|WáÓ¯xßD¼¸:‚iöšmôRMg¨Íhë,’ÚRк;±ÈqÊü£<í xÏâ"èñiöÒê~Ð/u @ZƒªÝ¤¿bQh.$3Æ’  TÚ²ýìM¿ç¥“ↇ¨øf]cÃz¦›wömf×OºV¸I<¨äÔÕ¥!åVMï‚6¶1‘Y6~Ôí|Y ÄVÒµŒ>([Õ–[Ÿ1ͰÐþÈ$ff.ÇÍùNì±ûÇ#š‚]W»ð•ÿ†®´9Äñ߉$–†îÚM_íNTo-òÄNåu\žu='D×ô}rÙît]ZÃScIip“*·¡*HÚ¹íWâ¶›¨jñM kRiú4Ë¡©Ä°5¼ÃÅŠù¾iUIP’# séF™aqkñZÕºÇew¦XD’)Q¾häºß9ÈW‡’988Â>»Õuß6««ê¶Ú>©¨ÆÿÙð<ÈE´l]¼³(£t*r¦Hwÿ .ƒý·ý‡ý¹¦jã?aûRyøÆsåçwNzS.|SáÛmWû&ã_Ò¡Ôrƒì’^F³eØ* „îù™”9$Ö¼§YѼkw¯EXÞÇi‰ ¾U¶þÏŽÄÛ‹µv“•7&câü®I|kAâ4»°0è“hpÜ4ž6µ¾ML\BÖ_$ávnó|Õ‰¶cn<µÎìq@Ä|E¢®¶43¬iÃU+¼Y”óÊã9òó»ç8­6¼b ëÑx¢H®N»qdþ!þ×I`—OK@<ÿ5w–í[•~B À`2©Àõ;Þ²nÖ,ûrÿé<µ¯º¹í2MÚÕˆÏyþKË[{¨ÍxƒÅZ”*_ è:Mö¢¶K{'Ûµi–Îè¡ Ç#;f6È …r~aRK⥰k6ñG‘ìn®®,ŒmpÁa–2‰£ùDkæ© ®H‘[äØâ¨xÿE¿Öæ†1áøŠÅSˆu–hÞ2rêÂ)AmãjAùŽxËÒü!âm%4ií/ôë‹Í?IÔ¬Á¸yLq½ÕÍ´±ª‚ 8,ʧB¡W–uñÇLñÕý®§s¨&šÚŸinšTòK’[±,މ‘Xá ¼¤s‚Nrm>j†®¼?áË«;‹3yaª@oXÇ'Ú­® •‘™-Ä 1çJí ×èÚ^¢ž1¿ñ –q}»G°´ha™¥òæ†K§(»“ý!¶89Uâ˜eÏ5Û+/jz•å­§Ú-ôÛ‹T}Z÷Tòd±¸–çI8ÞÈħ°¹åªivwÿ¯|i;^é+ͦ‘ ­Ö‘y,ÖÞu­Ä÷ˆَZ=Ì›J‡À9\ЭxoĺOˆRá´É§/lá'†âÖ[i£$ewG*«€G ‘ƒÛ5¯º¸‡¼Ðîõ;ýFÒ{›Ä‚"F»{ª;,FB3-Ö ŒÈØUQŒœ–ÈÇeºÿ?ý¼Üÿè÷­ZÊð§üÿíæçÿG½jÓ¢Š(¢Š(Ⱦ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4ƒŸuee8—NZÎßj´Ògh‰@'ã$`ãœf·ª¦›ÿ }7þ¼-¿ôJV†wö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±Ecÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5[P?ö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±Esǃ­õ……u{?ê+ ïˆ]#Ê#oï.èN¸«ãG¿çLÿ¿²ÿñªØ¢€1ÿ±õùùÓ?ïì¿üj¡»Ð5 ˆ–?¶i‹‰óæJ~ë†Çú¯jÞ¢€1ÿ±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ­Š(ûPÿŸ3þþËÿƨþÇÔ?ççLÿ¿²ÿñªØ¢€1ÿ±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ­Š(ûPÿŸ3þþËÿƨþÇÔ?ççLÿ¿²ÿñªØ¢€1ÿ±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ­Š(˜´ðm½¦©qªZÙøv û‘‰î¢GYeí8‡-Ó¹«ÿØú‡üüéŸ÷ö_þ5[P3ûPÿŸ3þþËÿƪÐ5½–çíšgï#DÛæKÆÒÇ?ê¿Úý+zŠcÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5[P?ö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±Ecÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5[P?ö>¡ÿ?:gýý—ÿUM_Âi¬Y›-Z Pµ$1†è<¨Hèv´Dfº:(‰o Ý[ÁòiÄHÑåUU‹Sÿ±õùùÓ?ïì¿üj¶( F î¨\ÙOmöÍ1|ØÙ7y’œdc?êªoì}Cþ~tÏûû/ÿ­Š(ûPÿŸ3þþËÿƨþÇÔ?ççLÿ¿²ÿñªØ¢€1ÿ±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ­Š(ûPÿŸ3þþËÿƨþÇÔ?ççLÿ¿²ÿñªØ¢€1ÿ±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ­Š(˜¾ðm½þ¡m¨_YøvêòÔæÞâdw’œüŒaÊþûPÿŸ3þþËÿÆ«bŠÇþÇÔ?ççLÿ¿²ÿñª†ã@Ô%–ÞO¶iƒÉ¾<Éyùqþ«ý¯Ò·¨  ì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿÆ«bŠÇþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¶(  ì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿÆ«bŠÇþÇÔ?ççLÿ¿²ÿñª Þ ·meu¦³ðéÔÕ6-áGóÂãßäîÆ;fºz(ý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@ŒÝ?N»µÔmîfšÉãÌÈ…Ü·Í ûÈ£«õ¥“EdÑ“EdÑ“EdÑ“EdÑ“EdÑ“EŸ¤ZêVVfýšÃΕÁ{™Tá¤f";úš·ÿ/îé_ø7ÿ©h ¿âeýÝ+ÿæÿã5—Wp]ÚÃq‘[‰ a¡¸v*B3r5ãåÇZ³Tuùé_õòßú&JÒ¢Š(Ⱦ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4SMÿ>›ÿ^ßú%*ÝTÓä¦ÿ×…·þ‰JÀОŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨êòÒ¿ëå¿ôL•z¨êòÒ¿ëå¿ôL”¥EP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh*¦›ÿ }7þ¼-¿ôJUº©¦ÿÈMÿ¯ oý•¡=Ew7‘nÒcqà*ú±8ñ$TµÌ^t%3´‚O£?˜žÚ nr'ÆÚD^&‹E¹Ôn"ž{²Å)Š?³™ó·f3æ}àFzfºø¼yeÚêźÊH#ð ×sðë×:ƒÅ“XêO{ßhŽØÜ§Ø–l–ó1÷þñÎ=k¶ qá›s³vþó1$ŸÄ“Io ß™ÁÛøóXóc½»ðöŸ‹6».‹ñj¬÷FE¼{Us…WÓq #§<àÖÿü&~þÛ]#í³}¡î ²Éö9¾ÎfƒŸg•¿ »³F3ÅrÐ|2·³³›W°Ó´H<_µy©ÛjkW‘e¼–UŠYo*ÐÉå7 ·?.v©ªZß›ÿ^ßú%*ÝTÓä¦ÿ×…·þ‰JÀОŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨êòÒ¿ëå¿ôL•z¨êòÒ¿ëå¿ôL”¥EP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh*¦›ÿ }7þ¼-¿ôJUº©¦ÿÈMÿ¯ oý•¡=T²´6åeË* ÿiˆQú‘Iè2z+R Ä!ß-õÙ¹+÷ÄŸ(?î}Ü~3!cÌGhß7+8öÈ4“¸Ú$¢¼cKñ~·'ˆ í`žúmAfW_6äºk­Èvàm‘²¹€3žs•7Ã>KÖkºäVGVMcû>9a}¥nà±>_˜Êd\•g g€R;z*„q—ÿ4û½@L5­nÞÈj‘jÃM†hÅ·Ú’e›1—Ã:å—vܱ ÁÍà["ßì¶­¦Þ[^^ÝC{lñyËö¹Úi£ÃÆÈÈY†RFÅç#5ÖQ@ÞÑìô *ÇÍ0øï•÷¼ŽÌ]Ý›»331>¤×=àßÉá‹×žßÆ>!¾ŽiÞ{˜oÍ…ÌŒÝ$‹n²’8ÇÎ0Gݮʊ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*Ž¡ÿ!+þ¾[ÿDÉWªŽ¡ÿ!+þ¾[ÿDÉ@TQEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚ªi¿òÓëÂÛÿD¥[ªšoüôßúð¶ÿÑ)XÑEQPýªÛÏò>Ñ›ÿ<÷ß•MHaESQPÝÝ[ZD²ÝÜEoH‘•‚îÁr{³2¨Érjj(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*Ž¡ÿ!+þ¾[ÿDÉWªŽ¡ÿ!+þ¾[ÿDÉ@TQEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚ªi¿òÓëÂÛÿD¥[ªšoüôßúð¶ÿÑ)XÕmE™mFÚY‘ t3Oà ?…Y¤eVR¬R0AïIꆷ:ˆt:+² 8L[pAAÏ¿×Þ¹+Cû¢¡‹ªÈ茉C­ø€ãOÍß•öíϳãVñŒznÆì{fœªª¡T `Ú¦*Ìmž¦^êË«[Þ¤>,·šo]Ú¾¯u¬´š[@ºŒÉäýœÎÛsˆS÷H7•Ãt'¥Ôþ êV>*Š=•ÞžÚÄZ\[h÷¯å™'7Øû8ufRÑ•9PÄžÞO è²hW:ÙfÂêy®%‹ÍpL’ÌÓ;Îå>c#ÆfOðûÂsêÚ2é÷ (¾]Acû}À.VA(™aå«—$(Ý“œäæ„qÞ1Ö›ÿ^ßú%+Bz(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ £¨ÈGJÿ¯–ÿÑ2U꣨ÈGJÿ¯–ÿÑ2P•Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV„ô‡“KUµ0M›HRÊ$#²n¿ñÜÒnÈi]€¾¶,@v*:È#mƒþ¿­XŒŠì"ŽÚ; ¨#á=¶íÇåŒWg$ìÏ•½ü¬ÿÏ=Çgþ;Š”ÝÆÒèMEx›¤=µÌ^ >Ð4ûqã[ÓqâKy‰ÔB VeÙ"—÷n@„Ÿ5ÀFÜTòïêþ5Öm “I7šŽºú(!2•³¾ha·A"2dÆrIRH„÷$ШQ\çÃ}Zï[ð…µýôÑ\Oç\@n"]©p±O$K2À¨Ž>n8¯8ð6¯§ñ£LÖ/ì5Ë][UÒu4xo4{¸´+5‘‚ÒF ªìÌ _2R3ó  ÕESQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUCþB:Wý|·þ‰’¯UCþB:Wý|·þ‰’€4¨¢Šò/ŽGý.Ün_½ÓýÑEú]¸Ü¿{¦9û¢ŠúªÁ‡¢8%ñ3Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|æ'øÒõ:èÿ TÓä¦ÿ×…·þ‰J·U4ßùé¿õámÿ¢R°4'¤<ÒÑ@}–mýï—œù^ky÷Ævþ•5-’Hw¹M´½1´ù´æÓ­Îv‘¦·0©ŽC#rËŒÌÌÇ=I$òj”ž𼚳êòxoF}EÝ${¶±ŒÌÌŒ¾ÝĆU ç‚ ö­š)ˆÉ¹ðφîu틟é3jYCö¹,ãi²Œò7|¬ªG<t§jðþ£§7Pд˻™® ´ö‘¼FVbìûHÆâÌÌN2KÔÖ¥¼0Û[ÇoopÄŽ8Ô*¢€=)¯kl÷‘Þ5¼MsosÑ©e ÔQ ö¯ ©¨ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨êòÒ¿ëå¿ôL•z¨êòÒ¿ëå¿ôL”¥EP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh*¦›ÿ }7þ¼-¿ôJUº©¦ÿÈMÿ¯ oý•¡=S]•³ ’{P¨¨c–y#3&ŸxmÀÏåü¸õÆwcð©Q•Ô2TŒ‚;ÒM1´Ð´W/mãß \jŸÙÉu|’DZY¥Ó.b¶{„‘£hÖvŒDͽYpäŒ ×QLAEdø¯YþÂÒá½û7Ú<ÝBÊÏfý¸ûEÔPnÎÝówc¾1‘œ Idš&y-e¶a# IJ’B±Pÿ)# aÎpà €5W=áOhž(òÛF´‘Kn.bžãG»¶‚XÎ0É,±*6C$‘Èà@ Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#¥×Ëè™*õQÔ?ä#¥×Ëè™(JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+Bz­¨¡{B$Fp:²†‡âfŠM] ;Rßié`.–êl‡Ü1ôúûu®>Ð~è°RŠò;¢ŸáRĪþøQö[o?Ïû4>o÷ö ßMI-FÙã°øk^·ÑYš÷]»´³ñ]î¡'‡šÚ1‘ NgI#Û™ˆÊ\(.ÁÈ ŒjÓWÅeá²êxšóÇáû¹nšÐݪ¼§Q2ü¦‰˜˜‚°E;p¡w/¼QLG‡kú,O«¨»ð¦¯wâŸøLmn¿µ#°•Óì#Qã>x|¤€*˜óò²–*0Z¯I¤„·ÓÅÔ5?Ç«øîl—O’ë÷Òê=¬Ï©gO/ÍÚÛHb7Lö:(™ø_k}gà‹+{øn-ÜI;AÃfXmÌÎmã|’w,&5 žÅržµ‡Oñ.‰§øBÇÅömº<:®¬nÚÖ¤Fà²ï€òX®Ýùí^£EQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#¥×Ëè™*õQÔ?ä#¥×Ëè™(JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+Bz(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ £¨ÈGJÿ¯–ÿÑ2U꣨ÈGJÿ¯–ÿÑ2P•Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV„õÄ« +ôQÐu>‚¤¨o"2Áµq¹Y]sÓ*Á†}²)=†·.C£ërCö‚mÈ€îÜ}·çü*´2 #àƒÔÁÜÛ>&´òqö[Ï´cýW”qŸ÷þî=óøV Ê„É1ݤ|tÜÌXãÛ$ÔÇq³¶øm-ßï|;®Ûi­ªI¥&© ·6íp· mŒ$­*«J»Ad‘œf·ÿá"ðÿöïööî—ý¯Œýƒíqý£Î|¼îéÏJóÈ|{k¦¶¹¾¡>¹iâ;ÝN>]RG´¸‰ïætÄ-!…ÂáÕ€R¯´·;ª–·áÿ^x‚(£Ó¯£´ƒÄð_ªÛ:+l/ÚNTÜ™Œ{‹ò¹bø,Ö¡ǵ¢ø²cQHlt]]ôùÒ-TÄŸe‘“9ÇÏæmùHP#q†9>é7š'ƒí¬/¡ŠÞ:âsonKu–y%XAŠá8ãåãŠâ>ø"ëÃúdží¬ü/ý”Ú4o§¬‹ˆö´B ÆF˘äýâ®Ï/jäP­QEÄQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGPÿŽ•ÿ_-ÿ¢d«ÕGPÿŽ•ÿ_-ÿ¢d  *(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÕM7þ@úoýx[蔬 袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*Ž¡ÿ!+þ¾[ÿDÉWªŽ¡ÿ!+þ¾[ÿDÉ@TQEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚ªi¿òÓëÂÛÿD¥[¬«yïí­mí[I¸ÛÃâ–2®B†˜3‚8Î9ëX4U¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÕGPÿŽ•ÿ_-ÿ¢d£í—¿ô½ÿ¿ÿñtÅw—öŽö2ÚÇní#4®„±(Ê O÷³“ŽóÀ­Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ¬üø‡þ}4/üOÿÈÕ¡E`hgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF©-޳ç/Úíô”‡Æ ÙdqÇVAçý¡ý*åQEä_ú]¸Ü¿{¦9û¢Š>9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ (¢°4 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (ª$wú”‘³#­¤¥YN!4¾!Ðb•â—ZÓÒDb¬­p ‚:ƒÍ7þ_ÿÐsMÿÀ”ÿì£)k¤QF""€ª£€§yíë@_ü$¾ÿ æ›ÿ)þ4ÂKáßúi¿øŸã]§žÞ´yíë@_ü$¾ÿ æ›ÿ)þ4ÂKáßúi¿øŸã[ßð–xwû{þÿøHtŸíŒgìlí3þ¯;ºsÒ¤Ò5û}SPÖl­Òe“H½[;‚àÎÖðÎ àœ³ ç!¸Æ çá%ðïý4ßü Oñ£þ_ÿÐsMÿÀ”ÿí<öõ£ÏoZâÿá%ðïý4ßü Oñ©ì5&þc–§gs(]Å"™Xã××[ç·­aøÕ÷iVì@Þ—öźæeSƒÛ*Ì>„Žô óE/<ò$QF¥Üà(I5›ÿ /‡è9¦ÿàJ\¸ ÚÆŒŽ¡Þ1*à •‚V^=™TBí[úž«g¥ØM¨jw¶ÖVp.ù®.%Xã}Y˜€¹ Sþ_ÿÐsMÿÀ”ÿ?á%ðïý4ßü Oñ­ýGÄ–vWZ¼ÿÛwfÖÒHv²nó\n'?t¤ ‚3É^Äý__·Òõ Êá&i5{Ö³·( ëo4ä¶HÀÛŽ2rWŒd€wþ_ÿÐsMÿÀ”ÿ?á%ðïý4ßü Oñ®ÓÏoZ<öõ /þ_ÿÐsMÿÀ”ÿ?á%ðïý4ßü Oñ®ÓÏoZÍðæ¿o®éòÞÚ$ÉW·Vl%ö÷@ç‚x-ßdÀçá%ðïý4ßü Oñ£þ_ÿÐsMÿÀ”ÿí<öõ£ÏoZæ,/쵚[¸.£VÚÍ€>œUŠ‹\lø¶É€½„áÈþ-²E·>¸ÜØôÜ}MK@Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ¢Š+@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬ïȵªלßú­¡âDy<;©G³»ZJTd’Pà@,ûÆúšnú¥öØeýì.²Fÿ2:œ†¡¸£í+@wѾ©}¥hûJЊÿhè?ð¦?á Ýü'ÞNϰmÿMþ×Î~×·ïmó¿{ç}ݼçrKûëoŠž'‹T¾¹Òü%'ˆ óîìåhÝ®ÿ³tÿ.)ä4P·¯Þl+ëßiZ>Ò´ »¾õKí+GÚVwÖ?‹Û:T#þŸ­ôzU¿´­exžu’ÊÚ!˽õ¶Õîq*±ÇÐ)?@MIrq¬è§þžäÿÒi«›ø¥.«­kÚ/…4M?OÔLR.¯©ÛÞÞ5¼- N<”gX¤9i¶¸H"Ðê.±j:LÎB¢]¶æ<º Uy÷fP=ÈëSí+@ÏÔøKž/¾møÅ_g–kù1Œšuë[•Ÿj8@‡Éi0„yR—©µ­NÂm3ÃÒ^ø›SƒÇE§km“Í{?ì»Çí9Þc´Ñù»²gw«Ü~Ò´}¥iX"´¸ºÖ#Ðt»ërx~ãÆSZØßèJ&¼±].âVO?;äO=dPù$„R 5f|BÕ¥â›Ëf•D(Kýa—íìeóƒ³9ÛŒ)!›Ü>Ò´}¥iÀÏ©X7Å;û_x—QÓo"¼µMÂ+é ŽîŠ2Ì"S¶|ÊfGÜb¨?'Þ®{I±›KðáñMž³¬Çx|y=°€_È-|‰µ÷·’3>YÊÈí¸©`Ç €¯_ûJÑö• ‹\ñ#üLxnõ« M|GäÇiqâ;•’M?ÏÚªšjÀbpÐa„»Îî. 6±ßÛè_ð—ÿÂE¯É¨Ib±É©JÖÂÕõÖ´0ù;¼²¢68%K)õŸ´­iZÏÕŽ|Waÿ^7ú2³Y÷R‰¼Uk·Ÿ.ÆmøþÒE·>™ÚØõÁô­ QEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[HÏö=®YOÊz w«5ó˜ŸãKÔë¥ð ¢Š+@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(“hú;»;èúk³YšÒ2I=I$sIý‹¢ÿÐKÿÀ8ÿøš½EQþÅÑè ¥ÿàüMغ/ýt¿üÿ‰«ÔPì]þ€º_þÇÿÄÑý‹¢ÿÐKÿÀ8ÿøš½EQþÅÑè ¥ÿàüMغ/ýt¿üÿ‰«ÔPì]þ€º_þÇÿÄÔ¶Úvk/›k§Y[ÉŒo†ÝãÓ ³E6h£š&ŠhÒHÜa‘ÆCB SþÅÑè ¥ÿàüM^¢€(ÿbè¿ôÒÿð?þ&ì]þ€º_þÇÿÄÕê(ö.‹ÿ@]/ÿãÿâhþÅÑè ¥ÿàüM^¢€(ÿbè¿ôÒÿð?þ&ì]þ€º_þÇÿÄÕê(ö.‹ÿ@]/ÿãÿâhþÅÑè ¥ÿàüM^¢€!´´´´FKK[{ec’°Ä¨ õÀ5PEP‘|r?évãrýî˜çîŠ(øæqwmó(ÏQþÈ¢¾«¿sDpKâgªi »Gµù”ü§ ÷«5…àÝJÕü9cwe} °K Ë P¼n7+m`È ò3[i¶ÿŸˆ¿ï±_=‰„½¬´:©Ir"Z*/´ÛÏÄ_÷Ø£í6ßóñýö+Iv4º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*wj:ÜÃÿ}Š>×iÿ?PßÁG³—`æG”|s?éVÃr}óÁìŠ+#ö‚ñ>ƒ¦ÜC6¥ªCml²ˆÄÂ'”dÈ_‘Xç ß•ô”±4éS„%+;#Ó”›iû-ø£_]RÿÃÃS›û2×O–êËÍ’­Àa›åÎܱ8É&½Ñµ½Xøÿ›ó¢ŠÇ-“tu}BºJz :Þ¬åþûê“ûkUÿŸùÿïª(¯DÊÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,„:ƨåúûêí}Lðo§ÁÿjŠ(cI&ü^×umcÇ:¥¶¥zóçß\[ÚÆ@  Xc œ ““À¢Š+ãê6æÛ=%±ÿÙgwenhywfar-5.12.0/doc/dialog/images/Makefile.in0000664000175000017500000004431514730344661016240 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 = doc/dialog/images ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = \ fox16-1.jpg \ fox16-2.jpg \ fox16-3.jpg \ fox16-4.jpg \ fox16-5.jpg \ fox16-6.jpg \ gtk2-1.jpg \ gtk2-2.jpg \ gtk2-3.jpg \ gtk2-4.jpg \ gtk2-5.jpg \ gtk2-6.jpg \ qt4-1.jpg \ qt4-2.jpg \ qt4-3.jpg \ qt4-4.jpg \ qt4-5.jpg \ qt4-6.jpg \ cocoa-1.png \ cocoa-2.png \ cocoa-3.png \ cocoa-4.png \ cocoa-5.png \ cocoa-6.png \ cocoa-7.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) --gnu doc/dialog/images/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/dialog/images/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs 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 clean-libtool 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 mostlyclean-libtool 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 clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool 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 mostlyclean-libtool 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: gwenhywfar-5.12.0/doc/dialog/images/cocoa-6.png0000644000175000017500000012216413142134462016115 00000000000000‰PNG  IHDRÐ0¯\ xiCCPICC ProfilexÕ–gTɆ«{r"Ì C†!g$ 9Ar•a† ã0dDEdqLˆˆ`X0(¸*AÖ€ˆb`0ÇdP®‹(·¬çÜ»ÿîŸ[çtÕÓo}õuuWç¼;9A ,@*?CèáÌ ˆdâ€H"‡›.pò÷÷ÿØ>ÞxòŽ‘8×?†ý÷ i^l:È™Žá¥sS>‹ð W Ì>…pv†aTÂt!²A„+Ä?ÏõbŽ™çós1Á.HL?x2‡#Œ€ôÑ™YÜx$ia>/‘Ùa{n‡‡°x©kÄ\…°nÌyâ`'f1'‡¿ÈóD욘.HáäÎÝü/»Ô”Lä{Í5*Ò“ù)ËÅgCG®1ÇÕ{)sg6§ÇòC‚t~Ìr¿Žº.° Ãùö^Ðó\–/plºÛbž$Ž—øÌæò 3C8=+Èmó‚Ø뺨Ç%º³ôÄ öâ³’×x/î\À\à 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ùãb ™l>רifbj"žþ¿iâZ›ßì{Æ\ AŒ›k91Ø%#5àù·@³.òákڊкiÛÊÍfÍçC‹ "Lò@h]`Ì€%°ŽÀ x? "À*ä '€T Ù lÅ ì»A58zpœmà<¸ ®[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ì d¹A>P ECñÊ„ò¡MP)TUCµPô+tº Ý€ GÐ4½ƒ¾Â(˜ ÓaeX^³`'؆WÂñpœÁÛà*¸>·Â—á[ð=X¿†§PEB1Pj(# å‚òCE¢âPBÔzT ªU‡jBu zPwP"Ôê ‹¦¡™h#´-Ú‚æ¢ÓÐëÑeèjt=ºݾƒBO¢¿c(%ŒÆÃÆ„câ1Ù˜bL%æ(¦ss3‚ùˆÅbX¬ÖM®Ŗa÷c›±Øì0v ‡ÃÉã pv8?—+ÆíÅÀ] âFpŸñ$¼*Þ ïŽÄóñ…øJüqüEü ~?M"hl~!—°p˜ÐA¸M!L¥‰:D;b01‰¸‘XEl"^%>%¾'‘Hê$kR)‘T@ª""]' ‘¾©d}² 9ŠœIÞF>Fî$?"¿§P(ÚGJ$%ƒ²Ò@¹ByNù,A“0–`Kð$6HÔH´J J¼‘$HjI:I®’Ì“¬”<#y[rBŠ ¥-å"Å‘Z/U#uNêÔ”4MÚTÚO:UºLú¸ô é1*ŽªMu£ò¨EÔCÔ+ÔaЦAs¡qi›h‡iWi#t,]‡Î¦'ÑKé'é}ôIªÌR™P™™™ 2"Š¡Í`3RÛ§÷_e•edce·È6ÉÊ~’S”s”‹•+‘k–»'÷Už)ï&Ÿ,¿S¾Mþ™ZA_!@![á€ÂU… Eº¢­"W±Dñ´âc%XI_)Pi­Ò!¥^¥)eeeò^å+Ê* G•$• •‹*ãª4U{ÕDÕ ÕKª¯˜2L'f ³ŠÙÍœTSRóTËT«UëS›V×QQ/ToV¦AÔ`iÄiThtiLjªjújæk6j>Ö"h±´´öhõh}ÒÖÑÓެݦ=¦#§ÃÖÉÓiÔyªKÑuÐMÓ­Ó½«‡Õcé%ëí×ëׇõ-ôôkôoÀ–‰û  1†Ö†|Ã:ÃFd#'£,£F£!c†±q¡q›ñ›%šK"—ì\ҳ仉…IŠÉa“'¦TS/ÓBÓÓwfúf\³³»æswó æíæo—,]z`éC š…¯Åf‹.‹o–V–BË&Ëq+M«h«}VXt–?«ŒuÝcíl½Áú¼õK› ›Ó6ÙÙ&Û·[¦³,vÙáeÃvêv»Z;‘=Ó>Úþ{‘ƒšÇ¡Îá…£†#Ïñ¨ã¨“žS’Ó §7Î&ÎBççO.6.ë\:]Q®®%®}nT··j·çîêîñîî“k=:=1žÞž;=°•Ù\v{ÒËÊkW·7Ù;È»Úû…¾Ð§ÃöõòÝåût¹Örþò6?àÇöÛå÷Ì_Ç?Íÿ·l€@MÀË@ÓÀüÀž ZÐê ãAƒƒ·? Ñ É é • mýæV& _¾.üV„BDbD{$.24òhäÔ ·»WŒDYDGÝ_©³2gåU «RV]X-¹š³úL4&:,úxô ÇSÇ™ŠaÇì‹™äºp÷p_óy¼ñX»ØòØÑ8»¸ò¸±x»ø]ñã  • ‰.‰Õ‰o“<“&}JöK>–<›–ÒœŠON=ǧò“ùÝkTÖ䬊¢4›´Ýi“BoáÑt(}ez{15½™º™?eeÙgÕd}ÎÍ>“#ÃÏéÍÕÏÝ’;šçžwd-z-wmW¾ZþÆü¡uNëj×CëcÖwmÐØP´a¤À£ ~#qcòÆß M Ë ?l ÛÔQ¤\TP4ü“ÇOÅÅÂâ›m7üýsâÏ}[Ì·ìÝò½„Wr³Ô¤´²t¦Œ[vs«éÖª­³Ûâ¶õm·Ü~`vÇý;ëË¥Ëóʇwùîj­`V”T|ؽz÷Ê¥•÷÷dîUùTµïÕÜ»cïLuBõ½çšæ}Jû¶ìû´Ÿ·ð€ã¦ƒÊK~ý%ñ—‡µµ­uÚu•‡°‡²½<z¸çëHÃQ…£¥G¿ãÕÖw7X54W:¾½nÌl?u¢ÿ¤ëÉö&£¦ÚfFsé)p*óÔ«_£½Úût×Ö™¦³Zg÷µÐZJZ¡ÖÜÖɶ„6Q{DûÀ9¯s]¶-¿ÿvì¼Úùš 2¶_$^,º8{)ïÒT§ sârüåá®Õ]O®„_¹ÛÐÝwÕûêõkî×®ô8õ\ºnwýü ›çn²n¶Ý²¼ÕÚkÑÛò»Åï-}–}­·­n·÷[÷w ,¸8è0xùŽëkwÙwoÝ[~oà~Èý‡¢ˆòŽ=JyôöqÖãé'O1OKžI=«|®ô¼î½?šE–¢ C®C½/‚^<æ¿þ3ýÏ™‘¢—”—•£ª£ cfcçÇÝÇû_­x5òZðzz¢ø_ÒÿÚ÷F÷ÍÙ¿ÿê Ÿy+|;û®ì½üûc–~èšòŸzþ1õãô§’ÏòŸë¿°¾ô| û::=ƒ›©ú¦÷­ã»÷÷§³©³³Ž3çPHÇÅðî”Ä+ ¾˜Ø9ï…ç" yÿްØÇÏyùÿäy¿<o À‘NB ðDÆdÔFFª#bKì`sóÅ QÄ-=ÎÜl ²±&Ÿggß+€ëà›pvvzÿìì·Ãˆg@gÚ¼Gû€¥º¹›YõÌöÍ-ÿ±û7…èªÍöì pHYs  šœ IDATxì €ÕµþÌÊìò/äÉd5€€²ˆE‚>ÀDÞb‚æýMŒ/1H !y€&OŸ¨€‹1ÊbÙa†}™…Yþ÷»3§¹Õ=Ý=3=ßÕâî·nýª¦úëÓ§nÕ)++     ðÔ ¯[‘ €4¯    ˆ€t°Ø”H€H€H€H€( y @( #€Å¦$@$@$@$@$@Ík€H€H€H€H€" AÛ«®i®ºIsÂ$@$@$@$ÌRÉ1»Vr«íØ(Šcà/Ї@$@$@$@«Ml_±šBÙ¹ª˜$   ZHàJÖW”€®¢h¦»F-üÃâ!“ \U¢v븒Äô§. #ÍUÉUé{U]™œ, |J¢Èf¾a÷ý´Åô§" #ÍáˆÞpÚ|J×wK$@$@$@$àC ±Nù4ÄôeÐa çP‚8TϹ‘HÛûÁ2    È „%€aCµUg‡¸œBú²è0„s0¡¬Üa¶Hg,w\¦I€H€H€H€"#P©Ð­.œvÁÚ+·C_!]ãºñì'jýÊôÔERª­ŽÇ˜H€H€H€H æxÅ®7ïî9Òº íkZDט€®&áL»ånÚ= n:œ6n{¦I€H€H€H€¢#TØ:ùmÜ´ÓÄ÷¡B¿¶~evœšÒ5" #Ï~âÖ[¦y]¸šU‡6•Õë8ŒI€H€H€H€¢#TÌV ª^ë4Öxó(÷–yóÚ·F2¬vB<{¬7uË4­q„§–ûµC]°ríǘH€H€H€H z ´~å¡ÊÜ:7­³õ–yó¶]u[¢«U@WA<»"WÓ+ Pyo]°>••k=c    ðøŠVÓ5œro›`y·ÜMc†•åíQT§ˆ®6¦xö ]7¯iq°á¤½í¼yw Ô… ‘´ 5ëH€H€H€H Öx…j¨ãsÛºiô •wëüÒ~e:Pu¶Mu‰èjÐÕ$ž]ñê—ö+ -×X!ºu••¹õL“ DFÀ¯Ú3T™[ç—ö+ø(V§õˆÜvå%(4!‰2Qe]Eñ Ñë _¿´–‹õнõZŽXë´Ì›×rÆ$@$@$@$@‘ð Ro£i™ÆºÍW»chÚÛÇ;¦¶Óò@\U]%D<{Å©›÷¦½yÊ"-ñé:w<·­¦+«×vŒI€H€H€H ¶Pጃ·y¿2ôwËÝv‘–û…2 îx¶¬*":^G­¡Ø¦Þ´æCŨK0[ªÙÒ*Ò& ˆlí‹2Ík¬Ì6vÚkž1 @x.¥¦›–iŒ‘4­±ŽŽ¼n(+2Û9³1Ûy³i«ëL± ¨Ór¤÷KÛÊêü'j tÖg=(ÌWÓ¡b·NÓ‰¦oöÓO?ÝsÀ€·7iÒdpbbbk È@$@$@$@$ w9räm^›>}ú?ÌQ55‚ i¿´–ùÅn™7|ÔþÐÕ) Uôb>ÁÒuQY´ boZóY3gÎüìðáÃKHH¸áüùóRZZªý“ ĺuëŠÑzR\\¼aÙ²e³ˆ^cëDÅ¡©€Vë²æQ­eH»"Ñ-–ŽZ@GåÂÄúŒ‰#¨ø '­âYû¨ÀÖòôo¼ñvã£rC~~¾œÿ ÄHx–¸¸¸úöí{‡9ºMf;e6¿Ð†®@6Y[‡r·Meiô hÚh|¡£н^H¨¾PrqJ1Jµ­–ycmƒòÄÌÌÌÁ°<3 Ä6éìììAæ(Ÿ7›jF=hZU kòh§1ʽmP¦AÛj>ª¸:´{p~i”i¹k¹7ÆÊëšo­Ì†2߀:ýÖræÌÙ½{·œ¤„¹¶QgéÝqÔÏh(IIIv®¡ælþ,'   «•€ÑE­ÌÜ¡U0{-ÏÞCƒBƒ°ÓõšFŒ õÞ´­ŒôŸˆ´tÁ•ç…½kÄn-´,œ¸.Dg¨PRR"°Pïß¿_ t!’srr$%%Å ÓsçÎ „õÆ­àmÞ¼¹õ±1?VÇÜ·o_`Ìú HJ½zföu$ߎyV6lØ`ÇlÑ¢E¥cbŽpCùçÎ5ò¿ÿø¤e¤JÃf ¥Avk))-‘£ÇÉ–CkeýΕò¹ëÇÉg®ý¬Ô3ûƒ? ÔÏ»©1‡­B:W0«ötË‚ö…¶5¢]…vÐvnEÄÚílÒ:AkÚÝ´¶AYe›B«[}}CQQ‘8pÀ èF‰nYYYV@Ÿ8qBrssÅ<ÙiÛ`fÍšY ¯ï€¦cNâê–Êùº¦_\™Ô3sL,ɰK¸¦KËNu$7ï“czçÍ< ÄèDÐ8$Ñ*†½‡©âý´Æh«õH{Û ,¢¶€6; ´^cm«yÄ€´ßæŠg¤ãB ];™¬Ë´ºº¦ªÓ…Èu7´E]¨qQë2„·+ÊÝ1‘VQ޶•Y’”/Í›gIfz†$&Ks\]‰7® qfÞ8§Å¥ØÌˆfKJ:/š‹ì=u*äÁlæ!ĸD{ö Š %ÞluÏÅRRPGf5 9f°}±œH€H€H€®rVšcPñŒXu¢[†v®ó fôq…²æMqô!,mD#vNpÛ!ínèïæýÒ*¤Z¥+k`­g¬‚áŠgÐv§fúúàÚ¢O(±‹±f3VïP­1ÆC_äˆÑ}BÙ¢~GÙž·FŒó†ÑfE#¤Sâë1ˆ!¥nã§]q]”˜/žÊ-9ׇÓvä?$@$@$@${T âÈT0«8††DðÆ*”ËkËÿuûhÚ­¿( Ík´]¥íÂÐ|iÆ;yÍ»-Q¦ån¬åˆU<»éºjéusÓxa Þ<ˆeë­%z_5?,Ãm ¤±Œ jw,M£ëGCl«ˆÖñÐiŒ¾§OŸ¶oD»PsmÕMœþ‡ùä´´ï˜* u̓„f‹¯ t™I—Jb]óRsÚ'õëIëìë¤(Ÿ¯1×ó˜H€H€H ÖP]ˆX-Òj‰hFÔ¹1ʵ=Òn½Û¾¼6Š£И‚Æå¹‹ÿE»¡ÖÍ»iÊÝ|¥VßÔÔT+xaÆ›]­VaX‰!´Q¥„úr>x0í!ÊÑí]<6„6ÚºKçá`½¡ð\™|¦ÙPÙ’ûÉK3®-“¤¤®qÿ¨øÕÁ¼ŒPJŠË$wÿ9™wNz6&…çŠhö‚džH€H€H 6€TÁìÆÀšW= H#¨@.Ï•ÿëÔZ‡>Ú>Xm{Q€¾h'£wŠlÒïà´­Æ€Êm:”Ð5m¬ÕnX‹V`X¥áç Á a ¡ 1Œv°>Â,` ´…ÐÆòt"c" ¿ŠgŒ‘ ëv¨11FF½†ÒµÑPÙ±ÿM):Wl–ßËÔ3'#ÆÏæ˜ùŸ’#ÇÎJ·&Ã$½NC9uþTÈ1ƒÍŸå$@$@$@$p•PMa«¢ /A±jHÄ®Ör?A¬mM—ª…h´NN÷îæ‘Ö¼k¹Æ io¬u•ú@C`ú  ׋3gÎX· WìBHÃG"mÔ2m3žÜ1!ޱn4^¾‚4‚Z°á¶t¸cBÄgdäÈM­'ÈŽÃeïžOŒ(? ý,Åç%=¡½ô»ößäÌɳVðc_¡æ‰z   ˆA-hŽMÝ6 4F­sËC jôuŵ7q* • h#>u’~ƒyëÜ<Òº¡¯Öi™Æ. oY¥/RÁÀ¼xývaa¡ÒXëYWÍ€5å¯ê÷ŒCªÌ²íŽ ¿1áÿɘج×-3¯3®!Ÿ ¼þjˆÿ#s­ÅmÕÏÇÈ@$@$@$@µˆ€« U«`ÖXÛ Ö6•–{Ó~y”Ùíkt +²µ*W* -˘ˆ7èä½ån^Û„»‚ºR ´»Xƒ!DT÷ëñ#ö–¹}ƒ¥«{Lzˆã#GŽX÷w¿jmÖ¹jÞmÃ4 ÔЃ*”«0¥%õ¡Ä/ê¼m*ëWÞ«âßHôEƒdÜC¨7íæµŠç@^0‡´½Æn¿2·>XZûiì¶ó+sëýÒÚb:XÐ6ÁêYN$@$@$@1LàMhŽUE4ÛÕ—šWQŒ:·-êµé*‡êÐ~¢enŒt8›÷‡?ü¡ÊÉH€H€H€H€®*Њ¡,Ï8WOêÁ¡ÌÏ®pÖ:mu áâ4дãàPænî7¤ƒmú®sÔkZãŽfe?šr    ZB Aƒ£Í¡þËlxH?Ù»±7¼wƒÀņrMklŠåH£Ac<+H—W]üouZ udÑÈkZc-ÓX˽±Šm”3 Ô.ЀЃÁ^­¨yÔ«^Ô2ÍC»i´­– ‹f0de}uâh§iíë—×:´¯ÊüПH€H€H€Hàê# Pu¡ãhüòz”¨«,hÿÊÚùÖëä|+=…:=Õ6«uÞIiÞÑÁÍKûí‡e$@$@$@$@±K ˜.tËqôn^ÓJÅÍ#,hÆÁÚÊ#ÐN>‰`; V®Ch=bÝtNˆµ^Û3&   ˆ}Ѐ^M¨ZG_™F V¬<"¢:±ˆ:i¬ÒX›!¯ešÖm¼i·¬:ç‡qH€H€H€H€®|jHu5$fíÕšwÛiZRókyÔqM TLÒ¨7­õZîæÝtÔÇŽ$@$@$@$@W%W ºiŒ›GZƒ7íæµMµÄÑ hÆáNíýúh¹_îØlG$@$@$@$ü4¡–y0X¹·›GËsaþ[ÓËØé4üLËt⣷NÇaL$@$@$@$ûü´ jE¿:Ñr—Žöq˪œiö¼D%ØÎ*›˜·^ónìM#¯[°ý²œH€H€H€H 6 ¨tc©æ5íÆH# M¨PY½T¦C èP{ö©sH«½Ô¼Æh§iĺ¹åH3 Ô.áhD·KG˵ÌÕ˜Zu\º²IèhŒöšö”[^Ù¸¬'   ˆ-~ZÐÕ‹Z£Ö´Æ5N¢&´„ÆîÁ L7·i-ר[Ï< @lP¨±÷hµ±7h™ÆÞú*ç#ÐáNÄÛΛw'Ž:¿ÍmÃ4 @í#à§+Ó•.¥Pm£igûTewBnÚŒ›Fm§±[ïM»í½u狊ŠäwÞ‘mÛ¶É©S§àñìpÀ‰'$++ëBSÕF€l« åE‘ëE8ª5C¶ÕŠÓööŠk¤N]cã*«Ûû‘Åòr0r(+-•ý÷Tÿ «Å#–••IzzºtìØQn¹åILL¬.áê@ý눤½{åh:¢yWE@G´£ ݃Ö& @ë´<êâù7¿ù4nÜX¾üå/Kƒ $..î’ñ¢Ú‹RgÂòrf†ÃÇ;?–¶mÛ^¸¹+M²*'Qd[q1U¡^Ž6®çãyͺ<ÂLaU7¯Ù ˆU`¨§AÏѦyrM³F3Su{‘n׿ð³+ÊkbÙ È—š/%G•·ÞzKæÍ›'÷ßMˆh1v¯iÝ)]¶t¸:’IFÒÖ=PôóöõæÝöa§W¬XaEó=÷Ü#uñ×€;ºZ¤=‡m‹†,/VÁßâÉWGõ_d[þWWÝlɵf¸bT²­~¶ygK$»ÈÜgÁ|hÙÏ-÷ƒ •,/Gp ´¯H•GÕ/¿høø¬ø4ÆÇÕ‡ËP¤tUNÃ=z´,øÝïškÈ!Ú¤*±÷bGÞ[îø‘ôC[÷0}÷®€öí\I¡;Y7nÞ|%CE_oF~ø¡<ðÀv䬵¹R<¶)ÿñ!P\Z"%,}ªYTd[x!º’k8U¬"Û*ôé~<¿DΔ‹=÷£Êýðdy9¸H8€kI‰Šhð,Šˆ€k‘Fºÿ­·Ê¯ýk—kb5Á¶¸¸ØÞÌôú¯®c9þ¼ÄÇÇ_K5Áµº8†§¦Î]¨}FZw¹Ø~òÉ'Ò¤IIJJºdŠ0Ž`Ãõ á\Q™äŸ¿rî±Åø[OH¸êÑ‚k,~v}Z÷ e‰žJ0× >K«ûóÆçâSìõÁê|†‹¬èrßiü³À̽õÞ|dGgZçççúàäâ«ÂYO|ùn ㊽թH¼úê«’››kè—óGù 7Ü íÛ·—… ÊÈQ#íÅ¢íuGn{-CIù¦M›dÝúu¶{jJª´nÝZz÷îmçÉ8‘î7Üööḛ̂Thv¦¡ào¿õ¶¼ñÆÒ´iSËò–~·Øž‘Œƒ5Õ~üã%3#S^xá…Š#*.'óHÙ.Z´HΜ=”É}÷Þ'p_ºùæ›å;ßùŽïuøÚk¯Iã&¥GAÇñcŽ/¦Ë–-“x)«Í›6ËúõëmyJJŠ´jÝÊ^ÃuëT¸QUôÐö~ã£Iu•GÊóÂ= /7¯b¦åîÝ®ëVmóªìø† fÏÝ“ßyÒN ²ö:ÙËÅó©N¶íÚ·“ß/ü½Œ5*ð òß×ý]¾1éV§¥¥É›o¾iÓ=Æ_þò—ò‹_üB6lØà{£ƒÛ÷XïõÙ§wŸÀ烷½ÝaÅ?î85U^P\&EJqÝðî›ò÷UoHN£¦Ò¥G/¹¾O?),,×—üNÜy·¤gDþð÷ñ£¹rWßÖ2ÿ¯¤MûÎî!û¦Ï™ûÑòWÙº¸¸xiа±t¿á&IIMóm9 Áµ4?»†*·Ü|‹½Ç»<«ûZ5D—+žQQQ‡<´„tƒWj16ïl´¾Š» ¯{u h¿É{˼y©–#Ö´ÖEã[P½zõì ^3bÑåëY×\yþÙgŸ•sçÎY¡§hÖ¬™¨»é¦›¬ØÒ TÛh¬¼[¶l‘k®¹Æ>¹ê×"ó‡?ü¡Üu×]òÑGÉ| Ÿÿüç‚9Êñi­N—\¿å³ó›Ã˜ûÆØ FŽ)›7o–7Za€~í?•rsêq}àøüÂå˜g¤lßÿ}9~ü¸.ÄÑ#GäsŸû\`ú#îaÉ{\î±à !„ágº&òs„W8×p`’&áΧ&Ê#åŠ9<÷ìs¾÷€®]»ÖÈ|OŸ>-°²vëÖ-0>ΛÝ̯>5Í)šñ«“-¾\ëý5##Ãóüyó­Oå¬Y³lþäÉ“NÊD9¹»¡Ž%’ë3Ô8vBžª£}¡zçK*>›*ÆGÎïÃQËŸxð^9yü¨ô¿c”ìü×&Ùòá{Òí†[äÌ™³2ÿçÏÊu&œši®¡ÐãäÚo-ˆMš_c÷|¾âÚ+6±;§`ã=vLžþ°Ü8p¨ÈÖn0¿ÇËïÞÜì+¢ƒSåàzµvíß_~~ !ÁÀòÞãu&Qפ;ž›Æ~ ·†æÒ_sÝvUH»ºÐïOC£¼|"å;òæýÚ”·ŒòßêÐQN£f»%''Û“©?)àg=á•í~<3gμ¤üªÂÇ   @>ûÙÏZ+ DK°““#?ÿùÏmõ¯~õ+yüñÇå™gž±Dës¹ÊqÜ‘;V@ø¿ÿû?ûe?Ájˆd ís9âOs^‘²}úé§Hž|òIùûßÿ.?ýéOen"ØqÍ™3Ç6 VïŽáM‡šï•t ‡š§÷˜Ü¼ß= Nî˜ÁÒ°xÿçþ§ý‚ímSSûôî'š|u²Åþ½÷×µk×Ê×¾öµÀ=Ç“òÑ8œã¸’®Oï|‹*Ī>ß®’WÏ[¾o÷Y·êÿäw+¶‹/î±å:‚·^z¶üæÍvŶ`ã ü¿fL•­ÚÊׯŽSRѧ،]ÊÇ÷Gíã|\:t»^Žå–/ ê$oþåOrÇç¿l»{çï7Vw9¸ê˜åÇúß+ñ³kÚ´iv¬ïÿû—L>’c»¤söj0׌ý]CsÕ†pño©1zÄ8™XÊ?q…ÚJL=6´Á…ˆ‹i·ø‡µ>aýñ\þ7âów…qôÖ}è5ü±¹†µLcݯæ5®Îòh¸‚®Ƙ×Zϵ÷¢¹öÀuø;Åß6®]ôAÙãÇËË/¿ ŒfO­`ŒuêŸzê)Áß'úâC}Ýs×µâÜáK’ÎEÇÇ>ܲËY^lõ~Š5ûq x²"׸ÀÝÈË Ç®×>V¸Õ<ÈV¸câ½>ÛùÜcûøÜc1–ë‚Dï_ÿú×­¡E™‡ºŸ›·<ßøêœ/5~Ð¥rάÆqÎøsäŸÇVê[^—h¯•wß~ý’öyf‰±ñwöwl·ã<÷ÔCòô#ã%ߎY*GòŽÉä{o•-›Þ7–êÙòþÚ•ò†ð IDATÚŸ+ãïè!+ÞxÕîŸY结ÏߨJf~k‚œ8uÚw>Åå¾'…F­c¾ iõ%=³¾ìúø#ÓçŒ<ûä$ùÊ]½åÞ[ÚÊ÷ûŠœ4r=®¿¯~[¾:¢¯ÜÝ·¥üÇÔ/ɾý5™ó“™¶Ö¯Y%_ÙWFõi.O~ýn9tøÈ%Ç’›áªçÉËב÷ï(ÚÏ.|f=ÿüó]<òˆýû]µj•Üxã‚Ï®{̯˸ft>¸7à~òCs¿ÆuŒ/ñú7?{ölÛ÷·¿ý­ý{À—IôÓûúàïöñ;.ô‰¦\稱Ã|”baImеÊ ¡‰S;n°Œ}÷Ýwqï°.LˆUÜÐñsë9ãçsº"›úc=&Ý»w·åÓ§O—áÇÛ5¨÷íÛg×EDûŸþìgöçrˆ´…0ÆæäñaÇ7û˜iÔ¨‘ð-‚ðýæ7¿igРAÖWsèСvˆ&L°.*¯¼òŠuåzçÎv,4€ˆlÙ²¥Àªó?ÿó?òø·¿-ÿ‘Ì [¸¡~ýúòÐCÉ¿±ðÎêÕöe&xæômgNXAeïÞ½^X¤}÷îÝvßøB?I|xá©ßuëÖ nP‰æ£{ï½7pž¾þàƒòïÿþïòðÃ˸qãdéÒ¥7ø·6í ¿ò•¯È?þñ›†›N$ǦÇP]q¤lÝý⦆ëÖõýG=ÊæÎ+¸FæÏŸ/Ï=÷œüè¿þË :Ôƒ/¾œèq#klqÕ5âþÚôÇ/!?ùÉO¤W¯^öºFßBóeÊ»?”ë5Œ:ü­è5ÜÚ|‘ñk>5¢á nû}î¸öFú\{x¸ ׎÷Ü+ðs&Â'{öH»Ã‡ÇîeŒR\§àôç?ÿÙÞ/ÀÉ=wó*ÎÝ9ç®&™…;vu²Õû)âøq¬¸n¿øÅ/Z¶xaƒ—öë ÷kmÜ‹Áÿ»ßý®=Oð›öïõùB˜÷XìŠÍ}eòäɲuëV›8p`à܆ºŸyç,¿çh¡ÄÕ+’2cè­SaôET§ÂãÒòéwïù錇ä]s½}â IÉl`ÛŸ=™/>ùX¶8'yñEÒãîGåŇÈ ÿï‡rëØGdñ§IvëÏÈ©´ŽÒf@3iñî;R¿YkôÅÇ%!%]6:m§ù£é“mûž£‘yß-‹þ¼T>ÓÿîòY9ó<~¤üól{n±œÞ›/ï½ö[9qôˆd´ï'›HFÛ>rß½ß<ñÓIýdñ’¿H·›‡ÉÉÜòãÉ£åæ{’/~XíÞ*øþDépÃ`ùç"9{P~üÏË=¾$mºß(þÑC2wÎ/dÀØoÙù…æS^ ®‘Ü¢ýì—=Æ›/Îp=fŒ ,°K¼áó_ ñ·Ž/bS§N•_÷Lĸ7à‹ ®{ïß< =ø²/oßúÖ·×¶÷>¡÷øËyŸ°Þh–’’âZ# cÞ}Ø|`é·!œ`ÝìUÆ?°pÂ…Ûÿ÷‡ì›6¾õAè"à›+,©ðW‚`Õ·óèü233CºcÀzxÝu×É®]»¬ØÁ‡1ÈÂöƒ‡¸ êá‹€v˜3¬Ò°¸â'Ê»ïÆ ®<À¿rµ¹¹BtÃÒuýõ×[K:öUÓ¢ 7¬©ð„š“Öá&„9ƒa‡ìT!2pcÂML1&fÃÍà pk/XMá[úÏþÓVãËVÛÀ‡ ¸ÂÊ¥ÆójLãF wXña¯‚ËwÞiÙ\{íµö‹nþ°ìõë×ÏòÂ5vñ³—Žì¾´å•[âw÷Ú«ì¨\Ƹ¶ña¦xÙ„¢†HÏö»Òc?¶Þ9ão†°—PœP‡çD`9Æó#0šüë_ÿòÈ»>CÝcÿô§?Ù{;~!@»û·»è¾¡÷¬ªÞcñÂ#KR.©ØÊÓÁËŽJÆ<5_¶o|K~öPÙ½yé[Þ­ã¤d5–Ñß6÷âßýHþúÒtÙ¿íŸ2øv_ñÉ—$ñ‰õ$9£¡Ô‰O¶åè?xÂ÷¤û 1Ò¨ÍuÒ¤íu¶ŸŽï'Ú¿úâãòñåµ_ÍÛ¿ò´\{ý‰KJ—îƒÇJj¶YM%­4nÓUöýëvžÿxk±ÔO[Æ>jÚ¥I󎽤eçÞö+ÆïÍE’šÕPê7o/'̓-ºô‘ï­ We|ÀӾݓ‹ DóÙ…‡ñ+( U‹/–¾}ûZ‹3®¡† Z7 \ƒ0HÀ"í†`ó©©©öoºîŠ4Áú¸ãÖDºÊˆ«òÍÜ¿07h¯X1mÆ „7^Ü€±Ù||S6ÿ!T&`©„à jÅÖ15‡_4öXÉßñ°!,yHãÂÒ6Úß[Ó˜>@aQ…ePE êñ3 ,ˆøé"zûöíVdcó™Ï\´”¡ÖøVë<ð€›¾ë›l…ø'ÔÜCtü‘Ã1^°kXÛ\ÎóöÎ=œýûÝ*»öÜó ûDYeŒÑÖÛs¬ìÜ…s5Ù¦:Ù*/wL/;?Nhk!D‚ w—Ú»>CÝc!x`´pï;îüBÝÏ"¹ÇÖK¬+ɉå÷&üUÃ~ê ~å=n½K:öì'øÁ×dþw>/Oýi‡$%”“œ'ÉIåéŽÿv‹tê{»¬]úßrÿþN22ËØÄ>âêÖ1Æ…ºRÏ´Å~‹+æÑ¬MG;'ì711IââÍ+ÆC?öƒpýà{¥u·>Ò°E;I¬Wþ+@©ùüZ>ÿù`åÉhÐDŽ|ò/iÑ¡‡ç܉ÃÒôÚ®’–’8Þ¸¸ò¹€ÅÙc¤ðÜ)yõ§Óìøø'Þng °"¡óqËÁU¯1·¼²t¤Ÿ]ø 2VI‚øyÁ„8ök¿°àk ørçêoÞ½Þ´?âP}ÜvUI[±\1€MÈVO™¿§ºFJ|¾@{ÁÀ‡Ï‘X ”C !,¿˜¸"àâÔ y¤5¸i· åÞ5õ"GŒ:o^ûã'–?þñÖ"¬nŒ{…Žç7¶öذnÀRè ¿ø6‹o¬ør!ªcág#\¼ð„+~:BÀ~õ©]üáöïßß–Góî/š¾ø€ƒ„;VÀ—¿9Á]v,±æ|aÁ—°Â|pÜø v^ÐNÏ,Ù¯¿þzà|èØU96£*qUö¯,ôÓy¸Ç2ä´_½r² Í?à…¿)íƒrÜ@½í´=ʃ]ÃÚærÆÑpE¿~•]{.#¤qÂÊ.+/s°@=˜ºý½íGpÛØ‚Oñ?F•M}üú‚Ë y·­'”¹m”wŒ…€ò`×g¨{,¾ÌãÝÆÂ³øEû¬®{lr|œ¤$• Qì# (/|lÙb¿ò”¤2æ[?–£Í³7­“–ËïI æ˜+Äí¿6®½[×Kç>·ÉªE?‘7ßaqÔÐ F¸ÖÃþ‚.1¢!ý+æ‘`6Í—OÆükÚTì£ãõŸ•k:^_^Uñ `ùïž—¼ñ{yâ7ë$Ù¸‡üü[w ö…q:Qÿþ[4"ÝœK+ÇÍX§IšYzõ ›]cæ/Sžÿ«±_0œØTŒ_Ñ-0/pÕkãB£ðR‘|vaD|6éK_².ƒøû‡Ǿñ‹4buÕòî×±{Ý" óöÖ£Î[æíƒ6Õ\ñ7ÿ#eÓp9ƒÁß>/bY@—ÿUàØc0àÂ2Høy.HwÓ No„È»¸y7í­óæÑNÿøà„ÅbÊqqAÜbRwL7ñÜ2MòIŒ¿]¸mœ:uʶÅE‹ŸØñS=~&‚P…0ŽýÛ´icýˆñp¬h(ÃR}gÏžõÝ—îÓcæm§yXÉñs-,Ê(ƒ•sÂ7æPsB¾½ÃKù¡/üÇðG‹Ÿhqܸ !à§Z¸ÌÀb¨ûE¹¦k@î6ðeÅ—üÔ ÁŠ+l·›F{÷¼ááTüDWXXØêaapûE’Ž”­;¶{|••£­¶ñöóæÑ¼°’ |>ñÓ$~QAÐ1¼±ßnpO- ‡­¶&ކk°ã«ìÚïF¸ïà "¾ÀÂÍHÿÞtî~|p½Ãµ ¿$…jl^è£×$bÃ5VºÐúªÆÕÉsñŸ7_œìNÌ?~Çê £î™ø Ïàù üšUÝ÷XXvë%&Ñj,¬&®—dÒˆ+6où‰ýËžMk$ÞàC›Ýÿ4¿Ä™{ì5m;Ù<Ž×ö1ãQúÛY_“‰3~%_Ÿõ[9s"Oþò‹ïÆoÒªØþá…ýš9hÝo]µRûÌ'`ñ6VUm¯ó?wâˆ4hz¤¥¦Ë¡íïËÑ;¥(ÿ´Ý×õ7ÝaÒgeá3ÊæÕËdî÷¾,Çî‘#ì1ÎMŸgR;'+~ÿ©[zÞö)8™waž!ø¸®~çØ°þ1ž~Öýºçe8ŸzN±o|øÁnï½÷žõ¡Öz¿ãZ²d‰Ž:þQóT:VZA¬í!,ÑNYh¹æ5UNƒ¶EŒ¹#¸eZ®Ç…<ú"¯sдöCÞmr|à'ïþýûÛ/5ðñÔ~:Žö×}¸ü½u^Nx¸SŒE[ˆt°Eì7¾îuîØÁÊÝvᎧ¼íñwkÖ{íáZÂþÁ ×!ò¸ÞñËüï•Ú¸imq«/#ÊÝvzl¡¸ºÜÐXëýy\ŸÊûÐvë|4¯q¨òpÚ¸û Æãèñi{—Êðó¸Ë }ÐAçá7Ž[ç×õ.ë=ƒãÁ-Üca”€Oöïÿ{{]⹸5á¾ßT?Ôý ãëqi{ݯ[n'D´Ùà¾PÏl)ÉFH"ïS~ìàÇòü´òȦ2}t7Yõ?/˃3çIËk;H’é‹”'IÆíbîÓåÖ‘ã¥ç-·[——)Ï-’•¦ý‡«–ر~~¢œÈÛ/ßÑ^vl|ÛŠwÛßX–u>qæ8 /¿ù`î‰N{ÿ1“äôñ#2í¶&ò‡ÿ÷-x÷Wdí_+—/’ìõå[/¼"gŽçÊß–Í5‚yŒ´hÛERÍ/­Øoók®•oþd‰¬ùË|ùæ-íü~üðañ¹0Ï„Ày ç\Tå³ çõ¾ûî³× ®!=ßø•«h`ý}¸âY$|®é|Üë}¼×*>ó!ˆÑ¿Dk½~£6Ýgu~v阺?w¾(ƒ€Víe/„ý§Ž×ï§R~G2:²¢Ü‘önPØP®i7ÆyñW(!Ì àào„‹×°$¬`¸ù»+À’¢=ºu•¥ñ"ˆôHD/ühñ‡Ì0Ôœð3)Ž?•º×0,¾x(ÃõKtÛ„J«õÞï…êWSuѰ­©¹ø ë®;ÜD¯¦P\+»öpmázô\ø{† ÃÑÕj‚m8Ç]Ӝ¹Çâ×'|Çê6nu?sÛù¥½¡PZµll?LÕ;Ám‡Yo9î±¹ûvIbrŠd›7ºÁ¯=êC•=|@²ÌšÒîçJ¨öÞù„ÿÔ±\ɨßÐNñÔñX°zÇJ³Îñ_ÿúWk1ñ Q¯ w.øãðŽWY_´o×®]Èf¡æ¤_üP¿C¿ºÊÊðÅãJ Ѱ½œóWßú˹ÏêØWMq uíE{m¹ÏÕqì5=FM±­lÞ5Í)Ø=ÖD<Ãûûþðk¼€¥Ñ{O u?«ìØRͯ4¯¦ÂG9¦7ÊëJFç¶jåŠl*ÌòÔkËŸ£±’"ä~#?-µ\<£gZŠ1UŒ?Ó¼M±cÞÖïù­ÿY éYõåÎ{ÇIRùjå;2óOk}á…\½‡q\àŠ# Uýì µ¯ªÜOáÊùiW[jš+ZmñiO¤ûŽy ~šÇO®îM^…³Æ‘‚»’ÛãçM¬] ñ Kï›o¾yÉxU?XFjU«ê>kK²­™3M®5ãÖ&¶°Fâa°>úÈ®€tÇwX·:}íxuQÎÌ,6~¤f4WëA jˆÁr°í÷¹;e÷¶­rhÏV¹ÙpqÿW%#Û¨çj:ÞÌLãzR±*‰¢d9Ìn %ÎáÆ­;%,бb^@ãÆŽ“‡{8ôãë G:öÂV“®ѸKÔäœbel²­™3I®5ãÖ6¶xv¢¦CVv±qý«é½\iãו±“¨ÑIe™ùÙU=ˆ¡¥TOaD¤ñà44´W¬‡˜?Büô‚‡°VqÀºŒ­[·®'·&/^Xöcõ HMr gl² ‡RämÈ5rfáö ÛpIEÐÎX›‹/~AmÙ4(ÕŸ]AéDUÕµ°äì_þòûË Âõº3E5ðÞ)¦4¾ ÁE>Fx¸KÍ4oô~kºÂϧG$@$@$PMTÓ8¦œt6¬­ÍUtVL hõoÆ·M¬ÃüàƒÚµOœ8aýtxñ“ DO Ôâ¡^¸n@{áaBÕ`Ñ|e÷Œií¢Ç‰ÄCoøf¤ßŽÜz¦I€H€H€H€"# BYãÈz_½­k€ÖS¤'Xc-gL$@$@$@$@áˆÍe(Â9r¶!    (P@G]H€H€H€H€j/ èÚ{îyä$@$@$@$@Q €Ž» Ô^е÷ÜóÈI€H€H€H€¢ @4v!   ¨½( kï¹ç‘“ DA€: hìB$@$@$@$P{ P@×ÞsÏ#'   ˆ‚tÐØ…H€H€H€H ö €®½çžGN$@$@$@$ è( ± @í%@]{Ï=œH€H€H€H ÐQ@c    ÚK ¦tYYYí=³ñÄV<¯]»VFŽ){öì1þ×å¯-/**’;wÚ¶(›0a‚4kÖLV¯^->ú¨óÃ? ŒÅ @døa˜¼ ~aEŽ7‚8;½ž¤×K,³Õ‰KÄ8|)°"u$+%A$)Aêš7‰×7m‹LôŰ6»"¹  @ œ—,Y¨êÓ§O Ý»woyå•Wlm×­['Ï=÷œ¤§§Ë€¤cÇŽ¾ûmÚ´I6oÞ,¿úÕ¯¤Aƒ2|øpÁ‡‹-²–íÀ˜    ›tبŒD6ÝVéç¤ØÄiIq’‘/©Y ¥ÿ¨äÝWæÛ‘nö%iÖ¤‘ä•X['_Údb…Ž4ß=Íœ9Sš6mj-Å´¢ á²1gÎ9pà€Ý233mø7'&&JóæÍ}Çs áO ‘ݲeË@1Ü>àÖÁ@$@$@$@$‹Í¡ÑQ+zÁrœb–¨k\ºKÊΗHJ¢Ðõ’¬…yÈÝ÷Ë/üÉnCî/Ùiõ$3%QÒ“ã%¾¬D²ŠvÚ¾^ë3À¥¦¦JÿþýeÔ¨Q2uêTër¸^´iÓFæÏŸ/ãÇG‘ 6”S§NÉéÓ§µ(à¾(¨HäääØvG TÁ½c0 DG€:Ln¿iiirMÚ i—Yl5ÄX “$;#QÔ“kZ5–fk'õ3ˆN6®"í2J¤qò1Û×O@ëî§OŸ.{÷î•—^zÉŠè#GŽØÿðPᆠ!b•FÉ‚ äüùóÖ7®ê­ã!Æyð^¼x±­ß±c‡kÈ!n3¦I€H€H€H€" @,h¼°¤ðý¹’_G2R̓‚Ƴ¸Kƒ‘ÄfËÎÉJ‹S-Gþ6ÇöAßP/-™1c†õm†•xÒ¤I2qâD<ð@ж¬    ÚH ŽŸåRAÔ1¡"í£Ì»AcC¹¦Ýï´F^cø`#eºiygã~ðKSUؾ}»µÀV׫´ñ`nn®¼þúëòáö}Ò÷ Ó¥{·&’–.’œl¦hž#,0ï)8+òñ¿òdù¯gH—v-¬p…ÛD( ´ßÂM«qÄÇÇ[ 4|Ÿ±!`é:,{W™0×qaÑÆj‹H€H€H€jŠô žájß¾}Ô»0‹|ÕtÆ[â°„Y±ÙJœ y-GŒ:7FÚݰ҃æ‘öÛLq`EÔã×{#í 1­¦B·—CXy`¬fõ”ËÊVÊš—‘-×t“î· ‘Ž×u°cìÜü‘¼ÿÎr9¶{“µ£-úD*ž1ÔàÊÖ‘¸}0 Àå PÝìrÌ9’}Ä´€¾`@Iè¶°à¶hÑBàGŒk*¯]ô‚¬úm‘í qãÆ¥ÏwÚ¥é`y¦Õ74SÖ’ ÄšÐ`W¡˜Ð5‚"9##þÐäĉU1`5ÎÊʲÖcX‰£±<×Ô¼9. @Õ P@GÉÂKÐakÒ¤I”£° ÀÕFð1 „I€:LPlF$@$@$@$@ @Íë€H˜ªcO IDAT€H€H€H€" @è`¹M±< ^©½qãFÙ¶m›àAB<\ˆÛ¶m+={ö´ÆúS¨.¦I€H€H€H 6 €Žâ,cp,_·|ùriÓ¦Lž`õ®Ž°ÿ~ûò—dûzÅê‘c @ì tçbøðáòzõjû6Âcu.**’óçÏ ^ó q|AA}7Dôš5kl¿7òôêÕËZ¨;uê$C‡•yóæE0› M—.]*[·âm—æ—&nݺµMGúÏ«¯¾jëñÇ·¯ä‘G"‚íI€H€H€H æ ÐÁ).,,” 6H‡¤Y³fR\\,(ÚÐêë ¡ A]VV*M›6µo#|ï½÷dðàÁâgÑ5k– 6L^{í5yðÁm»æÍ›G0«‹›bnðËŽ&ôíÛ׺¥àmŠ8†Þ½{Ë›o¾)ƒ Šf8ö!   ˜$@ t§õÌ™3’——'-[¶´æüü|+  ‹ ­åÖgjˆÏ‚‚BIII±B~Ñè,@€÷èÑÃZ°Ož7nœtîÜÙZ—áŸ,äääÄ3BBB‚õëF    ( /°™‚‹ÆÙ³g%33Sêׯo…&Ê ˜ X†xV¢8))I²³³môE{¿°k×.™={¶À•£K—.¶ ^>mÚ4Y¿~½ÝßÂ… ]Ÿxâ +ž×®]+#GŽ”={öX_k4À¾wîÜiÛÂ>aÂ+âávòè£Ú1ñdeáý÷ßÌ n( $@$@$@$@Ð…ã‹)ˆ_X‘5jd­Ï°ÐbÙ:<èºp ¶ð‡F€ˆ†àF_”£Þ Éð™†p^²dI ªOŸ>4\)^yå›GÛuëÖÉsÏ='ééé2`À騱cÀ…$ÐÉ$6mÚ$›7o–_ýêWö¡ÀáÇ 8\´h‘µl»mÝô¡C‡dÒ¤IòÓŸþÔZÛÝ:¦I€H€H€H ¶ €Žà €EîpÑ€†€VíñŒz´W?i¤ýÂÌ™3­¯4,Å´¢í°¶ôœ9säÀvƒåþÍp³ÇO«i@dÃåDC×®]­[‡æ½ñ±cÇäÞ{ï•o~ó›öABo=ó$@$@$@$PÛ \l­í4B?1|š÷îÝkÝ$`y†b„µYój¡†€†‹úz­ÏØ]jjªôïß_F%S§N X®!¨±Æôüùóeüøñ™a½i¼ÀåôéÓ²`â>ÍhwôèÑ@[¸wèšÕŠ„?öuß}÷É=÷Üã­fžH€H€H€HÀ €ó2€øMKK³î𨠒!œ±A8C@ë†:[¸mœ;wÎöõкûéÓ§[qþÒK/Ù±9büÃC…XùCBÄ*p#Y°`µ„Ã7®~"/qÁj!‹/¶õ;vì°c 2Dw{Qü›ßüFv›‡ñð"D:6øx3 \ ÓÚOT^8ôÈSÐ¥¯ưB{_‚åìÔµû‡}Ð7TÀÆ3f̰¾Í°ÃyâĉvY;ôÇ}/¾ø¢~ÓÏ<óŒØ[¶l‘nݺùú@CÌ£ÏË/¿,X¢oFĘÁ–¥ûÛßþf­ÕØVíÀ¦û 5wÖ‘ €K º5˜;ö•®ê¬S1I¿eÞ ‚Ê5íÆqåÃõˆQ¦›–w6î¿4åQ…íÛ·[ ¬WäF5˜éÑœ››+¯¿þºuËxì±Ç¤U«V—ˆW0…ï2Dn‹-¬p…ÛD( ´ßœà~Õ8 ÈaV÷´…/6¬à• sm<̈±H€H€H€H ¦@Ÿ@µoß>ê]˜7;ÕtÆ[â°„Y±Ù°:ƒnÈk9b”»1Òî†Ñ4´ßfŠmy 6zÎÿ6Ó‚j ˜Â ÀxUw¿~ýdåÊ•òä“OZ+-\"`­Eøè£ä7Þ°«_À’‹¶è©xÆXxPƒW(CXGàöÁ@$@$@$@$PuÐ2„VeˆfÄXSnXVâÆËwÞi—¦ƒå™Vß!³9 \Á( £89ÄÉö…&'Nœ¬Š«qVV–µÃJå9Š)± Àe"@%hc,A‡­I“&QŽÂn$@$@$@$@W<ÀÇ@$@$@$@$@$& è0A± €4¯    ˆ€} #€å6ÅÒ€xS߯eÛ¶m‚ ñp! lÛ¶­ôìÙÓ>dxa)m·7Ó$@$@$@$@W+ è(ÎÇòuË—/—6mÚÈäÉ“ËÕ!?~\–-[&x%7Þü‡µ «ëE.QL•]H€H€H€H€ª™t„@!ž?øàYµj•`õ®jÀzÖ{öì±k\'''Wu8ö'   ˜#@èN)ÄðáÇeõêÕö ƒ9Æê Áyþüyûšoˆkä ì+¸!¢×¬Ycûø½ ²W¯^ÖBÝ©S':t¨Ì›7/‚Ù\hºtéRÙºo»4ï¼4qëÖ­m:ÒðÅþýûˬY³ì‹b|ðÁH‡`{   ˆy´@GpŠ eÆ Ò¡CiÖ¬™ ʰ&´ú:C(CP—••JÓ¦MíÛß{ï=ñÄV<¯]»VFŽi}–ÕEûÞ¹s§m‹² &X·“G}ÔŽ‰ ƒŒ9cÆ yì±ÇdΜ9vU‘`mYN$@$@$@µ‘t˜gâVäFYësBB‚]¶16¬´MóXÒD47úú hˆä›o¾Y6oÞ,K–, ̦OŸ>Ò»woëö."À¿zݺuvåôôt0`€tìØ1àBÀ$6mÚdÇ…•7>ÜZº-Zä6»(åøŽ9"û÷ï—÷ßßZÓ/jÀ ÔrôŽà€EîpÑ€…YE²w™:¸b íÕOZ-ÄÞÝÍœ9ÓúJÃR|ðàA(FÀÚÒ°8pÀn°|#À¿Öïpü¤!‚1žë†ÑµkWëÖaóùçŽ;îlÇŽ<äˆöC† ñiÉ"   ¨bÚL´Fsª!ˆáÓ¼wï^몡ÖfˆYlx@ÖfÍ«…Ë¡/Æð†ÔÔTéß¿¿Œ5J¦Njý Ñ‚kLÏŸ?_Æè†õ¦ñ—Ó§OÊ‚gNNŽmwôèÑ@[¸wèšÕBŸ¬æÐpé`    HÓ&‘Œq%·½TÑ]ɳpnº2F„Ý|›Cü¦¥¥Y X˜±A$C8cƒp†€Ö u¸xà¶qîÜ9Û×O@ëΦOŸnÅ9^À‚±áFÿðP!VþЇ±ÊÜH,X`-áð†«†ß…ŠÕ3°ZÈâÅ‹mýŽ;ìXÁ,ÊæêfrèÐ!ë*Ò¾}{"c   ‹@uj°°vx™Å´€®n–Ð¥¯šê÷ìv@Ô‚Œ>è*àaC<¼÷ÜsÏÙ‡'Mš$'N´ËÚ¡?4|ñÅíð›~æ™g¬ÀÞ²e‹tëÖÍ×b}^~ùeéÛ·¯}3"ÆÄru~áü£ëž{î±KëÝwß}­èáׇe$@$@$@$PÛÔñ³\*#ëT¤ýb”y7rl(×´ÇU”k lÔ#F™nZÞÙ¸üÒ”G¶oßn-°^å¨3 šsssåõ×_·nX©¢U«V—ˆW0…ï2Dn‹-¬p…ÛD( ´ßœà¦Õ8 ÈaV÷´…/6,Õ• sm¸e`¬PA"l×®]Äó 5.ëH€H€H€jèè ªüŠm?øª¡…·Äa ³b³•8òZŽunŒ´»•9y¤ý6Sl˱ÑshçB«)ß.µ·«Yôë×OV®\)O>ù¤µÃ%î}ô‘à~XU–c´EŸHÅ3ÆÒ ‘ö eëHÜ> YYY\º.PlC$@$@$Pk P@GxêaÁ…U¢1ÖT†›Ö_F€•¸qãÆrçwÚ5ay®ÌêáØœH€H€H€HàS$@|bˆäŒŒ »ÌÜtU XaÅE +q4–ç(¦Ä.$@$@$@$@—‰t” !Œ±¶&MšD9 »‘ \mð @˜( ÃÅf$@$@$@$@$мH€H€H€H€H ôŽ–ÛKâÍ}7n”mÛ¶ $ÄÃ…x€°mÛ¶Ò³gOûá…¥´ÝÞL“ \­( £8sX Ë×-_¾\Ú´i#“'O,W‡püøqY¶l™à•Ü·ß~»] ºº^äÅTÙ…H€H€H€H š P@Gâùƒ>U«VÉCF8_k¬ÍnÀKSî¿ÿ~8p <ÿüóKu÷îÝík¿ÝvÕ™ž;w®Ý¬Þ $@$@$@$@5K€>Ðð…>|ø°¬^½Ú¾a0ÇXñ•óçÏÛ×|C\#_PP`×€†ˆ^³fíã÷6È^½zY u§NdèС2oÞ¼fs¡éÒ¥KeëV¼íÒ¼óÒÄ­[·¶éªüóì³ÏÞ®X•qØ—H€H€H€btg´°°P6lØ :tfÍšIqq± LE3ÒÓÈ—••JÓ¦MíÛß{ï=ÛÎoW³fÍ’-[¶X7§žzJöïßï×,ì2Ì ~ÙU ÿûßåÿ÷«2û’ @Ì €ŽàÔž9sFòòò¤eË–ÖœŸŸo…qaQ¹ˆ†pV]PP()))VhÃ/}ƒ¼”¥G öÉ“'m³+VÈØ±c­…z̘1öAEí¿{÷n1b„} â”)SóЀºÑ£GkVöíÛ'ãÆ³Öä~ýúYÿì@¥OûüñÇå¹çžó©e t˜×@ii©œ={V233¥~ýú’˜˜hÝ6 ˜ X†xV¢8))I²³³môÅ~a×®]2{öl+G—.]l¼|Ú´i²~ýz»¿… º>ñÄV<¯]»VFŽ){öì±¾Öh€}ïܹӶ…ÛÈ„ ¬ˆ‡ÛÉ£>jÇÄÁÄó×¾ö5ûpd°6,'   ÚL ¦´Ÿßq´'âVäFYësBB‚]¶16¬´MóXÒD47úú hˆä›o¾Y6oÞ,K–, L¯OŸ>Ò»woINN¶1\D€õºuë¬ËGzzº 0@:vì(~ËåmÚ´ÉŽ +5n>|¸µt/Z´(°7ñûßÿÞ pX¬H€H€H€H ZÕ©Á¢CMö‹éU8üDeU`âb€»üœaaV‘ì]¦®¨G{õ“v!Íœ9ÓúJÃR|ðàA(FÀÚÒsæÌ‘Ø –oø7Ãúݼys›õü©1\N4tíÚÕºuh^cXÒრáþðÃ[!cE~ÚÚ”1 „$PÝ,äÎ>…ʘ¶@W'Obø4ïݻ׊Kµ6CÌbƒ¥ÖfÍ«….è‹1¼!55Uú÷ï/£F’©S§Z?h´ ÆÓóçÏ—ñãǺa½i¼ÀåôéÓ²`â<''Ƕ;zôh -Ü;tÍê@¡I`nO?ý´ 6Lnºé&éÖ­›µ¨#ca    ('p©¢#_˜iiiÖ…fl–ÎØ œ! uC„-Ü6Î;gûú hÝÙôéÓ­8Ç X0ö‘#Gìƒx¨+èCˆXen$ ,°–pøFÃUÃOD_wÝuÖÿyñâŶ~ÇŽv¬!C†èn1拇uûÜç>g yøc3 ” €ŽàJ€€†(…x…0V¿gwüd¡®µ° £ú† xØpÆŒvõ X‰'Mš$'N”ÁƒÛþxÐðÅ_´CÀoú™gž±KàÁZì÷S Ä<ú¼üòËÒ·o_ûfDŒ9hРPSa @uü,—ÚÞˆ²:i¿eÞ ‚Ê5íÆqåÃõˆQ¦›–w6î¿4åQ…íÛ·[ ¬×G9ªÁL'ˆæÜÜ\yýõ×­[Æc=&­ZµºD¼‚)|—!r[´ha…+Ü&BY ýæ7 X!ÈaV÷´…2,Õ• sm<̈±H€H€H€H ¦@Ÿ@µoß>ê]˜Å¾j:ã-qX¬Øl%Ά¼–#F#íneNi¿ÍÛò@lôÚùª)_,þ…ÀXÍë)¯\¹Rž|òIk†KDçÎm§>úHÞxã »ú,Ïh‹>‘Šg ¦"íÊ‘ºUÀíƒH€H€H€H ê( #d .¬Ê͈±¦2Ü$°þ2¬Ä7–;ï¼Ó®é Ë3­¾Bfs   ¸‚ P@Gqr ˆ!’±´–…;qâD`U X³²²¬õVâh,ÏQL‰]H€H€H€H€. è(ACc :lMš4‰rv#   ¸Úà>     0 P@‡ ŠÍH€H€H€H€H( y @è,·)–<~ü¬üù•m²êýrèðY‰3~ÑM›§ÊM}šÊ¨á$;;õ’5¢Ý1˜&   ¸úP@Gqΰ@øÛïì”ï=ûž4o•)³gÝ%]:âAÂ2ùxWž<ý£·ä×_|Uf|«§ ¸µ­}ca»a    +t„'âù­•Ûå±g7Ë÷ž¾Cºá\¯^¢ì9–/ö}5))2å›·Éö]¹òè·_“ÙæE8om_£"zîܹҽ{wéÙ³g„GÃæ$@$@$@$@‘ tÄà¶qðàQyê'›%¥w;‘Ôt9p²Dv-”OŽž7[‘ì2Û>S–Wš$)}ÛËw_Ølûø½ ²W¯^‚·vêÔI†*óæÍ‹`6š.]ºT¶nÅÛ.Í;/Mܺuk›ŽôŸS§NIóæÍ¥]»v ¯-g    ¸@€è ,*MÊ¢W¶ˆ4o* Z6”…æûGœù¿n™;fú—I|J¦ä–É©â8Ó¦‘äž2}^Ý*ߟ!ÉÉÉ—ìcÖ¬Y2lØ0yíµ×äÁ”Áƒ[{IÃ0 :tè 7n ³õ¥ÍRŒ}ûöí—V°„H€H€H€HÀˆi ´ŸÕ·*çýÌ™3²bãIIhž#ÙéirèL©>S,oþu±üè±/ÛíÍWÿ(yçP^* 2ÓlÛœô ðR–=zÜCNžÐœyXt[¥Ÿ“b§%Å/©Y ¥ÿ¨äÝWæÛ‘nö%iÖ¤‘ä•H]cÏ­“/m2±BGšïžfΜ)M›6µ–âƒZQŒ†pÙ˜3gŽ8pÀn™™™¶?ü›Ãò“Þ¿¿¯eË–}wíÚUàÖáâââ¬À†; jÄCŽxˆVn    r´@‡y%ÀOØ5.Ý%eçK$%ÑèzIÖÂ<äîûå‰þd·!w—ì4cuNI”ôäx‰/+‘¬¢¶/ÆðX}û÷ï/£F’©S§Z?h´ëE›6mdþüù2~üø@·†  VË8}út LÝ7‰œœÛîèÑ£*¸w`ŒÊÚ`5ÇWÖ”õ$@$@$@$P«\ªèjÕᇰ¿iiirMÚ i—Y,ð®ÎHI’ìŒDiP?N®iÕ@Zš­AvœÔÏL4":Ù¸vˆ´Ë(‘ÆÉÇl_?­3˜>}ºìÝ»W^zé%+¢9büÃC…6l<„ˆU65j$ ,óçÏ[ßh¸jø‰h,‘ÿçÅ‹Ûú;vر† ¢» c9<¬Æõ¥H€H€H€H€. €¾À¢Ò4eáûs%%¾Žd¤šg…q/–9"9ˆÍ–%’•'¦ZŽümŽíƒ¾¡Bvv¶Ì˜1Cž{î9ûà¤I“dâĉvY;aéû…éÒ½[IKó°ŸÙƒY£ ÐlgE>þWž,ÿõ éÒ®…®p‰eö›Ü4°G||¼µ@Ã÷îòw• sm¬æ±‚ü°1î5×\¬ËI€H€H€H (è<ÃÕ¾}û m*«0‹|Õ´Á[â°„Y±ÙJœ y-GŒ:7FÚݰT™æ‘öÛL±-ÄF#£o®¦|›×îB`¬fõ”ËÊVÊš—‘-×t“î· ‘Ž×u°pvnþHÞg¹۽ɮጶè©xÆ`XeCƒW(CXGàöQYÀñ&B    à( ƒ³ñ­·E‹?bÄXSyí¢dÕo‹l{Xˆ7n,}î¼S°¦3,Ï¡¬¾¾;a! ÀK€:ŠSA ‘œ‘‘a_hrâĉÀª°geeYë1¬ÄÑXž£˜» \&ÐQ‚†0ÆtØš4iå(ìF$@$@$@$pµÀ| $@$@$@$@$@a €›‘ P@ó:     Ð:XnS, ˆWjoܸQ¶mÛ&xâ¶mÛJÏž=íC†–Òv{3M$@$@$@$pµ €ŽâÌap,_·|ùriÓ¦Lž<Ù.W‡¡Ž?.Ë–-³¯äÆ›ÿðÁêz‘KSe    j&@!Pˆç>ø@V­Z%á|­±6»/M¹ÿþûeàÀòüóÏ›®”ÙWyפˆž;w®Ý¬ÞÕpŒxu8Þ\ˆH€H€H€Hà˜öñÆ "Ha¼Ã‡ã6{ð IDATËêÕ«íÛsÌKRŠŠŠäüùó‚×`Cx"_PP`_Á ½fÍÛÇo.½zõ²êN:ÉСCeÞ¼yÌæBÓ¥K—ÊÖ­xÛ¥y祉[·nmÓÑü³hÑ"¹é¦›äûßÿ¾Üwß}òÝï~7ša؇H€H€H ðÓ=±„#¦-ÐÕí\XX(6l:H³fͤ¸¸XP†5¡u_¸` ¨ËÊJ¥iÓ¦öm„ï½÷ž -gΜ‘¼¼CPC@JJJŠ¢ð‹Fß`¼GÖ‚}òäIÛlÅŠ2vìXk¡3fŒ}PQûïÞ½[FŒaß‚8eÊÁ<4 nôèÑš•}ûöɸqã¤sçÎÖjÿì`pXÂñå@C¬ÿèq2&   p P@‡I .gÏž•ÌÌL뜘˜hÝ6 ˜ X†xV¢8))I²³³môÅ~þƳgϸrtéÒÅ6ÁkÀ§M›&ëׯ·û[¸pa ëOjÇÄ~óÀëÉáÃݽ{wù¾ ‡òkÊ2   ¨µ( Ã<õ¿°"7jÔÈZŸì²uˆ±á!AlšÇ’vØ ¢ñ úú hˆä›o¾Y6oÞ,K–, ̦OŸ>Ò»woëö."À¿zݺuvåôôt0`€tìØ1àBÀ$à’qa¥ÆÃÇ·–nø9û…ÜÜ\Y¼x±<üðÃòÖ[oÙùÿìg?ókÊ2   ¨µbÚººÏ*,ºp—€‹,Ì*’½+làaBÔ£½úIó%ž9s¦õ•†¥øàÁƒQŒ€µ¥çÌ™#°,ßðo†õ;?éýû÷Ûñàr¢¡k×®Ö­CónŒ5¬û÷ï/7Üpƒ-?~¼µXÃ/ÇÃ@$@$@$@$À7†} @@§yïÞ½ÖUC­Í³Øð€ ¬ÍšW 54\,Ð×O„¦¦¦ZÑ:jÔ(™:uªõƒÆ¤ ¨±ÆôüùóBVCC³ò^àrúôi- ¸o *999¶ÝÑ£GUpïÀ~«wÀÇ[ƒö§´aL$@$@$@Ða_¿iiiÖ…flÉÎØ œ! uC¬ÎpÛ8wîœíë' uÓ§O·âü¥—^²c9rÄ>ø‡‡ ±ò‡>„ˆU6àF²`Ák ‡o4\5ü,Üx‰ „[ÆÿoïÞc­9ëzÏni¢)QPË…IP#¢BŠDôp1DÑ?DF‰þŽÿÿ‘hŽô`LD Þ ñ/ÜZ UÁÄ’B/¥´Ýg}g¿¿Ýçw­õ®½.{­5ëó$ó>÷™çùÌþã×éìÙé¿å–[ús}Û·}[]ö¢ü9ÏyN÷ž÷¼§Ë“ë¤w¼ãý'íÐ1© @€.àÿËŸá t‚Ò¯ Œë½çö 6ëÕŽ­y‚œ9™;/å— _ûÚ×voxÃú_|éK_ÚýÀü@ÿY»ÌÏ/øýâ/þbм7ýú׿¾°?ô¡u{Ü㦾`>sÞô¦7uOyÊSºüeÄœó[¿õ[§.å©O}jÿíçäOúÓ»w½ë]Ýë^÷º©c5 @€Uàhړ˘ƒGÊÓò´ ä9Ò^å6¿òB{åy;ýÉÓVGµ?vòúÁ/MÚ—JýèGû'°Ãw”—:ÙdR‚æü¢]˼–qà 7t|ä#/ ^cšw—ä>âè×¼61ï ô´5å5|#yž@×ë!›w±óüry7O´óËŒ9×åRžzçµ¼ÒqÖ5_îÜú  @€q $>Itýõ×/½ÑÉÇ^2™œ¿—O˜Ý59înŽÔ«=yúÚ<åö8nê)O;&Í}ûi>‰ç2njº|45uÚa6&˜Ì×,ò„öÝï~w÷ªW½ª œW"ò夛o¾¹ÿC$ùúEžglæ,ˆÖ/æ¼Ã@9õYR^ûX4åë—c @àPÐg¼Óy‚›§Ê š“ç›ÊyM"ß_NÊSâë®»®ûŽïøŽþ›Îyò¼ÈSß3.Ãp @€-  —€O@œ 9t$Ÿ…»ýöÛO¿Š‘§Æù\ò<%^æÉóK2… @àœÐKB'0Î'èr<üá_ò,¦ @€ì›@~O"@€ @`Aô‚P† @€ˆ€ÚÏ @€3 Ï€e( @€QÐs¾íÎ @€lH`ì1بè{ÿâ†~:œ– @à±Ç`£ /¹› @€¬( €^Ðt @€Ã@Öý¶[ @€Ð+šN€ pXèúßvK€ °¢€zE@Ó  @€K@}X÷Ûn  @€V@¯h: @€Àa  ë~Û- @€ÀŠèM'@€8,ôaÝo»%@€XQ@½" é @€‡% €>¬ûm· @€+  W4 @à°Їu¿í– @`EôŠ€¦ @€–À¨èãããú›vK€Ø±Ç`£ ŽŽvàGÈ @€‡%0ölÔôaý¨Ú- @€Ày ÏCÙ5 @€F# €Í­´ @€ó@Ÿ‡²k @€ŒF@=š[i# @€ç! €>e× @€€z4·ÒF @€ÎC@}Ê®A€ 0ôhn¥ @€œ‡€ú<”]ƒ @`4èÑÜJ!@€8ôy(» @€ÀhУ¹•6B€ pèóPv  @€Ñ Gs+m„ @à<Ðç¡ì @€£u}||<še# @€}{ 6êúèèh_~ά“ 0±Ç`£ GóSh# @€;# €Þ™[a! @€û €Þ‡»d @€;# €Þ™[a! @€û €Þ‡»d @€;# €Þ™[a! @€û €Þ‡»d @€;# €Þ™[a! @€û €Þ‡»d @€;# €Þ™[a! @€û €Þ‡»d @€;# €Þ™[a! @€û €Þ‡»d @€;# €Þ™[a! @€û €Þ‡»d @€;# €Þ™[a! @€û 0êúøøxî5 @€F%0ölÔôÑÑѨ~m† °cÁF@ïØ5 @€ì—€z¿î—Õ @€lY@½åàò @€û% €Þ¯ûeµ @€[@où¸< @€À~  ÷ë~Y- @€À–Ð[¾.O€ °_èýº_VK€ °eô–o€Ë @€ì—€z¿î—Õ @€lY@½åàò @€û% €Þ¯ûeµ @€[@où¸< @€À~  ÷ë~Y- @€À–Ð[¾.O€ °_èýº_VK€ °eQÐÇÇÇ[æuy @€Àá Œ=u}tttx?±vL€زÀØc°QÐ[þÙqy @€  GxSm‰ @`sèÍÙ:3 @€ÀÐ#¼©¶D€ °9ôæl™ @`„èÞT["@€Øœ€zs¶ÎL€ 0Bôoª- @€lN@½9[g&@€¡€z„7Õ– @€6' €Þœ­3 @€ŒP@=›jK @€›@oÎÖ™  @€F( €áMµ% @€Í  7gëÌ @€#@ð¦Ú @€ÀæF@oNΙ  @€¦ Œ=u}tt4õ¦j$@€ØœÀØc°QЛû±pf @€C@ê·o @€¥ÐK±™D€ p¨èC½óöM€ °”€z)6“ @€U@}¨wÞ¾  @€–@/Åf @€À¡  õÎÛ7 @€ÀRè¥ØL"@€8Tô¡Þyû&@€XJ@½›I @€‡* €>Ô;oß @€K  —b3‰ @àPЇzçí› @`)ôRl& @€ª€úPï¼} @€,%0êúøøx)“ @€–{ 6êúèèhù;o& @€ÀRcÁF@/uÇM"@€ 0G@=G @€¡€z(¢N€ @`Ž€zŽ. @€CôPD @€Àô] @€†衈: @€9è98º @€ ÐCu @€sÐspt @€  ‡"ê @€æ çàè"@€ 0@EÔ  @€Ì@ÏÁÑE€ @`( €Ѝ @€˜# €žƒ£‹ @€ÀP`Ôôñññp¿ê @€{ 6êúèèhÃ?NO€ 0{ 6êzx3Õ  @€¬* €^UÐ| @€ƒ@Ôí¶Y @€UЫ šO€ pP胺Ý6K€ °ª€zUAó  @€J@}P·Ûf  @€V@¯*h> @€ÀA  êvÛ, @€ÀªèUÍ'@€8(ôAÝn›%@€XU@½ª ù @€% €>¨Ûm³ @€«  W4Ÿ @à Ðu»m– @`Uôª‚æ @€”À¨èããヺ™6K€Ø±Ç`£ ŽŽvágÈ @€%0ölÔôAý¤Ú, @€À¹ Ï…ÙE @€Æ" €Ë´ @€s@Ÿ ³‹ @€ŒE@=–;i @€ç" €>f!@€‹€z,wÒ> @€ÎE@}.Ì.B€ 0ôXî¤} @€œ‹€ú\˜]„ @`,è±ÜIû @€8ô¹0» @€ÀXÐc¹“öA€ p.èsav @€± Çr'íƒ @à\ÐçÂì" @€cu}||<–ûd @€½{ 6êúèèho~Ð,” 0±Ç`£ ÇòCh @€»# €Þ{a% @€{ €Þƒ›d‰ @€»# €Þ{a% @€{ €Þƒ›d‰ @€»# €Þ{a% @€{ €Þƒ›d‰ @€»# €Þ{a% @€{ €Þƒ›d‰ @€»# €Þ{a% @€{ €Þƒ›d‰ @€»# €Þ{a% @€{ €Þƒ›d‰ @€»# €Þ{a% @€{ €Þƒ›d‰ @€»# €Þ{a% @€{ 0êúøøxn% @€Æ%0ölÔôÑÑѸ~í† °cÁF@ïÁÏ—% @€와zÏn˜å @€lW@½]W'@€Ø3ôžÝ0Ë%@€Ø®€z»þ®N€ °gè=»a–K€ °]ôvý] @`ÏÐ{vÃ,— @`»èíú»: @€Àž  ÷ì†Y. @€ÀvÐÛõwu @€=@ïÙ ³\ @€í  ·ëïê @€{& €Þ³f¹ @€Û@o×ßÕ  @€öL@½g7Ìr  @€¶+ €Þ®¿« @€ì™À¨裣£îøøxÏn‰å @€öW ±Wb°1§QÐxÀºÏ}îsc¾öF€Ø)Ä^‰ÁÆœî3æÍ=øÁî>ó™ÏtwÞygwÕUWy=æ›mo @€ÀVòÔ9Áó]wÝÕ%su}Í5×tW\qEwÇwô‡×9Æü£lo @€À6@_yå•ݵ×^ÛÝï~÷ëî¹çžm.g£×uwõÕW÷ÇFœ @àT`ÌÁs69êw Oï¢ @€5  ×é4 @€‡! €>Œûl— @€k@¯ Òi @€C@}÷Ù.  @€Ö$ €^¤Ó @€†€ú0î³] @€¬I@½&H§!@€8 ôaÜg»$@€X“€zMNC€ pèøÏvI€ °&ôš † @à0ЇqŸí’ @`Mè5A:  @€ÀaÜgß·ù–·¼eß·`ý @€ƒxþóŸ¿×ûÝûzßoÀ^ÿôX< @à¼Âq€7Ý–  @€–@/og& @€À  ð¦Û2 @€ÀòèåíÌ$@€8@ôÞt[&@€X^@½¼™ @€( €>À›nË @€Ë  —·3“ @àÐxÓm™ @`yôòvf @€ €úoº- @€,/ €^ÞÎL @€@àM·e @€åÐËÛ™I€ p€è¼é¶L€ °¼€zy;3  @€Pà>¸g[&@€¶$p×]wuüà»÷½ï}Ý­·ÞÚ}æ3Ÿéî¹çžþ¨%÷Å£££jêªí´aR˜Õ_íÉ®<ꮺòªî|`÷¨G=ª{üãß}õWuwŸûœOtû-“ÚwêgñÊøš» fYÏ®§£iÀµè býäNËÓ6<òD;GÚ«ÜæW^h¯×ýÇüGý?ýÓ?ín¿ýöîÙÏ~vLßê¬w ÛÜï:v² ³vÝyÈC^2©ß49î™wMŽ»›#õjOž¾6O¹=ò_dUOyÚ1iîÛOóÉ=<ù/¹´ ’z¢J€¬Wàî»ïî~ï÷~¯{ï{ßÛ½ìe/ëýèGŸ>ñ\ï•fŸ­b¡<íþøÇ?Þ½á oèžüä'wÏxÆ3º+¯Ìó»õ¥]Øï:vsžfÃõîz}>ÿÿb¨¢N€„@Öo¼±ûЇ>ÔýÄOüD÷Ї>´K€™ÿÇ=ûùÞši&Ï/<\LPøð‡?¼{å+_ÙýÂ/üBwÅWtßùßÙçë¸êNìw9G³u,÷¼Ï‘×'$ @€ÀÚ¬æ]çßõ]ßÕ}Þç}^ÿ®sè»îº»¤Sžw|êSŸênºé¦îŽ;î¸dÜÏýÜÏõ¯eL›Ÿ@ö´ýž»O¯›¶¬ëó?ÿÝóž÷¼>°Ïúêië*ëØïéš.ù_ûµ_»wOƒþYóÎÒ¾ ³U¼·9W½M}×&@€#ø¯ÿú¯îÿð»oø†oèŸ<'@« ­Êm~÷Ý zOß›o¾¹Oú©O}j÷£?ú£Ýõ×_ß½üå/ïße® ðW~åWº~ô£—•9gô:wO=AîI~Ï$ˆþüîë¿þë»w¿ûÝ]ÖºjZe¿µÆïû¾ïë¾è‹¾¨ûïÿþï‹öõgögýk05nÝù¶ÌV5ßÖ|ô¶ä]—ŒX Y^Ûø‚/ø‚îK¿ôKûÞyç}P˜¾iÇñqÜ{ú 9¯U<ó™Ïìß›þßùîïþîïú§Í7ÜpC×ãäÃ#çÎyêÕŸúÝžFç—äò „xÄ#ºÉû¶ýSîô/›2wÙýÖúò´ý÷ÿ÷{£¼3^í•gmU^5úÓŸÞ½õ­o==_ÖÞfËZïÂ<ô.Ük @€#øìg?Û}øÃîƒçûÝï~ýîÒöŸÿùŸ]HO>gwéSÔ»&OŽïê~ù—¹ÿÌÜK_úÒ.î]“#çxõ«_Ýå©óÇ>ö±¾=AdƧ?g~!ðßÿýßOÚ¦žÿîîÎÏÞÙ:/kÉ/Þ÷¾÷í¾äK¾¤’¶eÓ*ûÍs$ ý–où–î9ÏyN÷æ7¿¹o«¾¸9^÷º×õ¿„™_€üë¿þëÓ1ùºÉ“žô¤þéõ3&ÿñûšû¬g=«ûßøþ]ï¼àÝÏüÌÏtó7Ó½êU¯êžð„'ôO»{Çs6[Özæù%Â]¸ Ö@€F&Wòçhùær‚Õ€ ê¬åéïÑGÝýoæë·õ‹~“÷¦ßÿ¾þ[Íw|öŽ4ž|w’]ÿ˜ë3¬ïЃÔ?=Màúþ~ û‘ù‘îWßü«ý/ &HϤþGyB=ù†Ùä‰tÎÕ?¹¬#}YSÖö…_ø…}5ßÿþ÷ï¯qÖVÙo¶˜”õßðʺìíÙÏzv÷±¬_[úâöÇüÇ}°ÿæÿûæîçþç»×¼æ5Ý[ßöÖî#ùH÷⿸{ãߨ¿öòÆÿýÆî¹Ï{n÷'ò'ýÿùŸÿ¹{ík_Û½ú5¯îžüµOîîÍý»<Õÿþÿõý}P}ççîìÿ£æ¼Í²¯}Mž@ïë³n °Ã lóKƒ×^{mÄåk X“ŸG C&Ásâçd ª'mŸþÔ§û@öŠI¹›|rÜ÷êûöí·úö¾ží'X~ñ‹^ÜýÔOýT÷Ä'<±oÏu®¼òŠÉ¹2â$Îü“óO‚ö¾ÿd-  ó.t¾M½êèe÷›µÝ|ÓÍÝ'?ñÉù›»¯}Ò×v~ô£»ßzûoõû©µÝ×}]ÿõ'üÏ't?ö²ëþê¯þª¢þöÿ÷öî±}l÷=ßó=ý»æ¯xù+º[o¹µûÛ÷þí©Sþã™ÏxfwÝu×uœüåUW]Õ]ûÀk»ëvÝÖÌrwö5y½¯wκ  @€ÀŽ Ô«ùë Ôê tÎÈÎZ~^©xç;ßyɧå,çõÒŸs%½éMoê¿Ð‘¯|T[7×¹8<Îúò4¼ú³Æ¿y2ž¾j¿xîìÚªûÍ™óúF¼~ög¶¿P^YÉk |“²¦¼nR{|VH3urIDATÌcÓüÿò/ÿÒýë¿þk÷¸Ç=î´ïa{X(§½ÆçÓ}UîOxáœÓÚªÿ$ߌÙÅר¿š'ÐûwϬ˜ì¼@‚Êyõ AZŽzÝæ'O‹óÄøÞ#ï÷V`ضçkyRüU_õUýø•?üÃ?Üÿ¢â+^ñŠ‹ÎQó꺩_qŽOÀOê'ëªWJ²ÞeÓ*ûÍ»àoûÛûwŸóK9òtÞcÎ'ö²Öì5Gí+¯e<øÁî¾ò+¿²KÀœzõå?2>ùÉOöAtÍmª­=_ÍMގݤٲֻ0O½ wÁ @€ÀȈåúÌ%PKPVYò<•®zmUÿîïþî>0Ì_ LJž¦æélæ=èAýÜôåÉqžÞþùŸÿy—ïB×92'G]gØžzy9Þ;ã—M™»ì~óåÍùÂHö—§Îùtß7~ã7ö{Ë:c˜Oûe)痿雾©ß_~y2_)É»ÐéË“ë|Y$ÿ!’¹Iµ×äYkžâg|µ§­Žó2[Özæy…cî‚5 @€ $ˆ»úê«ûW ¦=NŽY)A]Ä—¼ä%ýÓæ{·ÜrK÷ƒ?øƒý_3L W)cóÝäßüÍßì¾ýÛ¿½ûНøŠî¹Ï}nu÷y®UO—ëIq­!Oó:AtÖÁ«ŸîiyÚ†Gþ3'GÚ«Üæù‰O½òð©'O[ÕþØÛn»í—&í °Gyûž÷¼§BœW.üå]ã¿ /î 1æo*O\?ñ‰Ot_þå_Þ?m?úò½@ç蚟þô§û'»ùsžøæ=äeÒºö;ëÚ ð“ò•xä—‡)ÿ±2‰›ú?U>ì›VÏø¬;÷f^Ú”Ù¼kNÖô’IÿM“#ç¾krÜÝ©W{òôµyÊí‘wsªžò´cÒÜ·Ÿæ“}Ï|§Çè0I @€ÀZ®¹æš>èýÝßýÝ>OÀZOAÛ'ÈHÏŠUúЇö_–X×âr¬¥R¾IýñýçܲæeÓºö;ëúùRH¥/þâ/®âEy^½È« ‹¦Œ_ä³}›2[t»8N½‹wÅš @€Àž $HΗ¾ì˾¬»ñÆû×*òe‰´×;¶ÛØb‚ç:òT÷ïxGÿɸ¬µ ìϺ¶]ÝïY÷1m|y%_§Ù´kíK[^Ÿ @€kÈ“å<5Í_ÇË{ÆùŶ;u#O¢·•ríùæó¯ÿú¯÷_ ɳÖz¾ÌÚvu¿Ëìe8gSfÃëìS}{?Áû¤d­ @€À™òT6ïê>íiOëÕüê¿ÿû¿ïËyš9ëµ3_h õB‚ùø‡è~ú§ºè³¶UŸ>×åwi¿µ¦Uòó0[e}ۜ뗷©ïÚ @`ä Âòžq>C÷—ù—Ýûßÿþþ‚|Í×|M—¿¬÷ÈG>²¯o’!O›ó]é|êî½ï}oÿôùñ|÷”§<¥ÿ‚Gþ@ɺÒ.ìw{9O³iëÝõ_"@O»kÚ @€µ ä‹ù¢FÙ›nº©ÿÃùF¾‘ s“)¯Wä ùÃ#zÔ£ú?{Oãå{Òy{i›û]Ç~¶aÖ®{×èÍüÔ´Ê @€ÀÁ $PÍçÒò®q‚Øü•|B-ž;¯Ul*ˆN ˜W+ò ó‰º|-#Dzß|^ôFnk¿‹®oÞ¸m™Í[Ó®õ  wíŽX©@³¼.‘#Oó~ô&ƒçb¬€0tÊç•¶µßuìo[fëXûyœC}Ê®A€\$-Oi7õ ÅEÛÊ¡íwÈ7º_áØ(¯“ @€ŒM@=¶;j? @€@o”×É  @€Æ& €Ûµ @€  7Êëä @€c@íŽÚ @€ÀFÐåur @€±  ÇvGí‡ @`£èò:9 @€À¢ÿôOÿ´èЭŽÛÅúx"’C"@€8Ï7Þxãp·;®ûOyO |‡mÃzAMš5¶æÈ  @€ö\àÿñ»w¾óÝ _øÂÚÉ0œ'Î[}•ÏWíKåçýº]|AT¾ÔL"@€Ø_6x¾æšk.·‘Š+¯ñ©Ÿ[Út]›©¼66¬W»œ @à@n¹å–Ó'Ï ž—xzSV½òHn"€®W¾èÂ3¾3¬/zã @€v\à#ùH÷®w½«m£‚çæèa8¬/²»Š++_dÎBcÖýôBmÕ†*OWÊm½®H€ °ï žÿàþ {Ñ‹^Ô%x¾õÖ[OƒéÁÞ†qaň•†ŸOuÑ'ÐëZd§òy»Ì˜EÆÍ;‡> @€˜<×/6ï@/V¬Xùª;]è<‹ÐÓÓ^ -Ï;kLÚ§ÓΣ @`On¾ùæKž<'xnŸD¶6-F¼\L98ÅEÕvn[¾hÐå*«ÐóÎÝ.¨-·sÒ>­¯Ú+oç( @€ì¡@^Óø£?ú£‹‚åaðœú…Tq`åÕ^ù¬öô§¯R[®¶•ó³ÐgYÄplÕ“·ål¢m«z›§, @€ì¡@‚çiÁrûä¹ú/lo+¦¹Ûþ¶ÜêT{Û6«|–±ÝÑññìñG“Ô\¥ÊÉ«œ¼ÊÉS¯¶Ô¯¼Ð_íÉ«-¿ÀXõ´¥\mÉÓö?n»í¶ÿ3É% @€xÈCò‚ÉV?<9îžwMŽ{š,WÛ°= ¹fò6HžTûÔ®§ÊÉsd|ÎWõÊ'M§)m @€Àå*N«‘müV}³‚ájO^Gæ´íu¾œ¿Êm>¯½ú’'eÞåÒ"c.:ÇY蜼 4ëbm[N>k\µ·yÊË9Rn´W°œþªgLRÍM¹Æ¥\ëI^ç­rÛ7›ºD€ 0_ Å2²­§<<†ÁqêÕÖŽ­¶aÞŽI¹úSNš•ŸôÞÛ_õšSóª}X¯öKò³ЗLžÓ´ÁkÕ3%å:†õjLÍO[êmª€¹âŒI[RµU9íÕ–¼ŽêO. @€œM ñWRÅom½‚ÜôW9y[®yÕ^yµ'¯ñm[ÊImÛIËI[õµyõ¯%_GÅ'(­ÍT°ZíµÐÚdêU®9URkX®óT^sÆU@¾šŸ|X®¶ŒKJ=©ò“š  @€f ´ñ[©Xn^^Ápå›òð¨s ÇUû¼¼Ö“<ã*ÕœÔÛöê?S¾ŽzÚ³° ^ÓßÖÛ`µmO9G°jnÊIm€|ÒròoÆ¥/Å&yæ'O{]gXoûjÌd¸D€ pÄ]IõåŠáª¯‚ájoë)בñm¹êužäI•ŸÔî­_n\_)_WÅV0ZåʳÀÚL[®¶YyðÚ”@xØ–kf~õµõÌ­5U9õa[ú$ @€³ $«ÔÆsiKÌVýU®1m=å:Ò_åÊkÎYòÉiú”9I•Ë}ç2ÿ¬#€Î¢Ú t¸Žê¯<ý)× ÌæOºNSµenRW9y]«-ÇW½ÍS– @€f TVyF¦\õ*ÏÊóU_Þ"¨rÍ•§}X®¶š“¼R•+¯öa~¹þáøKêg  sÁ¥•¦Õ«/yõ×B“¢á:WÛŸy“TãNj'ÿ¦­Æg~Õ“§Þ¶Mª§mu­Ê«¯ÍS– @€f TVyFV9yu†ÄuÕVå6ϸÔÛ#ã«^s‡y{޶/çkëUN{¥´µiXoû.)_6€Îß?š¤ÁÌ\¤mÖkx-¦›¾_y*X®€8mIÕžr{¾ôç¼i«9©WyR¼$xnÛR®4\_µË  @€.¨x¬ZSoÛª^mÉ+Ø–kl=‰®qÉ«ÜÎI[RÚ’*?©ü[çlÛª<?¬w‰}kð¬ü²ô¬‰SÚs±Yh-$›N€›”¶ÕÖÖë<…TAtµ'O[ò™;,Ošú¶º^Õk\ê @€ÀjÃ%¯”®êɫގmÛÛþ”‡õv^ÛWím[­a˜gìZÒ2t.Þ­Ó2\`ÆWjç׸äÙxRËø¶íéO½®ßÑ×ùëš5>skLõ¥M"@€X^ ±W9Ë´rµµyb´¶žrÚÚö*ÛkÞdøi žrRõU~Òzé¿éOªü¤¶À¿ËÐÃÓæ¢ HÛ‹W½ò¶/ó«>-PRú W@zÎ×ÍÕVí“î¾?yÚ’’O+÷þ©þ¶M™ @àRŠßÚž´Uû°œqßU@\c*¶§^m•רEò\3ã’ÚñUï;–ýgt-¤ B³ÐÔÛ¼]c *0nóÚhÛŸy9WuÎ ¤Ó_çh¯™öš“rRêmªzåmŸ2 @€À¥¯U^#ÚzÊUO^ApƦœÔ¶×øÊk|å³Ú‡ý—4ÌOZïm¯úRùBôŒ_$œvÁ,¶ Fkñ5vZ_6^pÆeLÕ“×II{{ÔµÒVåIñ,íI9GRÕÛrÛÖò @€ÀBçUžIUN|—4­ž¶yGÍ­àxV^çî/4åœÕž|8¶í;-/ò „¼P}zÖ{ YÄ´Àµm«15+õT@[íÉ«=yµu® ¦3.m©'oÇU=ùðºí9'ݧó†åÔ% @€ÅsU–§ÕÓÖ™[õÄk5'yÕç•kn;&笔ö¤a>«­¼È?ËÐóÎ]‹¬`¶ÆVÀ[ýÕ^y *¸® 7õ<ÎÜêkëu:wò:&Å‹ÊUO>L5Ø®N€ p±À¬X®mO¹êUnë9cê(O«W_ÍÖ«½Î[ç¨ö¶žòÚÒÂô”×8²¸ž•gQm9õJi_$µsÍ©à6}I ¤Ó×öWÐ\yÆ%ÕÜYùɨ{ÇU]N€ 0] b°ê­ú¬<ãÒ7<ª=yÅyí˜jKÞ¶_®œó SæTªrå}û¢¯odðÂt]qFžTš!µ ´U_µ¥ÿr)P™[yÊuÔèªç\uîjKž4ÌOZïý·úïmQ"@€XD â¯áØjoó”«žñU¯|Z[õ%¯óTž¹mÖÛ¾…Ëg  §<…žv¡,,i-°Ê•O›Sm™S¯jÔy2¯=2¶êóÊéKjÇV½ï¸ÐWe9 @€ÀâëeưÜÖ«¿Ú’Ï+W;¦žF·}Ãr]§òv~Úf¦³<}ÎIÎ@O¹j–5iZ¹ž1Õ_mý¤æŸêoŸ:§»ÚÛ@x^9sjMUnëi¦ËõÇ« @€U`V,WéoÇT¹Í畇}©×‘kT¹Í«½òôUùBqꚪïLùÑ$â>Ó„ >š¤fR[î»§ôeLkój¯¼æO3­o^[ú’ê\'µKëÓÆÔX9 @€ÀÅÓ‚Ça[[¯r›·åœ=õ¶mZ½Wý휶¿ÊÉ“jÜI­©ŸõésN°ê蜣4 TÓW)cª¿Ê5/cª­ÆÔ¼i}5/csÔÜšSíUOÞž·-·c”  @€–¨ø,³ÛrÕÛ¶*'¯r;®ÚÚ¼ÆÛj^ò¤ê?©]úïåú/1¥eôð´YX©—+×&2¾ÊÃóU½ÎUçN{Í©¶:OÕknò¶­-·c”  @€Î&PñXfµå:Kµ óv|ú†ým}Øßö ¯ÓžwX®±+åK½Â‘+^ã¨E´é´rµ-’gLë/yá"Õ6+®¥ÆU{{®¶M™ @àì̶3«­òê«úåòŒÏ˜:ª~–¼;,§Þ-óúFæ-@÷“/~:MImÀ:¯<­/mÕ~¹|Öµj^ú“†õ“Ö‹ÿ]dÌÅ3Ô @€‡)PÁï¼ÝÇT½òÌV®¶iù°­ÎQíUOž4«ý¤s™_ìg®çè §ššeáœË™0ìk7Z'¬yÃ<ýÕÖ–‡ç¨kÔù†õš[ýr @€³ ã¯a=gkÛ¦•«­òvNµU^}ÃzÚ“Úö“–5þ»Òè¬cW9úaƒ5W;ÌÛ±Õ×¶µåYý혔+µã«MN€ °>ië°­­W¹ò¬dZy^[Û7œ?­¾ô«9YÒ&~‰0çÍFÚ€uV½ÝpoÛr®Y©Æe^[ÎøÔë|©'Õ˜“ÚÅÿÇ^Ü«F€ PóbªSy;vV9cgõµí5®mkËÕŸ¼Ò°¿ÚWÊW~]W_ñIôéi&…a0{ÖzÎ5œSç¿\_;N™ @`1yê´¾aÛ"õEÆ´«Ž_ùÉs|SO ëüµð h©gLÆçÔ9‡y¶Ïª×fõk'@€XŸÀ0öÖs¥imÕ>ì;k}};¹p¦µ=®•Íxî ˆk贶ᘶޖç£í›va¿: @€Àz†Aîðì³úÛö¶œù—«OÓ_wÙÏÕõ“§ü³é'Ðí%kÓm œ¶a½æ¤½æ¤m8¶æµcj®œ @`{‹Ægí¸¶\+ŸÖ–¾aû°^ó7’¯ý t­rÎ“è ©à·†Ïj«þiãgõÍä @€ç'0 p‡õv%gí›9~ÝOžk‘  sËÑýZÈ _$^d̼k .©J€ °&™Aíàü‹Œ›5fV{‰MÏ9ùFèZ î×Rã§ä‹Ë5õ¬ãkžœ @`½sÝ)—š7~^_ªMεÖs  O/6‰¤«|™|‘q‹Œ¹Ìet @€lQà²ñdm‹ŒYÛ'ê±8׺´àéž|•`y•¹í”  @€X(èqª3Í='ÎÃun%€n±D0ÝNOY€<Q'@€ì¶À™‚äáV¶4·kØzÝ.&å5ÔÃSª @€ì±À¶æ!ÝÎÐæ.¨ž¦¢ 0>] –§ ïE=máÓÚÚÓT´ @€¶/°ñ¢J£  Ý´q @€–¸bÙ‰æ @€8Dô!Þu{&@€XZ@½4‰ @€‡( €>Ä»nÏ @€K  —¦3‘ @àЇx×í™ @`iÿ µú±êD}IEND®B`‚gwenhywfar-5.12.0/doc/dialog/images/fox16-5.jpg0000644000175000017500000007160613142134462015773 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀüˆ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?õ€ÿ¼9à_Ù¯Ø,¦Ö¤·ÿM¿½æv dQ! ÞVåWaA ±$ú/ö&Ÿÿ>v¿÷ðÒh_ò·;#ûŸÞúÕ’}#‹þú¯NNP“Œ]’8ôi6ŠŸØºgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷ѯŸô¯‹>4Ñ<'ã kÄ6Ú>®ú‰æÒ,á…ÙZóÖ5V ™0¨<1Û¡ëšN¬Öí‚„_CÞ¿±tÏùò´ÿ¿”béŸóåiÿ+È'ø«ãUð§Û‡€ö_Aª=Ó4S², ˜.¾q —©àŠ«£üIñN£ñBÐ[Üè7>ŸÂ0ë&Þ&pdÌŒ$x‹F$2eJ„l  f—¶—ó1ò.Ç´ÿbéŸóåiÿ(þÅÓ?çÊÓþþWÍWß|Y«ÊšÌÒZiöW> Ôuhlô½E™”©YrËòʸ# ’xâº{?W¶þ#ðþ’šuž£§]ßXi7¦Cq<(ß4Œ¡l½¹È<íåüÌ~Ív=»ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¾~ð÷ÅÙÜêš$iÚ…ðÕu»•¹ÕîÚ(£µµ”… ‚K`ñØžjÞ¹ñ÷R]&]WIðæ“ ½¯‡mµ™âÔ¯ž9e3¶ÕŽç zž38£ÛËù˜½šì{·ö.™ÿ>VŸ÷òì]3þ|­?ïå7M¹7zuµÓC ™¡I xÈc?ôÎ/ûèÖœóîþòmÄ?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷ò›ý‹¤ÿÏ…§ýõÿ׫ÿ¦qßF¢?õÎ/Κ•GöŸÞcÅi?†¾ñ6w4V6°êpÈ.·mh™wðO—–9\É ‚ ë~' èzŸÉ(;ûŠ+ÒŽ•x©Or#QÁ´ŽëBÿ$dtÿ¹©Î?¹ýõY0èö?2·Êݽ6¼ð麰º>ÑÆœ‚;~ËûUŒã(=—ê(úç÷CêÏùŠV¾ð]¡œÛx7Û„’9ÊXD<ēվ^U°24ÿøBüý¦šŸü">ûtm%ÏØbóÇ,†ÛWtÀÇJµE\_ÊWÌUÔ<á BÛì×þðýÔh{Ÿ.[(Ù|ç9y0GÞnç©ï\ÿÄ?…zî­›RžkkXmÖØÛZÃlF«#DÒÆv‘¨ bºª)»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõQ`r/ûê¨ÑBÇwñÕ¼ÎOâXÿ‰ |¸þï÷½è©>&œxZãæQò÷âŠú<%okB3µŽZ‘å›GUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾_üyzøáD(ªWгê[L¢HZ)£a•b ‘ßCÔ ÅMoÀ­b&¯á†ÕD¦± ˜ þ`êž^wnã¦3Xr«j_3¾‡OEeéhš„Ö–íè2öž[}U”0ú*K«=ÒÖ[««]> xPÉ,²FŠˆ d³ÀrI¢ÑïøÁ Ë·õ÷U$Ó´©],,™eXB¤ê8¬Wð&µxöz6§á½Jæ0KÃi<2ºÁ%T’(´{þðBòíý}ÇIETþËÓ?èiÿ~Wü(þËÓ?èiÿ~Wü(´{þðGyvþ¾âÝSû/Lÿ u§ýù_𬠷ڕ¥Ú$öö“‚'PUfí퀠à`UFš”\“؇Q¦“[ÏXê^ ¿ÕdÒloü=u¨ÄH’Ò¡y“r€äcéZßÙzgý­?ïÊÿ…M£ßðÿ‚UåÛúû‹tUOì½3þÖŸ÷åÂì½3þÖŸ÷å‹G¿áÿw—oëî-ÑU?²ôÏúZß•ÿ ¦ÃÃë­G£5­ ¾’Ý®R/³bVUfÎ1ÕÔc9æ‹G¿áÿW—oëî5è®s[Õ| ¡ÝÅg­j^Ó.f]ñÃw<0»®q¬A# Ž=+]4Ý-Ô:XY2°È" Ê‹G¿áÿ/.ß×Ü\¢ªeéŸô´ÿ¿+þeéŸô´ÿ¿+þZ=ÿø#¼»_qnŠçu¼iúž™ Š%ª]HcœD¡w®ä»òpzŒœUm[ÄtB];U×|)ay<Ë{›»x¤L€FUˆ# ƒô"©ÓI)_rFÛVØêè®I¾ðŽ­wöm-ô»ç6©v­oÉDÎ謮ÓóFマ*âÁ¢6¤úp°·ûBB³0û'˱™”|Ûv“•Ìrž‡ ˆ¢ÑïøÁåÛúûz+^¾ðo‡Öׯ4 %g$Doe†!È]äg=jõ¥¦‰ykÕ¥¶qo*‡ŽX£FGSЂ8"‹G¿áÿ/.ß×ÜhÑU?²ôÏúZß•ÿ ?²ôÏúZß•ÿ -ÿ‡üÞ]¿¯¸±4© fI =²O ¹=1Þ«ÿhÛÿÏ;¿ü—ÿ‰ªóÙÙÛÞØ=½¬±dŒ)Ç”üq\n‰â(®¯SN±ðÿŠ5i­"´7Wvº”BÝZH¡‘OÏxK "‚àåþgó»´R%96w_Ú6ÿóÎïÿ%ÿâhþÑ·ÿžwø /ÿ^{¯xÇFЯ´ý:KÍ=/'»š%ûgŠäŽá·däs¸ï&YS–2ošBÒXøãÂZ.¬išŒÓÙßÝÇo9›[}Ö#É2†›÷Œ3‹U1çs’N÷Ü{½˜ýîç}ý£oÿ<îÿð_þ&íùçwÿ€’ÿñ5CFƒDÔl`¿ÒuI¯í<©àÕeš7Úcx9 Ì+ž¹Ëç;ßw)‹´Xõ!o&‘â¨lbÕ†5)owÛ›•’8ÕH &ãA¹“sgýcî^çf÷sºþÑ·ÿžwø /ÿGö¿üó»ÿÀIøšÇ²¹ð¬šÉÑm|B“j–øßd5¹$vyy<ÂßòÉs‘Î_9ósEç„­õUÒ[Ä‘.£ D¿d“\s0$Ä22Kã›suóqîvaïw6¿´mÿçßþKÿÄÔöóÇ:Œže*Àúy>¢°¢›Ãëi¡¦¾«« &Ö¤ið¢2 ŒÉ¸ŒD¤äs—Î|ÇÝOÁÐÛßy’\*]gfÀ»ùªÙ„|Ù/ cþÖ÷ê~fÉ&ãÉ7µ¿Ì™JQiw:Ú+ž±Ô¼ªÉ¤ØßøzëQˆ‘%¤3Bó&:åÈÇÒ®éhš„Ö–íè2öž[}U”0ú*-ÿ‡ü¯.ß×ÜjQX·ÒøbÊÏR»¸M8E¥ÆÒßl‰] Pžaܪ fÉc­\†ÃIšš; FGPÊ|…‘Ú‹G¿áÿ/.ß×Ü^¢¹ÍoUð6‡wžµ©xsL¹™wÇ ÜðÂî¹ÆB±Œ‚8ô­tÓt·PéadÊà ˆT‚?*-ÿ‡ü¼»_qrŠ©ý—¦Ð:Óþü¯øQý—¦Ð:Óþü¯øQh÷ü?àŽòíý}ź+tŽË]Óa³Š;xî¢U‡Â‚3CüÏ­lQ8òÙ÷e{®ÁETQEQEQEQEQEQEQEQErÿN<-qó(ù{qEN<-qó(ù{qE}^[þëŸæyµÿˆÎªÇæVù[ ÷¦Ó 9Ñì~eo•ºzm|ö7øòõ;0ÿ‰R_ù Û×¼ßúuÁü,‡_:§ˆ&ŽûK@ñ¡¾Ý¬œÜ“æ7I|Ý gî2=ëÐÚk”¸$îDd¶©?ú©+½4KVxßÃW¾×/t©5M{Yhàð¥•áQ*«ÎgŸ2¸VÎ!‡ 3të¡©x;Åž]No^ŸO$š–Ÿâ ‹Øg)Z2qm+7>RdÜ: W»QJã±Îü9—E—ÂVo¡jŸÚV»i´ï´n]îÌF?»ž=p_<5©_øsÁ¾!Ôµ;7´Ñ¡žk[[I‰‘^2$”ÈÛ†üª«“Œô¯_¢‹â~ñ5Õ×´c¥\»AªØ]I5œþ ›P‘$UWA4n»m¤ ¢69a—!žÖ¼íkÀÂÏÄú­þ¹wÃk¶ßÈè·"ÑØ¤±¶ ²d*£8;Aß\í…R-~fû[ÕµY­VE³Ží¢Ûyœ1QjXàmË– gžNK…8øSªkWÚî„÷ž!²þÓ’)»a6¿4÷,Æ&%~ÄÑ*Û/Ý meò z/†vÿjëÛ‰ çóޏÜõÒU-?M‚Êæêâ'‘šé÷¸b0IãsZÂiBIõ·æg878µÓü(ðF±‰©h𾻡ø³N ,0Ÿ[Ý5e’gF+‚T!܈ĸ<œŠ­ðÇV×ïu]IuëÖ Nµ§\x‚iîO)Žß±4J¶Åe ÷Hr2ù½¶ŠÊæ–k|Š’Š“Á¡·ÅËa x†ó[¶ÿ„nVy'¿{½®n!ÏÎä•b0Jdãå\óêôQp±æ^*ÓµWâÝ톓¦Ù¬þŽ;†¼°k Q®%*‰õÜ=«âðø_JÃuõåµÎ…áØÌþ!šÇÍ(®ªb†4au 1ÊÃ2Žõí”Qp±ãÞ#×D÷rÏâ?ß衼7ow£-­ãÛ­ÅÓ‰LÅUHH¤BGpÁû§5{­kC¡Ç¬k‰§ÙKá{¬î¯¡¦Á{skq+È­jûÐ)' óǰ«µ¤æœ"—KþfpƒR“}Èó?i ª|NÖÔu;!…íÝ ÛÛ¶ÿ>ëkB Ûƒò“´çx®kX×µíCE·ŸûjþÖ{Ï ø~v’Þb›%žûl® p ƒÇ#ƒ‘Å{•Í,yŒÖÏMÖu}/Vñ±¥ØÛè‹.Œ§UŸuÍÃ4ÞqË97¸ˆ›p†šÛOù7ÿb‡þÙ× ÑEÂÇ–éš>¡¤èmãÍrùoå²ð»ÛAm¤Y5¼žQTåšG/'îÔ)ù@äãšçô¯ë±7‹-|9z·Œ¾7ÖIo®M¬„¸ ë”’T~ýØ,2¦y÷*dèe…ãk)-õyV+€–ц.‘ÎâA¸ó³îÄàäúÌ-,Ö®¤ ¥Û=ÆÆ^?Z-Ò=›fÔ͸ݨNÙÛåã9~Õ.s×/œùº›Ñ]IKVq>ðηiâ­:úâËe¼:¶µq#ù¨qÄ›¡lŸ˜vê;â©hžÖäðÏ‚t=GÃÒÆ|=ªÂ÷2M,©¨š=®IÚ>+r8à‘èqhö‘ìÛ6 vmÆíBvÎß/Ëóþ©sž¹|çÌ}ÄZ=¤{6ͨ›q»P³·ËÆrüÿª\ç®_9ótÜ«~Ò®ô»ß5͸‚Ýiî­@e!ãh!°u~r{Ö„<jº–¥ªkö—qý¿s¨YÃ&¡#Û€d-¢þXnà•Ü<ìbÑí#Ù¶m@ìÛÚ„í¾^3—çýRç=rùϘûˆ´{Höm›P;6ãv¡;go—ŒåùÿT¹Ï\¾sæ>âàyÅî‹ã}CÅ:EÍå­ï—câº"6²K4µÌНÚÊ2î FI~ÅfjÖZ†˜ºƒw¡¤ÿ ²ÞEªyñ2ܺy²ªÉæª1V@ ó^µiͳjfÜnÔ'líòñœ¿?ê—9ë—Î|ÇÝ™ià Zk_ÛvúJGªn½Éç¾cæ“væÈ‰3’s—Îw¾çp±Ãi> Öíµ§êQx‚æÕäÒ´ß°]]H²»Ç"Ä‘‡v‘¢mË;XŸRI=I$ÕÂIFKºýQœ¢Ü¢üÿFy‡€5{=Zð焼;â Å:Oï Xà¶ }¦F±3 &tb¸$;‘—NEa6½¯7„ü76›­ë3K.‰ø–HäišÒȸÿIL¶VãfËØ&5¯}¢³¹¥ÕãÐ-Ûâ€M^cyu¥Iqaš¼Ïö¨š¹•ci”oÁÆ0ÅuÞ·¸Ñ¼s¦é‘êšÝµÿ‡žêt»»y—ÎŽHT:$G‘+©µx W¡QEÂÇ™x«NÖ5_‹w¶Mþ›f³øb8îòÁ®F¸”|ª$@×pö¬ˆsÃá}*? i××–×:‡b6w3ø†k4¢º©ŠÑ…Ô€Æ7+ |Ê;×¶QEÂÇx]ÝË?ˆüC¢†ðݽތ¶·n·N%3U M"‘ÃîœÖ=I‡±®&Ÿe/…ìf³º¼ñÚbÍtêÞs™7óäŒìsŽsµ·zïŠ<=&½€ëú¾m$M ÄM ¬Èz‚^6e8ÈÊ<õéZÖVÐYYÁgkÅokH½T`ôÂÇ;¦=ì‹á)5+‹{›æ³&æh3åË!…w2d´œ‘Ààô®¢«\YÅ5íµÛ3‡¶ß°0w Õš©É5º/Õ“´äû¿ÑQY–QEQEQEQEQEQEQEQErÿN<-qó(ù{qEN<-qó(ù{qE}^[þëŸæyµÿˆÎªÇæVù[ ÷¦Ó 9Ñì~eo•ºzm|ö7øòõ;0ÿ‰SWµ¸½Ó¥µµÔ®´ÉŸn­–6’<N¨éÈåOãye¼¾'øãW»ñ¾·u&–5k[xÌV‘.!WXäÝ(áÆʰ+׫ž_é«áÝwBÝý›[’îK–Þ»ÐÜîß°íÀÆãŒƒïšæF§5qãJR²×4Y-$_ ͪ[=¶¦L³GêÎe“•.ì†8«šGŽ%»ñZøu,ôëq”¸¾ÕLw“«DŽd†óPnÁmàå[Ž+_Yð~™ª—7Þ.ý}ùn£÷3lÜÜ©ùÆÁƒÓ¯¡¹ð\wöS^kš½ÍÄW6ú{˜|”– 66á“‚3øÏlqF¨xöêêÛRð’[\Í Ï®¤Sܨ‘>Ïpv¶:Œ¨8½6½¢Zk2iÏvó/ö}Ø»ˆFÀ-ãÃqÓ7LãšÃðÿ€l4kÍxõ}Zæ=Ýí´ûyž!Qº…+„K`*à±'ާ'&€sŸ ¼g«Ãá?ÿÂG§°´Õ`ò!Ô¤¾3Ló$O&eB¿(eÈ`ìx M\ðoÅ[kZUšE¦,:Ê»X‹}Y..“lf@. <œ¢±á›m8&´ü7ðïKÑ?²¢®¯¨Yé ß`´¼–6Šddi>TVfÚîâB†;@­ øPh6Zþ²úeªí´Ùš‚ÆCybRp9Æ¥¦G‚¼D4Ï‚Zw‰õ»‹›¡m¤ýªæFc$²íRO$䱯9=jÝ÷Š5í'B“Q×<7mo<³[ÛØZÚê^sÍ4ÒÕ˜Ñc!™rAqŒœœs§aá]&ÛÁ àùK½,Y›'YØ’"¥H%@ç¨ÅRoGq¢\i:§ˆuÍR0´\I–Ñâpñ¼ojK w>âvŒçœ€fj>¿Ó4íeu Õô©l•ìíï¼È¦K©DqºJȧ®ü†AÊzÕxÏĶº>¯kk¦ÙXëzmÞšmé–‚æu@C´9Éá80$àVòøO’Êþ+íOT¿ºÔ.-§¹¾ã?ÙäY"@^GÞnç5c[ðn™«M«Íqqyš¤6±ÈÑ:(Û;I¦Táƒ6~lƒÇ\š¦O¼s{á;®u;?FâÙ§ž |@!‘ö“”·ó[uØ2qUüGãxôNëP³Ó®õø•iÓÅÛLi ¹»h”È*®3’ÝÆã­-KÀP_½Ô³ø‹\ßië§ß̆Ý^ê%2݈°„y®3μäŒÔ·¾Ñî‰.oÆÛ;+1µÓîZÏçF~ïRÜ7¨èæR†§ãËí*Ó[MKA…5 )­ G ëInb¸r«+Jb Š¥\¹Øv…Ï5ÑøGV“[Ñ#Ô\émæ1 úmÿÛ `;¬›?M£ï†c›SÔµ;M[RÓ¯u­ây­ŒDÆ!2Úsæ0;Ž•7…”hœßƒ¼e©jºV›cá½ íÓ¦•íÛjZ»/”²—§›å;K!òÜòª0O5^ïźރâ?Þ¶šÚަ]Ú½ÃI~PÛÄma.!k –r¤ 9à’MnY|=±Ó!²]\Ö´©­¬c°yíÞ{˜P±A ’6\©wÃ*©5Sðn™¨Yx’Ò{‹Àž"Ûö²®¹LB‘|™^>TœóŸ¥gÇóxkÓjëfnÌrF› …wº¦÷p¬Uvæm§Šä¼Câm^ïJðŽ¥¦‹ æ»×Ä>^—«™­®Sì÷ 6ÅÊd#aÆÞ Wy¬ÙMbÖðjWšl…ƒ-ŧ—æ.a"²} šÁÓ¼ ¦Y¥©7—÷jÍ«Éq+Fâá¢h‰p¨ ­ÑUz|ˆŸ/^Þ;%Ð#>!“W“I_nýÀ‘!óÚO?ËÏ—åa³åîÉmOaã—šK K#ì÷Ò믢ÞB.w­¼‹l÷Õ¶1J*c!OÏÎÅZ½ð>›p÷3Ç{¨Ú^KªjÅw ’Ú%a;7)R¥‚®ÇÛ _é«¥Ghš†¦·‰¨OûK|f宊•2¡”%6ìÛ·€¦?ˆÒí‚/µ+¹Xma丑 ’v„ÂCaØT“´ƒÓŠn“à+ ;QÑn“WÖ&‡C.›i,±˜`GŒÇ³„ À)bF=rh¿xŽ_ZÛΟØJ²³Ú®®,#à b¹¦ã“\ž¡ã–¹ x§N‚þk)ô-Jùôè$ÜÓû _hc´ho_½Ç7‡â‹Jóè†ä_n”È&0¤‚?/ íçdð@ɇÂ~'ñDš¿©kÚ1ŽÇR¼‚ eÔü¥;†@ŽL "*¿ó1Ç#&·¿áÓ?³¾ÃçÞyÛ?ÛÞ»¼ï´}£oÝû›øÇ\wÏ5RëÀVÁ¨Ú_UKKÛѨ-º˜J[\‰–o62c,O˜¹Úå—“òÑ jaˆ6ºÏ…uiÌP<ún¥em)Ò56<Ù¡ÚÑÜ"‚GφR ¬§ƒš¿mãË÷¸ó¦ðüQiC^}Ü‹íÒ™ÆGåãa} üàŒž7áÓä‹U[½WV¼—U¹µ¸¹ši#ݺݕ£ ¨ù¯BsVÿáÓ?³¾ÃçÞyÛ?ÛÞ»¼ï´}£oÝû›øÇ\wÏ4h–¼a¬É¡hÿoû(b@…µ-DYÀ€ç–“cã¦0ç5ÌZ|GmCÃúMþ—¤ÛÞÝ_ë/¤4Qê Ð$ⱑfU!ãÄ`ä(8lã#iêTQ:„*BF¥¸P2Äž9''&©KHñö£uwáÙ/|9ž—â’k;¡½ã‰`i”Ë–6³(*³““‘ƒ[Á¿lø«ÿ÷ü]}¡ûYÉ¿ø—þÝô®õ=7O† í¬`†ÚÖÚ5Ž(bjFŠ0ªª£0éÅsξ BUñU šW}ÞÆuêÎ2ŒiÇ™»þæçü,ˆŸô>ø«ÿ÷ü]ð²>"Ðûâ¯üÜñuúâïè¾Ûý±?“¾Òâê,º/›äìÌk¹†éÌTuÁéUíüm§]}ª;KBâê FM9-ÑcÝ<Éæ Å ,R6•¶€qó¦ï]åðNÜúúÁ8c6¯É§¯üäßÙ“ÆÞ3Õþ8x{NÕ¼]¯êRý§Ì·ºÔ¦–7Å´¬2¬ÄÔ ûj¼oÆíð³UµµÌÒëÖRÊѨ‘żm •æÿ8šöJóq4ý•N[Üô°õ}­5+X(¢ŠÀÜ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…Ë?k/ù7ÿÿÛ¯þ•Ã^­®ŠÊ»pÜ6TŠòŸÚËþMÿÄ¿öëÿ¥p×ÅV~?ñÝ•¤6v~6ñ%½´¬Pé:$h£ ª¡°JTㆩJT±4Ôâí£I­6ÑèaŠ£R¤£*råjÿ‰ú1«hºn«¿íöÞvûIì›çeÌ3mó‚:ì^zŒpG5Oþ=Gr©g$osr×/4w2¬Ë#3±) mñŒÉ/Ê„ÞIÇÎÙüøÿ…‘ñþ‡ßàÞãÿ‹£þGÄOú|Uÿƒ{þ.½W˜Sz¸žz˪¥e3ìY[X|yøO¤^\m6½1‰ËÉ‘Ï>¬ÌqÛ>TìØQîkÊþ®©áOévš¾…©éƒÄ6&;û‹¶€¥Æª$ìëåÈççW˜|Ø8Ó™žÿ ßáßý^ÿÁE¿ÿU/<ð¶ÎþÆÆçÁK‹÷xí“ûæ2¡v …RyÇJäü 6«k¥|<ÔÓXÕo¯u¨&Žño/¤–9¿Ñd•>FbªCF£r€HÎIɪ»´»ñOÙßÄ:†¡®Mö™5‹[‹·—ȹû›Õ¢$‹r¬]B(P@<¹§`=ÃßôiñéþÐ4Ýfhæ–ÎK].8äÚVBSåâP:Œ†=y®®¸/é±êß<'i5Õí¼FÃRg6—/¸Í·Ëæ!£8?)ŒtÈ#ø—JÖu8¥ÒÞÖâÁ­ïä1Kv à6& 0™¸c‘‚I"AsÚêË«[( ÷—0ÛBSÌ•Â.æ`ª2xÉbõ$ ñjÚ÷ü&^ ¶—^°Ño ž!¡}·ÄYFcò£`Ël±2]È%@\{oöÑ\ü;¹7:EåœÒø&ÖÏkâ£e}5ý·ü$3n%ÈÒ †óËŒpçpÁÉÎM?ê6w:ÝáÕüAt~!Ôõ-bîÞVñMÅÛÊ-BIÝ ¶Ì³íEU •'ïc4¾ûréŸîçÖõ«¹uø&ƒQ7ŒÎ%Sk$ª@-„e1®pÝrI9¢ÁsÔÆ¯¦´7Ý-Äòí¥·T•fráOÌp;g$Uêñ?‡—v 𖓬ܵßö´6ºµ·öœ²´,-®3 ÆÎ|±•fʃŽ^ø{.¡oeðãQ“ZÕï.5¸åPû]ô“$£ì²J§cªÊѨܠ3’rh°\õê+Ǽ%⛋›o‡:Rk2ÝëIñê¶ÏrÍ'¤™KŽrÌÃòH$tÍWøSªkWÚî„÷ž!²þÓ’)»a6¿4÷,Æ&%~ÄÑ*Û/Ý meò  žÓYš»¦k©q&—,óE†&•­¤Ž7`H>[²…Ê=éú^¡§x‡D[Ë ‰&²ºWE•7ÄÄTxeäPzñ ‹ +Ãþ·ÖµíSGðÝÝ•äÓÜbâkµ•Q™·æ1°ÊÁ”3HÁÙ5Ïèú#„ÔîþÎÆÖ{°<·oÝ@Êß(?t2ñÔç€kF cž牷G"†SŒd‘^¯]jW¾Ò®uY.%¸o xˆ$³¦Ù%„Ä28Àùš ŒxêjmkXº‚-hɯj6ž'µkUðÖ™Û¢]F`„®ØÛ8y ªìÁ¶€~î3E‚ç¹Q^/ãýWĶ~3Õ´M;PÔ”XíñZl™¿ykB6´Î~ãL„ìéóÕNó\Ö§Óü=ªj:›[è:Ñ¿ÔZk­n}2%ß*›HÄh͈ !2¡ˆ<ñ‚X.{¥SÑõ;^Áo´éüûvy#±—æGda‚ᕇá^[o}rÐøVßž,hÒZ_;j6:¬‘Es:L‚ÝåDlÄB\ÿ‘•Ž+¦øÛþiÎ&–mׇ̕v»ÿ¥Mó0ÀÁ=HÀ¢Ás¬Ñu;gIµÕtÙüû;¨Ä°É°®å=?W+Áþ^[6—àK-ĕޣsìØÙ ÁiäJC˜³ˆ6¸„#¨RÛº¶s]OÃÍK[Õ¼Qo¡_^^–ð¼¶úœŒì>ÛpìRÝßûù ¤üÒ¡ê(h.z}äŸuß²ßßÚ[]Ocg¤ý®ÞgñÖ ìL›|˜cV2Ÿ2°Ç(;Õ™ 爼E1»Õõkh‡„-/V+émÑn$yó&‡#h<2 ÏR¨EÕ©½k!s ºHÄ­q½P’ë‚U€=2¥xÅψ~Ûgiyâïj:2ÍáK+Í-­oÔ\ÞHŽf*4€ˆ±Ü0ßtæµ4ü,Ý'Pñeäúv³á­<¬/¨Ën“^—͉cðYsç8ä’X.zn‹©Øë:M®«¦ÏçÙÝF%†M…w)èpÀøŠ¹^-ðÞÍCøqua©j3IªÛKż÷nÖî¢ÖIc ;«F£r€H'$æ…:¦µ}®èOyâ/í9"ë¶kóOrÌbbWìM­±IýÒÐF_ Ñ`¹í4WðRÚVø}£ê÷𖧍__ÙE$òÞ^É6O$aYН\dNI<×oHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ñ4ãÂ×2—¸÷Qñ4ãÂ×2—¸÷WÕå¿î°ùþg›_øŒê 9Ñì~eo•ºzm:ÇæVù[ ÷¦×Ïc/S³ü(…‡ñàZxÄ7MoȇK¹Ã:“˜‰ŽÖ‚Tãq\>¥ãOÙZx‚ÿOµÐÿ³|>lÇÙž)D·+$Èè>#+æ1WÏŒžkž©Ep3ø§[Òîõí/]¿Ñ!º³µ³ºµ¼ŽÎc.e–!D$/#†ˆµ†òËÀ¬û?ˆZÃi´om6«k©ÙiöÓI§ÜXÅ!ºhÕà˜ùˆ»ddîÚ0Fx,=:ŠóWÇ^$ÐÄVz¤eýÖžúlrYÚÌ«+ÝÈɹâ #áH"’ǰ_ÂúÿеX5›O±A%å¢Âöw—:eÞ›ms¿vä1ÌÃ&Ã’¥Ü9X.vôQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Z[ÛÚZÅkiVöð H¢‰¢( à; –Š(¢Š(¢Š(¢Š(¬ h0hPÝí¼»¿º½¸77wwE ³IµP±U@ Š *€Š×¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD­ªXÚêzeÖ›}›kw Á<{ŠïGR¬2# žG5›/…4 lõ+9,3§åý±|çýîÄH×ÙTQÆ:zæ¸ÚËþMÿÄ¿öëÿ¥p×ÈþðF“¬xv×Q¹¸½If߸FêaÙF2§°¬#š7cï-_Âú­susddžê(!–EšDm°HòÄT«Œ®ìÁ— “׌ëßhÑhºÅ¶Ÿ¥Ew>§±®úúvûCÇ…¥%ÝHÀà @=…|iÿ ×BÿŸ½Kþþ'ÿGü+] þ~õ/ûøŸüE>O1s\xCÀQÛ§ˆÄ6v’ hÂ’Z­ì×Rv3\L’I¹‰Ü@Û…îæº<'£C¥Ýé¸Ôf·¼ &ûF©s4„)ÈGºe"¾Cø¡Úh´Ç…,ìäžHÞÞæRe`NMµÀì ûf¦JÌ¥¨QE# (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áDòÏÚËþMÿÄ¿öëÿ¥p×Íÿ ?äIÓÿí§þŒjúCö²ÿ“ñ/ýºÿé\5çÿ±ßÃÍǾ ºþØºÔ ûÏ+ì²"ç|“çvåoî cëšUcJ›œ¶Eµv?ᮽá-û_þŸ ÿn}¦ÐÅkóÝ¿9ýÍÜ~ñrÉ·å&¸úúƒþçÁôñýÿ‡ÿQÿ óà¿ú øƒþÿÃÿÆ«‘fu'+½GÈÏ–¾ÿÉÓxGþ¼®?ôEÍ}‹_'x{NƒHý´´&Ù¤x,šþÞ6‚ÅR;µÎ ¯¬k²Nöh"QEIAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ñ4ãÂ×2—¸÷Qñ4ãÂ×2—¸÷WÕå¿î°ùþg›_øŒê 9Ñì~eo•ºzm:ÇæVù[ ÷¦×Ïc/S³ü(žYûYÉ¿ø—þÝô®ðÙ¿ö€Ò~xvëN¹ðõî«-ÖÍÆ9Ö%M¯+ däIíŒw¯²ë'@ñ‹¯\êVúMú]K¦]5¥âª°ò¥^«Èî222ÎA®IF3ƒ„•Ñ­µ¹äðÛzý:—þ§ÿGü6Þ…ÿB¥ÿéÿÄWºÖn§¬Úéú¾•¦MÍ6©,‘@ÈU)Hwdä )è8®©aÿ“ña¯sä†.´ñÇíw£ø’ÎÖ{Hîä¾Ã)¡xn_@ÞxéҾɢŠêvè X(¢«ÍrÑßÛÚ‹K‰dv3¨\[và1ÎrÛ¸À?tçe ±E[T¾µÒôË­Jú_&ÒÒžy6–؈¥˜àN<š³EeË®Ù&·¥éAfyu;i®`‘Tl —»vNA>jã\â®MrÑßÛÚ‹K‰dv3¨\[và1ÎrÛ¸À?tçdÅQ@›áýf×[·¹žÖ9‘m¯g³q(—†FˆÁ<§ñØV•QY¾Ömu«{©­c™Úö{7€ x¤(Ä`ž SŽøì(JŠÍðÞ³k¯i ©ÙÇ4p´³DPf96èHÆP㞘£Ãͯˆ|=a®YG4v×Ð,Ñ,À à  ú@TQEQEVü%zD–Zõ«Íuk®Ü-½œ±Ç€KFò`Ø b6휑ÅnÐE¢x‚-_UÔlí4ûÑ„Ín÷¯åˆd•q¹oÞHÏ$¨^   š+7ZÖmt›2˜ævÔ¯Eœ&0W1»å²F#=2sŽ(ðƳkâØëvQͽì+4k0ŸP üMiQEW¼¹ky-•m..<ù„E¢ˆ†Ö;ß$axÇ9aÇ Š(¢€ +Zñ¾—©Ûi­gyuuukss vꤸ€!dù˜|Íæ(^ÝrEkDÅâG(ÈYAÚÝWØûШ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…'Æ:î•ámKPÓl'¿¾†Ý­´1—ie#¸·“Ødö¯8ø} ø¯Â*ЖûE¶[+½7û7P¸±¼’èÉp…æK™G”›3N äfEg×h®kšž=ào \èúWÃË« k QàšRslË Vµ‘•g8ÎÑ*Ç€Ýc¥Vð^‰·ˆ|$^Õmu{E¸ ½’ÊDW¸6®¬òÊFÙ‹H[k‚ÃÀj¢‹…?ø±noï´«ØßÙ4S»]Ýè³j‰ ƒË ‚ˆ*Ì ! ˜êk—Ò4û·Ñ<'Ž4 OTÓ-´Ë˜'´“O–须߅å„cûµ‘CÛIÉ<æ½¢³uíÃ[Š8¯šùDd•6·óÚ·#‰Ô‘ìN(¸Xñ­ ÔÞ|>ðÆŸ?†­î¬Yµ'7†6­öwM²3Lvš[aç-RÜé~$»ø} Çw¥ê’ßEá-jÖT{w2,Œ‘,Q°äî`¸’N8'­{N•ag¥é¶úvmµ¥´b8bŒaQG@*Í ma§Zx7Äê¶ÚT–Z\^žmNHa!d–'‰”ÈÜ—i—–;ÍÏÑøÞÕüKðÃXµM‘æÔ4‰|›Kˆ×x‘¢%‡ 0lwàŽµÓQEÀò{/ hαàè¡ð›Å¢ÛØ_‹»Yô‡¶„NE°XÝ6Hb2b¹Û‘ƒ¨É¢è–¶ºåµ´v¿dòÛÛÈÓÛÄ×'>Zƒø‚ñšöš(¸Xà>Bö©ªÚÅ YéöQ¼^Eݶ‰&•ö²TîÝo'Ìpþ»Ž•‘¨iâ×â¿ö–ŠÚ½ÕÖ£œ×º Ûì£òÕH/ÿÕ¬jw—É$°&½ZŠ.<~ÛÂoöì:ÂëcÆÏ"Üù ç­£ßø8È„ÄÌÇ)·½Cg£Ý.¹h?°u%ñ‚x™î.µshâ7°ûC±iÆÃ·+‹vCcåf½šŠ.<ŠHµ-¢Ð‹«½ÚøÜß³¥Œ†l÷æq/›·a]®2$ä íôB5Ô›Å>¾¿Ð§­8¶:|— .$ºV‚f…T–S—kàž£p5ì´Qp±Æü³¹°øq§ÚÝÙ^YJ“]"ì2)¹”®ìòN9ïœóšó$ÖÖž ‹IðÖ©£ø‚Õ$þÚ¼»°’h …I$`¹ÂUbz.¯s¢‹…øS jšî…6 ³Yk6±H5v_\Ä÷®b`Þ}ëJÑN<Ì:°Ï `($«âM¼þ*Ñn|A¢Ýk^ŽÒé%¶†Åï.™¢ò¤xQX°Ø%PÛHR{g5ßÑEÂÇ‘øÂ×w×·ñ.=Õ­­–ª^ØÌË o4FÚ)³•,"ÀÃg”=×5Øü2±š/C¦jv’ªÇ5ݸ·ºŒÿ¨¬jUº¯—°ÅqÚºº(¸Xñ øVÂOø/Bÿ„RâÖ{=b®Gý•$ ![k…,ï°,¨I°,§püØ2ë~Õ­´»­2ÃKx¼;gâ·‘ìN›%Ì-fÖŠFÛtd2Â'rJ!ÆAà…+^ÕE wÂm=´ïÝÆ“HÖÒß<¶Ð&m:;d*™Ž8ffuMÁ˜g,@\)ð­‚És/„‹i'ÅwRj–Öºi2\ÚlBLh»¦…edm€0^×E K¢i:ŠC¢›]&þ×I_½ÎŸk%»£ZY}–UË!‰ ¥ÈVhu çt Á YGâï júšÂ3o“z|³5¥Ð3y«…‚Sº$m¼/Þ5ï”Qp±âÞ(ðŸ‰5; ÃÚŒSÇâ-ÖÓÄ7±ÉÖy—s°àÙïŒTž°ñ£…â=oG¾·Õ/hõì´Qp±ãÞðµÎ¥|<ºÓôi¬5F‚huIͳ,ZÖFUœã;D«t Ž•àë/|;‡þýCO×c+­\ÜZ<_h¹ŽšF\ûˆu,8ÈÜ{•aé~Ñ4í\êÖð]IxÑ$¹¾žãÉV ²Æ$v‚@È@:Ú‹…ŽS㛨ßÝ!±°ººÃzÔ9†ÞI!÷˜ƒÔàâ¹Ýc³M¤xïUþÁ¹—X-$Òfû34Ë$vPa ã!ƒ©¯$®LW´ÑBacļiáýVóÆ^ }Ğâæx›DÔcðåΡ-¬b(ÀògŠ@¶ådH`2NI`p=ŽÖõgÔ.ìŽÔmk³2É XäÜ3ò1á±Ðã¡â­QEÀ(¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD(¢Šå6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓV\SÁŠä}A}AŸÎcó+|­Ð{Ók籿Ǘ©Ù‡þH¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ+šæ¶"ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb”ï Á)ŠcRªú­È#¿C53íÿž°àÚãÿWUi¯ið©j÷‘ÙÚýšwl³I,€2Îììx’O _‰^—B×5[yï$:%›Þ^ÙËg-µÚF¨Î“:£|Á[i G^µ³„S±šrjç;¾’EŽ7‰Ýˆ «ªÜ’IèóªËÚ騌ïk"ª‚XFèR{]Ä÷q_èo&ÍÐÜ[Øà«/B:t5Ãø`™î¼=ç–“{}Ä̰;‚}pÊ꣑=ƒ™­Ê¿hðçüõƒÿ×üz´xsþzÁÿƒkþ=]®·ãE×4}TÔ£¶Ô5™=>V&f@ €Bõ,FIr@©bñ-¤ž-¹ðÊÇ8¼·°ŠùÜå˜ä’DPs»16xÆçд¯ø`÷Žíÿž°àÚãÿQöÏX?ðmqÿÇ«º‹Ä¶’x¶çÃ+âòÞÂ+çr–c’I@9ÎìÄÙã#ŸMO´{Ñhÿ_ðÁïcöÏX?ðmqÿǨûG‡?ç¬ø6¸ÿãÕéßh÷ª$×­ôêzíâK%¶i-ÜËÙ#Bì8#ëE£ýüphðçüõƒÿ×üz´xsþzÁÿƒkþ=^•i~—6ÜÆ$¨®¡º€Fy©>ÑïE£ýüyÚ<9ÿ=`ÿÁµÇÿ­ªƒj©UX¶Ô’OÔ’k¾ûG½y¾™Å³¨û©<È£²¨‘€ÐÚ¦qVº[½™ƒñ4ãÂ×2—¸÷Qñ4ãÂ×2—¸÷WÓe¿î°ùþg â3ª€çG±ù•¾Vè=é´ø¿äc‘ºze|î3øòõ;(!EW1°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE‡ãk{ïìŸë–¶êphW6÷—vp.ù6³’1øÙU}£’ÆNç¼mý¡ã ßkÚF‹«Ãe‚õ.3ua-¼÷÷ídD†EžYä¨É— žk»¶Ôn--`´k ‰¾Ï B$ˆ W ¡AÃ0 à \õÔŸÛÿÐ*÷þú‹ÿ‹­å¬›_™”ZQIœß»Ký6}JXÝMâ)-Ô]¢cůü³Š3ŒC³¡„óœ¾_qjÙð±Äž>ˆOþJÉVŽ­pàªé—@žwŒ(úÄãèÐÕkH¤±ŽÅ¡>sY.#`òÚ3Žx8bGl€ Amÿ­¤¯·õ±çž>Ñüsâßx¯TÒ´ @-#·±Ð®oïdµ–m¤[–ž8ü–¯6ÅÎå !ŽjO¶—®øÝa»#ïsÝÿlOÿ@«ßûê/þ.í‰ÿè{ÿ}EÿÅÑgý4_Ò<«á>ƒ«Ùë·M&›â+[y—Vxbê'¾•¡`ßh¾iZæí‘X’ €,èÚfœŸ µÝ5‚”´Ž¢ZËCøšqák™GËÜ{Š)~%ÿÈ­uò©ùSî(¯©Ëð±ùþgâ3 Ñïm/ô ì§·¸…²KÑÔà†  äÖ§¯Žÿf¯‰*¾¼¼ðõýð¼†ÎÅŸsÏ‘$J±?2ìFA#œ´Ÿë­þø¯?û;뾌­/ø&‘®é.F¶=nŠò#â½dÿËhÿïGü%zÏü÷OûàSþ×óþðGõÏîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Eyü%zÏü÷OûàQÿ ^³ÿ=ÓþøaKùÿø!õßîž»Ey x§X=gOûàSá'Ö?çºßì7üÿ‡üýsû§eñZæÞÛÂó™a‰ ¶d•Â*‚I$à9'µò×í-ã¯G{‡b¸HíolViä@D¬ È9ÀBrÉäg‚Rx¹`Ò¡ m×ñfª>wÔÿÙgwenhywfar-5.12.0/doc/dialog/images/cocoa-1.png0000644000175000017500000013115413142134462016107 00000000000000‰PNG  IHDRÐ0¯\ xiCCPICC ProfilexÕ–gTɆ«{r"Ì C†!g$ 9Ar•a† ã0dDEdqLˆˆ`X0(¸*AÖ€ˆb`0ÇdP®‹(·¬çÜ»ÿîŸ[çtÕÓo}õuuWç¼;9A ,@*?CèáÌ ˆdâ€H"‡›.pò÷÷ÿØ>ÞxòŽ‘8×?†ý÷ i^l:È™Žá¥sS>‹ð W Ì>…pv†aTÂt!²A„+Ä?ÏõbŽ™çós1Á.HL?x2‡#Œ€ôÑ™YÜx$ia>/‘Ùa{n‡‡°x©kÄ\…°nÌyâ`'f1'‡¿ÈóD욘.HáäÎÝü/»Ô”Lä{Í5*Ò“ù)ËÅgCG®1ÇÕ{)sg6§ÇòC‚t~Ìr¿Žº.° Ãùö^Ðó\–/plºÛbž$Ž—øÌæò 3C8=+Èmó‚Ø뺨Ç%º³ôÄ öâ³’×x/î\À\à 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ùãb ™l>רifbj"žþ¿iâZ›ßì{Æ\ AŒ›k91Ø%#5àù·@³.òákڊкiÛÊÍfÍçC‹ "Lò@h]`Ì€%°ŽÀ x? "À*ä '€T Ù lÅ ì»A58zpœmà<¸ ®[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ì d¹A>P ECñÊ„ò¡MP)TUCµPô+tº Ý€ GÐ4½ƒ¾Â(˜ ÓaeX^³`'؆WÂñpœÁÛà*¸>·Â—á[ð=X¿†§PEB1Pj(# å‚òCE¢âPBÔzT ªU‡jBu zPwP"Ôê ‹¦¡™h#´-Ú‚æ¢ÓÐëÑeèjt=ºݾƒBO¢¿c(%ŒÆÃÆ„câ1Ù˜bL%æ(¦ss3‚ùˆÅbX¬ÖM®Ŗa÷c›±Øì0v ‡ÃÉã pv8?—+ÆíÅÀ] âFpŸñ$¼*Þ ïŽÄóñ…øJüqüEü ~?M"hl~!—°p˜ÐA¸M!L¥‰:D;b01‰¸‘XEl"^%>%¾'‘Hê$kR)‘T@ª""]' ‘¾©d}² 9ŠœIÞF>Fî$?"¿§P(ÚGJ$%ƒ²Ò@¹ByNù,A“0–`Kð$6HÔH´J J¼‘$HjI:I®’Ì“¬”<#y[rBŠ ¥-å"Å‘Z/U#uNêÔ”4MÚTÚO:UºLú¸ô é1*ŽªMu£ò¨EÔCÔ+ÔaЦAs¡qi›h‡iWi#t,]‡Î¦'ÑKé'é}ôIªÌR™P™™™ 2"Š¡Í`3RÛ§÷_e•edce·È6ÉÊ~’S”s”‹•+‘k–»'÷Už)ï&Ÿ,¿S¾Mþ™ZA_!@![á€ÂU… Eº¢­"W±Dñ´âc%XI_)Pi­Ò!¥^¥)eeeò^å+Ê* G•$• •‹*ãª4U{ÕDÕ ÕKª¯˜2L'f ³ŠÙÍœTSRóTËT«UëS›V×QQ/ToV¦AÔ`iÄiThtiLjªjújæk6j>Ö"h±´´öhõh}ÒÖÑÓެݦ=¦#§ÃÖÉÓiÔyªKÑuÐMÓ­Ó½«‡Õcé%ëí×ëׇõ-ôôkôoÀ–‰û  1†Ö†|Ã:ÃFd#'£,£F£!c†±q¡q›ñ›%šK"—ì\ҳ仉…IŠÉa“'¦TS/ÓBÓÓwfúf\³³»æswó æíæo—,]z`éC š…¯Åf‹.‹o–V–BË&Ëq+M«h«}VXt–?«ŒuÝcíl½Áú¼õK› ›Ó6ÙÙ&Û·[¦³,vÙáeÃvêv»Z;‘=Ó>Úþ{‘ƒšÇ¡Îá…£†#Ïñ¨ã¨“žS’Ó §7Î&ÎBççO.6.ë\:]Q®®%®}nT··j·çîêîñîî“k=:=1žÞž;=°•Ù\v{ÒËÊkW·7Ù;È»Úû…¾Ð§ÃöõòÝåût¹Örþò6?àÇöÛå÷Ì_Ç?Íÿ·l€@MÀË@ÓÀüÀž ZÐê ãAƒƒ·? Ñ É é • mýæV& _¾.üV„BDbD{$.24òhäÔ ·»WŒDYDGÝ_©³2gåU «RV]X-¹š³úL4&:,úxô ÇSÇ™ŠaÇì‹™äºp÷p_óy¼ñX»ØòØÑ8»¸ò¸±x»ø]ñã  • ‰.‰Õ‰o“<“&}JöK>–<›–ÒœŠON=ǧò“ùÝkTÖ䬊¢4›´Ýi“BoáÑt(}ez{15½™º™?eeÙgÕd}ÎÍ>“#ÃÏéÍÕÏÝ’;šçžwd-z-wmW¾ZþÆü¡uNëj×CëcÖwmÐØP´a¤À£ ~#qcòÆß M Ë ?l ÛÔQ¤\TP4ü“ÇOÅÅÂâ›m7üýsâÏ}[Ì·ìÝò½„Wr³Ô¤´²t¦Œ[vs«éÖª­³Ûâ¶õm·Ü~`vÇý;ëË¥Ëóʇwùîj­`V”T|ؽz÷Ê¥•÷÷dîUùTµïÕÜ»cïLuBõ½çšæ}Jû¶ìû´Ÿ·ð€ã¦ƒÊK~ý%ñ—‡µµ­uÚu•‡°‡²½<z¸çëHÃQ…£¥G¿ãÕÖw7X54W:¾½nÌl?u¢ÿ¤ëÉö&£¦ÚfFsé)p*óÔ«_£½Úût×Ö™¦³Zg÷µÐZJZ¡ÖÜÖɶ„6Q{DûÀ9¯s]¶-¿ÿvì¼Úùš 2¶_$^,º8{)ïÒT§ sârüåá®Õ]O®„_¹ÛÐÝwÕûêõkî×®ô8õ\ºnwýü ›çn²n¶Ý²¼ÕÚkÑÛò»Åï-}–}­·­n·÷[÷w ,¸8è0xùŽëkwÙwoÝ[~oà~Èý‡¢ˆòŽ=JyôöqÖãé'O1OKžI=«|®ô¼î½?šE–¢ C®C½/‚^<æ¿þ3ýÏ™‘¢—”—•£ª£ cfcçÇÝÇû_­x5òZðzz¢ø_ÒÿÚ÷F÷ÍÙ¿ÿê Ÿy+|;û®ì½üûc–~èšòŸzþ1õãô§’ÏòŸë¿°¾ô| û::=ƒ›©ú¦÷­ã»÷÷§³©³³Ž3çPHÇÅðî”Ä+ ¾˜Ø9ï…ç" yÿްØÇÏyùÿäy¿<o À‘NB ðDÆdÔFFª#bKì`sóÅ QÄ-=ÎÜl ²±&Ÿggß+€ëà›pvvzÿìì·Ãˆg@gÚ¼Gû€¥º¹›YõÌöÍ-ÿ±û7…èªÍöì pHYs  šœ IDATxì €ÅÙ†¿½/ØåF. FÄ(*ñÄD…¨1^üjT¢bT4Œ1*Þ&hLbÄûÆhˆñˆF‰ñÄ Ä+¨¨ ÷½÷õ×[³ßPÛ[3;3;³ìξ½UõÕýtOÏÛÕÕ=õõõBG$@$@$@$@$ÌØ²1 P@ó8     8P@Ç‹YI€H€H€H€H€šÇ ÄA€:XÌJ$@$@$@$@Ð<H€H€H€H€H ÙqämwY3Œkwf‡I€H€H€H ˜W%§í»’3ÚÛØ(ŠÓàÅ! €C ½‰í6+ )”£ŠA   è€Úª°nSº…¢™Ë5:à‹C&  hW^ÖÑ–ÄôvÐqŠæ–ˆä–”mWG&;K$@$@$@Û‰@ÂÙô7æ²Û[Lo‡hŽEôÆ’g;Cl–H€H€H€HÀC ±KÙbºUtŒÂ9š Ž–æÙ7o~_´‘ ÄO &ìT-´4[Ek éVÐ1çHB7’Ýa³HŽ¥.·^†I€H€H€H€â#ЬÐm¨.–|‘òD²Ûª[CH§\@7#ž}¢ÖgÓ]OZ´¼Z}    ÔŠÝ`Üm9Þ´ˆùS-¢S& “$œ#‰`×î†Ýà†cÉãæg˜H€H€H€H 1…­S›Ç ;Y¼úòúl¶žT é”è8ųOÜmWß…«áhiÈÓ\ºÖCŸH€H€H€H 1ÅlCuÑÒ5M}íA0{ÐŒkÙ”¤E²k9ú$@$@$@$@É%IÐúìÑlnšÖÞmÁ¸Í—ì™è¤ èˆgWäjX}-L‹T¦9»¦Ó'   ˆ€W´š¢±Øƒy"Å]»F›‹ÛQ$SD'M@Ç(žƒB×kX} 6–p0_0îÖ´h.ž¼Ñêa ¤ P6>7¯F™hq7ÍöÙ´ÑÒlžd‰è¤è$‰gW¼úÂ>`¨]}…è¦5gsÓ&   ˆ€+^µd4››æ ûl¨öHišÎͲÀh\8’` Åº…â¢×¾¾°Ú"ù:ô`ºÚákšÚ‚qµÓ'   ˆ@Pã¨Mmêk oÎwëÐp°L°Nͧö°ßRÝ"A<Å©†ƒq ¶xía žòHsësój¸¹tÍGŸH€H€H€::®‘8Ó÷ÙPÞµ»ùâµûê‚M[ŸµµDDgk­)ò]a k<š´³™­SCØxa‘­eaƒÓ¸ú‘l6³“_ãôI€H€H€H€b#ÐD”šbjS5iX}­qÝ`«2[™Ù¶š­Úlšæê:c¶ijGq_Ø&&óOÂ3Ð1Ì>ë Ð_ GóÝ4 çš²]¯½öÚ=9äïï°ÃcssswB…t$@$@$@$@éA ²²rÉêÕ«_5îÅ+¯¼ò}3ªufƒ †S!í «Íç»¶`ñ„×C'S@«èE"…3‘Øà4ü`Xã]®»îºý~ðƒü"''gTuuµÔÕÕiyú$@$@$@$@i@ 33SŒÖ“ššš÷þþ÷¿ßlDô3¬ CS­³ËG²ÚvE¢kNX@'´„#Âì3:§â7–°Šg-£[í÷ßÿï›5*£ÊËËmåüC$@$@$@$^0Ajijdee=zôftÿ3Ûf³©ø…6t²‰Ú4ØÝ<Í…Q.ì iY €·º- x›¥qH1¬šWmA_óÀž[RR23Ït$@$@$@$@éMBºk×®‡™QÞa6ÕŒ:hL´ª@Vâȧ>ìÁ<°©Ó¼OÈO†€vç æv×W{ÐÇ@öLsU0Ðl°yÒôªeëÖ­²téRÙ´i“Í‹4sa!F„ËN;í$:u’ììlÁmØ#¹`K–,‘Í›7™iþP ”-..–AƒÅU'®¬ÌY¿yÌý|¶,Yõ™TÖ”áöäåÊà^ÃeŸ]“nÅ=%//Ïö5Z?#õŸv   h¯Œ.hú-¨‚98ó„úH×0|8M†mb¼âÐFÐEVžÛZ×<ðÝ0r¨-?¢3š«­­ÌP/_¾\ t!’{ôè!………V˜–•• „õ¼yó¬àíׯŸ]ccnD¬Vëüúë¯ÃuvëÞ] Lï3¤ÜÖY*ï½÷ž­³ÿþÍÖ‰>bʇ_Ì‘¼ÿ˜t*.’ž}{J÷®;Im]­¬Û°R>Yù޼ûÅkrÔwþOFÞO L{XDG$@$@$@…@Ãón:™Ša«Ž†À̪=][IJжF´«ÐŽ˜ÏMˆ[@»…MX;³†]ß kØšÛZfD”õºªª*Y±b…нzõݺtébôÆeÍš5bžì´yPIß¾}í ¯·BcDß|ó­·wï޶Ξ½zêDÇ7nÜ$«MkLh3Ú}úô‰Z'fž?X4GžïéÖ¯“ì8h½ó÷dÿ]¾/åU¥òÚü¿Ë‹_“o¾Z+Ÿû€Ô›k­=wþ.ÖEê&í$@$@$@$® U877­ \Á¬4hS¡Œt kù˜ý¸t”Ùgíd´†‘'–MÅ3ò6+ KKKeýúõVÀbæ³¶˜$¯¨¨°}AÂK"†¼XÒmfuBtCk™™VXÛ˜p—SgnžäçؼXÒ­Îõ›ÖÈKó—.} ¥÷ B)êœ%[kWË’uÿ3Ë8Ê¥Œ-£é0Âðݰµ5·„› ]ˆh„]‡:Tìjþhõªw}”Câõ©¯ù¢ÕY˜W(f½tQ~¡äñœkf ó2sL» ^*kk¤ÂlÕ¦¯¹Y9²9¿F ŒŽV§í ÿ @úp5aPD#MÅ´+˜Ucº4\!íÚ‘×-ë¦5NT@+Ö}7Òts¡À¦q7 [³b „¬ŠhˆYhWì¢: ¼ZvŸCy¬sVaŒ¸Šr´ƒºTØ"Œ¼HGÝ‘\Ï’>R[Y*ùÙ¹’gú\c6óbV®Ý{5•’m¶ŠÌj£Fj+2¤g—>QëŒÔí$@$@$@$ÐÎ XhÆ â¾êD׆|® f”q…²Æ9q“€6¢ÅâÜ|»Ê»q_X…´BkV@ãÍx×3Þ‚áŠgжQÓ}}ðyQ&šØÅƒƒxg3ÞÞ¡"Z}Ô‡²*Èá#/ÊD«³·]dáÚ9bomÞb„tavÓ¹¨R23Ì:í†ã¢Öüðâæ5²sïD­Óä   H?ª12Ì*Ž¡!Ⴞ åPjè¯[FÃnz£04¯ÑvÍæ‹I@7ª¹i$Øy»9aS»ë«¾Šg7œ©3½nen?˜‚_ÄkërssíL4ô¾j~Ì £`äÆkìTP»uiéx4ĶŠh­yF}à»eËûë‚È­¯;uÙMVly_V/Û"Cw)’œLó ¡Ù²30]oÂu’›i~Æ#+—®•‚ÜÙ©ë©*çϘë~¡O$@$@$Ða¨.„¯‚a‰hF¤¹>ìša87ÝÍJMào"€S?küiî†T7î†]@°»ñf4f}‹ŠŠ¬àÅ,0~‰ÐÐ:+ŒYbm¤ã‡R¢]\   D~ˆr”A~WD# ¡¼î«ó0Ø «,«—‘}ÇÉ'kž—µÌRŽyR›i–4Üu0?F(µ5õ²fùVÙ´¶Löì7^*˪8É8 @G =¨‚Ùõ!€5®z<†SŠ…þµ¦¡Œæ”Gó6òÐ*p"ÚqÇdƒ¾Ái^õ>6Øm8šÐ5yì¬/,–eà]̘Ƭ4Ö9CðBØBèB #fŸ1ƒÉ¡ä…ÐÆëéPD:ê„CyϨ"³ÛÑêDÅ=åÛ½ÆÉ¢å³¥ª¬Æ¼~¯XŠ MŸŒ/-¯0ýß,«×—Ên;Œ—Î=esõæ¨uFê?í$@$@$@$ÐÎ ¨&„°UцA¾jHø®V»Ok^S¤e.Q­ÓÖÝ8Âw}µ«úšÖìhlÌ.C@céÅÖ­[í² WìBHc4D.òÂéÌ´þ¸uBã½Ñøñ„átË6޵NˆøââòÝ&Ê¢Uóä«/—Q¾ úYjªs¥sÎP9pð^²uS©üh+Z?‘NG$@$@$@iH ¬ÍØtÙô"œúÈ£i®=š FYW\㨧Y׬€6âS;é«,˜æÆÖ e5Mm껀‚¶fHCðâç·+++­Æ»žõ­˜M†âU×=cHÍÍl»ub ‡¯N¬ާNˆaô³×JF˜¥!û…þ3Ôÿ«¿Ycg¼‘W×YcŒt$@$@$@$иšP± fõ5|Í£>P©=öÅa³Ú×è@WdkRØoV@‡s†èHÐiçƒv7®ybñ]AÝì ´Ûfƒ!DáT÷ëøámnÙHád× Aq¼zõj»<ÄmWg›µ¯wó0L$@$@$@€ô  eø*Œ£iI`Az4ñ‹t¸`žæÊ…J5üW@7*!â Y´£Á°×2*žÃqÀÈ‹Óüê»e|67=RXË©ïæóÙÜt_XË@LGrš'R:í$@$@$@$ÆšhB3VѶ«/5®¢in^¤kÂ-vÉо¨ÍõŽe³àfΜÙâA²    vEZ1ÚÌ3ãêIl®xv…³¦iÞ„}¬ñˆZë@œ v} 6ws¯Ž´éo#]ÃêïbÞ¬ñc§#   è ºwï~‚ê³á!Aܲwý`ñà‹ v «oLa;°égåÂáPRã¿ÉœÖšUD#®aõÕ¦¾Úƒ¾ŠmØéH€H€H€H€:h@èA8ˆà VÔ8ÒU/ªMãÁny“â´c‰T¦l®¬vù4¬e}qMCþ–ôåéH€H€H€H€ÚÕ€ª ]£ñÅu”HkÎiùæòyÓµsÞÄ€Q;£~ ÙF5-Ø)»> ¸ñHa_;´‘ ¤/HºÐµcôn\ÃJÅ#Éišú‘ò…íñèp!O Rƒ‘ìZ…¦Ã×Mû_Ó5?}    ô' Ô„ª1úæ4b¤ôHö¸ˆjÇâ*!³vH}͆¸Ú4¬>òî-™ýC½t$@$@$@$@mŸ€N¤º½êF»ù4¬£Ô¸újOØO¥@E'ÝŽÚ®v7î† ’ ´K®tÃŒGX]0ìÆ5ORüD´vHýX;ƒü¾2j÷ù±ÖÍ|$@$@$@$@éAÀ§ Õa${0ŸG8õC±ÿ¦ú5vÚ ßÀÔ¦We‚iZ}    ô'àÓ‚ª}i ¢v—Ž–qm-GüˆJ¤ÆšëX0]ã® #®[¤vi'   HOª]#Õ¸†]a8䉿šK—æ4pT­eOš; MvPãê#Ÿ†áëæÚ¦#   èXbшn—ŽÚÕæjLµ%ì'S@7× ˆúȯáà \{sõ2H€H€H€H ½ø´ «5£Ö°ú)'‘J­ƒPß lº¹v„Õ®~0q    ô& :PýàhÕ?èÔ¦~0½Åñxt¬ æ ÆÝŽ#Í·¹y&   èx|±9]éRŠ–7‘|¶LKÞÂávÈ »qÃÈ£ùÔwÓƒa70-îxee<úø'2çíå²vm¹Ô××K]]h3Aëê%‚½lHB{ÑíõõurÈÁ_*úI$°qãFéÒ¥KkdU @®©;È6ùlÉ4ùLQ#¹&Ÿ+ôTçÎe—]v‘1cÆHnnn²‰UªZ‹'¿«Ü4W¿[" ãj(BfwКEhšÚö!žÏ>ÿŸ2|xO™rõáÒ{‡bÉÎÎÄ–’n%£‰.N¸ÁPðË«e·Á=B# zÊ”ö„ø,^¼X† "z=>œÈ5„"AäÚp$%È/Úñ¸ø ³–nÙòxMÍñJ®-ã ±ìºÐdd¬[·Nþõ¯Ƀ>(§Ÿ~z*D´~ºÐ¼†Õw»ÔjáXt<Œ'¯;P” – ÆÝü1‡ï¹ÿ#©ÌÏ•S& yF8—ÖÔKfm½ÐØÖ ÐÄ™ÇJ“4Ú×–Ö†h>L!£aI;œ„8Ô×Õ%T.ÄÞý›Xûn ¡pzÔC®ºg“¿?É6ùlÉ4ùLñ½D®-ãjή¥!233¥GÏr 'È£=&ÿþ÷¿å{ßûž6Ô͹ñ ÍMާò6¾RðÔ«€ömÖävÖ £`0Þle‰f¨3bä…—Ë„ •Šêz©®­3;3ϵ!ñlz¢sÏn§\r´‡è»6”×JmmƒˆNtç°œ—@Ma M—TäšTœ*#ÛF8’!Ó¤`lR ¹6AÒ"ƒ;#ðÁ$÷ß¿Œ;Ö ëU{aWž ”GØ•t±×ÚLÎT h4í"ؤEKæO(‘W^›%½û”H…™yÎÉ2rÙ¬}Æò \9…:`â ÕÞq •U™+yï,sûf¢YYYÛm õæøL6Ûšš{2ÃLA2]uuµY•m?Oɬ7u¥‚k*ú¬3Uû.ØNKâ­ÅvÙ²e²Ã;H^^^“îb²ŽÇtp­Å4VVø¬çääÄš½Íækk\“j{'ô» >6<¿ƒãߥÉþ¾ñ°‚tÃI GKóTŸ©µÏ4>ªÐó`z0ßèLîòòrYº±NÊjD*€®3;3ІwH@‡„´¯â7^yN6¬[Ý(iב{Ë€AC奿=&‡yœt.NÍÃ^‹üOæ0×¶]PP$}ì$ßÞcŸ6#Tp1Rg$„M×™‘íÕ5ÕvÔ+/¿"}úô‘Q£FÉhrûóoû™gž)ÅÅÅrÇïïˆy\Ém_¤vž|òIÙZº5bþ“NæîOc¯ù}õ£p²ìñrE¿ž{î9Y»fmxlà¸ÝmÄnIëWsã?~¼ÝwS¦N±ýh.¿v¶µ¸¢?Édû­¡ß’'B~øÃ†¦ýÏÜÿÈy?=ÏŠãN:ÉìÙ³í0Ý1Θ1Cî¾ûnyï½÷¼Ç8 ¸ùÿ÷¿ÿ59>÷ÝgßFçX7¿r Ö“*{"L!¢^ý׫òòË/‡Ï±c#M˜Æ3¶5kÖÈ Aƒdî»se×ỺCnÄT¶nÝ*OþåIÍÉΑ޽{Ëþûï/Øwñ´‹ ’?™\Ñ¿¶òy7~œŒ9`Œ=Ç£_ê’ÍÏì&Ίg$4¤!í•„ ®Æâ¸C>¶`o4½![j½d h_烶`\G¨vøÖ´„}\eäå±—a—pà`Ê‚ˆ¶3Ðh&òìóC¼ÙœxÊeøî{…ÛïÞ»¿tíÙWúÓ-2bÔÉ/* §!€½éë¼kÇÁµäóù²C¿RЩ³7ÿœ×^‘‡þxƒŒ9ühY¶è3YôÙGF°/¿¼åo~·~·C©²ãbWòpúuÛõÙO>édû Á±Ç+óçÏ—yóæYa åb­'•ùí‰Àì;Ka÷¦¶¶ÍOu?q‚§ý>ø@6lØ`;ñ°zõj9ꨣÂ>æècìÌÆ†ºÕ¹ãxüñÇ­0¹ûȘ÷g¸ž@½jÇ—øM7Ý$G}´|öÙgòÑGÉ~ô#Ðñ9·?nz²ìñrEn½åV)++³l´O}ûö•oûÛñsŠáxÚ²e‹`–u·Ýv ×ï“èC²x$³žd²ÅÅõ-·Ü"ßýîwíÅ,ÆüЃÙ5•Ó¦MCT6mÚæ„8Æ¢œ"ãȧùã9>“ÉJûàú¾úaé[ºµ´ Smß×öòåËí âŽ;îh³m( Î!Z|·‰…®„vªiÜ—g[îBÉÐ t!õE2s³eíæ2éTc„³Ùf ´ù¸o[ÂѸ°Ãá”1ꀱrö¥¡“¶Ú±_~ù{ TÛ‡mvó'TP&7?r¨½ºªBÎ:f´Üþø«2ÜÌh«ÝÍmZÒµ‡ü|ÚŸm?Ÿ{âùã ¿IWÜ(Å]ºÛÝüný­a¯Šs™ž|þç?ÿi…nÁªÓ±k¼­øÛ³_h;žö¯½öÚ0¶)S¦Èþó¹óÎ;Ã67©Þûî»Ïf‹”îÖ Gëo=äOú“-rï½÷Êå—_.7Üpƒtï:†ƒu¥2­ŸÑÚÅZ¾ë®»®Q–D85ª B3Þ×\s|òÉ'Mr¤ªÍ& %`H&[4ÿñÇÛ^è˜ßyç9çœsŸ 'Í«~,ÃhKÇg°¿ñ2vŽÅ¢ Ó`{nüâ‹/¶oºþúë­Y™ÆÚ'Íÿ‹_üB¾óïȪU«d×]w•§Ÿ~Z~üã»Mµz8Ö1hÇ¢qÕ<­í÷Û¾²wm© ÛK«†I´ ”üüüT6Ùfên|/µÍt+¹ÉÌË–•›jdsE­l4Ûó\©YÃ[^e–vT×I963£ ¿¢!^fÒ bkÌŸ }õÚµrÆ‘#å‹Å mþ5æjûŒ#ö9¯¿"?;åp™rî¬ý¿ïΑË&-?Ü·¿üß¡ÃäsAý—MüൟfëÙZ^ըݲªZû°£9Ãöž†JYƒ¶tÉbÙ¸y«Ü2å§rÖÑûȉc†Èõ¿8K6™íç7+WÊ•ç$Ç ç·¿Û ]Í8DøE]d÷Ɇõë-Wˆ_¼ë3°Ó§O·û´ÎÌ:h=ê£;Ócö¹Úðj>¬£\¼hQئiÚ®ÆÕO¦=®à†§öµ?ê£_ï޽?6{H[dƈcwP¶3Ï8Cî¹çžp]`üÃøg Œßxã ùÕ¯~%+Ígeñ%‰²î¾û¶!Øw¸HÒ¾hýhõµ¦=™l×5|n?ÿüs;<Ùƒc\°Ü(È c×co8È<ÈVö|à‚¼šl•Ù·ŽOì;œ#pÎÙwß}eèСV¼cY‚æÅëºÜóÆ¤š¢T§ IDATI“ìE–2÷Ï´]­CýHöx™ºçX­[ý ÓÉ“'ËæxÄw ÚÇŒñ¡‡*¸›uóÍ7Ë믿.<òˆå‹Ô·Ö,åðKƒcÐgIpn@ÖÅvëÖÍN (ÛѶÈûj¶HC?Ð7,Á9ÿxsG ¬uœêûãÚ“ÉíDÚ×8~î¸ãŽF}»ä’Kì¸æÆsÎ'7™ó5Žc\Äëg>ÒþÑóÊàbÅ-‡rUFð£åwó…óšý\‡‡ß_UYÕatǘ6z]U–,X]-ù9™f ´y튙¦Å‡¿ sÇ6dV{ˆ™¨¶¢ò‹e+ä…½míÙyùÒgз¥tS¹¬X¶X>YQ*k³«d+â_.–?Ý4U;}ŠôûÖîòÑŠ*¹ûÆ©²Û˜cäG¿š)V%K¶äËWU2îç3äÓSGÈQçÝ*}†Ž”OVãmæ¶}C»&"+6›ÑÌn£žò²-ò×{~/ºö–ÍECåßTHñ}夯0cÈ”;z <õ·çe·ÆÛ~Þ{ùévßY¿}Qr ;˳¿ÿ¹|múû¡© ãºʙҥ÷Žò³ûçÉG¯>-¿Ÿö ™üÇ×ѬuÇúpqûÓ` Û¿\Wi×8¡L,'Ï .¸@.4bá7ß´_€°©›h„퀬Ø5k–\qÅòÊ+¯Øä3̺䯾úJ þð’ö¥K—J™Y_õÍ7ߨu’øòÂS¿sçΜ rÍF'žx¢à _¼çž{®\xá…‚/ÿû¿ÿ“gžyF°ŒëúN0ù Ï:ë,yÿý÷m·èQÿörh;ÑöqBƒÀú3×ÁöÀȸqã䡇’[o½Unûío­ C>ðÅʼn¶‹8øƒí³Ï>+™æöëý¦ßp|j8>q!ÿóŸÿÜ>uØa‡ÙõðèÚ8ùä“íyåüóÏ—O?ýÔ†!@ußF;Ÿ¹}ˆŽ—i´sl).ξÿýïËMF,ƒ%ΛX6„‹\Ìãb“ —^z©]rãîsõKƒãÀšk¸ ³|m?f^m†‹I,Ë£hlOŠÀ<ð¹Ã>#¸€ùÙÏ~&w›%aðcuÉäŠ6#ík\ìa’*xiÁz3 ñè£ÚW¼}ñÅQÇs.q¼?ó¾ý$Y¹…’•×Yv;AŠºš§Ñ;u—ÞFÔ½à}[ÏêKdéÇoËèž']ú ‘Â’^2âm{ךËä‹^7ý<\6®Y%}vÙKÖ|¹@6š‡%Ñnhì†ÃÁgÏHàmÅ`81à‘ú€Ö|¾iD5¾¤0û†[~˜} WÓpB:~áhçw¶ãÈÀ‰ 'OÌp N<̆“‡ë°¬']ÌšâKâÃ?´ÉêX—‡/AˆÌjàÄž®_8Xîd|Ù+‡Hã=òÈ#-›Áƒ[“?föðà'xá–:øGs؇xlĈ²dÉ+ØUPF+×–Òp—K8°ýù϶]‹õØkn.cÛz`Š%.ŠêâÝwZ®­û>¶Á>ã³§ùÁ\¢qBÖØcækï!ä,X¬2t|â¡Wœ3pÁ‡å¸hÂì,–!`¶"ùöÚk¯Fç =gùÎgá†SˆtŽ 6׳gO{Ç ïꫯ¶ç‚+¯¼Òf+**²Œq±ÞîO"KƒõkuŽ9Ò~vp1ƒsGKØ‚=ú¡}‡ yÌH§ÚEâm_ãá_ÜÅP¸§žzJFmgÎcG¤Ï|´ý©Lªù@<[Ñßœ¿pì@{¥»Këhì@ÌBdåu“\³î9ÏnYæä—!YF fØ·q˜]l5@c!€¾Èö8ô7éÚðq{Mn[^n–ä›pMN(Þ£O?É7³ÝêNþåŸå¯·](wœ5J8þ9üŒ_JNn¾i;”'åü(‡úÍ!(9Ù™æÅb9üô+¤K¯þÒ£ßÓßÐõn‹½òÐ òÑk“âî;Èêe ¤ÿÎ{غª¶„Þ0x×½Âu£.<)Œ¾Vl\fdÎ_ï4ã Õ·ãð½¥tí—ÒÓô?è´?A{A.fòCåƒiÑâ øc6x„ v]ftà°VVëÄ—NN˜Q…ƒ¸Õ4k0¾þúk+Šñ¥©'kÌž ¯æÇ-X #/ö+â_šAˆj|ªC𦫭µ}·ïñ¶¾ÃéxÝòøÒQ»®QÓ8òÇ'çÝtìˆa׿+§m¢>ˆ@Ìnav[…¸¦·¶~ûKp·_þ®kîØs÷ƒ¶ [sŒ‘7˜í6·ïܾmp2Ù*/·Î ;'äÁ,¬®¯WáçÖã²AþHÇ'nEã. –/@D/\¸Ð^¢.7j÷¼ãö/ÚùÌ}þÃí‹/©ß¾¼®ÍwŽE]pn8CäcYîàA˜©sÇ£åàG:—j9õQç ˆ\¿ZKÙâÎÖV«Ãù[ǧ¶h¾Ë Z¾`šk´}‹8Ì ã-I˜yÇ,<„8ÚG¹æÆí3Ü?Ú×he4OK}+–*±a³«¡/̉K2€† ß/Ð^¸øÄ÷HººmÊ! Gˆ'UqòËÌÏ#–ss²¤ÀˆÖ,Î21^g¹òCaìxota^–k6:t2Âr¤ÕºqS?Ž%¸ÂÉäÛŸ•Eï¿)÷ýê4éÕoG9ð¸s¤ÚHh8úB'¿5âQÐ9Y™’WP(#÷6[emb¯¡¯½û´õ›8U†ï{ضº‚r‡kè(bþzìùÙ†£™½MÄá ë¸ ’ñÖ+8œ>ø`Ö?X®‡Ù¼bÍuxZ_p8!é 3×ø’Bßô¤ _ûŠ|ÇLöK/½NÓº‘Gó«­5ý–´¯,‚ýwDZ §ù|éÊÉf4À Ÿ)-;N–Á|švÌ6a¶»-¸D¸¢Œ¯\sÇžËaˆ¼9ÂedFHS·|0âpnkØŽ|ŒšëÊøÊœË q7¯lnå¬uÁÁéøÄÅpƒ¼9k†¹`ÀøsdÇA»È°Q‡È¿û”­[aËdÔ˜µÑÕ!.úì'øo¬fpp»3Ê(ƒYbœ pŵÁW´i<˜Œ#xáM*Xó‰[“X §u}_npOµÅÂVó&â'Â5Òøš;ö0㎥*¸@ÄÚG,3Òc[ûîãƒÏ–1a}~´|‘ú…2zLÂ×:|¬ñVMo©ŸL¶èKp|Áx28ÙFÌߨq÷kÒ!ðl–á\ƒ¼‡š BœŸp Ïàù ÜÍÂù éèžÕðÏ|mE²ÅË4Ú9m¸ q|ᙬ%Æ»³ñ!Þþ¢}Á‚LJ[^ë Ú´¼¦»q ·„-^ƒ‰õ¾è7|Ô‰;Zw,~2¹6·¯ñî}ÜÁs6xþïEF›‡ÝYæ;—u¤ýãæAY7Ëù5–ï.ð nYfÂÏåŠÏ ´—öÁv$ ÿ¤µ€Æ-<|‰åæñˆÙgˆæ±l`HHçHa>D¬Iƒ¨¶öP>+  Ú!¸áì”1emÜ´º4ÿCן+—Ñ_¦7\Jºõ’ÃO8Ǧ!ÏÑ/—Y¼J®9uT8AC]èK.–]˜ãßíì(û½“*[6¬–‹ßAfþîR9ô¸³ä‘y¯¶ Üþk~mWÇ;Øá C7ý@i\}µã WãX‹u`>ø }Êy±¶û ·ûðcØð®hMÃI3$˜ÅÉW¹Ã‡—»îºK°.³øbÃû±¦YÛÅ~AXû£'$ÄÑ6¾ü·&1ƒ5ÔÈ£ùµÿío³ÂQíøâ9æ˜cìòÀa‰|ZFín?4MëѸæÕ¸/]óøêÓ––Wß·–‡Më×p¤ü°ã ·¼>ø`{K·µœÖ£åµ MGþ '<Ü©m!D:ØÂ÷Õ¯m MëUß—ßÍçK÷Õ§Ü‚ùqìá˜õ{¨œð>Ž-ïx ëï•ò¸a­yqœëZFØÝ|ÚÇh\]nÈ ¬q¡©qŸÊm¨]}íÆÕf%ÛV$¶¨Gǧù]°afÓå„2ȧýðÕã¦ùò#õã• 2q¾Á:^<¸…[ñX»Š5ÙO<ñ„=.ñ\–)༆% Z´óê×qi~m×µÃn\ËÁ¦vß9³½zŽU¦ð!žñ6 œ3q›K8ðìîè¡nÌšBpáyÌTæ嵯ºÿ´/j×þó«}âĉa¶øa'´¶8>•-Øã- A¶˜Ý‡ï­Çò;ôß.‡HýQ»ö#Ø_MÚ›ãm_£®“N:É+8†´æÆáï(Üìdÿ¯.˜ÌÍ9\‘ã6Â9OWËQû ’ž] Í’‰lsh¾TLÍ1f²P-ê#“®Z¥†þ&b/󼁮¦¨Óz*Í´T•—Iç® ïu6âiwóú5RÜ­§­vó†µÒ©¤›=‘hýÚÞôKO‘-×ÉU÷¼Ø¨þòÒ­RY^*]{ônd×rÁz\ûÒ¯VÉ™£šþœ®æñù½XG‹V¤µ€xÚ³;Xzt¸MŠ,n•ºÇ0f|ñp‰».ÑÍ-¬3K=mÁáÀXcÙVfðþ\œLÛ“K׿Ž=[8ÞãýE.|¹Aየ=¸T°eܩ愋ëph bç ×áîD*Þþaãºhç37Ÿ/œÓXα¾¶"Ù ¢ƒÏBDʯ½¥lqÂò][kû©âšè¾Nto*÷O,R>xë_2wö3ò›ûž1'šPW´?XJbJ:FôôSókýˆQ…«8×·¾õ­¨% ŽƒY è™Æ]_׺¶XÃøRlK'ž¶,Nñš¿öèRÅ5Ú±—è±å»€lËÌSŶ¹1§š“»~Óm ³‰x†3¦3gδÂ3ÁÏm´óYscK„i,çØæÚuÓ±Œ%U®¥l=¥Šk¢û:Ñq`¿¤rÿIJß]m©ah,¿Œô=K½í%OÚ h»gÃÍ{lGH‰Ñ²F÷™7\m6Ì#ØQ4ˆÆð,´« ‘¦®Ø÷³¯|øöò¿¹¯Hï~;ÈŸ_zCvù°À¶Ãiá¸JJ2ͬZÚ>ºç[ÕÇ >ÞËVí`;mŒ\S·ã:[Ìòâa0ü<=îrqÄ‚e Xó™Lב˜*·Ö`Û¹*ßdú*˜]wg°çÍ›g—Sb:]Ú+ |Xúç—IõJ³ÆwÄóŠ£Ð¬s¦¹û¬3Ϙ ‹ç4ØÛq`K¥ëb&mY.‘Ê>¥KÝàJ¶Éß›äš|¦ZcGc‹g'Rí:Så™j¶•«òM¦ñ¬õ"Œ§!œ¡½ÒÝ¥ýqK ;á!‰ÙËß—Qß'wÈÙÓ–Ùæ¢#¸°¥U²|ˆîšmòrM>S­‘l•Dò|2MK·&rui$'Œ·kᕳÏ?ÿ¼½3ƒ‡pƒË™’ÓRÛª%­4®†ð$Öáá¼rèÙ;®µWIîUSÛÚ%í§7¶Ÿ®²§$@$@$@) … ïÇ‡Ö‚æ‚ÆJw•ÖZ_"‚Ù¼ʹçžkß¹qãF»N'Ç«$   C ÔâA[,Ý€öÂĪÁÒDZ hw§aGâÁ,\éÕ‘›Î0 @|T(«_éö›»ÃhÝEºƒÕW;}    ˆ…@ã7ÂÇR‚yH€H€H€H€H  €îÀ;ŸC'   ˆŸtüÌX‚H€H€H€H  €îÀ;ŸC'   ˆŸtüÌX‚H€H€H€H  €îÀ;ŸC'   ˆŸtüÌX‚H€H€H€H  €îÀ;ŸC'   ˆŸtüÌX‚H€H€H€H  €îÀ;ŸC'   ˆŸtüÌX‚H€H€H€H  €îÀ;ŸC'   ˆŸtüÌX‚H€H€H€H  €îÀ;ŸC'   ˆŸ@Z èúúúø‰$X¢¢¢B¾úê+)++K°†äÃØ7oÞœÜJY Ä@ 55X ÝIz–ì¤×؆*ÌÈÈHyoÖ¯_/Ó§O—+VHß¾}eéÒ¥RSS#=öXÊÛö5ë­·ÊgŸ}&tLš4É—6   HÖÐ`)ë| §µ€Žaü-Î2mÚ40`€\}õÕ’™šÐ‡¨Þ^.''GÎ:ë,yå•W¤¼¼|{uƒí’ @ÚHë%©Þk˜å?¾Œ?>,žÑf·nÝlÓË–-“Ë.»LfΜ)&Lªª*;S}ÅWÈ™gžig‡çÍ›góâVÇgœ½~ø¡@œ«ûéO*³gÏ–sÎ9G&Ož,sçÎÕ¤F>4fÂéH€H€H€H€RC€º\±æbyÈ!ÞZª««åÓO?•¼¼}"ÖzòÉ'Ëu×]'Ï?ÿ¼} ðì³Ï–¬¬,›K4.¿ür>ôÐCåÝwßmT–@¬c鯅^Ø(M#›6m’©S§Ú™q¬‘þøã媫®’^½ziú$@$@$@$@- ¡°ùê0Q_¤ìóa n˜ÑÆ»†]Jqõ!à‡›njnfd·­‡0âq .´o¤POÙxóâ•qk×®•ž={J~~~³Å1ó\RRÒèí(„÷86)ÜqÇÉ]wÝ%ÅÅÅv=5ÖTÓ‘ @[#P[[k' ‡šp×Ì3dg›ÂxH oL¨1[­³!®vøHs}„Ý ¿¬§q„}›1[{Ø79â/òQ…S–gà}бº®]»z³úij›1qîæg˜H€H€H€H ¹( #ðÄkã°æ¸­üÉé§Ÿnß9ë;" ‹f   h–&(½{÷n6oGÌ@íÙë«W¯–E‹ÙµÈ;wn²ÌÂS$å¦vØ!åm°   À3TxC´Vóò9ª¦ÇtS&vÝÖ2c2Öo[ îÉL ¤,ýÅkwñb‚+VP@{ö-´ s—.]¤¨¨¨MÌ>{ºH ¤Œf¡¡‡ÚÊRÖ” 4ÁŠ) =àðã&xX?‚ÂÙg šH€H€H€Òš4´ûãoi=à8‡WÈÑàçµñê;ŠçFI€H€H€:h h!h"º¦( ›2¡…H€H€H€H€"Hkåý×0H€H€H€H eÒ]ƒ¥µ€æŒ–ü,M$@$@$@‰Hw –Ö:‘Ž2é~Õ”(–#  èX¨‰üû›oáðpI÷«¦àk̯ÃWÖÔKi•H•ù5ùšÚˆ?ý,Ê8 @;!•!¹Y"E¹"yÙ’Ã4jGÓD±îJ èXI¥i>ˆçÒÊzÙP^/ëÊCášúŒ4-‡E$@$@—@vFåeH÷‘®fC8Ýq‰E9td6"3ÏÎK7ˆ¬ÞR'eÕ6g ;ÄÎç I€H€:œzÙÔ9Sv2#ÏΪ—ì\Nš%rP@'B-Ê`ÙfŸ!ž—~¹\r2ë%G*Â#ÄOyâ=µµfªÚk„ájkÍZÁ;"·ýØLùéÏ:kû#4x »ºP=Ù åBõà¶P­ù¥£:S· Z‡ŸNG´°ë›6‚ë³°¹íóxãÚ¨7‘F  ¸ xÎÑÍÕ¡¿xç]*å<]S]-™æ;)³!O¤ïmß[øžÂ× ¾/°¡mír]}äà;È8Í‹ºõ{öx¾›¯§õ¿k3 dM!п¯”ägJ'#ž±œƒ.~Ðñ3K«XóŒ%˜yîQ’/Cvè,}‹y5šV;™ƒ!  C`ÅæzY¼r‹ýÎÇwU-¿ï=0( %—&åðÀ`hÍs½të”##‡ô’KÒdt €øxÙ&Ù°µB6š›Êøî½4€"ZùÄãS@ÇC+Íóâ6UA^÷>Í÷3‡G$@$Ð1 `™¤]’‚U™t-"@Ý"|í£ðºuë¤{÷î1u67'Ë,Aΰßý2f"  vAÀ»Î¼]ô¼íurÛS^m¯oí²Gp€<÷ÜsÛ½ï«V­’óÏ?_öß¹üòË·{Ø   HÐípO._¾\†.Õæ äH®¨¨H.½ôR9ýôÓílr¤|´“ ÄG€:>^qå¾ÿþûå†n|PÆŒ#§vš@üÂ-Y²DŽ<òHyûí·­¿Ï>ûÈ}÷Ý®ÿŽ;î;ï¼3¿çž{ä–[n±ñsÏ=Wªªªäˆ#Ž_ÿú×áõÔS6;ðÂ… eæÌ™rÓM7 Dñõ×_/(·víZÁÚeuëׯ·6ħM›fÍ<òˆeÖ<ôI€H€H€H€RO€:ÅŒwÜqG¹ùæ›eذa²ß~ûÉ'Ÿ|nOÂÞzë­²ûî»Ëĉ¥ÿþ2gΜpz¤@×®]mR=¤sçΑ²ÑN$@$@$@$Ð)€êV9`À€ð/äåää¸IvWL | IDATy…k(8uêT™­—p´ÄDÚÁ ³ûC)‰ÔÁ2$@$@$@$@­O€ºõ™Û1³ˆçùóç'¿âX#tÜ鑆ܧO+ óóó#e¡H€H€H ¨¨¨õë×·ÓÞ·­nS@·­ý±]{“““cgŸ±ŒƒŽH€H€H ½ÔÕÕ ¾ëéZN ­´¾T½å˜Úg 555²bÅ ÙqÇc@ff&×@ÇL‹I€H€H ýh.Sé®ÁÒú&­y èsÀÈsÏ=§ÑíæO:UÆ'¿þõ¯åˆ#ŽY³fm·¾°a   ŽE`{h°Ö$œÖ3Љ‚lëWMË—/—±cÇÊG}ñVÌ\ XÓ 7gΙø Œ3FN;í4ø…[²d‰yä‘òöÛo[Ÿ}ö‘ûî»/Üå;î¸Cî¼óÎpüž{î‘[n¹ÅÆÏ=÷\ûÌ,c†ÙçT<# á 6HYY™/+m$@$@$@$à%,Mä­¼) S¸ó Z±tâã?–3fï?õÔS¶E¼JfáÂ…2sæL¹é¦›¢øú믷BÖ®]+ëÖ­ ÷OÍÂ7mÚ4ë?òÈ#r饗Úp´?O>ù¤@ wïÞ=Z6¦‘ Ä@€K8b€Ô’,x€ïæ›o<œ·ß~ûY1­õeeeÉ­·Þj—aì¾ûîòÐCÙåGu”fñú]»vµö=zD\¡_|ñEyá…ÂÂ]íôI€H€H€H€#@·˜K 0ÀŠg¾:·E\~ijÒÉr¯¿þº]Bòðà Ä6 @Ë p GË&­¬‹5jT¸>,ùP·yóf ÆäþùçvyÇÝwß×kìbªœ™H€H€H€H  €ÞŽ;ïi~ï½÷l>øàYµjUX@céÇ‚ yžyæ™F¯¡ÃZfüØÉ¢E‹"örÈ!Ò·o_Ù²e‹Ý\A± H€H€H€H€¢ €ŽŠ'µ‰Xñ6Ž &È”)S$//Ï6ŠuÐkÖ¬‘=öØC^~ùe›®½),,”SO=Õn¿ýíoÕÜÈŸ;w®]÷Œòºa†›ŽH€H€H€H e¸ºeüš”~óÍ7öK.¹$F`Ò¤IâÐÓ§O—M›6I~~~X<#fŽgÏžmgŽ;wîܨ"ø¡¼ÛYw0ÃâÅ‹ƒ&ÆI€H€H€H€’@€: [ZEIIIÄ*|âY3k> @+àŽVl3Ìî¥Ó'   h›( ·Ó~ÁÌ2~Ž›ŽH€H€H€H } €n_û‹½%   ØÎ( ·ó`ó$@$@$@$@í‹"l_û+¥½­¯¯¼+šï‹N)fVN$@$@Û…¾ç±Ñµœt˦M UUU²|ùrûóâø™ñT;ý³­ÄI“aâì´$*‰Ä}2Lœ–$C%‘¸O†Í³Ã÷<6º–Hk­¦–cê5 2Ä´¶¶¶c ˜£$  D¿?¡ßõ©vºk°´^Ý3›©>Y? ´7é®ÁÒZ@'z°¥ûUS¢\XŽH€H€H c &òïo h—t¿jò ™&   hB€š¨ k €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ?´ÐõõõþQÓJ$@$@$@$2é®ÁÒZ@gdd¤ìÀ`Å$@$@$@$@~é®ÁÒZ@ûwióÖt¿jjžs €5‘ÿ( €öpI÷«&Ïi"   &¨‰š ± h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ðHk]__ï5­$@$@$@$@)#î,­tFFFÊ VL$@$@$@$à'î,­´—6oM÷«¦æ 0 ˆPù h—t¿jò ™&   hB€š¨ k €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ?´ÐõõõþQÓJ$@$@$@$2é®ÁÒZ@gdd¤ìÀ`Å$@$@$@$@~é®ÁÒZ@ûwióÖt¿jjžs €5‘ÿ( €öpI÷«&Ïi"   &¨‰š ± h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ð €ös¡•H€H€H€H€¼( ½Xh$    ? h?ZI€H€H€H€HÀK€Ú‹…F    ðHk]__ï5­$@$@$@$@)#î,­tFFFÊ VL$@$@$@$à'î,­´—ÒJ$@$@$@$@‰ €ŽÀ.Ýo=D6Í$@$@$@$` P E>( =lrss¥ººÚ“B t ÐBÐDtM d75ÑÒµkWÙ¼y³dffJNNޤû:îq   P˜y†x.++h"º¦( ›2‘Î;KVV–”––ڃǓ…&   H[ÙÙÙV<¦í[20 èôpÀ𠉇f   èÀ¸ºï|H€H€H€H ~Ðñ3c     L€ºï|H€H€H€H ~Ðñ3c     L€ºï|H€H€H€H ~Ðñ3c     L€ºï|H€H€H€H ~Ðñ3c     L€ºï|H€H€H€H ~Ðñ3c     L ­t}}}«íÚŠŠ ùꫯ¤¬¬¬ÕÚŒÔPMM¬Zµ*R2í$@$@$@$R­©ÁR:•gG°§…9###åãX¿~½LŸ>]V¬X!}ûö•¥K— ìc=–ò¶} <úè£òæ›oJ¯^½dÍš5òÓŸþTFŒáËJ ¤„@kh°”t<ÆJÓZ@ÇÈ EÙ¦M›& «¯¾Z23CúÕÛËuÔQrÊ)§Øæ_|ñEyâ‰'( ·×Î`»$@$@$@iI ­—p¤z}öÙg2þ|?~|X<£Ínݺ٦—-[&—]v™Ìœ9S&L˜ UUUv¦úŠ+®3Ïùd¹îºëäù矷ž}öÙ’••eóCô^~ùåVHzè¡òî»ï6ªË? Ö±tã /l”¦‘ÿûßöÐǼ5aöÝwß­ÉôI€H€H€H€ZH C`óÕc¢¾HÙçÃÜ0£ v »>”"âêCÀ#6ÝÔ>ÜÌÈn[a2Äã.\hßͬ5ž²ñæÅÛ3Ö®]+={ö”üüüf‹c湤¤¤ÑÛ;P?ÄRXXؤ<–cÜu×]R\\,XOŽH€H€H€ÚÚÚZ;I8tèЄ»fž!;ÛþÔlxcBÙj qµÃGšë#ìnøe=#ìÛŒÙÚþÑÈ‘* ˜’à°<չ¯›sËøÄ³›‹8wó3L$@$@$@$\˜ý¥k0ûŒ7zБ l_œŽÀï]ÆC{úÃ&²ÑL$@$@$@iGwÖ(½{÷N»±%c@Њ«W¯–E‹Ù‡ùðk~î«è<Ùi"   ´!€jÃ+v¡…ð8\¯^½ÒflÉ´‡äŠ+ìÀxÈëm{–Ò“™&   H#xv¿+±iÓ&û0 tÓKÝ”‰Ì]ºt‘¢¢"Î>{øÐD$@$@$Þ0 D.eõïg hü: Þv¥œ}ö¢‰H€H€H ­ @A ¹¿žœÖŽsp| ‡XNNŽýqŠgšH€H€H€Òž4~Gšˆ®)´ÐQÞÝ”-$@$@$@$@I!î,­4g“ò`%$@$@$@$t×`i- ãÚÓÌL$@$@$@$@1 €ö@J÷Ûž!ÓD$@$@$@MP5Ab Ð.é~ÛÁ3dšH€H€H€H  j¢&H¬ÚÏ…V    ð €öb¡‘H€H€H€H€ü( ý\h%    /þ¡ P[[+ .”%K–ȦM›$+3Kêêë$ø@ÖGዤ^˜N><>êÍÁqü|ðüÀó#¿âý~¼{F¡ù%dœK2œ³I<ÁzéÝ«@>¤Ÿœþãa’——Oaæt :bˆç7ÞxÊ¡O„urÚ©§INnŽ-Ï'qÛþ>gI€H€Ú?oÊ2¤GI¦ÔÔg ÖÚb2ÒBbñP8#,ž!¢ëÌŸZ³•ôé*g]z¨\{õËò࣠䜉߶åø'9( “Ã1\Ë W\q…Œ?>lÛ©S§ÊÇ,={ö”E‹É\ 'œpBL]Áì3ÊŒ9Ò\ÅÖHFù˜â Ø”†ˆÞö¡ÝV.ë`:ùðøÐ/5~>”Ï 2‡çO~˜… àhŸu¥u²©¢N²Œr†hÖ ,n¨cýšÕÒ­g/[¡­ÓüÁ\´™€ÍB›@¥ùþÞ÷ˆáòÂ}oÊON&YY\Ê¡Ü[êS@·”àv(¿|ùr;v¬|ôÑG’““ãíÁµ×^Z—lRÿñÈM7Ý—€†ˆîÚµ«ÔÔÔØú­0Æ'·ÁE¾ õŽ,Lo|’lO|ª««%×WîI¾=õŸÇ?<ÿ´ßó?¿¡Ïï–Jˆ_„õ»5$¤•ÏÆukäâ3ÇË-÷üMº÷êsøù+ Í Ü|KEu½të]"_m„¨6‚œÚ²JÆ èdPŒPÇý÷ß/+W®”¾}ûÊ=÷Ü#;í´“ÜxãÒ¯_?û`Þyç'¿úÕ¯bwݺurî¹çÊĉmmwÜq‡À˜9†Cù 6Èe—]fóUUUÉG!˜ñþÍo~có¸ìC+ †eË–É!CÜä¨áŠŠ ûAÌÎζª0V…·–n•§þòT“zŽ?þxéÔ©Søetö©Qæ†o¸T¥ÿå©¿HéÖÒFMº‘N¦ªö®báÏöÝK©†½˜âÏo<ŸîîŸFçDÒàø,«®3ÚˆfüË„ßØÝ÷‡›dõ7+dÆôëäâkî '†–p4,ã0JºÂÔQ]—!9…R^^qÒ-\1 €ŽUü!xgÍš%x Ì˜1à 姞zJ.ºè"Æ.fΜig‡ß{ï=¹þúëå‡?ü¡ù…q¯±–"nÚ´i6ß#<«ºöøãË»ï¾+Ä×]w]„\Íø2¬3Ä3\pfœ®×®Y+^x¡ñuêÆ5N MÔsR7V-念ÍO>ùDvÜqG)î\ÜP2öòÚ6|­ÿýÿ¾o/8`ûïÿk….84ý?øäçå#¹‘Ót·nM¯7oÛÐ>wîÜ9œEÓQ~ëÖ­rË-·Èþûï/šÇMrÁtÜ9øÝï~gïì¾ûî²aý+Êßÿ}{1æµÁ`ùxÓëjëlÜÀt±ÔÿWsÌ_qÅåRXXh/O?ýôp5±”íù–íÿæöÓÉ7|P:Ÿ¡ó;?ÛÿóQi¬2nüýÜàB2zþ¼·dö³3­íÍ—ÿ.û~œì¹ÿ!ö»[­Ïx˜°ÌÌ@×@@dÛïs|ßb‮å( [Î0j …7ß|³MÞo¿ýìºd-|ë­·Ú+Bˆ£‡zHæÌ™#Gu”fñúXZ×£G¨W“˜ýÃ!¿`ÁéÓ't›Ç[iÀˆ¾A–””Ø[xFÛ|ððÑÓYŸK.¹DöÚkOûµU˜ôºº ð2«²ôÐPÞm®¢¢ÜΤ¿ôÒK²×¨Q¶~7'óhå}éî¬ü•W^)˜Q½ýöÛ1å®·³B.þúqQ‚ÙôyÔ¨½¼ý»>øÀ4aèP1ê´¿mŒþö_{í5+’gÎ|B;ll({CyðoIÿ·µÐ¶ököêN´þïÿ{rÌ1GÛ C¼ÉÇC¼û/RÿÜý·-϶þ3}ÛñM>J€Ç? ÇBç_=zÜóckž_*ð­2K82íhû­‹æ¥ÞœO_i–ìúýÂ]|ãŸ&>jŒ™©Î6çZs¼ã;Ç|çVVÕIie­¬-«•ì|ÿrÏp% ÄM€:ndñ0`@x-rp½2®]nÍcV:Y3ÝpO?ý´õÆltnnnLÕC@C4———Ù«VkaH¸ÊÊJ“'´äC¯j7nÜ(˜áÅŒ:fO1ûúÀȼyóä¶Ûn³k·‹ŠŠä…^°˜u‡;óÌ3Íkvòìr´÷ûßÿ^~øa;[Úi§É¥—^jóEª_Û·™œ?˜E‡Ô>kN4‘ÚxñÅm_± §ÿþö¤tÕUWÙ‹,½ öù_ÿúW£}‰6´Ÿ¸0Úi§äoû›½#¥:¸#€» ºl} öúôé2fÌùîw°·Þ‚éhåî½÷^Ëw(vÙeùõ¯-ßùÎwlÛÃ]°½á†ì[Y~ñ‹_ÈÞ{ïmyâaÑ“N:I~ùË_Úö+ö+Þý}ùå—Û Û÷{LÝïÚc >xË‹Û?̺ã‡wÀ%Rÿí©ßüazH¹ü°ÉÇŒ<>øùh˜`èHŸ-Ù²jk¦9§âÆ©UÏöUv0ÀfÏ Æ:ƒÊ/fõ†YÆa&3Ì,´Y-Ùy±Mžëc<2\פ­Ã—r[v¥Xû ‡[ý«V­2ËFÙ8–~`Ùò<óÌ3v&Ñ&˜?XsŒ™dÌFr˜ýT÷üóÏÛÙQ¤XÎ8[Qg>¼Û–p˜¬X‹‹ÛôؾüòËFŸì)S¦Êa‡f„\/{@X–ñŒÙÌÜÜ&tà" ü&Ñ‹ /3HÇøñPçwÞ)C‡•C=Ô¶‰»£Gï'p =–Âw>páÁÖƒ>DFï;ZN=õT»ß0¼Yæ¢}™öpÛ>XZ×hü¦¦}äÔ¦“~>x~h8ñ:çO|çÖ™óg½9Ú _Æf.µ¥ÎlðëÍ¢±iÜæ7'â:ØÍ÷¾Ê2L™œl³m‡è¶®ÁB_Z‰ÿMëèð‡2q>)-‰„8[ºt©•ÄLÖAã!@Ì|ðÁ2aÂÙ²e‹MÃÃY5ØN9åÁ:ä ›4i’]"€™Mˆp̺ûóã>æé", Îjã ·Ã;˜oèÄ€²˜ÅÄ;²1ž³Î:K.¾øb3ùíA>ä±m¯ê+--µÚ7ÌÂÛ<ê×|&S8ˆsŽÖ»í" ”±†ú!<ÑGˆÅcŽ9FöÝwßP½NýZ·í·¶Ú®6øh>Ö¯wíÖÍæt—Ó„û†”†ò¸ˆúzù×áþkõšŽø×_-?úÑÂ8¨søðáÖnÛ7CÅ8 lqí–^h:|´¯}DF‡šá·É`É ˜¡þðÒ#Sÿˆ#ä­·Þ ÷Aû§åáÛ°íùÓ0> í ¦7bÒ€È't˜åÐà ‡‚ü|¹Ÿ7Ü~ùäçd 6ûj†„Qá í¼`Ãñ±Ø6OhîXA47çZóà î #žktövøÂFÇå¶£6mBi- ·Ç^zóÍ7ÃÍ…-D­ë X°ÎuÓ¦MVHªxF¼únöìÙV4ëܲXaç–qÓñú4ˆÌFâµyñ:]Â>Ú¥æ“ê !ØàTxiýÈã¦!¬W¡„¸(xçw,0 }†³vÖ-‹43<€©åц›GûL×¾¨2pȯaĵ ¼éB›Ž ¼EKž{î9»>3ápîQ¯:·¼æM9!¬võ5 u¸å÷ÜsOÁZì)S¦4ÀÚ.R0ƒ­} Ä1#úa×öQÆmSðkµ¡œ†1;ã?ʃöpGCëEY¤÷îÝ»‘MëÔz‡sDzà„y’czÃ7£1>ùðøÐߎóùÈÏÉ”¼\è†ï/º9_>píOdÙ§ïãì`¶ é³Ó.rÖ´GìC„0á—±|K8êLù\³ˆ:‡K8ôc”4ŸÚƒÒýÂò$'Ý„[Oû¬œþùvöwP?Þà ˆd¼cw1ÇC¨X7Ž5×XkŽúÝ6Q¿¶ _èaôSmXÛŽ™f0Çñ}ôÑöb >.ú°Dë³Ñ—×_Ý>Hä«ÇHðø@?0þÿoïLà$-ê»_³³³'°¬€àÉr©\‚g$EÔ×Ô.åoJ¼ÀˆG4Ÿ7ã…(^‰†O¼ñ]Î ø *º\+°ÇìÎ[¿êýÍÖqkˆ¶ë|ðƒ ûì³Oú‡Ó×tÿ² º‡òª§¼}:þPo ô†b¿ýöKg˜«lß}÷ ÿò/ÿ’¾ÐG'‰ˆßñÇt2‰Ê5u®‡VuB‹Æ£“A$ôõÚÈùûþèúJWçOùÖ7ðáõÁïGùß÷~ý÷c颅añHü»÷pè¿[¶Cj¾{ì}@xÆq§†KÎo8ä9'…½ñ8¹Ó¿£ñŸÒÆ t\tZ˜ŽïKB|ÉÒî±ËÿÝNâG"0”ÿ‘ª2‰Ðü¡Aɦ7F±MnõY¶¢|NçVŸû+o«¿æÊËÊçhÿÞñôyÑßUÐG˪ív¢ÀµzÛi»vûŸËõôzh’€ÒÞW­€[L·úÜsÚú’™¸Êèr-­ ~«¯=}¦è½Ú*×Iˆ¾SõßMy~ L±:>ùªý{̯¥òäÌ~TÛgE)Ù¬\Û|ô¦î‰÷3çã“X•˜Í·ëäå¾N³þ].«UgÝÍM÷K+òn¯¾µZŸøÍ”ê¸\én®O{ÿS ?^?[ß@é÷IßÁùý8çûÃaÏ'­Õg?O”^ñÇú{ïïxù‘á´w_¶Y¡/3Ó~g}ZÓXuÖö ým»wýh¸í®{Ã?ÿMxÃSFÓbQþ:R­‚ÿ>î¹çž­ªM*S»[n¹%ýÍšTئ#þ:9V]cœM<£/N)‹ÊÛ/«²Ü*GýB9¯t)Fwc!ß6þ;4ùQµbP%@`S§ÕC‰#í³Ö› ¯äV+篯Ò/f^nñ—÷ár=Ph!š—翸Sõßm¹¯Ñi{ÍÇãט;m¯6í´í3nֿʵ²ß¬\×Qh§Ü"\}je¾ÙøÌ¬YyãŠíÍÏuÛŸëÚrý­ÿ¾Ão«ÀâõÑ ÀïÇüüýØvé‚°Í2ýÝ«ŒŠñ¥­%MEIºmã‰Pgä aé²å)ŸÄs¼å›77Nàˆ Ðñ,èÆV½Ûï¼'Üo™ŽÂÕ·ê"€€®‹dŸô£?ÀÚß«½½Z픀–H”x&@€ Ð{;Ä“Rõ˜“þôÆC4¢rnˆg]Y"Zù+¢xŽÉ¸èœD´Ê$®%žãpŠ‹âIñÿ°àw?ŽÛŸ^\DQ;BçÐ3ëûÚÆ -ÚÊ¢“*Ï}Ë™  Ì!÷Û%„íã×H,§è8¶­ké&!­d,HBZI¥c”ˆÞ¿pxmÜÒñ‡Õa§ÅkÓ³6–ü¬ƒºŠ}Ö‡¶kzè¡ñ?®¾úêôP Ë÷÷Ù”™ @`ÎÐwŠ-Œ_$6&l'H4çatãh¸ñš_‡\rQøÃ W¥‡öñ¹®œIÝéöîLÝW¥¿9M@Û8ôð¥NÀ¸øâ‹Ó—°äûèæôà @i»†žÑßrýM/=#¦î  »g××-µmcÕªUáä“ON'rè»Ö×gr€ 9@@‡»ý»«¶Ûo¿}:)ÉGŒÎ)õÕÐ}u;ëŒÞ­ê!BÊ w¯@€æý gÕ¹w÷ Ý;¶}Ó3¿„}s+™ @5àl² Ò @€Àà@@νf¦€ @5@@ב. @€‡zpî53… @¨@_?DÈÙŽB.¼ð°|yüê# @s†ÀÝwßÎûÐ²ŽÆ³hÑP8à€Â)§ìVíº¢£¶uTîw Öךã[:ûØ}÷ÝÓ7­3nÔ† ôŠ€„èe—].½üÙñk½‡Bü?ÄÿcØ’HßBØø*ÂÍúïX_ßLx×Úuá[—]^òŠo‡ÿ÷þƒg\D÷»–èkÝ«s¿ö«ÕçûÜç>ñ”=ýz™ Ì/ú2ý}¾sÝæ0ÕsãhÙ(Ÿ‡¢Jnèæd$š%¶eGãM FÂO|h8ø–{»?ð“ð¾w¹Ð5Þztæt>vxüã^ûÚ׆Ã?¼Ðó̻֯_žûÜçÆqÿðÿÐrú¥”xF@·ÄD! @`F èïó]ë7-o IDËŽ`( hý×ÐÓcq:jî°)Šè 7‡Ú=œùÉŸ‡M›6…… ;—}ÓÑDãCìÃK…›:×?vøßÿýß°÷Þ{‡7F?ÑuÎ9ç´Uob+r€ Ì%÷Æ?ù÷Œ†pïÆ±ïÙbï"Y¾u[⽱κÑF^é‹FÂÐ’%aÆ ]Mg®k¢®&UC#t ›uñ‘|$¼ýíoûØÇÂÁŽ;î¸ ñ«pã7†g<ãá»ßýn²}ìcÇ?üáñ®þéŸþ)|àÏèC à §œrJúExúÓŸÞô¦7ש&¾ùÍo†_ýêWáøãçc›*ò€ yD`CÅŠë£^…ñxÜ”¥U…ôzÕKþ±°6nýYºˆÅ´šï5ºf yw·ß~{øÿøpå•W†óÎ;/~¤²9|îsŸKUôNðºë® Ÿþô§Ã?þã?&Q¬-j£ðÇ?þ1¬Y³&¥õã¶ÛnK>¥ÿþïÿ^&|⟯~õ«SºúCíÏ>ûìð®w½‹-U8ä!@óŒÀ†¸5cã¦(¢£Ý »%J,;½aÓæ­éÑÍId¯Ý°9,\ÜùÖy†gƇ‹€î1ò?øÁáï|gxØÃ:è ´"ìK'ûð‡?<œtÒIá|`øÞ÷¾çâ¦våÊ•©lÇw Ûn»m±ÞßýÝß…W¾ò•áþ÷¿±çìÐQDúT sTçH~÷»ß…×½îuÓêòæ›oëÖ­›V4† z HѵEè‘|dzS×UG4‚ Ú Ü"¼{æ7‡K¿ø©pêQ¥ø*Ùç7Òß¹ìâpwÍŠÛ6î¸ws¸yͽi?ôð"V ë¾!­›è4úÓ¾è¾ð…ã=hˇÃ]wÝåä”v¯½öš°7Z«‰Kâûî»ï”mK®¿þú®žÜu_OxÂ’(;úè£íêÚ~ÿûßo«“E$ö^ò’—ŒûºMÜtÓMá¡}hX»ví„75yÚ¯¾Í6Ûä®¶ÒêóÉO~rº·:ËÓdh5ZOEÏ• ûô‹_ü"è‰PÝu×]ÃÅ_žùÌgΕ!2@Kà¦Û6ƹxZV$ðÀǶûêEáÆ«¶~j½ÏAÏ+÷yrøõm£aSÜæ¡S8îŽGßÅ-K&.à ,Ä'ÎŽavÚÕèèhøñœšýìg? ¿ÿýïãýè”×Ök®¹&¨Î¿øÅ´—Úýï°ÃIäHØ–‚Vdÿê¯þj5H„—‚ÕÑAguÖ¸xV=ë¹ÝvÛ¥&j«‡BÅN'¬ˆ­ƒ¯¥ýìxÀ‚„îwÜÎ8㌰óÎ;§û¬±çAB]«ÝâûÞ÷¾w¼¨Õuî{ßû¦×•*ë“õÝlNã’€ !°qÓP|ˆ0ž°¡‡7‡'¿èmadYãoÈò•»„C^pVHÛ7bù污CŠqAatí÷];Òö;ÔyËzPbôoþæoÂë_ÿú°xñâÔVýôqü¾ò•¯¤r÷¼lÙ²pì±Ç¦ØíÇõî««- tŠ^1Õj¹öÚ¾ô¥/MXUÛEÞñŽw¤7o|ãS×ÎgžyføÖ·¾•„¤ˆ”pÕ–zzØQ«´ zøQ§—¨?­øvšõ­U_ Xd¢qèÍŠxkÌ ÿú¯ÿšì×¾öµñ‡4“#û¡9ÿéOJóüóÏOo€ôÆA\>úÑfµ·&µçY["š¿©¹yä‘AÛ}®½öÚðÖ·¾5œxâ‰á'?ùÉøµ>þñ‡ßþö·iˇ4Õ‰oÍEœÄÑAoRôЪ8êLrmÑžë©®ãö²?úтޠéµI€ Ù'0²0nûŒqÑÂaÉ¢a§û?(þâ³ÓÀŽxå9aÅÊÂHÌ‹G¢`VÝ(œUw$ÆáŬ@×}ÙÂQ3Q¯Pª[‹3_âÅ/~±“ÉJ@kuðÎ;ïL[,,žU¨‡ÿ$æ$,K ¾á o¯xÅ+Æ÷„Ž+¯²VÜmg%ýå*GqD|7;œÚjT_Òâ ‘ª=ÂwÚ7­ ±k5sÅŠiES¾K.¹$<êQ K—.U6<ä!I+»kzÓ !ÞMhÕ÷>ûì“úÕ±~Úþ¡•f­‚+hU_A«®ù¾ôälòC«ú©bs衇ŽšP­.±Ýj5ý§?ýiÐ'zC¡}ÑúôàŸÿùŸÓñ‡Þ brî¹ç¦´Ž<”Hö›ÍE"Ýüt$¸5}¢¡Ur lÍuªëè·ÜrKZ­¿à‚ Æïcº0? @`Ö,^8ÿÞ4.wr¤pÀÁ‡…m¶]ö8à ”ë1[¾p(máS¢zøÔù]'Í.û’¸lJâÙuýñ¿ó½²c¥ÕÓûÝï~.©­ÚΡëû·KÊM¨°%£7:ÚO["´ºê m݆©úÖŠ¹ÎæÖC–>R°ÛkI@û…ö 7 ZYÖC„Í‚N½ÐkÀo:TO‚9ß>!aí 7*Õ¼ËdUž¿ ÐÖ l¿‘iu­Tk¿ö›ßüæðìg?;ï–4 Ì"Å‹âþç!oPº1˜}óÄø-„1Õsú6BÙu:‡¶qŒÄŠ — ÷ê¾u­›h›ýi…¹ÓS1ÚìzÖªiµôª«®J+¥Ï{ÞóÒ¯2ë—ÙA'ghÕ¹î(ÔÿT}‹¹²\½zu:ƒ[[azÄEû uÄ\éÍV½õ)„¶ìXk+‡öÁ×Ô—> ÑžëV×Ñ6”g=ëYá„NH_úSǵé€ê!°xdaŽ $ñÿ´PÒÐϯñVz«xÖè( ãÑvCC£aݢᰈèznBÖ‹ßÊd.’3A@+Ëz¯_‚¾FâY+ÕúÆE?ئ‡ì´ê ‡ù.¿üò ãö$®;9eÄý”l«¾µ ¬/­ÑÖ}룶¶h_³‚ ÓI%ù8KýwãÓJ»Þ0I¬k¶ƒÎüÖƒ¢ØZ¥Öžj±Ð8µ¯¹Û`mï_­´kKÆãÿø)¯óÁ~0Üpà é´ mEßC @³C`i<ŠnI|péâEaiüzî£0^ã’X¦ò¥JÇ:‹·Ô•YÐK—7ž¯š‘÷çUÐýy_k•¶hõRQç—Â=÷Ü“öàjŸí!‡’N»Ø~ûíSÕ“O>9­Àú„ F=ävÔQG¥}¹Ÿüä'KÝvìkÖ·D¥ö>ë!BdqØa‡%¡/q«•WÍMÛ;´}A<Ö´uâ«_ýjú&J i}qΞ{î´]o<´÷ýSŸúT:DÛB4} N·ÇÇiköPëÝ Þ¡7S]çë_ÿz¸õÖ[Ó*¸î¢¾ˆ@³O`ù’Å!ÅøµÜË—-Ëb\®ôÒh—-I>¥·‰q[ùbÙ61.»¬h¬WÏþ,úgCùGëÕiŽ”&^²òU£¹¢üNçVOŸ)o«-$ÊËÊçhÿÞqOæyÑßUЗ’H°ø¡·v;ÑéÚßÛi»vûŸ«õ´ú*Ñæ}½ÝŒS{h%¼ªìt®°V™ý°žúÖkOÛ´…a:×,³Û¾u<œÄ¦b/‚NñОgm#É÷)ûZâ¡m(¥=ç®ÓÊêÍ€®¡7=:­C'¶ä§ºít¯ã~°€ Ð[úNÉ¿yïÃãßÖ(°¢j’pJ[9¢mlÝØbã×GÄ?­ñèã‘wë7†pÃÍ ¸òkáÿ>kÿŽÿ¶éoŠžQÒ¢O'Aíôé§þÖu¢^89¶]cœMˆ³ ñ€¾ñ¨¼ý²*Ë­Òy&粘¯ÚèJ¾qµ„ꃄj߆óîÛ9ÏöÄrœEb±Z¦÷gÕó6ÓIwÛ·WͧsíVmõE,: ¤Y(í‘nV·ä×?”ê¯|/Õ›îuJ}âƒ ÞØ1µ )çh½¬/'!­ï]KjP6&¢~MŽÑx0ôšßm ÷ÞsM\˜yDïWè¹ß5X_ è­ è…;‹k½Ø'†@`Æ øïòvñÀ.éf/‰6[u5¿»3üè+ß ×]þ¥pܱGOúd¸×éw Ö׺×/Ž~ë_ûquŽuuûE¿Í“ù@€æ m‡Ðßçw×Ù©QÚŠ¸Ûn»…l:ªßíLßOtx¿ìP˜rr=â3ûñN³qà‡ @`+=l¿ß~ûmu´™ÒóEŠÓ󪉦BŒ€.šÎ ­Ð.@€ 0-¥ϧÕa›ÑDePÚŽN€ @€Ú$€€nÕ @€ h^€ @耺XT… @€š× @€: €€îU!@€ €€æ5@€   ;€EU@€   y @€ @ è`Q€ @h^€ @耺XT… @€š× @€: Ð×zll¬T… @¨ƒ@¿k°¾ÐCCCu¼è€ @ ý®ÁúZ@wpŸ© @€ ¶   ˜úýc‡Â”qA€ IÐD“$ºÀ¥ß?v(L @˜DM4 Ir  Ë\ðB€ @ H]Ä‚€ @eè2¼€ @(@@±à„ @€@™ºÌ/ @€ŠÐE,8!@€ P&€€.sÁ @€ "t N@€ ”  Ë\ðB€ @ H]Ä‚€ @eè2¼€ @(@@±à„ @€@™ºÌ/ @€ŠúZ@'€ @ wú]ƒõµ€êÝ+ƒž!@€Šú]ƒõµ€.ÞQœ€ @˜t^¿ìP˜2.@€ 0‰šh’ä@@¸ôûÇ…)ã‚ @“ ‰&!ItɈo IDAT™ ^@€   ‹XpB€ @ L]æ‚€ @Eè"œ€ @(@@—¹à… @€@‘ºˆ' @€ÊÐe.x!@€ P$€€.bÁ @€ 2t™ ^@€   ‹XpB€ @ L]æ‚€ @Eè"œ€ @(@@—¹à… @€@‘@_ è±±±â¤qB€ ôŽ@¿k°¾ÐCCC½{eÐ3 @€@‘@¿k°¾ÐÅ;Š€ @Ó €€.Àë÷ SÆ@€&@MB’è—~ÿØ¡0e\€ @`4Ñ$$É€.sÁ @€ "t N@€ ”  Ë\ðB€ @ H]Ä‚€ @eè2¼€ @(@@±à„ @€@™ºÌ/ @€ŠÐE,8!@€ P&€€.sÁ @€ "t N@€ ”  Ë\ðB€ @ H]Ä‚€ @eè2¼€ @(èk=66Vœ4N@€ Þèw Ö×zhh¨w¯ z† @(èw Ö׺xGqB€ @`ÐÓ€GS@€ Á#€€nrÏû}ïN“iㆠ@‰Z¨ù ]`³hÑ¢°qãÆB .@€ 0¤…¤‰“ ,œì³råÊp×]w… „‘‘‘Ðïá¹ã€ @À´ò,ñ|Ï=÷i"ÂdèÉL¶Ûn†‡‡ÃÝwß^<…*¸ @€@ßX¸paÏË–-ëÛ9Ngbè&ôô‚áEÓn@€ 0ÀØ=À7Ÿ©C€ tNÝ93Z@€  0ôß|¦@€ Ð9tçÌh@€ 0ÀÐ|ó™: @€@çÐ3£ @€À@@ðÍgê€ @@@wÎŒ€ @L=À7Ÿ©C€ tNÝ93Z@€  0¾ÐCCCalll€o/S‡ @3K@ÚK¬ŸC_ èåË—‡7öóýcn€ @`Nö’ëç°°Ÿ'·råʰvíÚ°aÆ022Âjt?ßlæ@€À¬Ъ³ÄóèèhëçÐ×zÙ²eaÁ‚aݺu)²£Ÿ_ÊÌ € Ù$ =<<V¬X–,Y6oÞ<›ÃééµûZ@ëÆ-Z´(ÅžR¤s@€ qý,ž5ɾÞ=~I@€ @ &èš@Ò  @€À`@@Æ}f–€ @5@@×’n @€ƒz0î3³„ @¨‰º&t@€ 0ЃqŸ™% @€@MÐ5¤@€ Á €€ŒûÌ,!@€j"€€® $Ý@€  ô`Ügf @€ PtM é€ @`0  ã>3K@€ š  kI7€ @ƒA`á|Ÿæ\0ß§Àø!@€À@8æ˜cæõ|ç½€žï7`^¿z< @@láÀ›Î”!@€º'€€îž-!@€zo:S† @螺{v´„ @@è¼éL€ @ {èîÙÑ€ @`  ð¦3e@€ î  »gGK@€ $€€À›Î”!@€º'€€îž-!@€zo:S† @螺{v´„ @@è¼éL€ @ {èîÙÑ€ @`  ð¦3e@€ î  »gGK@€ $°pçÌ”!@˜%£££á—¿üeøÅ/~n¸á†°víÚ°yóæ=¤±±±”²+Ø7fåöË …‘á‘°ÝvÛ…U«V…ý÷ß?ì»ï¾aᙑ@31_3ñ¼•ï„—ê»í\`¦ñÌõ0TìAGˆ~å–¬|Õ¨mEùÎíð¿­^½*—•ÏÑþ½×¬Ys^ô @˜Ç¤7®ºêªð…/|!,_¾<rÈ!áÀLéE‹õtf7n úÓŸÒõ¿ño„;î¸#yä‘ILo•:õa6ç[ÇLfƒY>îvØáä˜_ãæGcÜ”Eåí—UYn•Σޑ9¯t)FwòÛxïää©tY@€ê%°iÓ¦pñŇ+®¸"œzê©a·Ýv_ñ¬÷JÍ{³Òj÷Í7ßÞõ®w…Ç<æ1á°Ã ÃÃZ¿«/Ì…ùÖ1›™dVï\Ð3óùE• y@€‚€ë%—\~õ«_…×¾öµaÇw ˜úŒ»ùú^Íhâ:âØ–ÅE‰Â]vÙ%¼æ5¯ øÀ‚ Â3ŸùÌdë¸êœ˜o™Afu w¦ûÐö  @¨€Äªö:+>ç9Ï Ûl³MÚë,=:º) i¥[ÅÛn»-¬^½:¬[·nR½sÎ9'mË(µ—÷oÞ4~]ù4®m·Ý.<ÿùÏOÂ^ãójët Ô1ßñ1W¸èMÈ'?ùÉ­sª”7k׉6˜M‡÷l¶E@Ï&}® @èc÷ÜsOøêW¿þâ/þ"­­¶_z饉‘öŒÛo«±9=]ûÔ§>5\xá…ãýiü3ͬ[Ös¡z.ÜÆ@è3ëׯ×\sMÏK–,I³“ïî»ïIHÇãì&¯¢ŽÆ•ãÑðá83÷’—¼$HèŽÆ¨>Î<óÌ Uç›nº)ù%"U_åœz ð®»îjøŠýo ÖoHGçi,zxpñâÅáAzPZÉ–¯Û0ùjŽŠ´‡zhxÞóžÎ?ÿüäs™®âÙgŸÂÔ?úÑÆëèt“G=êQiõú°øæCìÝöˆ#ŽŸùÌgÒ^ï¼àá­o}køñ^ÿúׇ8 ­v'Ž3̬[Ös¡Î…»À @}F@[tƳšÎ\–X•”¨“XÓêïЂ¡° =M¨Óoý _Ü7}å/ÒYÍëÖ¯“³q8n4{=d/UKåÛ¯Ü>­žJ¸^ùË«ÂË^ö²ðñó?ž”HW£t!­PÇ3Ì⊴úJ+·q*Ó˜4¶vÚ) hyéÒ¥éþ˜Î|5EÿŒ×œ4·#82ÜtóMil*·Ë.»,‰ýó?q~xÏ{ÞÎ:ë¬pá§/ ×^{m8餓¹瞛¶½œûîsÃQÏ?*|ýë_Osüõ¯Þüæ7‡3Ï:3<æÑ K—- ZÕ?îøã’¨Þ°qCzS3ÓÌ4¯ùXž¯wŽqC€æ0 [=4¸bÅŠ$âtÚ…«ìx’ ‰âYúYF¢:ún¿íö$dÄtª+ãâE‹“ÿŽÛïHyM_bù¤O o|ãØüºÎðð‚Ø—j4„´Ú7ú¢=•7Æ"­½Ð:›zº+ÐÝÎWc»zõÕáÖßßžô¤'…G?êÑa·Ýv ÿþùOóñØ:è tzÈ? üí©~øÃ¦õÏîóaï½÷ù—™öšŸ~Úéá†ëo?¹â'ãœôãðÃ;ï¼sØ.>@922Vl·"ì|ßg™îÎ| ¬@Ï×;Ǹ!@s”€·VèÛÿ$Ô¼mál!ÛløÚRñå/yÒÑrËzPOåêKáCúP:¡C§|Øç~u‰¡±­ñi5Üå£Ä¯VÆUfÿĶÍsÓ¯zÖö ñzÛÛÞ–.¤-+Úv!á« 1i»‰çø‡<$ þßüæ7á–[n ûí·ßxÙ}ï{ß$”åw}ÝçtêpKŸ%ŸË¶7Ì&^cþåXž÷ŒC€æ<‰JEm=HSô tn«ÅZ1Þµ¿×Â0÷ë´ ­ï³Ï>©¾DåK_úÒô âé§Ÿ>¡·óu•_°`ë x#ß—·”h¼Ý†éÌW{Á?ÿùϧ½Ïz¨QQû µYGìi¬š«¢ç¥m+W® {ØÃ‚³ò.Ó›Œ[o½5‰h·Í9Ø—÷ç¶²yÝ^2ë–õ\h‡€ž w1@€úŒ€„˜蓘“P“(³0“Õª´ómÎ?÷¹ÏMÂPߨ r­¦juV‚yûí·OmU¦•c­Þ~÷»ß :Ú}¨¢¯Sõ+ï¨ýËúzoÕï6¨m·óÕÉÍ:aDóÓª³Žî;øàƒÓÜ4N1ÔÑ~§Òzhð‰O|bšŸžÔ)%Ú ­2­\ëd½Q[ÏUVcÕ*¾êÛ/ŸãL1ë–õ\hÇ޹p @ HÄ-Z´(m1(­@«\±Y¨“@<ùä“Ój³ÄÞõ×_^üâ§o3”ÐsP]›üÙÏ~6<íiO {î¹g8ꨣ\œ¬®åÕe¯{ ZýÕ ´D´ÆÜj\:Í2j3ù^pÁá˜cŽ™$à>úèðº×½.¼ýíoOBW¢X+ÓwÞyg:ÁäÓŸþtj£³²_ýêWà¡ÕhÍG'™hÿ¹ƒ…³ó'œpB8å”SÒƒ†ZÙ¯†^3«^o¾å‡ü‚* <Âó«»då«F½ÍQ”ßéÜ꯼­¼ò²ò9Ú¿÷š5k΋~ @óˆ€Vc¿ýío§bm¹øÓ^c‰_É‹­£õ¤´âúûßÿ>ì±Çiµµuí©K- µZBóöÛoO+»:ƒY+¾Ú‡ÜM¨k¾Í®-¯ SBÄCVƒÞ¬DÝ”¾ª¼ZVÊ«¾Æ­{Ó*ôŠY«kÆ1ËWǨùGcÜ”Eåí—UYn•Σöæ8¯t)FwòÛ8ï¦{zX& @µX¶lY½_úÒ—’•`õ*h¾‚l!ÝL«ì¸ãŽéd‰º§ëh,:“ú{ßû^:ÎMcî6Ô5ßf××I!xÀœœ`µõB[AÚ ªßα}½bÖî8çb=ô\¼+Œ € 0Ï H$ëä‡Ýwß=\rÉ%i[…N–ß{lgcŠÏŽZÕý¯ÿú¯tdœÆš ûNÇ6WçÛéQb¬€ tL@«²Ú«{È!‡$¡ª¯¡þÙÏ~–ÒZÍl¶m£ã µÑÀÛ$æþ󟇷¼å-IÐklÓ]}öåçÒ|=¦éØ™`6ñÍf["œMú\€ Ðç$´ÏXÇÐ}ÿûßW^yeúBG>ò‘A߬·ë®»¦|/1hµYçJ먻+®¸"­>ï¿ÿþáq{\:ÁC_PRW˜ ó­c.3ɬ4Þ¹þ!ºt×ðA€ P+x¡5$dW¯^¾øC'`è$‰Î^m¯Ð úâ‘U«V¥¯½ÖÑx:OZû±{fs¾uÌg6˜åãžëº7¯šœi@€ž€„ªŽKÓ^c‰X}ÁŠŽPÓ×sk[E¯D´„ ¶Vè uDNËPìöÌçvoälÍ·Ýñµª7[ÌZi®•! çÚa<€ >% a¦íŠZýÕþè^Šgc´ ”Vz¦ÂlÍ·Žùͳ:Æ>}  g‚2×€ @` 4­Òöj Å„‹ÍÌ Íw ïé8…£§xé€ @ ß  ûíŽ2@€ ž@@÷/C€ ôt¿ÝQæ@€ ÐSèžâ¥s@€ ~#€€î·;Ê| @€zJÝS¼t@€ ÐoÐývG™ @€@O  {Š—Î!@€Ú%pã7¶[uVëÍE=‰( @€„€Äó%—\RíœÔ…u•wIøV}Õ¼A•5«ë6X@€ yNàþç—¿üåp 'x&U XÒ‰­êºÌ¶ÚŸý]Ù™^Îo¶]M€F€ @ó—@.ž—-[6ÕD¬m]_ù ½ОŒ­'VÍÛ… @×_ýøÊ³Äs{ «šÒyÛžì…€ö€mÛ¸êçmªùvû¡ @€À'píµ×†ÿþïÿNÛ6,ž³=ÐUXÍ·3;ëJÛvÚ´U§î=Ðm]4«ä ÙªHé<ŸU' @€ 0ß H<å+_ 'žxbx¾á†ÆÅtenU]hh[©>3ÙvW ë¤û±m5KÕi§^«>(ƒ @˜CJâÙf{ ÛÕÖŠ¶Ói[ý´+ KƒÉ/§›ÕmVGþR,õƒ€ @`ž¸úê«'­=Àè¼|JÛ'+ßC׬Yó±h € @B`‡vxAœê51nŠq4ÆÍ™•OÑ>‰YçåS´OV1÷Çì¸ÏiÕqº‘h!’ë>…Ão ¡18§mUGâÚue«iûÆ"Àc¹Ä´E¶ÅxîSöÛʧ¨z ÎÛÚ—[¥ € @Í äºMµÆuÛ–´|´ö[¼Úʯt.„]fŸÛæ66ïÓéÜ*­à6\ã§|µ…:´$QÚ*”]\^Çe×ÅN-ˆm-¤mum—É*¯2É>åó³ãÁuÇ$ @€Šrͦ Öm¹• VÏbÚ"YV~Y•å¶ZGõªé<_ªc_Õ–ÚUë´Ì×! «𠪢T~Ǽ}%+ˆêGe y•)H Û/Ÿòn§¶yZyǘÙJ @€¦&ë2Õ¶ke¥Çòr嫾¼¯jYÞVé<äe¹_i—UýÓÊ·ÐqëÇXe´/¦ÁXØÊ–‚ìrå\f+¿Ó%«r´XVÚ×W}å\î>TG¾fAõ<ÆFŽŸ€ @ÍX?¹Üº+·Àªc¿|öç¾<×·?·¥rùTÏÁmœ¯Z×µP. <ÁQÉ´ЕºÝf=\ðª/¬Zî2v¥-Ž–uPYž—ߢX~¥ó2×±U€ @ 9\éVž·®Ë­´˜£üNË:ïúöåþXmÒ5ZùÔ¶§¡.íJˆ*mAš§ó‰ØŸ[¥ÎbÙy÷§2¥m«mäwP=E÷弬ƒÚ+來‡Ÿ€ @%ÖO.³³•_šÌy¥·ÍË”–_Ái—ËWmãz¹U:jïàtާ˺²u h_\³­¦óA+­`_Õ ”W•ÕŸÊsŸË¢;_3÷Ëç¶NçvKÓ ísi@€ ɬã\RÕqÕ¼°l³´úr™u_n«}*¯[×i”l-Ëë¹lZ¶­ÁIˆ¶ yjZyÙjÚ¾ª_@uMÙ\$Çl ùxœ–UT}õç¼mtù€ @S°NsÍ\¿¹¬™¶_ÖQmr¿ûSÿNç¶•ße² j7Uh§Î„>:Ðê<š¾XîSçÍêÙŸ[¥L}(Gù-–Uî¼ê(¸­Ò®§´Ç#ë~Î˪u•'@€ ´&k1ÕÌóJWcU+o_^×¾ªÍë(ír¥šÙFéÖrçÝÆíì¯æíŸd;Г·ph¹xu^M”v¬æí·—Où«¹_iEÁr[¥rÜð4~ªžÊô-6²j/+¿¯SÍçe®« @€: Ý¥` —§­á\f1lžWÚQõó´óîGVÁ¶‘ÛšŸªžëOËÖ% 5X‹Q§m5@O&OÛ×Ì ^$„«>]Sí]–çÕÖcrZùªOe@€ ÎHƒ9äzN>i6—;í:y^iG•;më6ØØM j£`[M§Ân~Ô! 5¨\”VÇár[•+í(@j_µűh<ا¶ ¹ vZÖ×ÊÓÕúÎçVi @€@sÖa¶ª©´óN7³Ò|.Ó.§-šm實ísY§mí¯Ú©Ê«õ'å;к D©C)ï2Y—{ ²a!ì¾òrµS×kä?ås}µw^Vùܳã>_ËÖe¹Uš@€ М€u˜­j:-ëè¤ëìs:·ª§|Ußy·­Ú¼¼Lýåy§åw/Õ|^6)=¥€ÖwÅPi©‹ä¾jÞÕ=˜¼®Ê\ßV,–-ˆåS°_é¼?•«_ùÜFy§cr’xÎ}J;TÇg?€ @`"ë1{•Ï}ÎÛ'k±[M»®W¢]OÖé¼| ò)Ø6rŸî3÷9]­_Íi_Wnf§ÐÍüºX3!êhÒ¸ ò)Ú—çÝ!YDÛ/+Ÿ¬¢ÚVÓÑ•|¾žó®§<€ @`z¬ád¤áœ—u>¯›ûór¥«ù¼]^fîóªVuk Ýh]<­¥T¨úy{דÕÄ,–-|s¿Ê•÷õsmaìþ}M×W[×q™|@€ î H{9ª—RÚ¾ÜJ£åy¥åËýNWýn« u¥\fÛðNþ©rÛF®ŸÝèj·º¨i~qçmó2µw¾dHAeÈÔÊ«¿\4Ûg,Nå²ò)È–Ò©pË—ç>Ò€ @“ X¿å%òÙ_M«žõ±ëØVýÊÛgëºíX]SõòúΧ‚nÔ! =\„j Êç6£@XçÖÍËÕN}9ºO i•»üšò»Ò ÊçÁyÛ¼Œ4 @€ÀdÖk¶®‘ç•v^Ö"Xu•VÈý®oëú¶ÍüÕrÕS¨Ú†w«ßù®l[ºÉƒ„¥ j°¹õà]·T¦‰[«žê8/ë/I‘?¾–|NÇä80ùÔ‡‚óy:÷¥Jü€ @h‹€už­9-}§PÊË×*º­Åq3ë¾Ó… }Ú/[­›—§Ûy€P•ÛÐã½nMh%ášû\Ç­” Zûeí—µ¨u_Óª'Ÿò²y=çe«×ÍûŒÅãíªiå € @íær¨¦Kyùò¨¶ÎK¯¹¬ó­Òn›×QŸò+Tm3_ªÜÎnt«¾=Hà°"^IDAT‹Y×µàu¹ý¶eqmÑ«¼V ÕÖeyÞ×pß²Ž19!í¼l5¸}ÕO€ @`"fZ.÷+í¼Óy^=*o¡\Ê»Ìí«yûݯû°?Ï+][h[@¶qhpž¶TžVÞAþvB.œÝÆâVe Ò*ËË-šmUOÁm›ÙF­­õœÇB€ ” Xƒ¹ÔùfVõTVöËZçåuì“ÍýS¥Õ_5¨ƒÓ¶Éßîö Un[@ûŠM¬`‘ª*|.³OåSR[[¥½í¼úrßöÉ*Tmûõ§Ë·zHA€ ´CÀú«Z×þÜ*í¼ê;o[ò¹¬ë~lÕ6Õ|^Övº#]X….]H“0õ¶-µ±Om¼UÃý¨]U×ùVi•)äuO[ÊœÆB€ ´OÀZO-ªé<ïrûd[¥]ž×ñjt^VMû:¶y{ùš†NVŸÕIGºpU LU¡”öÀUÇåö¥FÙ—ç«Î*¶?­Òjã19ç嫆©Ê«õÉC€ A%ÐLË™‡Êó:Nç¶UºZ¦¼£®átní·U™Ó[’Å1¹¬#;wG Ty(†¬QžNÅ…2Õq½ÜÚoëö¥:¥²V>•)¸¯Fnr¾TÇu±€ @ ”ÄcÕ—çÎmžVïÊç¾R>¯çò¼M^î´¬‚ë5rY¾ÓÕgu0ÝhõáU…ªÊTÇåN»êØç:nW*s;ÕUt[·±ßyÙ¼ß<×! @€ Ðë3µÎÓÎç>§eÎëÙ—[×­úÜNVÁåÜäŸS•OnQðÔ! «Ýj`©S¥= ÕwºÚŸóîË}Ëï6ö¹çÝV6÷åé¼i@€ ÎX©Užv/öUm^_eÕò<_-Ï˪×Éû­¦]wZ¶«-ºbe‡‘ ÓRÚ¾v¬ê¸^ºä–‹Ø×ÌVÇâzöç}å>Ò€ @°˜Í[Úgë2ç§²ª¯:ŽÎwbóºÕ´ò¡›íj×µ€N'î…–K!¬­Ò¥2ùìŸÊ6»–Û©\¡šox'þl§ÎÄä @€À`°øm5ûjçmÕ¶”¶¯d«>÷a¿ó² ÍüÂnL-ëÙ½¥«¢ÑÀ-N«i5¨–åu‡nWµ*·/OWûð5Ü_5ï¶.ÇB€ tF ª¿ªyõ–ûJiûló6öÙº¬š—_!÷7<5þœÖ ´ÆÑÆVŽT­2f‹ØªÍëº,÷åéfåy¥òúöa!@€ê#P®U_žwÚV#)¥[ùò²jûR¾ë­êL¡ª_M$¬Íòù„]?÷©¯fÁõÔ.O«¾òîOy×iä&þ¬ÖXJ€ @ÀZi*×±Íë6K«n³²Üïz¹/O»\Ö¡Znÿ´ì´W }õi®DwU1Ûi^}UÛ¸ÿ©Êòz¤!@€Ú#ÐJ¨–ʪ¾vòíÔÉG[­?í•gwÞ«h÷ï[ж“WÕ¯¶qŸUëúU³¼ÇЬ? @€@}ªÚ«š×•J>û«eæë›É–žj[öÈš¬D«Ø‚ØUK¾j<Ÿ§[õ‘—•®Q-'@€ P/ªÈ­öÞ¬<÷çiµŸ*_ª“®Ûíqu©qáG¯W óKzÒ¹–¯šwùÝF¾j]·Ëë¸-€ @`ö´«ÏòzyÚ#/ùTVõWónß[û ´GÙb%ZU,~]½™Ïå¥úÍÊZÕu, @€Ą̀ Üj>I§eMë×½òìAöL@ëSˆèTÅ©ØvDp;uZ]£rI²€ @5h*j+ý·S¯Yfþt‰^‰guÞSm@mé4×/ØvŲ›vZßí°€ @õh)t —jU¿UYꪗÂÙc=~±¨¤žÂ¶S¯:S\†b@€ Y$0¥ Žck§NmGÔµÃbF´Ô抴«ËNG,O§m>Ò€ @íhKô6骣¶3±â\ç¬è|]ˆé¼¹Òä*ò€ @`nèH$W§2¢9ì è|0J× ¨«]’‡ @˜Çf[0WÑÍ9] òˆê|€ @ ÿÌ5±\"v¿÷ðÒh_ò·;#ûŸÞúÕ’}#‹þú¯NNP“Œ]’8ôi6ŠŸØºgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷ѯŸô¯‹>4Ñ<'ã kÄ6Ú>®ú‰æÒ,á…ÙZóÖ5V ™0¨<1Û¡ëšN¬Öí‚„_CÞ¿±tÏùò´ÿ¿”béŸóåiÿ+È'ø«ãUð§Û‡€ö_Aª=Ó4S², ˜.¾q —©àŠ«£üIñN£ñBÐ[Üè7>ŸÂ0ë&Þ&pdÌŒ$x‹F$2eJ„l  f—¶—ó1ò.Ç´ÿbéŸóåiÿ(þÅÓ?çÊÓþþWÍWß|Y«ÊšÌÒZiöW> Ôuhlô½E™”©YrËòʸ# ’xâº{?W¶þ#ðþ’šuž£§]ßXi7¦Cq<(ß4Œ¡l½¹È<íåüÌ~Ív=»ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¾~ð÷ÅÙÜêš$iÚ…ðÕu»•¹ÕîÚ(£µµ”… ‚K`ñØžjÞ¹ñ÷R]&]WIðæ“ ½¯‡mµ™âÔ¯ž9e3¶ÕŽç zž38£ÛËù˜½šì{·ö.™ÿ>VŸ÷òì]3þ|­?ïå7M¹7zuµÓC ™¡I xÈc?ôÎ/ûèÖœóîþòmÄ?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷ò›ý‹¤ÿÏ…§ýõÿ׫ÿ¦qßF¢?õÎ/Κ•GöŸÞcÅi?†¾ñ6w4V6°êpÈ.·mh™wðO—–9\É ‚ ë~' èzŸÉ(;ûŠ+ÒŽ•x©Or#QÁ´ŽëBÿ$dtÿ¹©Î?¹ýõY0èö?2·Êݽ6¼ð麰º>ÑÆœ‚;~ËûUŒã(=—ê(úç÷CêÏùŠV¾ð]¡œÛx7Û„’9ÊXD<ēվ^U°24ÿøBüý¦šŸü">ûtm%ÏØbóÇ,†ÛWtÀÇJµE\_ÊWÌUÔ<á BÛì×þðýÔh{Ÿ.[(Ù|ç9y0GÞnç©ï\ÿÄ?…zî­›RžkkXmÖØÛZÃlF«#DÒÆv‘¨ bºª)»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõQ`r/ûê¨ÑBÇwñÕ¼ÎOâXÿ‰ |¸þï÷½è©>&œxZãæQò÷âŠú<%okB3µŽZ‘å›GUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾_üyzøáD(ªWгê[L¢HZ)£a•b ‘ßCÔ ÅMoÀ­b&¯á†ÕD¦± ˜ þ`êž^wnã¦3Xr«j_3¾‡OEeéhš„Ö–íè2öž[}U”0ú*K«=ÒÖ[««]> xPÉ,²FŠˆ d³ÀrI¢ÑïøÁ Ë·õ÷U$Ó´©],,™eXB¤ê8¬Wð&µxöz6§á½Jæ0KÃi<2ºÁ%T’(´{þðBòíý}ÇIETþËÓ?èiÿ~Wü(þËÓ?èiÿ~Wü(´{þðGyvþ¾âÝVšö¤1Ÿ9Ù~÷— ¸Ĩ8=ñî)¿Ùzgý­?ïÊÿ…rÚè[Üß5È·®VÖ’2É,Ÿl…bDE‘weÙW”eÃa™Š»Q®K”¯c©þÑ·ÿžwø /ÿGö¿üó»ÿÀIøšÂÐä·šÒkGLñ„–a¿´õ"AUwnIÝHJîÜ{¾Ö>éô©¼1{¦SM×Åå…¾7ÝE­I,K°FNçóàD™Éç/Ÿõ¹{˜ýîæ·ö¿üó»ÿÀIøš?´mÿçßþKÿÄÖ¦£àçÑÛY·ñDé–¬©%à×]àF_+ßÌ+ŸÝ¦A<î|çÌ}Ò­Ï…­ô»]Pø…E„¥E½ÓëR¥*ðæL?dòr™Îù7çf÷scûFßþyÝÿà$¿üMÚ6ÿóÎïÿ%ÿâk.|+Ššßü$)ý•Ü^¾·#Aò˜À̆M§˜”žI|çÌ}Õ¼w¦kãQ’ÉîÚßN¾°Ìš´Ó%¬Vò,™Ý‚cœü䓿>ãÜìÃÞît?Ú6ÿóÎïÿ%ÿâhþÑ·ÿžwø /ÿ\,.ÑcÔ…¼šGŠ¡±‹V@Ô¥½ßnnVHãU \4˜gæLÍŸõ»¢²¹ð¬šÉÑm|B“j–øßd5¹$vyy<ÂßòÉs‘Î_9ós÷;0÷»›Ú6ÿóÎïÿ%ÿâhþÑ·ÿžwø /ÿX¢óÂVúªé-âH—Q…¢_²I®9˜b ™%ŒqŽG͹ºùºH¦ðÄzÚhi¯ƒªÆªÂɵ©|(Œ‚c2n#)9åóŸ1÷/s³{¹»oc*a00ªO8éUõëïø}amzó@ÒVrDFöX`Œ…ÞFq‘ÓÖ‹G¿áÿ/.ß×ÜoÑYÖ–š%å¬wV–Úużª9bOBàŠ›û/Lÿ u§ýù_ð¢ÑïøÁ Ë·õ÷誟Ùzgý­?ïÊÿ…dx¨&“cÖ›6³yÁKÇ‚T«pxäp?!U jrQOVLê8EÉ£¢¢°5ûÿx}!_èz`œ‘êÅ”Œg !#=O<ÕÍ: R±ŠûN‡L¼´™wE< ’G"ú«úTÚ=ÿø%^]¿¯¸Ó¢ªeéŸô´ÿ¿+þeéŸô´ÿ¿+þZ=ÿø#¼»_qnŠÂ’ç©›0]:XµI„RC È“9Fp(#QŽzq×¥ieéŸô´ÿ¿+þZ=ÿø"¼»_qnŠæàÕü q­>‰§á¹uDsY$ð´êê˜ÁÜî1[?Ùzgý­?ïÊÿ…Ãþ^]¿¯¸·ETþËÓ?èiÿ~Wü(þËÓ?èiÿ~Wü(´{þðGyvþ¾âÝÎÚbOÞiNˆlcŒH–ûFÀØNÞœ“Ž™ç¯5k~}kû5 6ª%0ýˆ\ÀgóTòó»w1š©ÓPµß™¨å{#§¢¹IµïÃö?68Sí–ít…´Ù— õ–_“÷(;´›G½iHÞS²ÓZÞËíWÑI5² pD‰Íì y‰Ôóž3ÍM£ßðÿ‚UåÛúûš*§ö^™ÿ@ëOûò¿áXÚ6¯àMjñìômOÃz•Ì`—†Òxeu‚J©$Qh÷ü?à…åÛúûŽ’Š©ý—¦Ð:Óþü¯øQý—¦Ð:Óþü¯øQh÷ü?àŽòíý}ź*§ö^™ÿ@ëOûò¿áY/oµ+K´Iíí&+N ªÍÛÛAÀÀª5(¹'±£M&·:*+ž±Ô¼ªÉ¤ØßøzëQˆ‘%¤3Bó&:åÈÇÒ®éhš„Ö–íè2öž[}U”0ú*mÿ‡ü¯.ß×ÜjQX·ÒøbÊÏR»¸M8E¥ÆÒßl‰] Pžaܪ fÉc­\†ÃIšš; FGPÊ|…‘Ú‹G¿áÿ/.ß×Ü^¢¹ÍoUð6‡wžµ©xsL¹™wÇ ÜðÂî¹ÆB±Œ‚8ô­tÓt·PéadÊà ˆT‚?*-ÿ‡ü¼»_qrŠ©ý—¦Ð:Óþü¯øQý—¦Ð:Óþü¯øQh÷ü?àŽòíý}ź+tŽË]Óa³Š;xî¢U‡Â‚3CüÏ­lQ8òÙ÷e{®ÁETQEQEQEQEQEQEQEQErÿN<-qó(ù{qEN<-qó(ù{qE}^[þëŸæyµÿˆÎªÇæVù[ ÷¦Ó 9Ñì~eo•ºzm|ö7øòõ;0ÿ‰R_ù Û×¼ßúuÁü,‡_:§ˆ&ŽûK@ñ¡¾Ý¬œÜ“æ7I|Ý gî2=ëÐÚk”¸$îDd¶©?ú©+½4KVxßÃW¾×/t©5M{Yhàð¥•áQ*«ÎgŸ2¸VÎ!‡ 3të¡©x;Åž]No^ŸO$š–Ÿâ ‹Øg)Z2qm+7>RdÜ: W»QJã±Îü9—E—ÂVo¡jŸÚV»i´ï´n]îÌF?»ž=p_<5©_øsÁ¾!Ôµ;7´Ñ¡žk[[I‰‘^2$”ÈÛ†üª«“Œô¯_¢‹â~ñ5Õ×´c¥\»AªØ]I5œþ ›P‘$UWA4n»m¤ ¢69a—!žÖ¼íkÀÂÏÄú­þ¹wÃk¶ßÈè·"ÑØ¤±¶ ²d*£8;Aß\í…R-~fû[ÕµY­VE³Ží¢Ûyœ1QjXàmË– gžNK…8øSªkWÚî„÷ž!²þÓ’)»a6¿4÷,Æ&%~ÄÑ*Û/Ý meò v¾$‚;Ë_°M£ r)’ð¾ç¤f`.¢ù€yw.r Sƒž2pý¥PMF g’pé,޾UĈ¤4ÂA¤ûª9ËјMYÿ]ÉkUýv<²ëÁþ+Ôô-rÊÒßVÓ4·šÂ{ 3SÔ£»œ¼3y“€ìÓ"#¨@¨Ìë¹y*ÕÇ„uKIÖoM޶ú…ÍÖ<¶ºÔÖ*·©k7˜cŨØ7.Wsç8@pzDZ=¤{6ͨ›q»P³·ËÆrüÿª\ç®_9óqiͳjfÜnÔ'líòñœ¿?ê—9ë—Î|ÇÜ®UŽOÄPkZÇö¹„ï"m#V72éWÛy×(mäŒH…dh·#H †q÷OCŠË±ðž±3é÷—:B[¤¾0mjK&–6û?fxÁl¥Ì\„-†òpMzZ=¤{6ͨ›q»P³·ËÆrüÿª\ç®_9óqiͳjfÜnÔ'líòñœ¿?ê—9ë—Î|ÇÜ®8)ü3­ÛëRjˤ›Ë{_ɪGd’Æx^ÈCæ&æ efl1^„õÆw~iZ†›ˆ¥Ô4‘¥hks^Á˜Ž|·Ž ì$%[#=sÔ`ž‚-Ò=›fÔ͸ݨNÙÛåã9~Õ.s×/œù¸‹G´fÙµ³n7j¶vùxÎ_ŸõKœõËç>cî.áÚ®¥©jšý¥ãÜoÜêpɨHöà E(„?–¸%wϲot_ê)Ò.o-o|»½Ñµ’Y¥®dUxð>ÐÎQ—pb2KðF+ÑâÑí#Ù¶m@ìÛÚ„í¾^3—çýRç=rùϘûˆ´{Höm›P;6ãv¡;go—ŒåùÿT¹Ï\¾sæ>âácÉuk-CL]A»ÐÒGÿ„Ùo"Õ<ø™nÝ<ÙU dóU« FùˆÀ«ÚOƒ5»m`iú”^ ¹µO¾­Õ¬ºxµbn ªÎYEÈ`§cœ€@m§¹´ð?…­5¯í»}%#Õ7^‰dóß1óI»sdD™É9Ëç;ßvœZ=¤{6ͨ›q»P³·ËÆrüÿª\ç®_9ós¸XÈð3ù¾tžg›¾ÎÍ·ù›÷fÎíònÏ®÷Ï÷›©¥àµ_øXÞ<àqweÛþ#®JÓ~Áuu"Êï‹FÚG ‰·,ìIb}I$õ$“Z5udœ®»/ÉN-FÏ»üÏø_oq¤i .-õMNA«A%½ÜÝ»ÀPZÉ*ˆˆTÆ ‘œ“šwÃWÕ5ÛÝ*KÝcW¹0xRÊñ þÑ™k“<ÿ<›X'`AAÀDzQYÜ»á+»K¿ü9üC¨jäßi“Xµ¸»y|‹Ÿ±É½Z"H·*ÅÔ"…ÁÛšëþ!ŪÍñ#Á±è×V6·FßQýåå«OݰälWCŸøz \,y¹ciàÝAðŒ—Ò3È/.¾Ù&·.‹ldiCº†„1-ºS².FÕlçOHñ º–‰à‹k÷šf“u¦\´÷‰zö~}âû«Æúµñí¯‹¼Ow£¤2iO§ÜËgÕÙ2ùÌŠ¬L® ö/Ãtl“^³Ees[V¾&¿ÒïZoj/¦Ü]ø>ÒT‚I +_)œÎ±'yAh†n?/ ¦x6¯ëšD:¦³­5ºø;Lºh¡Ô§„I;´»¥c,Bàäóß8õz(¸Xð_ Ùi7>ø¥YklMju(ãÔä’kIÒè4xg&pFiF½3á£ÜFct—ÍÚp~áã#Þ»¨tØ"Õ¦ÔÕä3L›I@ã§þÞ®Öµf¥kvFt ã{÷gÎÖúSø‡ÃÓÞÝÝëWšŒÿš\®§ris ª¸ T‚ ê &º«+ [×üm£ë×·VMÔL³Zë3I!`-3žȘ8;U†1Ž„ƒëôVW4±Ë|*»»¼ð=«ß]Mw47VÞt͹Ýb¹–$,{¶Ô\žçšâ~xkR¿ðçƒ|C©jvoi£C<Ö6¶¶ “"¼dI)‘· 1ùUW'é^¿E 'ào]]xÛF:UË´­…Ô“YÏâ µ EUtFë¶Ú@r #c–ùrákÎÖ¼ ,üOªßë—qÜ6»a=üŽ‹r-ŠK;`Û&B  03ƒ´íõÎØøU"×áÖoµ½[UšÕd[8îÚ!·™ÃÆ¥Žܹbyää¸Xó…:¦µ}®èOyâ/í9"ë¶kóOrÌbbWìM­±IýÒÐF_ ×¢øgoö®½¸¾8ëÏ]%RÓôØ,®n®"y®Ÿ{†#äž8÷5¬&”$Ÿ[~fsƒs‹]?ÈòÏjöz6µáÏ xwÄ/ŠtŸÞ@±ÁlûLbfLèÅpHw"1.:œŠÂm{^o ønm7[Öf–]'ñ,‘ÈÓ5¥‘qþ’™l­Æ<Ì–*°Lk^ûEesK«Ç [·Åš¼ÆòëJ’â 5yŸíP5s*ÆÒ(0߃Œ`Šë¼#oq£xçMÓ#Õ5;»kÿ=Ôéwvó/¨t H"VSjð8¯B¢‹…2ñV¬j¿ïl4›ý6ÍgðÄqÜ5åƒ]q(ùTH€®áíXç‡ÂúT~Ó¯¯-®t/Älîgñ Ö>iEuS1£ ©ŒnVù”w¯l¢‹…ñº'»–ø†ÿE á»{½moÝn.œJf*ª@šE"";†Ý9¬{ÝkX’=c\M>Ê_ ØÍguyâ)´ÅšéÕ¼ç2$oçÈ1Øççkn8õßxzMz3×õ}:ÚHšˆ,šYõ¼lÊq‘”*yëÒµ¬­ ²³‚ÎÖ%ŠÞÖ(‘z*¨Àè;…ŽwL{ÙÂRjW÷7ÍfMÌÐgË–C îdÈi9#Áé]EV¸³ŠkÛk¶gm¿``î9«5S’j)t_«&iÉ÷¢ (¢³,(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…Ç·:o‚õÍFÊ_*ê×N¸šÚk¬lÊpræÿá2×h´ë Jâ-ßV¸žkﳫo.¥·ÌLdŽƒ“’¸ì5Í: _E¾ÒnZD‚öÚKy2u*H$œCYÖžÓí¯¤¼Žk£$šT:Y Ë*2å[§Þýãdôàq\Ʀ$~7Ôµ=NÞÏÞŠýgÐíõ•’æÿìÿ$ÌácÀþ“#·\‘›:Ž­u¦’K'6ߨÚÔR<˜fYŒÀFW)O''ït㜈üsŠcK-WXÓ4ËO Úi0^ZÏ›(ŽIw#FÚc;©ü¤r+fçÀ:VÈ"Óou-"(´ÄÒZ;) mS;‹£Wsa”«|Çš4 L¯ x«Äº×­R Ñîü?c©4R^$f“s Có·ÊiePx$ãÖ·¦x"÷YÐõ©tÉì#2–ñIçrSæ+`uè3ïWtïÚi·úU柪jVͧéðé̪beº‚,ìYwFNA,r…Ìjxa<[¡É£O¬jZm¬ÜN,¼Ó/÷I’7ÀÏ?.½@ߢªéV³Yéñ[\jZŒ¨k›•ŒI'$üÂ5UöáGJµHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ñ4ãÂ×2—¸÷Qñ4ãÂ×2—¸÷WÕå¿î°ùþg›_øŒê 9Ñì~eo•ºzm:ÇæVù[ ÷¦×Ïc/S³ü(’ÚÛËu:Áo‘³3žõ{ûVÿŸOüˆ¿ãG…ÿä;oÿÿÐMw„bš4nÇýƒ«ϧþD_ñ£ûVÿŸOüˆ¿ã]Å\ˆ\Ìáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌáÿ°uoùôÿÈ‹þ4`êßóéÿ‘ük¸¢ŽDÌó›«ymgh'M’.2223Ú¢­?Èvãþÿ ŠÌ¬Þå#—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+‡ð¿ü‡mÿà_ú ®â²†ÅËp¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Èvãþÿ ŠÌ­?Èvãþÿ ŠÌ¬æ‹c—øšqák™GËÜ{Š(øšqák™GËÜ{Š+ê²ß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þM? ÿÈvßþÿ šî+Îì.¤²»K˜‚—Là0ãGõ­_øIïÿç·ýòßãXFI#F®uôW!ÿ =ÿüñ¶ÿ¾[ühÿ„žÿþxÛß-þ5\è\¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬ëè®Cþ{ÿùãmÿ|·øÑÿ =ÿüñ¶ÿ¾[ühçAÊξŠä?á'¿ÿž6ß÷Ëð“ßÿÏoûå¿ÆŽt¬­âùÜÀôY•=ýÔ—·os(Ppþ•f÷)¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_U–ÿºÃçùžuâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÏÅ]jûÿuíwMd[Ë 7žë¹w/8#¸­OøW¿è¨hŸøJþK¬ÿ‰š÷Š|­øsLku¼ÔmÞ&žAj[Œ³v©ê}Y.ܰœãœcšÍÕŸ¡Íe¤É,™ºÔå†IL‘4dmX nÈ;Žz`PkERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEËüM8ðµÇÌ£åî=Å|M8ðµÇÌ£åî=Åõyoû¬>™æ×þ#:¨t{™[ånƒÞ›N€çG±ù•¾Vè=éµóØßãËÔìÃÿ !EW)°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\—Æ]FûHøYâ=SM¹’ÖöÖÂI`™(ê2 tŸð¦ŸþŠŸÄü±ÿäZ¥‰»h§ÝÙC¡éÖÖwqr¶2ÉurÁ¥›lŽ ¹Ç8v á|#«xÓÄzv›âH°­4@Gq Œ°J×f|s0}¡ÊÛ|²2q»½+ÛÑ^yáMö››]fËS–&ñ Þ—¢!mãapé G ðw#$ÙÍk§Žô×ÔVÓµ?ì÷¿:jê¾Z}”Üï1ùcçó?Ö ›¶mÝÆê,:Ê+žÒ¨!mæÆHuHÀ2•Ü®F3\f‘ñòûá4÷–óÏy®Ûxr[ë»è¡Éµœ@]ô]äà„U8,#%‚çªQ\^›ñM[&}nÓRÒ<­-µ15ìH«sn|É#1ܹF ÿ0ùjÞ›ã8îæº´“Ãúå–£ ‘¾†Æâ8„×PƒŒÇ¶B¹ÎVe ²ä Ñ`:š+žðŸŒ4ÜLº'Ú.mà†7–ë`X’GòNNï5F .>\€HPLe¶÷Ï5ØÑJácÿ„+þ%?`þÓÿ™‡ûo‘ÿOhò±»þ»ñÇjÍÓ>Ùéž!7Ö±xvKC¨5øûV„’ÞÆí!„¹Þ0´”,£z \,rþðæ« ßIoe­[6‚÷SÝ )lIWia 7¹ ÉǬ #áyÑü'sáÝ/]û=¥þ•-Ž †ÓtrÌÑÅÊ.ñå¿?0ÉÎÍ^E ß'Õa’ßÄú÷ö”K¤M¤Ú}žÓìírìß#í¾SåGÈ £åæ®ZxWÄþãX¿ñ=µÆ²ºkéöéž\vê̬Ò4fFó²!?2¯ËÀ5ØÑEÂÇ-àGዘôÝFâ]:éImî3#›®’OæÖA‚ËŒn†2A¥ªøSÄ·>:>$·ñ&’a…;KÝIþÆÄ…no~råI 8Î{j(¸QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ñ4ãÂ×2—¸÷Qñ4ãÂ×2—¸÷WÕå¿î°ùþg›_øŒê 9Ñì~eo•ºzm:ÇæVù[ ÷¦×Ïc/S³ü(oøù±ÿ¯û_ý•Ñ|CñGü">¾ñØþÛöO/÷o—¿|ŠŸ{Ýž«oøù±ÿ¯û_ý•_ö‚7Âl׿þ”GYÇà^¿äSøŸõÜâ¿á¤Ïý ŸùSÿíTÃIŸú?ò§ÿÚ«çêì>%ÿÂÿøA´?ãÐ}¿íYÿYÆ3Ÿùi÷·mù>îÞôœ­$­¸Ãá¿Úë>"Ó4øDü·]ÅmæÿhîÙ½ÂîÇ”3ŒçíÞm|=ðäãâ†ÏýE­ôjר~*ÖF…á}[[ò>ÑýŸe5ד¿o™å¡m»°qœc88ªz7¼Ú<Úó øïX¿ñ›¢kþ±Ó¥Õ4·Ôìä±Õñ|´1YCCCûåÁÂ3ÅnÛøÓ÷v¨[ßI5¾µK§¶•šáDFS… ¸ŠNôdÉw`ôßžœãu¢ác©óhók”½ñ®kâ츺›P Ê–Ö3Ü$O¸%’4d‹9o+ÁÏJŠ/øVOa&¤æìܵ ²Ê-ÚáA-Ÿo”d9@Û¸#\,vmpÚùÏŒ/ý;Aüä©m~!øNçVþ̇Q™§û|šqse8„]!!¡2”òÃåN¶OÎFkëwŠïý;Aüä¢þëÝ ¢Š+@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(—øšqák™GËÜ{Š(øšqák™GËÜ{Š+êòß÷X|ÿ3ͯüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þF·ü|Øÿ×ý¯þJÎøöùøM­úáÿ£ã­ÿ›úÿµÿÑéT¾,i·úïÃýOJÒàûEÜþW—õ]ÛeF<± =ë$ýÕêÿB¾Óôÿ3Žÿ†nÿ©Ïÿ)Ÿý¶øfïúœÿò™ÿÛkÕá0¹ÿ¡;Ä÷òËÿ’(ÿ„Âçþ„ïßË/þH¯Úãÿ¤-Åõ„¿ðkžÖ?á þÑó|Agmå}ÊÆX¶ìïoîcï^ÉãK õ¯kZ5«Ä—ú|öÑ4„„ $l ±œdó€kœøsªø øv O ê–‚Ç]¶¾ž[©­Bˆ“pll™‰?08Çc]g›^ŽU]4êî+v<Ûá×€5MÄúN¦4 x^ÞÆÂKkÈô)žFÕ‚i‡‘ ¥KCœž ™ü'àïi“ø"Æñôoì¿ ¢Åq#Ov†Ýá¶ÂÆ@a•ÜÀäàñƒè^mmoÌ<ëNð‹¬|á­!!Ð¥¹ð¶¡öLoåT¾‰"–#æ$˜[l¹À Ž´xƒÁ^)¿¶ñF‹lú*i>,¸K›éä¸ÜX±†(¦H”G¶`D@£3FTžAÀè¾mm W‰|ªjzWÄ[X.,VOìûw`#Ûi?¼Âœ|ÈO¸#¿ÔxïGOx/Yðó:Æu )mÑÏü³vRøô8?…]óhóh¸XòOᇈõ/ xrÒïRÓª5 ¤ñªÏåÜÛ\Ü­ÅÌq¹$˜¢E Ú;`VÞ»àí}üK}â 1ôɦþßµÕmmî.%‘#±û3£ºÆÅY˜­Ðgã»óhóióŽ]ðf³ªhm¼Í:¯,FØy®É-¤Pí°oF €xÁÀ<‹â^‹wâo\èÖ2ÁijÛH­3€GØãíMt°˜¶lÌm¦Mç*>îMz›G›EÂÇ<ª ìâÇÍÿ„¿ûsvöÛä}¿í~ïßÙÆ:gŒãšÛÔŽ|MvéÚý JÚók ìçÄWGþ¡ÿФªOGýu%­Pú(¢³,(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…’£0B±ã‘%FÆpÈÁ—#¸ÈÊ·jŸóãiÿmÿÆéôW:––hÑÇ[¡ŸnÕ?çÆÓÿÛÿÑöíSþ|m?ð-¿øÝ>Š9—oÏüÂÏ¿ä3íÚ§üøÚà[ñº>ݪϧþ·ÿ§ÑG2íùÿ˜Y÷ü†}»TÿŸOü oþ7GÛµOùñ´ÿÀ¶ÿãtú(æ]¿?ó >ÿÏ·jŸóãiÿmÿÆèûv©ÿ>6ŸøßünŸEË·çþagßòöíSþ|m?ð-¿øÝnÕ?çÆÓÿÛÿÓ裙vüÿÌ,ûþC>ݪϧþ·ÿ£íÚ§üøÚà[ñº}s.ߟù…ŸÈgÛµOùñ´ÿÀ¶ÿãt}»TÿŸOü oþ7O¢ŽeÛóÿ0³ïù ûv©ÿ>6Ÿøßün·jŸóãiÿmÿÆéôQÌ»~æ}ÿ!ŸnÕ?çÆÓÿÛÿÓcY^âK¹Â,²*¡Dmʪ¤‘É'æ<àvã&Z(æÓD½ØQE%Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžmâ3ª€çG±ù•¾Vè=é„+® )à€År> ‚> ƒO€çG±ù•¾Vè=éµóØßãËÔìÃÿ $_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-Ís[}OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±JwÐ`”Å1Ž)U}Väß¡š™öÏX?ðmqÿÇ«ª´×´ øNÔµ{Èìí~Í ;¶Y¤–@gvv<I'P/į Ë¡kš­¼÷’Íï/lå³–Úí#TgÉQ¾`­´#¯ZÙÂ)ØÍ95sŽ_É"ÇÄîÄUÕnI$ôyÕeítÔFwµ‘UA,N£t©?½®â{¸¯ô7“fèn-‹lpU—¡:áü0L÷^óËI½ƒ¾âNæXÁ>¸e õÑÈžÁÌÖå_´xsþzÁÿƒkþ=GÚ<9ÿ=`ÿÁµÇÿ®×[ñŽ¢ëš>‰ªjQÛjÌŸ +3 †@!z–#$€9 T±x–ÒOÜøecœ^[ØE|î@òÌrI"(9ݘ›¥‰¬n¦ñ–êN®Ñ1‚â×þYÅÆ!ÙÐÂyÎ_/¸µløXâOD'ÿ%d«GV¸pUtË O»Æ}Hbqôèjµ¤RXÇbП9¬—0ymÇ<1#¶@Ž ‹¶ÿÖŒRWÛúØóÏhþ9ño‰÷ÂV‚;s¤Íp`º3NÆ"II”66yw úOöÄÿô ½ÿ¾¢ÿâèþØŸþW¿÷Ô_ü]MŸôÑw_Ò¶Ñ¿ÔÒ„’=£ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¸OÚWÔôO†w†“rÖWKcšÃ{¨•‡Ð© ýkøcãÿ=Ÿ‹¯|Uiµ™â½>}šê=’#U]Ñ(èçæ=ëäÝY§k¿¼ÙB6½]þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯Ô˜þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯¸ø¹ã 3Bð•‡ö™­kºÆ’ÚƒKlf’9]±¦D¬[æÀ žâµõ‹:害 5׆ Ò4MJÞÉæ»¼Ê#–vÃBZ%"6^.bGAÍ?m/æbök±ë?غgüùZßÊ?±tÏùò´ÿ¿•æ¿|KãÜø²?Ï£\G§k×–Pˆ‰bòä&€cî³|ǽz†éœ_÷ѪU&ÕîÄãЇûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}|óîþñZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿•qŸöæ°ÓôHïîP ð‘ç¦æ=°É­|ÿÓ8¿ï£YÞ•—CYAi¤g˜÷.IÎkåx§ˆêdÔ©´ß¼Þ½­ë§S¯ †fî¶*N¶V¢kZv !Ú³ù»âјcoÔŒ{֕Ι£[[Isqmc1©wv—@êjo²Ühwq]ÑŽwjóÔno¾i&` m©i’KÅ’*gþøJóò.0©¡^nïÙ«ëùi¡–gJ8:.ªW²gUo1¿í:WƒÖkCÊKqs䙪® ǦqVô)t-Râk6Ó#³¿€f[[†Úàx`á—Ü®+ukð ,ûTQŠæ¼K«\Ûø¯Ã—èC]è­ÏmñÈáXu$ÔeÜ_W‰…&Ûævûû[õ¹ò<úëÆŸ.îÛ#½ñ=Π­¼Ri‰w{tÅm­-Žé%#©êQ݉VUƧ%„?jÕ| ±Ù™ÖðO$cÔ¦@ï´“õ®/Ç:•õ¯Å RT`¼0Àq±” qÿ-Tÿá%ÖyÝxX ¨¯œU§UÁ7¡ûVYÁÐÅa!YÙó+õëÚß­ÏeÒìü=©éðêX\Z룑 éôê+Ë>-øNŠå5+6ò6>ÖÄŸ)$†äp1Ücƒ‚ÀÍðPžK¯i…TÚÁqñ‚p¤ß¸o”T߯t)>Hù¸^‡ë_M•Õ–"*roT~}åtcR¦¢M&Õÿ®§§è_ò€ìîŸâ÷5ÅüOð;xŽhµ]3ìQêG幡¹9ØøäI!‡Lž¹ãª¶¸û7†m®BC3í`@î=ˆ9ùGëUÿ¶ßþ|m?ò'ÿ\¯<.!Êž3HRç„]ú'ük,ÆÖÃÀšF);Mì·ë,iþÒ®Iý+Ö~x2øx؉îöâC5åÉãÍúÀt¯ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿU‹Îñ»{W{y•õ{lËzž§ê–†ÏSÓlom‹+˜n#!e!”ílŒ‚„ ‚ÇCÑl5;½NÇDÒíoï9º¹†Igÿ}ÀË~$ÔÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñUÇõ¿î‡°ó ¼9áù¯Zú_hò]<ërÓµ² ª»BØÎनn tªúWƒ¼%¤Ë4º_„ô ž³ÊÖÖQÆd‹û‡h_n•‘àÞxƒÃŸÚwZm„rëØ§™€‘]K'j.Osž+ûmÿçÆÓÿ"ñT}oû¡ìr•Ç|q¥C¤ÏàÏI§Á#I ©°‹ÊÛï2®Ü{‘Ö¤—Áž—P³Ôeð–€÷–(‘ÚNl£/§ÜT8Ê…ìNÕgûmÿçÆÓÿ"ñTm¿üøÚäOþ*—Ö×ò‡°}É,t=ÃS»ÔìtM.Öþ󛫘`D–÷Ü ·âMhÛ8ÿïªËþÛùñ´ÿÈŸüU`x“Æ·šwˆü1¦A¦Øõ[é ›ÌÊ¢ZÍ(Ûóõ܋Ϧ}rÖüƒêþggÿlãÿ¾¨ÿ¶qÿßU—ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú£þÙÇÿ}V_öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüU\ò«ùšŸöÎ?ûêûgýõYÛoÿ>6ŸùÿЬøÖóÄþÓºÓl#ß^À<ÌŠêX“øù;Qr{œôéG×<ƒêþggÿlãÿ¾¨ÿ¶qÿßU—ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú£þÙÇÿ}V_öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüU\ò«ùšŸöÎ?ûêûgýõ\g‰¯æjÛ8ÿïª?íœ÷Õeÿm¿üøÚäOþ*í·ÿŸOü‰ÿÅQõÏ ú¿™©ÿlãÿ¾¨ÿ¶qÿßU—ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú£þÙÇÿ}U?kšµ–ºšN“SÜMÔÈ“êgEH¶€œåä‰IT*ªX“‰$Sêž0o“ibøßåïÕ¥]Øóvgœgm¾zãÌ“¼µó_×<ƒêþfý³þú¬[˜õ&êk½Þ È&%å³iç©Bxç©Õ™õO7É´±|oò÷êÒ®ìy»3ˆN3¶ß=qæIÞZù¤ú§Œ›äÚX¾7ù{õiWv<Ý™Ä'Ûož¸ó$Æï-|Þ},>>—²¯ £Jp•7xÈæ5é|u⨎——‡¬¤â{™fG}½ö*““õÀúô®Š?é±x^?Ån©g+x™vôlÿ{#9õ©gÕ<`<ß&ÒÅñ¿Ëß«J»±æìÎ!8ÎÛ|õÇ™&7ykæòþ&ñ³qâ¿Û=ÍÕ´:íü3À$”,É­ØBÁÕ b¾0W8*\s– …ÀStèÓÑïæ¡*ß!¼ƒÅzXò‡-uÀ¼%Ä7 #¶åfý8¨ü/á-nûÄÐx—ÅiiÙ2ltè\0ˆ#{‘Á €3ë“Æ=ŠÏ €ÁáªûZtõþ¼¿3Ï£”У>x-}_Ç>—Wš-OLû$Z”)唟˜®#Îv7q‚ItÉü8KÆÓ1´°ðNc3|¦ò[Õx×Ü “úö:+ª¬hÕŸ<£©ôx\Ó…¥ì©ÔÓúóüÎcáß„bðŽ„ÖÏ*]ß\ËçÞ\ž<ÉDzÀË|Xñ#?»ýzÿÖ½B¼ïãaÿ‰Lcr™x#ž¦½¼³Of£m;ÎNí³¶”çÁÖÿ2·ï“ ö’¼»Æ—š¶•®>¯y6¥ÿôÖӦˆwÞÞcÊŽ2êAOºI.y>­^-âk†¡+@ÃõÅswÞ ¶¿Ô#Ôo|)Íä{vO.ŸºEÚr¿1\ðy‡¥y¸¿ãËÔÖ‡ðÑçWž9Ö.´=jþ=dÓâ´¿1Í’7… Þ´„m%Š»Êœ›’.^ø§]Òåñ³ {ء֠ӬbX›t~lVänÛËæ1Æ2Xã Žá¼f×W7MáZ{¥d¸éÀ´ªÃ íùõïR]x:©n¦¹ð´sIv‚;—“O Ó ÆÉ_˜  ®cc#Ã·šž¯¡Ìu y´»½òB$Hö’?†TYÇ08 ŽGX>ÜÝÝx]^úî[¹ã¼¼€Í.7ºÇu,k  íP8º+O ›M9´ë_´6N=ºYb6 ÷²¸ÁÏZfáôX^à ¦Å#nt´°ò•›Ô…Q“@?ø|šœŸïcÑgŠ I¯5Uµ’LmY õÆÒrëêÐôªÑxº÷J4³ÕÛY–åRHõ·B1<ÐÁˆòÛ H# NÁéþø[Vm7XðåèYoõ6Úîɰñ½ìì2¬9VVg‚=ëe<§&žúzx:ÝmA+Â4ᱜ #oÞ¿ZpZ‰üE &Þ¥_ÿÄœK ÆdDóï%…Ô) 9ààŽ„ Ô²ñf³sâ‰tè´:ÒÖõlndH¤Èo-Y¥Ý÷B‚Ãå<•ù³Ú»àØ ›ÙŸ Æm¤‰!xNž64hK"Û‚ªYˆ'i‚­†¡ <)¼…UcœiãzPnFÐP#—ñƒÞÿoiöú6¯|5Ie‰Åš6én²:IA\í+¹G9-´.9"/Èùàû ]éÅuwþ³¿ÔSR¾ð„WÈ-ÌÚhyT)ÊáŠä`’G¦kÆ>×§ñ§‚. Ñ5)a¶Ôn^yÕÙbSe:‚Ä (,Àd÷ w  o^jÚV¸ú½äÚ—ü#ÐC[Nš mß{y*8Ë©>é$p¹äæ^xçXºÐõ«øôy“OŠÒüÇ4bHÞƒxRÒ´–(~ï*p>nHô[ï[_êê7¾Žæò=»'—OÝ"í9_˜®xŒÛIBðŽi.ÐGròiášd¹+óÁôÎAwâgÁ: Šßû/Z1\Ai#«"™6‘ 0%FJœpAëÔ¯/.\jz^ nMý…¬Æ[¥¸\Ùa a%²Øâ' ÷²¸ÁÏ|õ§i>m"ÔÚé^k 1ÛÙ˜Ô±êÄÉã­â‘2jÖk¯.ˆfÒµ]µÆÁó irð»¾ðF+»ýdYÄžsmã)ô¸?³4˜ôÛH´½VÇTV4êK‚9 P[#‘Ըǯx¢-Tëë¨i gr±¥ÔmÅÔ°«—ÚѰ(ÍSº2ÁdfVd–´ÒxRXàÑôwA¿ËWÔdPßë¶çgg®<É>÷–¾h™êšþµse5ÝÆ¯k¦ÍZ×7ö2«Fc{ùÒF/’¾^Õ FHÁ`I«§øÇ\¹ñéÒÒÿNû÷–¾h3ξ#ê×¶?ç–îkVµ²²²›MÓæžXÞúWžE”@ÔF#‡ÆPaC’oj‘y>0ø|žO•Ÿk ·Êòóº ã»\yÎs§vs¾\ùÛÜMâ,ÈbÒ4‰ ïò‹êR.×lÏîÜâ ã8ó$ûÞZù¼¶§¡êIâÿˆ4ç• ×õK©ÚÖ éKoxÊîR4 “"‚HÎæÁi.ÀEOö+ÏùôŸþýš>Åyÿ>“ÿß³H(©þÅyÿ>“ÿß³Gد?çÒûöh ó¿‡þ%1Ê>eàŽzšô¿±^Ϥÿ÷ìט|iž°’Ù'…¦µ™"¸ˆ^'*+ªvº6f¡ée_ï&aˆøIÒN|/Ì­ó¯Aþý`KâI'Ô.¬të^"–Íü»¶ÓÒ%ŠÆJ&’4gŒª’Ã# f·ô“Ÿ Åó+|ëп^-ã}âψ~ ø/OøG«Ki©ésI‰¡µ¿[IÚôcÌfrW3Ír3ó °ÃÏŠW¯/QÑþ=WAÖí5p‘Gskwi ŽîÎîöìF@e=ˆä0ʰä*ô÷6Ð:$÷DÒ w±öÏ^¢¹åûkxûF‚öî ÍcNðºÛx’â¹%Ó<-8ïòÝ0@”Ã<çÅ jÞ$ñ>››m§:U‰¥Ôtö¹]䳨™ ¢7m¬CÜ+|­ƒŽfµ5=&¡¹º¶µ]×70Â6³fG ÂŒ±ç°ŸJòmOUñ"K .§ø’ÏìöúhOÄ2´¡gY§–ìç= Á9¾"_]ùó¬>"¹Öa²Ö„ñ5Œm…X[¬D¦ÆÊà(Bw½–¢Ã=ƘÒIJ$m"+¾v©a–Ç\õçuâ?øNÌaõŸ?ûaQaïöìï ÅöìÝ»';·ïÂýÞ*ߎ…”|¨ ò{¸.äóï-´™§1ÀÖ×ªÒÆ„ó~RxÝœcšî袊@QEQEQEQEQEQEQEQEQEQEQEQEQEQEàšìŽóøì¼€ŸøJ@ù¹8V ~ W½×kG÷¾<”ÅUÐŽãÊÖ½,«ýãäÌ1ïÚIÏ…âù•¾uè?߬-Wš&£¨¾¥$7v·Ò(Intûù쥕GEwиƒŠÝÒN|/Ì­ó¯Aþý`KâI'Ô.¬të^"–Íü»¶ÓÒ%ŠÆJ&’4gŒª’Ã# f¹ñÇ—¨è ¦h–?bҬⵀ¹‘‚]ÏÞv'–c݉$÷5z³4nÓX w6·v’îìîá1OnÄdSØŽC «A"¯Osm¢OqM!Âp lõê+”Ø–Š*›«kUÝss #k6dp¼(Ë{Éô  ¨¢¢’æÚ;ˆížâ%š@JFÎ0p:š–Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼ Z?½ñàÜ£þ*®„sÿVµïµàZÑýïåñUt#Ÿøòµ¯K*ÿxù3 GÀ{ö’sáx¾eoz÷é~Kn~höjèoìc6Úªó-ò“ö‚ÃÕ¤,ù=CƒÐƒI¤œø^/™[ç^ƒýúÂÕ|)¢j:‹êRCwk}"„–çO¿žÊYTtWx Ø18®|SµyzŽðÑcÄòÛÝ|eû=ÑšËC’X¡ÎæíQ¿Ú .[@ââ¾,xkVñ'‰ôØ4Ûm9Ôh:¬M.£§µÌ ï%žÄÈe»mbîá[ålwz¦h–?bҬⵀ¹‘‚]ÏÞv'–c݉$÷5z¹›ÔÔò OUñ"K .§ø’ÏìöúhOÄ2´¡gY§–ìç= Á9¾"_]ùó¬>"¹Öa²Ö„ñ5Œm…X[¬D¦ÆÊà(Bw½–¯q¢‹Œó—ºñü'f0úÏŸý°¨°‹wûöw bûvnÝ“Û÷á~ïïˆKa¨x·MÑßA»G2Û]Üë1hÓNTE0xáŽXã`¬Y~f$B{·‰EQE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ð-hþ÷ǃrøªºÏüyZ×¾×kG÷¾<”ÅUÐŽãÊÖ½,«ýãäÌ1ïÚIÏ…âù•¾uè?߬ |I$ú…ÕŽáÝkÄRÙ¿—vÚzD±BøÉC$ÒFŒà•RXdd Öþ’sáx¾eoz÷é~Kn~höjèoìc6Úªó-ò“ö‚ÃÕ¤,ù=CƒÐƒ\ø¥zòõá£+AÖí5p‘Gskwi ŽîÎîöìF@e=ˆä0ʰä*ô÷6Ð:$÷DÒ w±öÏ^¢¨xž[{¯Œ±ÿgº3YhrC«9üѽª7ûAEËc¨üC››m§:U‰¥Ôtö¹]䳨™ ¢7m¬CÜ+|­ƒŽfµ5=&¡¹º¶µ]×70Â6³fG ÂŒ±ç°ŸJòmOUñ"K .§ø’ÏìöúhOÄ2´¡gY§–ìç= Á9¾"_]ùó¬>"¹Öa²Ö„ñ5Œm…X[¬D¦ÆÊà(Bw½–¢Ã=Æ¡’êÖ;˜í¤¹…'e#g›è:šó÷ºñü'f0úÏŸý°¨°‹wûöw bûvnÝ“Û÷á~ï|[·ŠúïO·´±žãRŽæÖ]‰£I!uuQvl!päÜg¶F@=Š(¤EPEPEPEPEPEPEPEPEPEPEPEPEPEP^­ÞøðnQÿWB9ÿ+Z÷Úð-hþ÷ǃrøªºÏüyZ×¥•¼|™†#à=ûI9ð¼_2·Î½ûõ…ªøSDÔuÔ¤†îÖúE -Ο=”²¨è®ð:°bq[ºIÏ…âù•¾uè?߬ |I$ú…ÕŽáÝkÄRÙ¿—vÚzD±BøÉC$ÒFŒà•RXdd ×>/øòõá£CCÑôÍÇìZUœV°20A˹ûÎÄòÌ{±$žæ¯Vfƒ­Úká"ŽæÖîÒAÝÜ&)íØŒ€Ê{Èa•aÈ$Uéîm tIî"‰¤8@îcíž½Er›ÑECsumj»®na„mfÌŽ…cÏ`9>”5Sd’8öùŽ©¹‚®ãŒ“Ð}hÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEàZÑýïåñUt#Ÿøòµ¯}¯Öï|x7(ÿŠ«¡ÿÇ•­zYWûÇɘb>ß´“Ÿ Åó+|ëп^-ã}âψ~ ø/OøG«Ki©ésI‰¡µ¿[IÚôcÌfrW3Ír3ó °Ãí:IÏ…âù•¾uè?߬-Wš&£¨¾¥$7v·Ò(Intûù쥕GEwиƒŠçÅ;W—¨èÿ Wí­ãí Û¸/5;ÂëmâKˆ>ä—Lð´ ã¿ËtÀuPp óŸ<5«x“Äúlm¶œê4V&—QÓÚæw’Ïbd2ˆÝ¶± wp­ò¶;½GÓ4K±iVqZÀ\ÈÁ.çï;Ë1îÄ’{š½\Íêjy§ªø‘%ÐGÓüIgö{}4§‚âF™ZP³¬SË ˆösž…@àœß/‰®üùÖ\ë0ÙkBxšÆF¶ŠB¬-Ö"Scep!;‡ÞËW¸ÑEÆyËÝxþ³}gÏþØTXE»ýƒû;ȱ}»7nÉÎíûð¿wНñWMñ=÷ˆ´›»mu>ÃQ°’Ñc¸!’O´)–WM§¢€¡¿…L‡ø¸ôê(¸QHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼ Z?½ñàÜ£þ*®„sÿVµïµàZÑýïåñUt#Ÿøòµ¯K*ÿxù3 GÀ{ö’sáx¾eoz÷ë_I>¡uc xwZñ¶oåݶž‘,P¾2PÉ4‘£8eT–5¿¤œø^/™[ç^ƒýú_ÛŸ…Ú=šºûͶª€üË|¤ý °õi >OPàô ×>)^¼½GGøhÊÐu»M`\$QÜÚÝÚH#»³»„Å=»Ob9 2¬9н=Í´‰=ÄQ4‡À,}³×¨ª'–Þëã,ÙîŒÖZêÅpï4ojþÐQrØê€ÿÏñcÃZ·‰LÃðý¤œø^/™[ç^ƒýúÂÕ|)¢j:‹êRCwk}"„–çO¿žÊYTtWx Ø18­Ý$çÂñ|Êß:ôïÖ¾$’}BêÇ@ðîµâ)lßË»m="X¡|d¡’i#FpÊ©,22kŸüyzއðÑ¡¡èúf‰cö-*Î+X ™ åÜýçbyf=Ø’OsW«3AÖí5p‘Gskwi ŽîÎîöìF@e=ˆä0ʰä*ô÷6Ð:$÷DÒ w±öÏ^¢¹M‰h¢¡¹º¶µ]×70Â6³fG ÂŒ±ç°ŸJšŠ*)îmàhÖyâˆÈÛ#áw7 ÏS@ÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWkG÷¾<”ÅUÐŽãÊÖ½ö¼ Z?½ñàÜ£þ*®„sÿVµée_ï&aˆø~ÒN|/Ì­ó¯Aþý/À‰mÏÂíÍ] ýŒfÛU@~e¾R~ÐXz´…Ÿ'¨pzi4“Ÿ Åó+|ëпXZ¯…4MGQ}JHnío¤P’Üé÷óÙK*ŽŠï¡p;'ÏŠv¯/QÑþ,xž[{¯Œ±ÿgº3YhrC«9üѽª7ûAEËc¨üC››m§:U‰¥Ôtö¹]䳨™ ¢7m¬CÜ+|­ƒŽïCÑôÍÇìZUœV°20A˹ûÎÄòÌ{±$žæ¯W3zšžA©ê¾$ItÑôÿYýžßM)ฑ¦V”,ë TòÃ"½œç¡P8'7ÄKâk¿>u‡ÄW:Ì6ZО&±‘­¢« uˆ”ØÙ\Ná÷²Õî4Qqžr÷^#ÿ„ìÆYóÿ¶nÿ`þÎò,_nÍÛ²s»~ü/Ýâ³~ ÙëQ|B¹Õ`¶¸»qafš<#KPË(žC4rHQ¼ƒ;˜±E¢Š)QEQEQEQEQEQEQEQEQEQEQEQEQEQEWkG÷¾<”ÅUÐŽãÊÖ½ö¼ Z?½ñàÜ£þ*®„sÿVµée_ï&aˆøcÕ¾Ósýi–Sòžƒêj‡MmÚ=§Ì§å=½M\Ø¿ãËÔª?ÃAEW1¨QEQEQEQEQEQEQEQEQEQEQEQEvîêæ9#¸™E¹|‚¨®¶ §]\ ÏšâçåwñzÉø©i©_ø/Y³ÑüÃ}6›²ö;“ùU¸ÚÄd‘‚Aȯ1ñf¥eª?ƒ<7{cnž¿´ºŒiRÚyò0ìðˆÙÈë¶_ºÝÄgçÅ1íjñè÷²G{r޶òe•)äsX_¥–/‚^h¤xØèšhʱfKB—U—šÇöðº]UDÂé^2°)ÙÀ·=,`ƒ’ÜØlkà¿ü‘ ØMÿÒjêN¡r$›éCX/šr@êqŸqùÓ®âÙîN¦Â÷o—ÏùWi!²s‚>˜5äÚÝ¿‰äø†þ3ƒB’KM2ö˜âáìÀd¸)–w‚ò—Èa¸[ÆFxÏ;ªZø‹þ/iZm·‰%º¸þßû]œ¶RySÉpÖæ¨VvfnÒK|ôúí·Ÿó÷?ýü4}¶óþ~çÿ¿†¼–Øx‡Qñ ­…ÿŠÃÒj(%¸¸†HgÇÙ.U,ècó¿Í€3*‘ÀÑ^|Bÿ‰Ä‘Üj ªGè6ÆÖgFÏ’a-„0P áÎüá9À´I©OÆ’_È#mZb œÏ'Ÿ 4ÿ¶ÞÏÜÿ÷ð×™_iɬ?…SL»ñ+ZŬÊ÷7Ïñ/Øg_½*U,ʹàeˆ? çÞúÊë½RÐÇoÚLÖ“ºÊë3¬†eŠ&™U2¨Úw.9 Û~Ûyÿ?sÿßÃ_?ø†y§¹ñä³ÎdøJ@-!,Ø6 r{ü+¹ð´~&‹]Óï/nµ‰’î÷TŠê„>LP¤ò}˜…Ú6|ª»[øƒwã´q'Fåñ_B?éÊÖ½,«ýåz3GÀ{v›yZ‹)f‰gµvŽE$jÏÚ-ÿç¼_÷Ø®3Ç -¼?§Þ[ÂévdHœ[Í>¼*Ž}+€moVþ?æüë¢(c/U6®cíeKÜ=ËíÿóÞ/ûìQö‹ùïýö+Âη«ùŸþú¤þÚÕçþûê´þƇóÖeØ÷_´[ÿÏx¿ï±GÚ-ÿç¼_÷د þÚÕçþûêí­Wþçÿ¾¨þƇó~õ™v=×íÿóÞ/ûìQö‹ùïýö+¿¶µ_ùÿŸþú£ûkUÿŸùÿïª?±¡ü߀}f]uûE¿ü÷‹þû}¢ßþ{Åÿ}Šð¯í­Wþçÿ¾¨þÚÕçþûêìh7àY—cÝ~Ñoÿ=âÿ¾Åh·ÿžñßb¼+ûkUÿŸùÿïª?¶µ_ùÿŸþú£ûÍøÖeØ÷_´[ÿÏx¿ï±GÚ-ÿç¼_÷د þÚÕçþûêí­Wþçÿ¾¨þƇó~õ™v=×íÿóÞ/ûìQö‹ùïýö+¿¶µ_ùÿŸþú£ûkUÿŸùÿïª?±¡ü߀}f]uûE¿ü÷‹þû}¢ßþ{Åÿ}Šð¯í­Wþçÿ¾¨þÚÕçþûêìh7àY—cÝ~Ñoÿ=âÿ¾Åh·ÿžñßb¼+ûkUÿŸùÿïª?¶µ_ùÿŸþú£ûÍøÖeØ÷_´[ÿÏx¿ï±GÚ-ÿç¼_÷د þÚÕçþûêí­Wþçÿ¾¨þƇó~õ™v=×íÿóÞ/ûìQö‹ùïýö+¿¶µ_ùÿŸþú£ûkUÿŸùÿïª?±¡ü߀}f]uûE¿ü÷‹þû}¢ßþ{Åÿ}Šð¯í­Wþçÿ¾¨þÚÕçþûêìh7àY—cÝ~Ñoÿ=âÿ¾Åh·ÿžñßb¼+ûkUÿŸùÿïª?¶µ_ùÿŸþú£ûÍøÖeØô½{âf…g«Mgý“⻓o¶&–ß÷’D̪¶¸ 2d ‘ƒTájèôñ§þ7¿ün¸/í­Wþçÿ¾¨þÚÕçþûêìh3¬Ë±Úê´[:æÚ=ÆAå…ÑKxf÷G?»©|âk?üð}ޝ§ër^&Ê7¶²Òn.d‰£·PâA,‚@Ã`“œƒŽûkUÿŸùÿïª?¶µ_ùÿŸþú£ûÌÃë2ìw¿ðµt?úøÓÿ ›ßþ7Gü-]þ€>4ÿÂf÷ÿ×ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæaõ©v;ßøZºý|iÿ„Íïÿ£þ®‡ÿ@á3{ÿÆë‚þÚÕçþûêí­Wþçÿ¾¨þƇó0úÔ»ïü-]þ€>4ÿÂf÷ÿÒŠÚë øÌܳyÿÆëƒþÚÕçþûêë:¡ë?ýõGö4?™‡ÖeØïákh?ôñŸþ7Ÿün¼ÿKûG‰¯¼Oo§Ù^@ú¯ˆîÕ/m$¶‘£[;pX¬Š¤ £ ô%N)ÿÛ§üÿOÿ}Wªü;²µM HB>Ùr­æÌI,ØcÇ=QR„rõíbîÞˆ¨ÍÖ÷YÿÙgwenhywfar-5.12.0/doc/dialog/images/gtk2-1.jpg0000644000175000017500000005047313142134462015672 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀë?"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?úNÒÂ+èŒ×^3þ­<Ì)¦°Ç‘_,ø“øµaèQqü«Òe]Nî{i²"µµ½ÒM$€ mÊ=Ê=ëÖÎò¹uUÏ­´oõ"„’=£ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¸OÚWÔôO†w†“rÖWKcšÃ{¨•‡Ð© ýkøcãÿ=Ÿ‹¯|Uiµ™â½>}šê=’#U]Ñ(èçæ=ëäÝY§k¿¼ÙB6½]þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯Ô˜þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯¸ø¹ã 3Bð•‡ö™­kºÆ’ÚƒKlf’9]±¦D¬[æÀ žâµõ‹:害 5׆ Ò4MJÞÉæ»¼Ê#–vÃBZ%"6^.bGAÍ?m/æbök±ë?غgüùZßÊ?±tÏùò´ÿ¿•æ¿|KãÜø²?Ï£\G§k×–Pˆ‰bòä&€cî³|ǽz†éœ_÷ѪU&ÕîÄãЇûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}|óîþñZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿•qŸöæ°ÓôHïîP ð‘ç¦æ=°É­|ÿÓ8¿ï£YÞ•—CYAi¤g˜÷.IÎkåx§ˆêdÔ©´ß¼Þ½­ë§S¯ †fî¶*N¶V¢kZv !Ú³ù»âјcoÔŒ{֕Ι£[[Isqmc1©wv—@êjo²Ühwq]ÑŽwjóÔno¾i&` m©i’KÅ’*gþøJóò.0©¡^nïÙ«ëùi¡–gJ8:.ªW²gUo1¿í:WƒÖkCÊKqs䙪® ǦqVô)t-Râk6Ó#³¿€f[[†Úàx`á—Ü®+ukð ,ûTQŠæ¼K«\Ûø¯Ã—èC]è­ÏmñÈáXu$ÔeÜ_W‰…&Ûævûû[õ¹ò<úëÆŸ.îÛ#½ñ=Π­¼Ri‰w{tÅm­-Žé%#©êQ݉VUƧ%„?jÕ| ±Ù™ÖðO$cÔ¦@ï´“õ®/Ç:•õ¯Å RT`¼0Àq±” qÿ-Tÿá%ÖyÝxX ¨¯œU§UÁ7¡ûVYÁÐÅa!YÙó+õëÚß­ÏeÒìü=©éðêX\Z룑 éôê+*_§‚õU™¦šM ‰I­Ão16 0HÇÍÔtÁ=ñ\?À By.¼I¦SkÄsÆ ÀF“~à=¾PqS|[Фù#æáz­}\þ· ÔÙ£á³*ÁâgI}—kžŸ¡È²?º‹Ü×ñ?Àíâ9¢ÕtϱGªA”V䆿<çcãA$†2zçŽÛD‘ãðÜ2E.× «¹8 ùüåXzgˆüU©èöú‹Ewn'·­³eYehòÑÄéÈù(Σ̓iq™pxéáqT÷Lιá~‡‹ÉàË1µ°ð&‘§JNÓ{-úË´«’JõŸ† ƒÁ~6"D»½¸Íyrxód>ƒ°mOªxÀy¾M¥‹ã—¿V•wcÍÙœBq¶ùë2Lnò×Í'Õ<`<ß&ÒÅñ¿Ëß«J»±æìÎ!8ÎÛ|õÇ™&7ykæÞ/;Äbíí]íæWÕí³,jzvŸªZ=OM±½¶,®a¸ŒH…”†Sµ²2z* E°Ôîõ;Kµ¿¼æêæ%Ÿý÷-ø“I>©ãæù6–/þ^ýZUÝ7fq ÆvÛç®<É1»Ë_4:׈âÔm ¹‚5·¸¸h„°ÞO+*;`!Ú¿,pýæ ºG]Īy¼_[þè{1“xsÃó^µô¾ÑäºyÖå§kd2Uv,…±ÁIPÝ@8éUô¯xKI–it¿ è/<g•­¬£ŒÉ÷Ð2¾Ý+œøSâMFó q¨í¿¹mWS =ÃÈÎ@¾œ(Îî@PJêÿ¶ßþ|m?ò'ÿGÖÿºÁ÷)\xÁWT:Lþ ðäš|4Ú›¼¨Ý¾ó*íÀ'¹jI|á u =F_ hyb‰¤æÊ2ð*}ÅCŒ¨^ÀtíV¶ßþ|m?ò'ÿGöÛÿϧþDÿâ©}m({Ü’ÇCÑl5;½NÇDÒíoï9º¹†Igÿ}ÀË~$Ö‡ý³þú¬¿í·ÿŸOü‰ÿÅV‰¯ævöÎ?ûêûgýõYÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñT}sÈ>¯æjÛ8ÿïª?íœ÷Õeÿm¿üøÚäOþ*í·ÿŸOü‰ÿÅQõÏ ú¿™©ÿlãÿ¾¨ÿ¶qÿßU—ý¶ÿóãiÿ‘?øªÀðo¯ævöÎ?ûêûgýõYÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñT}sÈ>¯æjÛ8ÿïª?íœ÷Õeÿm¿üøÚäOþ*í·ÿŸOü‰ÿÅQõÏ ú¿™©ÿlãÿ¾¨ÿ¶qÿßUÆx“Æ·šwˆü1¦A¦Øõ[é ›ÌÊ¢ZÍ(Ûóõ܋Ϧ}r7ÿ¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú£þÙÇÿ}V_öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüU\ò«ùšŸöÎ?ûêûgýõYÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñT}sÈ>¯æjÛ8ÿïª?íœ÷Õqžñ­çˆ<9ý§u¦ØG!¾½€*y˜ Ô±'ñòv¢ä÷9éÒ·ÿ¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú¬[˜õ&êk½Þ È&%å³iç©Bxç©ÔßÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñUÅ¥‡ÇÒöUátiN¦ïszô¾:ñTGK‹K‹ÃÖRq=̳#¾ÞûIÉúà}zWE‡tؼ/‡b·T³ŠŠyGSèð¹¦7 KÙS©§õçùœÇÿÅá ­žT»¾¹—ϼ¹‹æVù× ÿ~¼WWÔí´ã£k—:¶Ÿ¬ƒ¤éû4·Ö¤ŠñIÿ–¶á%”NÒn]ËlÇšàæ½«I9ð¼_2·Î½ûõÎi±øžÇI¶´m?H¼žÖßÊYŸRœy¬«( KÇ#Û`'s»2L³˜Á—ÍÅÿ^¦´?†7Ô|oâÍ'ÄÆâ]4,uA.,± müâ<"¿šrݸw]£èë>&Õô+ϘµÁ<ñkVÑ¥µÃGþƒk$V»§ˆÚ€³€I,sógЦ›ÄJÒ´FíóˆËêR)|yÛ7bŒâ õÇ™&7ykæ¬óøŒ D:N’øßåïÔ¤]ßë¶ggm¾zãÌ“¼µóyŒ¿jSjÞ»¸×/íÓÆ×v׈?p?‰¤…¶£J°ÁzwáöŸªøB„Z¨±ñ žbÍö¦…3z#,å$+”*!€Þwyrv²Íâ$YßHÒ.ÿ(6¥"nÇ›³8€íÎÛ|ã8ó$Æï-|Øî-µkÝ[NšêÃOŽ +Æ™dK¯1ðc¹ˆ¯Êv¼'äe?<‹¸ªb`4ð2jr|*ÔcÑgŠ I¯µuµ’LmY õÆÒrëêÐôªqxº÷J4³ÕÛY–åRHõ·B1<ÐÁˆòÛ H# NÁê>xkR“À’Øê~»x¦Ôu"ð\Y±Y#{ÙØeXr¬¤Ø‚+a<§&žúzx:ÝmA+Â4ᱜ #oÞ¿ZàµøŠ@M¼J¿ÿ‰8–ŒÈ‰çÞK ¨R2sÁÁ©eâÍfçÅéÑiu¥­êØÜÈ‘IÞZ³K»î…‡Êy+ógµvÁ°7³>ŒÛIBðòì$ Ùlq†ûÙ\`ç¾zÐ#“øyw©½Ö¹§ê’Ýy–wH"†êD–X£h•†d@Ûˆ‘ÜôÆWÃäÔäøG{‹ËÅšÍÏŠ%Ó¢Ò<ëK[Õ±¹‘"“!¼µf—wÝ ”òWæÏj¥ñÅwZoˆ4Ë k››(!½³7N¶¬âäK2©ˆ6Ò0qls’€¼+¼ ¶„Z€ð¤bòUŽq§èa@m¹AWnt+Ë•E¹Ñ§™QÖEZ– êr¬28 €AìE8_Èùàû ]éÅCãKÍ[J×W¼›Rÿ„zaËiÓD »ïo1åGu §Ý$€<Ÿø^ŸÆž¸ƒDÔ¥†ÛQ¹yäKWe‰M”ê 0 ³“ÜÞ¶o¼m¨G¨ÞøR;›Èöìž]?t‹´å~b¹àò=JyÕçŽu‹­Z¿G™4ø­/ÌsF$áh7…-!Ib‡îò§æä‹—¾)×t¹|E,ÂÞö(u¨4ë–&Ý›¹¶òÀyŒqŒ–8Èc¸oÙµÕÍÓxFžéY.$:p-*°Ã;~`G={Ô—^†ê[©®|-Ò] ŽåäÓÃ4È1…rWæƒè(œ‚ïÄ:Ï‚uA¿ö^´b¸‚ÒGVE2m")@`JŒ•8 àƒ×©_^\¸Ôô½@Ü›û …YŒ·Kp¸xÕ—c„N0zö ×I„R-ô¨|5²Â@ÂKe±ÄNïeqƒžùëNÒ|,ÚE©µÒ¼:Ö0.c·³1©cÕˆ“ÇZyçÃäÔäøG{‹“ÿß³^añ¦x^ÂKdžšÖdŠâ Axœ¨p¬:©ÚèØ=˜„W¥•¼|™†#à='I9ð¼_2·Î½ûõÌø›Ä¶zÕ¾‹¥ÁdnÒ[ë‹‹ÙŒpÛÁ*’p bKtà¬Ià½l‘ÏákfX¦õ Et+ÀÍ‚=Ee뾇P¾³Ô,¯®tkÛ8¤‚)¬c‰G”ä3ÆQÑ©eVéFA9æÅÿ^¥Pþ(ZxÖÄÇ¥E9†òçP†iÕô©~Ól"ŠEI$óp *ï\ç§#’9,†ö÷LÓ°´?dòËù!6l̈ãÇ8Ïh ¢«[YƶÃ|"Õ%‰6}¢öÖ‘†Içä“…rx©>ɧÿÐ+KÿÀøš@KEEöM?þZ_þCÿÄÑöM?þZ_þCÿÄдT_dÓÿè¥ÿà?üMdÓÿè¥ÿà?üMKEEöM?þZ_þCÿÄÑöM?þZ_þCÿÄдT_dÓÿè¥ÿà?üMdÓÿè¥ÿà?üMKEEöM?þZ_þCÿÄÑöM?þZ_þCÿÄдT_dÓÿè¥ÿà?üMdÓÿè¥ÿà?üMKEEöM?þZ_þCÿÄÑöM?þZ_þCÿÄдT_dÓÿè¥ÿà?üMdÓÿè¥ÿà?üMKEEöM?þZ_þCÿÄÑöM?þZ_þCÿÄдT_dÓÿè¥ÿà?üMdÓÿè¥ÿà?üMKEEöM?þZ_þCÿÄÑöM?þZ_þCÿÄдT_dÓÿè¥ÿà?üMdÓÿè¥ÿà?üMKEEöM?þZ_þCÿÄÑöM?þZ_þCÿÄдT_dÓÿè¥ÿà?üMdÓÿè¥ÿà?üMKEEöM?þZ_þCÿÄÑöM?þZ_þCÿÄеàšìŽóøì¼€ŸøJ@ù¹8V ~ W´ë–¶+¢ß2išj0¶†K(•Úy.A÷¯ñYÿ‰·ÄA¹GüV ÁÿÇ¥µzYWûÇɘb>ÜlN|7¦üÊßñ2³è?é½8º–Pä<1“úΛbsá½7æVÿ‰•ŸAÿMëø£¸ºÇö†…麃šÌpMm r— öF%o;ªõ;NÁ®|_ñåêUáÄô*+ÉüGq¬hÞ%³Ònu_}^0g‰I¤ŒØÜ;¢²)b¾dhÇhÊäãhé:ߌ­t›¨.á×廹³´:k.Ÿ#1ê`í!TÄry>K8m½x⹬jzí2)b—w•">ÖÚÛXCï\‡Â›&Ó´½JÊeÕá5[Öu¼IBm{©6qµƒ#+„òyæ«|)V×þ)²Óô{Í.Ñõo´ZÇ&“5œM¶2›ÑTüèüxÏCš@M¬iÚˆþ/iž‡Å:Þ…búÝü‡LhCÉ$wñ®|ØäÄÏÐÓž+¢ÿ…EsÿEWâýþ°ÿäZ¡¢ÉÅé_ö(êúYe^»V’°™æ?ð¨®èªü@ÿ¿Öü‹Gü*+Ÿú*¿?ïõ‡ÿ"×§QNÈW<ÇþÏý_ˆ÷úÃÿ‘hÿ…EsÿEWâýþ°ÿäZôê(² žcÿ ŠçþНÄûýaÿÈ´¢¹ÿ¢«ñþÿXò-zuYÏ1ÿ…EsÿEWâýþ°ÿäZ?áQ\ÿÑUøÿ¬?ù½:Š,‚ç˜ÿ¢¹ÿ¢«ñþÿXò-ð¨®èªü@ÿ¿Öü‹^EAsÌáQ\ÿÑUøÿ¬?ùøTW?ôU~ ßëþE¯N¢‹ ¹æ?ð¨®èªü@ÿ¿Öü‹Gü*+Ÿú*¿?ïõ‡ÿ"×§QE\óøTW?ôU~ ßëþE£þÏý_ˆ÷úÃÿ‘kÓ¨¢È.yü*+Ÿú*¿?ïõ‡ÿ"Ñÿ ŠçþНÄûýaÿȵéÔQd<ÇþÏý_ˆ÷úÃÿ‘hÿ…EsÿEWâýþ°ÿäZôê(² žcÿ ŠçþНÄûýaÿÈ´¢¹ÿ¢«ñþÿXò-zuYÏ1ÿ…EsÿEWâýþ°ÿäZ?áQ\ÿÑUøÿ¬?ù½:Š,‚ç˜ÿ¢¹ÿ¢«ñþÿXò-ð¨®èªü@ÿ¿Öü‹^EAsÌáQ\ÿÑUøÿ¬?ùøTW?ôU~ ßëþE¯N¢‹ ¹æ?ð¨®èªü@ÿ¿Öü‹Gü*+Ÿú*¿?ïõ‡ÿ"×§QE\òûÏ ·†¼3ªZɯë:äŽ&?hÔä¤Uò“HŠ%ÝÏ<’ÇüVâmñnQÿƒpG?ñém^ýñþAZ‡ýs›ÿD¥xŠÏüM¾" Ê?â°nçþ=-«¿+ÿyù3,GÀ{‰Ï†ôß™[þ&V}ý7©*;Ÿ é¿2·üL¬úúoRW.3øòõ*‡ðÑöÖóÍÓA’[¹’eÆÅJ–SØíf‰êZ(®cP¢Š('MÓ.¡ø±iâ£%²Ù[hW:{+»i%ž Pð œãï.3Î;¿í¨½`ÿ¾ßÿˆ¯2ñ‰õ;YøoDðÿˆoîle¾ÙkuoÈ£tF$Ìè>ô©À$òxâ›ý±ñþˆö¿ÿƒ}3ÿ’*“b=?ûj/X?ï·ÿâ(þÚ‹ÖûíÿøŠó툟ôGµÿüéŸü‘GöÇÄOú#Úÿþ ôÏþH¢ìOþÚ‹ÖûíÿøŠ?¶¢õƒþûþ"¼Ãûcâ'ýíÿúgÿ$Qý±ñþˆö¿ÿƒ}3ÿ’(»Óÿ¶¢õƒþûþ"í¨½`ÿ¾ßÿˆ¯0þØø‰ÿD{_ÿÁ¾™ÿÉl|Dÿ¢=¯ÿàßLÿäŠ.Àôÿí¨½`ÿ¾ßÿˆ£ûj/X?ï·ÿâ+Ì?¶>"Ñ×ÿðo¦òEÛ?èkÿø7Ó?ù"‹°=?ûj/X?ï·ÿâ(þÚ‹ÖûíÿøŠó툟ôGµÿüéŸü‘GöÇÄOú#Úÿþ ôÏþH¢ìOþÚ‹ÖûíÿøŠ?¶¢õƒþûþ"¼Ãûcâ'ýíÿúgÿ$Qý±ñþˆö¿ÿƒ}3ÿ’(»Óÿ¶¢õƒþûþ"í¨½`ÿ¾ßÿˆ¯0þØø‰ÿD{_ÿÁ¾™ÿÉl|Dÿ¢=¯ÿàßLÿäŠ.Àôÿí¨½`ÿ¾ßÿˆ£ûj/X?ï·ÿâ+Ì?¶>"Ñ×ÿðo¦òEÛ?èkÿø7Ó?ù"‹°=?ûj/X?ï·ÿâ(þÚ‹ÖûíÿøŠó툟ôGµÿüéŸü‘GöÇÄOú#Úÿþ ôÏþH¢ìOþÚ‹ÖûíÿøŠ?¶¢õƒþûþ"¼Ãûcâ'ýíÿúgÿ$Qý±ñþˆö¿ÿƒ}3ÿ’(»Óÿ¶¢õƒþûþ"í¨½`ÿ¾ßÿˆ¯0þØø‰ÿD{_ÿÁ¾™ÿÉl|Dÿ¢=¯ÿàßLÿäŠ.Àôÿí¨½`ÿ¾ßÿˆ£ûj/X?ï·ÿâ+Ì?¶>"Ñ×ÿðo¦òEÛ?èkÿø7Ó?ù"‹°=?ûj/X?ï·ÿâ(þÚ‹ÖûíÿøŠó툟ôGµÿüéŸü‘GöÇÄOú#Úÿþ ôÏþH¢ìOþÚ‹ÖûíÿøŠ?¶¢õƒþûþ"¼Ãûcâ'ýíÿúgÿ$Qý±ñþˆö¿ÿƒ}3ÿ’(»Óÿ¶¢õƒþûþ"í¨½`ÿ¾ßÿˆ¯0þØø‰ÿD{_ÿÁ¾™ÿÉl|Dÿ¢=¯ÿàßLÿäŠ.Àë|ksΉ|èèÌa™ˆ\à-@äýÓ^â³ÿoˆƒrø¬‚9ÿKjõq­Ýø_SŸ\ðÝχåT–$¶¹º†iÃoÌ,êæ|ÙÈ9‚|ŸÅgþ&ßåñX7sÿ–Õèe_ï&cˆøq±9ðÞ›ó+ÄÊÏ ÿ¦õÊxÛÅ“xkXBðyö1h–©ƒþ›Öv·áíZv}NÏÏf²žÀŸ1×÷˜Ì©ò‘÷ŒIÏQ·‚2sÏ‹þ<½J¡ü8œüÞ9¼‹RGo Î5io–Ñ-ÍÒl­ädgؘ Ž7 ¶¬ntÍBôi×Q›`yâf]ÁäžXY8ã*ð°'¡íWª[“œméZ.Ÿ¥‹Å±IâKÉžySí22‡vfrŠXˆòÌÄìÇ'5WžÑü/mömo¢ƒnÕŠmFâádŸ•ev I$’0OzƒDÿ“‹Ò¿ìQÔ?ô²Ê½v¼I–(¿h)¥‘#Sá-@e˜ŸµÙW¬ý¶Ïþ~àÿ¿‚ª; “ÑP}¶Ïþ~àÿ¿‚¶ÙÿÏÜ÷ðUžŠƒí¶ó÷ýü}¶Ïþ~àÿ¿‚€'¢ ûmŸüýÁÿm³ÿŸ¸?ïà  è¨>Ûgÿ?pßÁGÛlÿçîûø(z*¶ÙÿÏÜ÷ðQöÛ?ùûƒþþ žŠƒí¶ó÷ýü}¶Ïþ~àÿ¿‚€'¢ ûmŸüýÁÿm³ÿŸ¸?ïà  è¨>Ûgÿ?pßÁGÛlÿçîûø(z*¶ÙÿÏÜ÷ðQöÛ?ùûƒþþ žŠƒí¶ó÷ýü}¶Ïþ~àÿ¿‚€'¢ ûmŸüýÁÿm³ÿŸ¸?ïà  è¨>Ûgÿ?pßÁGÛlÿçîûø(z*¶ÙÿÏÜ÷ðQöÛ?ùûƒþþ žŠƒí¶ó÷ýü}¶Ïþ~àÿ¿‚€'¢ ûmŸüýÁÿm³ÿŸ¸?ïà Sâü‚µúç7þ‰JðŸø›|D”Å`ÜÏüz[W¾øõÒMýãuu1Í‚§ þé+À¼VâmñnQÿƒpG?ñém]Ù_ûÏɘâ>Ü´ô’_ Úžñ]A0ÞJ©ØåðHŒíÇCMÙ¨Ô/ÿfÿã56’sáx¾eoz÷ë™ñ7ˆ/lõ«}K‚ÈÜ=¤·×³á·‚6U$àÄ–éÀX“À—üyz—Cøhè6jõ ÿÀ™¿øÍ5ú…ÿàLßüf¹«Oؘô¨§0Þ\êÍ:¾•/Úm„QH©$žn]ëœôärG%‡4;±RúÜÏöf·Û3Çq Ž)t±Î äd Œóš.ÍCþ¡ø7ÿ£f¡ÿP¿ü ›ÿŒ×5¨xïGµ¾{·Ô®îSí%ã¶µ.UmÌbVú5=ÎpÃ¥iоծÏÝ—þÏÿÆhûV¹ÿ?v_ø?ÿ¦ÑEÀwÚµÏùû²ÿÀÙÿøÍj×?çîËÿgÿã4Ú(¸ûV¹ÿ?v_ø?ÿ£íZçüýÙàlÿüf›Eßj×?çîËÿgÿã4}«\ÿŸ»/ü ŸÿŒÓh¢à;íZçüýÙàlÿüfµkŸó÷eÿ³ÿñšm\}«\ÿŸ»/ü ŸÿŒÑö­sþ~ì¿ð6þ3M¢‹€ïµkŸó÷eÿ³ÿñš>Õ®ÏÝ—þÏÿÆi´Qpö­sþ~ì¿ð6þ3GÚµÏùû²ÿÀÙÿøÍ6Š.¾Õ®ÏÝ—þÏÿÆhûV¹ÿ?v_ø?ÿ¦ÑEÀwÚµÏùû²ÿÀÙÿøÍj×?çîËÿgÿã4Ú(¸ûV¹ÿ?v_ø?ÿ£íZçüýÙàlÿüf›Eßj×?çîËÿgÿã4}«\ÿŸ»/ü ŸÿŒÓh¢à;íZçüýÙàlÿüfµkŸó÷eÿ³ÿñšm\}«\ÿŸ»/ü ŸÿŒÑö­sþ~ì¿ð6þ3M¢‹€ïµkŸó÷eÿ³ÿñš>Õ®ÏÝ—þÏÿÆi´Qp+ê‘êÚ…ŒÖÒÜiÇ̉£ ×S6ÝÃÇ“^!âyMK⣮Öñs0Èäƒgk^ï^­ÞøðnQÿWB9ÿ+Zôr¯÷“0Ä|»[$søZ–)£}BÑ] ä03`‚QYzï‡aÔ/¬õ +ëöÎ) ŠkâQå9 ñ”td*YUºdFNuìN|7¦üÊßñ2³è?é½I\ØÏãËÔªÃG5¤x3KÓš3ÝÝ4v÷°Hgdý÷ÚçYæg  dºñ·F:c>?‡v"ÐE.·¬O41[Ceq#CæZ%¼¢XÂb0­ó*ä¸bÁ@5ÚÑ\ƧŸ·Ã»˜õè.¬üKªÁ[_­ÝÈhMÄ’\ÉnÄbØ7@ ¸ã5·âYjÞÓ´µ CL°°hŒqÚyL$X×’ QàÀ8#’£5ÒÑL ÖÖq­¤0Þˆu9b@Ÿh¼µ…äaל ’NÉâ¤û&Ÿÿ@­/ÿ!ÿâjúHb±‘",Ò¸%£V8qÔ{šgÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáGÚåþä÷á?€)ý“Oÿ V—ÿ€ÿñ4}“Oÿ V—ÿ€ÿñ5sírÿrûðŸáQÝêMmk5Ì‘ÂR$g`¶ñä€3Ç_ìšý´¿ü‡ÿ‰£ìšý´¿ü‡ÿ‰«¦êáNÙ!†724’§¸8~F“írÿrûðŸá@Úå­Šè·ÌšfšŒ-¤!’Ê%`vžA }ëÇÜlN|7¦üÊßñ2³è?é½q_Ãm)VB7·Í#Aþ!é^˜ÿò‡þºÉü’°fðdž¦ÖNµ7‡´‰52Êæñì£3–PNünÈsÐ@u§|J4\Ôì4û=;S´Žò{˜ášx탬eb}¼©Ã12°cÖ ³ñŸ‰­4{5»K[ûíGZÔ,­äŽÖFG׿DåÎØ‚€1ÆI$ƒžêçÃ~¹6hдÉ~Š–›íPù ¸Ú©ÇÊéIsá ÜÇsú•"]L'¸ h‡Í”gÜrÃ'æ<òh‡áox‡Yñ°¹Òm´È­ôë{«Ä™œÍ¾W6 ÀÀÙnpØÆzrÿ5=[Þ6ˆ[kZÕÌWÅ$V›ÔÄ%’éc…Œ±@ äð23šôý?LÓtá‹ >ÒÓ÷Iî!Tù±Uà}ÐY°: ÇÔÓu'JÔDƒPÓ,îıy2yð+ï;¶ŽW tÈ g ªü@Öô7O—PÐáŽâúîKÖFh@|¯—pÊß2Ûàüää¡Úìæº_ë—ž!ñD•Õ¤¶v:·µXâ*è µ¼˜Îy‘99'œ` KoxzÚÙ­­ô-2(^‘mPÎ]Ç*ÄGCÞ¬[éZ]¶¡.£o¦ÙÃy*,r\G¬ŽŠ X 00=…pKâýxB Òí,å“fµu#ÞÌí…´½ò•ÑüA¸þè®0u¼K¬]Þ¯„­¬ï&Ò­µéñ5Ä{|Å_³¼«–b gÀl`GNšV–‡)¦Ù©Û*d@£å•·Ê:tv›ûÇ““Eö•¥ßéŸÙ—ºmÍŽ~Í,*Ñ¿tm#`cÓÈëzÖ«áÙŸGÓncÔ¤µÓ®u9§Õ&˜ã*«ß¬“Â^’ÆÞÆO éklÌðBÖq”›– cžþ½ë@éÚy‘¤6¥Úqr[É\™B„gx( »®çGÅž%¼Öt¶²þÍ‚eÓµµÁ<®-ÞK;¸a,¸ç’ýÐç9Æ Íâö«-Ž£o“w¨C§ÛíJò[¬¡Èû¸€Û×h/Ÿá®³PðdžµD¿ðþ•t±´Œ‚k8Ü)‘·ÈFGÛæoïNja¡hƒXÈÒ,¤«´]ý|à1·ñžœ}8 F7Ãé¯ÍljloõK­KìÁ‚®BØm­äÁت¿zFèZê«/Fð燴Yç¸Ñ´-/Mšãýt––‘ÄÒ¼TÔ¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªZ÷ü€ïÿëÚOýÕÚƒP·k» ‹TtFš&Œ3çh$“ŒœPûFÚüN]2}[á–»%½íœŽgÓ…¤}©2yC"1Þ?»œÓœgOá‡ì¼% Ÿ5ïí]nãJ‹1¥¨#ˆÇ–«¸Žäçžœ žÚõÖKÉäC•iƒê ¨iˆó¨?ä§üCÿ°™ÿ·ÕÇø¬ÿÄÛâ Ü£þ+àŽãÒÚ»?ä§üCÿ°™ÿ·ÕÇø¬ÿÄÛâ Ü£þ+àŽãÒÚ½«ýãäÌq?î6'>Ó~eoø™YôôÞ¤¨ìN|7¦üÊßñ2³è?é½I\ØÏãËÔªÃAEW1¨QEÏx§Áº'‰n¢¸ÕŽ¬Í lmµ‹»hÀÎIÙª»vÆH€1‘ÿ §Á¿óÏ_ÿ“Qÿãôš¯‡4Ï|oÒtMlß½€ðÝíוk¨ÜZn•.mUX˜] adq‚Hùu¿ð¤~ÿÏž¿ÿ…>§ÿÉI\W9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH£þÿùó×ÿð§Ôÿù"ŽV9?øU> ÿžzÿþšÿ£þOƒçž¿ÿ…&£ÿÇë¬ÿ…#ðïþ|õÿü)õ?þH­;-"ËÂÚ ¦•¡ý¦ÞÕ&œü÷RÍ#3«I#3¹ì €(jÁs€ÿ…Sàßùç¯ÿáI¨ÿñú?áTø7þyëÿøRj?ü~»ÿ¶ÞÏÜÿ÷ðÑöÛÏùûŸþþC8»øÂÚf·s£[Þ$÷¶{'’çP¸ºfXÖBŠ ÎÄds¼kÍüVâmñnQÿƒpG?ñém]§Ú'¸øŸñÏ4’ìðö˜«½‹m¾8è2IüMq~+?ñ6øˆ7(ÿŠÁ¸#Ÿøô¶¯G*ÿxù3 GÀ{‰Ï†ôß™[þ&V}ý7®â–³©hšØ¾Ó§Ù-·„õ›¸Ñòc2Ç%‘FeÎ2>µßØœøoMù•¿âegÐÓz’¹ñÇ—©T?‡ËuÏëº?ˆaÐuYZÃ&«2jRÚ¢yqIg<»pNÀ|È€ {0qëV‰:„ZEÛêÚ|7mgi&›” öÝ÷SDÒÆ¤å•’8ß;CƒÐæ½FûN³¾¹²¹º‡Ì–ÆVšÜî#k´o8–F9ëV°2GCé\ƧðÆþéô=\]ë2ë7Öš•ò=±d3Bê`ˆGnP»C`cÀÅdü*Ô5›Ÿø‘5«mV ©¬¬®¥Šä*ÝÙ§8Àb…  €7ye&½2Šç4où8/þÅCÿJì«øS¯ÍÂýóEñ‡fׯmô[{‰#Õe¿¹íÛÅ+Ï ¾ÿxÙÆ0ÜW[¤Ë_´N”ÒÈ‘©ð– 2ÌÏÚì«Ö~Ûgÿ?pßÁU„ÏñÿŠüEioâÿÿÂS$·Ñia&–Öìñ˜mƒ–˜!ó¡›pnBìå@!Šæîµãívæi> Ò.­ÚÖkK«‹‹XâÕ|É]e×(@"«rÙÈZõáwb°¹¶ x'zäÐnìX‚nm‰SK¯B9o˪x‹BÕnµëõ¹·¹¿¿²ŠÚ¼‘ 0ÝOùÔî,UNGNäŸ:¥ï…<]ªÛécMSy¨Çˆ˜ü–ù¹” Q¹˜ó‘÷J€Æ¾ŠûmŸüýÁÿ#]ذÃ\Û0Îyu 3µñŸˆo¼w‡šîÎßMžÿhA˜ôÛ:z?Ügóƒ÷Q³ɨ4mnáÿe»bMquëè|0ò\K3«²Î¶€¼R•9,!·Ù'<ת}¶Ïþ~àÿ¿‚¶ÙÿÏÜ÷ðPÍâOGã×þѶ:]·‰àÑ–Ëì£-¶È\ÉœîK‘Ž0 䊮tø“©[x÷Yn™›lú:\jOg„´¾{«PÒ©ƒÉ(»HÆâO¤ý¶Ïþ~àÿ¿‚‘®ì[®mŽF]x4åÃÆú¤~0u¶­jûutÓâÑ]7\Ifm„Ÿl,O˜y%·ýÍ ©ù¾jÅ‹Æ^>‹Áï®Í¯ØÊñx2´CNU .Æf·Îî#`¸ÏÞ@⽯ív;·}¦ßv1Ÿ1sŠ_¶ÙÿÏÜ÷ðPÍâÍSFñ÷ŠaÓµ{{Û³â{{x¼¼¸ñŸˆ­5]hö—÷¯dÆØÚ^I&ÑfJ8?3`s¸mmäƒÇ³ý®Çpoµ[äp˜([»ÎÛ›q““‰“@¿ÁÌ[:êöÚ’I<òÆmïþÙ²<¬Ën&Éßå© œÿØTm³ÿŸ¸?ïà£í¶ó÷ýü=Ûlÿçîûø(ûmŸüýÁÿOEAöÛ?ùûƒþþ >Ûgÿ?pßÁ@ÑP}¶Ïþ~àÿ¿‚¶ÙÿÏÜ÷ðPôTm³ÿŸ¸?ïà£í¶ó÷ýü=Ûlÿçîûø(ûmŸüýÁÿOEAöÛ?ùûƒþþ >Ûgÿ?pßÁ@×5¯¨ƒþºÏÿ¡Ö÷Ûlÿçîûø+šñ5í½µ£OwK$³”/ PÃlõê*d4xÇ9ñ4Öz¯€ö‚Ä”ÁeÏQ\ÿü-χÿô>x3ÿ¯ÿÆk²±[™4ÛÔF#}ì`26r0ܼ}ìœúqSù?ô‹ÿÇÿW6/øòõ*‡ðâpßð·>ÿÐùàÏü¿ÿ£þçÃÿú<ÿƒWÿã5Üù?ô‹ÿÇÿQä\ÿÐR/üþ=\Ƨ ÿ sáÿýž ÿÁ«ÿñš?án|?ÿ¡óÁŸø5þ3]Ï‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÄCñÀPHÒCãÿFîfMZ@X àEÎ23SÂèð_ý ÿàæ_þ5]‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÀã¿átx/þŠ?„ÿðs/ÿ£þG‚ÿè£øOÿ2ÿñªì|‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ ;þG‚ÿè£øOÿ2ÿñª?átx/þŠ?„ÿðs/ÿ®Çȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêã¿átx/þŠ?„ÿðs/ÿ£þG‚ÿè£øOÿ2ÿñªì|‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ ;þG‚ÿè£øOÿ2ÿñª?átx/þŠ?„ÿðs/ÿ®Çȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêã¿átx/þŠ?„ÿðs/ÿ£þG‚ÿè£øOÿ2ÿñªì|‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ ;þG‚ÿè£øOÿ2ÿñª?átx/þŠ?„ÿðs/ÿ®Çȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêã¿átx/þŠ?„ÿðs/ÿ£þG‚ÿè£øOÿ2ÿñªì|‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ ;þG‚ÿè£øOÿ2ÿñª?átx/þŠ?„ÿðs/ÿ®Çȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêã¿átx/þŠ?„ÿðs/ÿ£þG‚ÿè£øOÿ2ÿñªì|‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ ;þG‚ÿè£øOÿ2ÿñª?átx/þŠ?„ÿðs/ÿ®Çȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêã¿átx/þŠ?„ÿðs/ÿ£þG‚ÿè£øOÿ2ÿñªì|‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ ;þG‚ÿè£øOÿ2ÿñª?átx/þŠ?„ÿðs/ÿ®Çȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêã¿átx/þŠ?„ÿðs/ÿ£þG‚ÿè£øOÿ2ÿñªì|‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ ;þG‚ÿè£øOÿ2ÿñªçüIã‚þ%¾Kïë 5›¸â¤÷ó‹‰$ g€¹f8é’}kÔ|‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ þÐýž?çŸÂûâ/þG£ûCöxÿž?ù½“ȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêò­7Åÿô{ëoëß ´_·EåÌÖ7ø °HìnlgÔú×/«iºàñÞ­£ê·Ö~,i ž’)´¶äù}kß|‹Ÿú Eÿ‚ãÿÇ«€øØh°/ž²>W{¶dînƒ-Œw<潫ýãäÌ1ßi¹þÇ´Ë)ùOAŽõ5C¦¶íÓæSòžƒÞ¦®l_ñåêUá ¢Š+˜Ô(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š»wusˆ‘ÜLŠ"\€>ATW[ Ó®® PgÍqsòÇŽ»ŽxǽdüT´Ô¯ü¬Ùèþa¾›MÙ ÆûɈ|ªÜmb2ÈÁ äW˜ø³N‡R²ÕÁž½±·O _Ú]F4©m<ùGöxDlŠduÛ/Ýnâ3óâ˜aÖµ øô{Ù#½¹G[y ²ÊÀ‚ò9¬/‚RËÁ/ 4RÛyÿ?sÿßÃ^Kl!ÄâHî5Õ#Žôck3£çÉ0–ˆB(pç~pÀœàÚ$Ô§ãI/äF‘¶Æ­1Î Àç“€OÐÛo?çîûøk̯´äÖ©¦]ø•­bÖe{‹›ˆçŠx—ì3¯Þ•*–e\ð2ÄŸ†óÇï}e õÞ©hc·m&kIÝeu™ÖC2Å̪™Tm;—í¿m¼ÿŸ¹ÿïᯟüC<ÓÜøòYç2?ü% –l P9=€~ÜøZ?E®é÷—·ZÄÉw{ªEu Â&(Ry>ÌBí>U]­üA»ñŽZ8“Ç£rŒø¯¡ôåk^–Uþò½Ž#à=‹ÂZþ•¬xrÂîÆö)`––' ¡xÜVÚÀAäfµ~Ñoÿ=âÿ¾Å|3û-ø£_]RÿÃÃS›û2×O–êËÍ’­Àa›åÎܱ8É&½Ñµ½Xøÿ›ó®ˆ`¡‹ýíÚ¹µ•/p÷/´[ÿÏx¿ï±GÚ-ÿç¼_÷د :Þ¬åþûê“ûkUÿŸùÿïªÓûÌY—cÝ~Ñoÿ=âÿ¾Åh·ÿžñßb¼+ûkUÿŸùÿïª?¶µ_ùÿŸþú£ûÍøÖeØ÷_´[ÿÏx¿ï±GÚ-ÿç¼_÷د þÚÕçþûêí­Wþçÿ¾¨þƇó~õ™v=×íÿóÞ/ûìQö‹ùïýö+¿¶µ_ùÿŸþú£ûkUÿŸùÿïª?±¡ü߀}f]uûE¿ü÷‹þû}¢ßþ{Åÿ}Šð¯í­Wþçÿ¾¨þÚÕçþûêìh7àY—cÝ~Ñoÿ=âÿ¾Åh·ÿžñßb¼+ûkUÿŸùÿïª?¶µ_ùÿŸþú£ûÍøÖeØ÷_´[ÿÏx¿ï±GÚ-ÿç¼_÷د þÚÕçþûêí­Wþçÿ¾¨þƇó~õ™v=×íÿóÞ/ûìQö‹ùïýö+¿¶µ_ùÿŸþú£ûkUÿŸùÿïª?±¡ü߀}f]uûE¿ü÷‹þû}¢ßþ{Åÿ}Šð¯í­Wþçÿ¾¨þÚÕçþûêìh7àY—cÝ~Ñoÿ=âÿ¾Åh·ÿžñßb¼+ûkUÿŸùÿïª?¶µ_ùÿŸþú£ûÍøÖeØ÷_´[ÿÏx¿ï±GÚ-ÿç¼_÷د þÚÕçþûêí­Wþçÿ¾¨þƇó~õ™v=×íÿóÞ/ûìQö‹ùïýö+¿¶µ_ùÿŸþú£ûkUÿŸùÿïª?±¡ü߀}f]uûE¿ü÷‹þû}¢ßþ{Åÿ}Šð¯í­Wþçÿ¾¨þÚÕçþûêìh7àY—cÒõž­5ŸöOŠîM¾Øš[ÞI2¨VÚâ<0È8az‚F Qÿ…«¡ÿÐÆŸøLÞÿñºà¿¶µ_ùÿŸþú£ûkUÿŸùÿïª?±¡üÌ>³.Çk©üNÑntë›hô–E-á›ÜAþî¥ðw‰¬üðsÁö:¾Ÿ­Ézt›(ÞÚËI¸¹’&ŽÝC‰h|²  ‚Np8_í­Wþçÿ¾¨þÚÕçþûêìh3¬Ë±ÞÿÂÕÐÿèãOü&oøÝðµt?úøÓÿ ›ßþ7\öÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?™‡Ö¥Øïájèôñ§þ7¿ünøZºý|iÿ„Íïÿ® ûkUÿŸùÿïª?¶µ_ùÿŸþú£ûÌÃëRìw¿ðµt?úøÓÿ ›ßþ7H~+hC®ƒã1ÿrÍçÿ®ûkUÿŸùÿïªC¬ê‡­üÿ÷ÕØÐþfY—c½ÿ…­ ÿÐ ÆøLÞñºàôHo<]ªx–ËJ°¼Šm_Ä wií«ÛHÑ­¸,VP¤ £Œž SŠOíSþ§ÿ¾«ß~ éZ|>´Ö’Ù´/QÄ÷–fFsÐp8Îjg‡Ž÷±w{"”ÝouŸÿÙgwenhywfar-5.12.0/doc/dialog/images/fox16-3.jpg0000644000175000017500000007365213142134462015774 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀüˆ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?õ€ÿ¼9à_Ù¯Ø,¦Ö¤·ÿM¿½æv dQ! ÞVåWaA ±$ú/ö&Ÿÿ>v¿÷ðÒh_ò·;#ûŸÞúÕ’}#‹þú¯NNP“Œ]’8ôi6ŠŸØºgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷ѯŸô¯‹>4Ñ<'ã kÄ6Ú>®ú‰æÒ,á…ÙZóÖ5V ™0¨<1Û¡ëšN¬Öí‚„_CÞ¿±tÏùò´ÿ¿”béŸóåiÿ+È'ø«ãUð§Û‡€ö_Aª=Ó4S², ˜.¾q —©àŠ«£üIñN£ñBÐ[Üè7>ŸÂ0ë&Þ&pdÌŒ$x‹F$2eJ„l  f—¶—ó1ò.Ç´ÿbéŸóåiÿ(þÅÓ?çÊÓþþWÍWß|Y«ÊšÌÒZiöW> Ôuhlô½E™”©YrËòʸ# ’xâº{?W¶þ#ðþ’šuž£§]ßXi7¦Cq<(ß4Œ¡l½¹È<íåüÌ~Ív=»ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¾~ð÷ÅÙÜêš$iÚ…ðÕu»•¹ÕîÚ(£µµ”… ‚K`ñØžjÞ¹ñ÷R]&]WIðæ“ ½¯‡mµ™âÔ¯ž9e3¶ÕŽç zž38£ÛËù˜½šì{·ö.™ÿ>VŸ÷òì]3þ|­?ïå7M¹7zuµÓC ™¡I xÈc?ôÎ/ûèÖœóîþòmÄ?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷ò›ý‹¤ÿÏ…§ýõÿ׫ÿ¦qßF¢?õÎ/Κ•GöŸÞcÅi?†¾ñ6w4V6°êpÈ.·mh™wðO—–9\É ‚ ë~' èzŸÉ(;ûŠ+ÒŽ•x©Or#QÁ´ŽëBÿ$dtÿ¹©Î?¹ýõY0èö?2·Êݽ6¼ð麰º>ÑÆœ‚;~ËûUŒã(=—ê(úç÷CêÏùŠV¾ð]¡œÛx7Û„’9ÊXD<ēվ^U°24ÿøBüý¦šŸü">ûtm%ÏØbóÇ,†ÛWtÀÇJµE\_ÊWÌUÔ<á BÛì×þðýÔh{Ÿ.[(Ù|ç9y0GÞnç©ï\ÿÄ?…zî­›RžkkXmÖØÛZÃlF«#DÒÆv‘¨ bºª)»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõQ`r/ûê¨ÑBÇwñÕ¼ÎOâXÿ‰ |¸þï÷½è©>&œxZãæQò÷âŠú<%okB3µŽZ‘å›GUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾_üyzøáD(ªWгê[L¢HZ)£a•b ‘ßCÔ ÅMoÀ­b&¯á†ÕD¦± ˜ þ`êž^wnã¦3Xr«j_3¾‡OEeéhš„Ö–íè2öž[}U”0ú*K«=ÒÖ[««]> xPÉ,²FŠˆ d³ÀrI¢ÑïøÁ Ë·õ÷U$Ó´©],,™eXB¤ê8¬Wð&µxöz6§á½Jæ0KÃi<2ºÁ%T’(´{þðBòíý}ÇIETþËÓ?èiÿ~Wü(þËÓ?èiÿ~Wü(´{þðGyvþ¾âÝSû/Lÿ u§ýù_𬠷ڕ¥Ú$öö“‚'PUfí퀠à`UFš”\“؇Q¦“[ÏXê^ ¿ÕdÒloü=u¨ÄH’Ò¡y“r€äcéZßÙzgý­?ïÊÿ…M£ßðÿ‚UåÛúû‹tUOì½3þÖŸ÷åÂì½3þÖŸ÷å‹G¿áÿw—oëî-ÑU?²ôÏúZß•ÿ ¦ÃÃë­G£5­ ¾’Ý®R/³bVUfÎ1ÕÔc9æ‹G¿áÿW—oëî5è®s[Õ| ¡ÝÅg­j^Ó.f]ñÃw<0»®q¬A# Ž=+]4Ý-Ô:XY2°È" Ê‹G¿áÿ/.ß×Ü\¢ªeéŸô´ÿ¿+þeéŸô´ÿ¿+þZ=ÿø#¼»_q=ÄñÀä'“€K1>€OsÇ¡¨?´mÿçßþKÿÄÖOˆa¶±µ¼–Þ8m1¥Ý3•Ãþ W—oëî4誟Ùzgý­?ïÊÿ…Ùzgý­?ïÊÿ…Ãþï.ß×Ü[¢°¤¹ðªE¦ÌN–-Ra”²$ÎQœÊÆÔcžœuéZ_Ùzgý­?ïÊÿ…Ãþ¯.ß×Ü[¢¹¸5\kO¢A©øn]QÆÖI<-:°ê¦0w;ŒVÏö^™ÿ@ëOûò¿áE£ßðÿ‚—oëî-ÑU?²ôÏúZß•ÿ ?²ôÏúZß•ÿ -ÿ‡üÞ]¿¯¸·Es¶˜“Ä÷šS¢ã%¾Ñ°6·§$ã¦yëÍDšß€ZþÄM_à ª‰L?b0üÁÕ<¼îÝÇLfªtÔ-wæDj9^Èéè®Rm{ÁpýÍŽûe»]!m6Aå½e—äýÊí&ÑïZR7‡#Ôì´Ö·²ûUôRMl‚Ü"G³{bu<çŒóSh÷ü?à•yvþ¾ãfŠ©ý—¦Ð:Óþü¯øV6«øZ¼{=SðÞ¥s%á´ž]@à’ªIZ=ÿø!yvþ¾ã¤¢ªeéŸô´ÿ¿+þeéŸô´ÿ¿+þZ=ÿø#¼»_qnŠ©ý—¦Ð:Óþü¯øVF…‹ÛíJÒí{{IŠÁ¨*€³vöÀÐp0*£MJ.IìC¨ÓI­ÎŠŠç¬u/ßê²i67þºÔb$Ii мɎ¹@r1ô«ºd&£aõ¥…»A:Œ½§–ÄUe >„ ›G¿áÿ«Ë·õ÷”V-ô¾²³Ô®îNiq´·Û"Wh'˜w*‚AÙ†Æ2AëW!°Òf…&ŽÂÑ‘Ô2Ÿ!FAäv¢ÑïøÁ Ë·õ÷¨®s[Õ| ¡ÝÅg­j^Ó.f]ñÃw<0»®q¬A# Ž=+]4Ý-Ô:XY2°È" Ê‹G¿áÿ/.ß×Ü\¢ªeéŸô´ÿ¿+þeéŸô´ÿ¿+þZ=ÿø#¼»_qnŠÇ#²×tØlâŽÞ;(•c@¡ð ŒãÐÿ3ë[N<¶}Å^ë°QE…Q@Q@Q@Q@Q@Q@Q@Q@¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžmâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢T—þC6ßõï7þ…p !×Ω⠣¾ÒÆÿþ|nïÓ…Ù÷ÿóãsÿ~›ü) å>Ë¢Ëá+7еOí+]€4¿Úw‡Ú7.÷f#ÝÏ‚¸/„Ô¯ü9àßêZ›ÚhÐÏ5­­ƒ$ÄȯJdmà ~UUÉÆzW´gßÿÏÏýúoð£û>ÿþ|nïÓ…-@ð¯xšêëÆÚ1Ò®] Õl.¤šÎM¨H’*« š7]¶ÒQ°ÇËÏë^vµàagâ}Vÿ\»ŽáµÛ ïät[‘hìRX‰ÛÙ2Qœ xþÏ¿ÿŸŸûôßá\õo"×áÖo¯uýVkU‘l㻎1·™ÃÆ¥Žܹbyäååß uMjû]ОóÄ6_ÚrE!×l&׿žå˜Äįؚ%[b’û¤  Œ¾A¯EðÎßí]{q!|þqמºßìûÿùñ¹ÿ¿MþOOðíÅ•ÍÕÄV—Ì×O½ÃFpIãsZBiBK½¿3)Á¹Å®Ÿäx÷‚5ˆ4MK@ð§…õÝÅšpIa†(­ÂÞ騻,“:1\¡äF%ÁääUo†:¶¿{ªèÒK¯X6°ðJu­:ãÄOpòyLvý‰¢U¶+(_º@Û‘—È5îßÙ÷ÿóãsÿ~›ü(þÏ¿ÿŸŸûôßáYšž) êåþê:†‘â-CQñøÐ¥šóOšþI$‚ëh.>Æ[de_åPgÎy‚mb¬|MÿwŠ5=[K‹ÂWW7Rj2\›kÕº+#b¯˜L`»íZ÷/ìûÿùñ¹ÿ¿Mþ ”RÞÂÓYÆ÷1,²BÏ—Pñ¹GBGñ+«)AR"€<‡Y›_Ð Ô£ªÞÞ]x>æùRæáîXÝÄÑ‘É ÇÍo‘@RBñRx!ô6ø¹l4ÞkvßðÊÏ$÷ïwµÍÄ9ùÜ’¬F L€¼|«ž}ƒû>ÿþ|nïÓ…Ù÷ÿóãsÿ~›ü(Ê|U§k¯Å»Û &ÿM³Yü1w y`×@£\J>U ë¸{VÄ9á𾕆4ëëËk ñ;™üC5šQ]TÅ hÂê@c•†>eëݳïÿçÆçþý7øQýŸÿ>7?÷é¿Â@ñ_ë¢{¹gñˆoôPÞ·»Ñ–ÖñíÖâéĦbª¤ ¤R!#¸`ýӚǽֵ‰!ÐãÖ5ÄÓì¥ð½ŒÖwWž"›LY®[Îs"Fþ|ƒŽqÎv¶ãfñGƒµ=z3Ô|C§[ICq’F«2 —™N22…O=zV½–qeg®›q¼¬Q"ÄØUQ€Ð ãÞ{Ñá [JöÞ[ááù^æê1ÆÒyq–tbÑRrAÝñ/Q,ZUúüT¹ÖÌñ/}U—zó*Ï#Æs÷Xã×K{¡ßÝN7ÙÞ,Mo,/å‰#œ¯*Ë‚§ yÆ*)|/$›÷[ëC~ìí»¹\nó3Œ7ë[鄯<´ÛOdJÝžw„u8ôVDÒã[Æñ¯ö±!ãÜ`ûnÿ79ëäöûØã©|9áMZ߯ºv§{§(·¶¾×'¶}¦xÚå?NG ã5èrø^I7î·Ö†ýÙÛwr¸Ýægn?Ö¶1Ó Œyi´—ÂòI¿u¾´7îÎÛ»•Æï38Ãqþµ±Ž˜LcËM²Qå²øc^K}7FûKÚx·û^MTÏG…®šS ¼Ï0#„ ¯E8'€z¿‰¾ºñ^¶·Kƒ¾µÅÓÛÝy#‰c”WVV,¿t短tòø^I7î·Ö†ýÙÛwr¸Ýægn?Ö¶1Ó Œyi´—ÂòI¿u¾´7îÎÛ»•Æï38Ãqþµ±Ž˜LcËM v·áëÝH³´ðe¥ÒÇ&¤n5)b–9ï˜4l ¨÷lU¤Ü#¹'f@í\Îá¯éš^™yw¥Í{%‡Š.µ§Éql&žc•U×iHDªÒoÛòŒ†ÁÎ õy|/$›÷[ëC~ìí»¹\nó3Œ7ë[鄯<´ÛS\ð޹e-ޱ£__ÚÌIx.$ã$ùœí-5±Ž˜LcËM A¥èš¾¹c}ªéVsZ›/Ü_½•œ¶ÆGf(h ªìIÏ˹[ º+ ]3M½¹¸´Õážõî.eþÒÍ*³½¢žm£òÐ7—¢@Iйæ?A´ðU½²±Ó5+;U © ´óÄ‘†ó2U€Qûׯ1Œ&1å¦ÔÔü5ÌS4V7Ÿj•|±4Þl¦42ùŽq;A=†2DPºR’U"ßs:±n .Çñ=Z_‰ MêÆÚïÈÔp÷–Í<{vѵ]}÷V?õkâ Û_xžïGH48dÒŸO¹–Î;«²eó™X™\‡l,_†èÙ&½‹û>ÿþ|nïÓ…Ù÷ÿóãsÿ~›ü+#CÈ—Ä×ú]ëMâÍEôÛ‹¿ÚJI!Ekå3™Ö$ï(-ÂÇåôÏÃuâsH‡TÖu¦·_i—M:”ð‰'v—t¬c`ň\ž{çÁýŸÿ>7?÷é¿Âìûÿùñ¹ÿ¿MþÀùóÂöZMÏ>éVZÅßÛZ‚J8õ9$šÒE´º É€œ…ÚGQ‚¯Løh÷irÞ]ÝækR[Z½Ôí4«†™–lÄœcž+·þÏ¿ÿŸŸûôßáGö}ÿüøÜÿߦÿ Ø1á_ j^#ºÔ¾ÑªYC¤XøÊæù`K7-,7ÔyÆMª¥€Î8ÈÏ5N_Ê~ é³i·S[´Þ!“O»µŸ_šiš<ȇ}‰S)• Œlë»îÙ÷ÿóãsÿ~›ü(þÏ¿ÿŸŸûôßá@q­í ¹ñ>«ŠÅÉmy¦%üÓíecSv¬F!ó07–Ác¸Šv‘«k÷2 y¯XXkk¯¼oguâ ‘ÞÌNTF–W–Á¡ÁY$’°åG§6µ«C«¾­¬ê–V—Ï,6CÊkXn"f†R0äÆáÆÖrÈÊñÔgßÿÏÏýúoð RÃþGÍCþ½Çò޹¯…ëçTñÑßicH#Ô7Ûµ“›’|Æé/›´ àýÃÆG½w¯¤-–¸—³,ñ]j öhcmó\!r¨Ë6È™°3±è4ÿ³ïÿçÆçþý7øV•f¥kvFT¢ã{÷gͶúSø‡ÃÓÞÝÝëWšŒÿš\®§ris ª¸ T‚ ê &º«+ [×üm£ë×·VMÔL³Zë3I!`-3žȘ8;U†1Ž„ƒíÙ÷ÿóãsÿ~›ü(þÏ¿ÿŸŸûôßáYÝšXã~]ÝÞxÕﮦ»š‹«o:fÜî±\Ë=Ûj.OsÍq?<5©_øsÁ¾!Ôµ;7´Ñ¡žk[[I‰‘^2$”ÈÛ†üª«“Œô¯hþÏ¿ÿŸŸûôßáGö}ÿüøÜÿߦÿ ZŒð¯xšêëÆÚ1Ò®] Õl.¤šÎM¨H’*« š7]¶ÒQ°ÇËÏë^vµàagâ}Vÿ\»ŽáµÛ ïät[‘hìRX‰ÛÙ2Qœ xþÏ¿ÿŸŸûôßá\õo"×áÖo¯uýVkU‘l㻎1·™ÃÆ¥Žܹbyäååß uMjû]ОóÄ6_ÚrE!×l&׿žå˜Äįؚ%[b’û¤  Œ¾A¯EðÎßí]{q!|þqמºßìûÿùñ¹ÿ¿MþOOðíÅ•ÍÕÄV—Ì×O½ÃFpIãsZBiBK½¿3)Á¹Å®Ÿäy€5{=Zð焼;â Å:Oï Xà¶ }¦F±3 &tb¸$;‘—NEa6½¯7„ü76›­ë3K.‰ø–HäišÒȸÿIL¶VãfËØ&5¯¡¿³ïÿçÆçþý7øQýŸÿ>7?÷é¿Â³5<W@·oŠ5yåÖ•%Å„jó?Ú :jæU¤"Pa¿À#×xFÞãFñΛ¦Gªjwv×þ{©Òîíæ_:9!Pè‘D¬ ¦Õàp1^—ýŸÿ>7?÷é¿Âìûÿùñ¹ÿ¿Mþj”ø«NÖ5_‹w¶Mþ›f³øb8îòÁ®F¸”|ª$@×pö¬ˆsÃá}*? i××–×:‡b6w3ø†k4¢º©ŠÑ…Ô€Æ7+ |Ê;׺ÿgßÿÏÏýúoð£û>ÿþ|nïÓ…â¾#×D÷rÏâ?ß衼7ow£-­ãÛ­ÅÓ‰LÅUHH¤BGpÁû§5{­kC¡Ç¬k‰§ÙKá{¬î¯7?÷é¿Â‹ZгýŸÿ>7?÷é¿Âìûÿùñ¹ÿ¿MþX ÔUŸìûÿùñ¹ÿ¿MþgßÿÏÏýúoð¢ÀV¢¬ÿgßÿÏÏýúoð£û>ÿþ|nïÓ…µgû>ÿþ|nïÓ…Ù÷ÿóãsÿ~›ü(°¨«?Ù÷ÿóãsÿ~›ü(þÏ¿ÿŸŸûôßáE€­EGð\+´G*¤¯ ”`Á]£¡ÇFVVR:‚<Š’€9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<ÚÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áD³¦ÿÇËÿ× ô[W;âèº ð[j72ýªà3Cmmk-Ì°Ž%g*22q‘]›ÿ/ÿ\%ÿÑm^w©¼þø›{â+Í3Q¾Óu*ÞÒ;‹+9.žÖHd™™8Ã>שÈeqÅs~©Ùjútz†Ÿ)–ÞBÁY£d`T•`U€e ‚ ECy¬ÚÚøƒNÑ$Žcq óDÊÅX¶nÜsœŸ1q€z•ÃxÀÛkZ΃«ëÞÕ¯ü3ö[´{tÉ'hîKÆ"–[e ÄYv’§nîB“Ç;{á¿ÞøCIÓdÓïZåü9¯ZƳeš6Ák Èåí^OU>†‹Ïm¢¼į}âÕ$°ÐµµAàkû@gÓ¦„µÃùx…C¨,üvÄàâå—Ãí ¼_kk?†Õô™ô Þ$“ ×K"…ysÃNŸ Ù~IÍ ž©XÚߊ4MT°Ó5+©a¹¿•"· m+«;¶ÕÕJ¦O1æ^ð´úÜ6Sx¯B¹»™| aëf$]6ñ†L2?Ú]ݳÍï_ßEà/A¨éºýÖ¥ú]åè‡I¹¸xÄ{ ÆC6Ö9Sóx¢ÁsÖ(¨ífK›h®#Y%@ê$£pÈʰO¨ Þ¤¤0¢Š(®?àë¤ ´ù$uD[ÍU™˜à5;¼’k°¯2ðö‘y¯þΗš&Ÿ(Šîþ=nÞ'{j€{NÖšØOsªÑ¼oá½bú M:òæV¹ÏÙækÒ ð .fAœ~V< èë“Ð|Oöø-´«kºeñ„£¥Æ™$pZ2¡À2‘庂³‘Û‘Äü:Ò%·Ö|$lü?©éºÅ¥¼«â«Ë‹Gˆ]¹„ƒºfnY§ÚêÊ[ ÝÎ(°\õ k6¾!ðýŽ·eÑÛÞ³F³)õ‘ŸÄÖ•x¯ƒ­õ?éVò_èzË5ßƒí¬¢Ž daq—¢p«û²DÉ‚ûG^x§Ùx5uH"߇ç¸û?,máYíÛÝ/ Ž&_—ù—wÍ žÏPß]Aee=íÓùp[ÆÒÊø'j¨É8žjñ­KÖz 2iÚ-è¼Õ< ¨Ç«:@í-Õç—må Ž2ÓÓ»æ?0+¤Ó4¨¼'â‹{ý;C»ŠÄxfi/ÖÎÑ®.#xJ~òr­.3ó6M g‡|U¡ë÷WšmÌÿj·Eymîm&¶”#d+ì•UŠ’ qÖ¶ëϾ^wľ#ÕlõkMbâÕaŽÖçIº¶ŠÊÙ\‘’XÕd³nr ç .O ÐÀ(¢ŠC (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8ÿƒ®‘ü.Óä‘Õo5Vfc€ÔîòI«º7ü7¬_Ai§^\Ê×9û<Íc:A>cåÌÈ#“€OÊÇ\¯‡´‹Íöt¼Ñ4ùDWwñëvð±8ÛP¼Øp~µÐè>'û|ÚU¿‡µÝ2øÂQÒãL’8-PàHòÝA ŒÙÈíȦ$7ÅòS~ÿ×î£ÿ¦»ªë«Ê¼+kseuðŽÒþÖêÚþ)u½K’Lsý›wç9$Û¤ÞÁºÀŽ z­'° ¢Š) (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáþÿÉ;‹þšŸþœ.+¸®àoü“¸¿ì)©ÿéÂ⻊oq-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ-Åí¬M¦éZÅߔ봑G$¬ÊW†•ÑÉ%‡ã'óŸÚèkø8Óù"» ÿÈvßþÿ šâ®±âŸ ØK­iÞ ÐlìUR(l®t¯n®®Xá"ˆ¥ÜA™ÉPo©'1ŒSFØâÿ´>$ÿÑÖÿðq¦ÿòEÚèkø8Óù"»k_kš6‹ iÞ(ÑÛVñž¥m$óiºj ùŒ ò…TO25%¤ù™¾\çÆ¿#“ÂÃWðÚO?‡µ«ËhšÒ"©=¢(a6ü²É™]£*NýÙÀªäDó3 ûCâOýíoÿoÿ$Qý¡ñ'þˆö·ÿƒ7ÿ’+¯—â~›§ÛÊ×:n±}k¥ÅöÖ©m _f°y#I™—Wl+«·–µXŠíµ‘©¶™8Ѥ³Žü¯îíâ=X)Œg€Eˆ9™ã_Úèkø8Óù"í‰?ôGµ¿üi¿ü‘^‹ð“ÄŸŠ<c¬ë+f·òËsßd£ˆ˜®$ˆVf#!ÁcÖ¹mkÇÚÌ_õ s¾ŽÚhb±‡[¶”Ë«¼2ù± ™£ ä9G"faÿh|Iÿ¢=­ÿàãMÿäŠ?´>$ÿÑÖÿðq¦ÿòEvú×ÄÍ/JÕ$ÿÑÖÿðq¦ÿòEcø&×âW‡|'g£?Â}nâXg½•Üjºj¯ï¯g@ÿI=Uß#?DV7‹F¼4á6…¬èÚKBL—êvuŒO <[q×qb0èåAvyGö‡ÄŸú#Úßþ4ßþH£ûCâOýíoÿoÿ$WAàëéàíOÅþ3“O¸Ñžê(tÓt¹­®5v£ˆ^iOïdeŒŒ®à7¯íŸCÔüûmwÚ–›u`—6²Áo%Â%ÍÂ$l0ïFÿ:– Hú2Š9s3þÐø“ÿD{[ÿÁÆ›ÿÉh|Iÿ¢=­ÿàãMÿäŠèü9ñæ5º°»²Ô¼A¬Í®jÐÙXéñB²‹[[“æ.ÑÆª£]ÌÙ%‡Þ&»¯ ë¶>$Ðmµ;Íóï]’¦É#tr’FëÙ•Õ”U4r æg‘h|Iÿ¢=­ÿàãMÿäŠ?´>$ÿÑÖÿðq¦ÿòEw^×¼M{ãøwÄm¤8Ò’Îkg°‚HþYĤ«ïvÜG–9zž*§ÅŸê^Õ4[(/t}Âý'{sW¶’kKfËÙñ€Ï½ˆ.ê1u3°ø‹¥ø_Ärx{Q]NÆâì.Úhd°È^G#Úáç"frÚèkø8Óù"í‰?ôGµ¿üi¿ü‘^áEˆ9™áÿÚèkø8Óù"í‰?ôGµ¿üi¿ü‘^áEˆ9™áÿÚèkø8Óù"í‰?ôGµ¿üi¿ü‘^áEˆ9™áÿÚèkø8Óù"í‰?ôGµ¿üi¿ü‘^áEˆ9™áÿÚèkø8Óù"í‰?ôGµ¿üi¿ü‘^áEˆ9™áÿÚèkø8Óù"í‰?ôGµ¿üi¿ü‘^áEˆ9™ó¿‚m~%xwÂvz3ü'Öî%†{Ù]Æ«¦ªþúöyÔô“Ñ%P}ò9±ý¡ñ'þˆö·ÿƒ7ÿ’+ÕüZ5á§ ´-gFÒZd¸ŸS°{¨„`xIâÛŽ»‹€xï\ïÁÍsÅÞ#Ò¯µI¤Í¦M8,öz|¶ouÎñÉ4¤+žSJ€Ä|À•ÙæZ¥¯Ä«ÿxkY? õ¸¢Ñç»–D®šÍ'›e< úHÆE'Û'’;Úèkø8Óù"½ÂŠ9P]žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žý¡ñ'þˆö·ÿƒ7ÿ’(þÐø“ÿD{[ÿÁÆ›ÿÉîQȃ™žð¯DÖ^ãÜQGÄÓ \|Ê>^ãÜQ_U–ÿºÃçùžuâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢iø_þC¶ÿð/ýÔ/ð_еoØø£MñN:}±ŽÆÃQÑ$»Ky["IÔ¥ÌY‘”íÉjä nlÏáùÛÿÀ¿ôZ¾$ñ®‹áûï±êÞ ybBö^¾¼ˆ)Ïü´‚LñÓ9ë(l\·9Ï|6¹ñKhº®µyá«ÿi‘OIwáï´ióÅ+«cìÏ1eeòÓ %Îwvm¡º¯ÂØïô;-6;ý7Mú6«¦Óô•‚ß7Á3"D¯„ T¹%‹°<žÓÂ~ Ò|UáÛ?èWs¦Þ¡’ÞW‚HK®HÎÙX ƒŒ‘ÈàŠ‡Åž"‡Ãz}Ρw§jv¶7ÓÍnˆËÀÊÌöÚ:§$q›$௾ X>¹w¨Û/…nSPòžñuŸ G(t‰"& Šc ±©ÚÁÀl‘ÔŠôíV;ù4éãÒ®m­oJb ®-ÚxѽYаö ¿Z’Êá.ìຌ0I£Y7PÈÏçUµíZÃCÒ¦Õ5)$ŽÖ¡Ìp¼¬K0UbIÍs¿ <-­ø;í¢jºîŸ«ÃÒKlöÚcÚ2%y\>é¤ ó?Û€9ÏZ¥ñÁ~$ñ†« Íâ­>ßÚ¤~LöÍ¢ù·QÆTÌf¤àÍ'Ž‚º? ø§CñL2è·rJm%ònažÚ[yà| ñJªèH Œ¨ÈVv„Î]ÎyãÖ¨ ?×~ÝÞk—úæ¯Ci¨K­Ûjö¦{4P¼VŸe(ê$C"²–9 „:㞎}?Äò[߬~#´Ši–²ºé™[fP<Ó´É—s€HÛž­Š|k¡ÝèSÉ=½Ý¾¥˜¥â%fžKo´ª¡\àyyÉm£*G¦zJ§i¡§}=Ρörùe·ûß ‡ËäïÜyè1Óšæ¾,xKWñž…m¤iÚí¦—l.V[èn´öºŠú%ä@áeˆ„-‚À7ÌÓÁ ö5•âoXxzÖ+BRT•ö(°Òîoœg•‚7eu zåµÏë~*ð•÷‡üe­èwѼ¶óص††ÖéÈ$drÏ2Ì„ªŸ(Û¸îâ¯Âà¾Ôt– éó^ÝYNÓh~["Úáf ëæ¹rv l.â@êQàßø{Åו¾‰5ûO¦H‘ÞÅw¦\Ù¼.ë¹T¬ñ¡$®À ž£;­ãØÙ”±º½`èžM²©s¹Â–ùˆ\î<ô<3Õ¾ YÞ]&¢.´{½B+ýF寢­õ©Šòq3FЙîB«¶Eu?{Œ1èÑ£ðÿ‡mt˜âÓb%tû´·Ë1c²$ Ëä“’I&—ÃõŸˆ-¯.,£ž5´¿¹°L $4nF ùISŽøêjÐ á x«Kø‡«øžÿÄú5宬Ç=œ:,º¬"AÙMË€yó‡v8 [¾(±ñEÛÛ¿†õý;Kج³G}¥µärç ,Ñ2‘ƒüDò*Ÿ‡<á_jë¤é·÷l’žî¬.-¾Ñâ2¢‰Tn([sÅ^-м3%¤:µÍÀ¸½.-­­,¦»žm€+(îBädã#=Ey¤õßx›Á†µVI,­õ»‹Fm0Ëiç\Í…$t…™Ê"º‘°rpÙÔ¹øB’Yé1Iªéú›Ú=ô×±ë:H¼µ»¸»˜M$â1$WÜ’ÁUˆÁë^‘£jV𾙣bÒµ¼À”2Âñ?‚ 8 § ð@5n€<¾Çá¼>Ñ<=6¸òÛéš&¥¤;¥¢ÆÓ%æÀ\ØB¡:`ƒžØÅ.»ð¶ï]‡D¼Öu jZζ‘I{áÏ>Ê[wòø{wœŸ0Ô‡Y« `‘]Š<_£øoP·´Õšx’[ ÍA§X÷G6ª)l|ÙÄ€€ªsƒíÛy£¸·ŽâݨÈ# ó@~Ñ“ÃþµÒ"M‹Èvéö+in˜±Ù ’e$œ’I5Êü8ð_‹|3¬^_ë>+ÑuÇÔ%ioî‡,—Ë_4Ý:,iœ*ðq‚I>ƒ\¿‡<á_jë¤é·÷l’žî¬.-¾Ñâ2¢‰Tn([ÔQEQEQEQEQEQEÇ|Xð–¯ã= ÛHÓµÛM.Ø\¬·ÐÝiíuôKÈÂË[€o˜ §‚A³a¦xåt›Ûkÿè&éÄbÊ{HÜùÃ#ÜÉæd` ÛÉù»iø›ÄµŠçP‡T•%}Š,4»›çå`ÙGHÞ©x7ƾñuÆ¥o¢M~Óé’$w±]é—6o ºîU+¯á¿ Ä4/Q¼Ôoç±Ok¥Ïz– ƒºâXáFbª:(3mHí( Õ죻ø5áïÚxÏ·»µŸT“SÑo-®u{…{§>rÂÓ»¢É¹Q ìw-eZønå|â1¢[\5­Ö££qÖ¼9¯6£ Ú®ÓøquÍzI­o<;q«Df–ð5¼Íi£È¦1.É0껳˜0öO„öé_tÛ‹Û»Ó—Ë’æÆ[YfW1ÇäÈÍ"B¨¡‰mª3ÍuTP’ø]ÿ„×â4:þµ£ø—I’Æ;‹}O¼ðýíºB2âyÞ!˜áT …S™˜ãgâ½®“ý§¤j—/ã ?R¶Šxíu?éòݼHæ2ñH‰ «B7ÆFS¨ïè4PÏw×7º†·ðâëâg‡¯uVºçöQšW„Kn°M5¤a‰fO,²*¶Ö`p6ü¯“IÔä🇴}kÁ¶ói²Mª\Z6¯áëa´è Îm-¼L700ó‚=½kÜî´:ç[²Ö§·ßcÐÛK½†Ä”¡`ùiÔcŒdÕêùÎçÃ'×þxWMÕ4-Bêù|®YKå³f9Ù`[t“~v¹( îbNÜ‚qš³â=ÞæÏÂ2é^[_ÛZÜ¥þ›u໫˜Òý„%’Á<©åY@—k¨$ú†AÑ@¯Â{ ô¯‡ºmÅíÝéˆKåÉsc-¬‚3+˜ãòdf‘!TPĶÕæ¸ÿk¿ðšüF‡_Ö´é2XÇqo¢i÷ž½·HQ±æ\O;Ä"ó °ªqó3zÕQEQEQEQEQEQEÅü_ñ>¯á¿ Ä4/Q¼Ôoç±Ok¥Ïz– ƒºâXáFbª:(3mH§ðÿSðæ…àÛ˜4M/Å— bË-ãÞh7ÝßO3óbhÌå²ÌW;F: ¢½Чi¨%Χ}`-/bk?/tÒÀË»×?»sÃã¡ÇCÅ\¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ4ü/ÿ!Ûøþ‚k¸®Âÿò·ÿè&»ŠÊ-Š(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠáüQÿ!Ûøþ‚+2´üQÿ!Ûøþ‚+2°{š-Ž_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯ªËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ’E ’'hÜte8#ñ©ÿ´/ÿçúçþþ·øÕjù¿ã?ü”­[þØÿè”®x«š·céŸí ÿùþ¹ÿ¿­þ4h_ÿÏõÏýýoñ¯“¼5áx—íŸØZUÅÿØáó§ò€ùW°ç«(˃XôÒMÙ2n}“ý¡ÿ?×?÷õ¿Æí ÿùþ¹ÿ¿­þ5åß³Ïü‰wŸöýwkªXqôA?úz[-ÓE±¸ˆ±PÙÆ>ò‘ŒçŠ—tÊF·ö…ÿüÿ\ÿßÖÿ?´/ÿçúçþþ·øÕjÍÓ5›]CUÕ´Øc™fÒçŽË€™âIA\FלsŸ­`mÿh_ÿÏõÏýýoñ£ûBÿþ®ïëV¬Ý3YµÔ5m[M†9–m.hᜬÏÈ6àä®:Î~´]·ý¡ÿ?×?÷õ¿Æí ÿùþ¹ÿ¿­þ5ËMã? C¥Ùjrêj–—Ú‡öm»´2 ×>cFc#nT†GÚI8æ­¶½dÚ̺M¬wwvòÅÚÃÂDgGvl a?‡$n\ŒѨßÚÿóýsÿ[ühþпÿŸëŸûúßã\Ïü%zD–Zõ«Íuk®Ü-½œ±Ç€KFò`Ø b6휑ÅnѨ´/ÿçúçþþ·øÑý¡ÿ?×?÷õ¿Æ«QJã,ÿh_ÿÏõÏýýoñ£ûBÿþ®ïëdꚥ†˜öi}?”×·+kn63o•ƒ0^Ç Üœ*í;±´/ÿçúçþþ·øÑý¡ÿ?×?÷õ¿Æ«QJã,ÿh_ÿÏõÏýýoñ£ûBÿþ®ïëV¢‹gûBÿþ®ïëÚÿóýsÿ[üjµ\ ?Úÿóýsÿ[ühþпÿŸëŸûúßãU¨¢àYþпÿŸëŸûúßãGö…ÿüÿ\ÿßÖÿ­EÏö…ÿüÿ\ÿßÖÿ?´/ÿçúçþþ·øÕj(¸´/ÿçúçþþ·øÑý¡ÿ?×?÷õ¿Æ«QEÀ³ý¡ÿ?×?÷õ¿Æí ÿùþ¹ÿ¿­þ5ZŠ.Ÿí ÿùþ¹ÿ¿­þ4h_ÿÏõÏýýoñªÔQp,ÿh_ÿÏõÏýýoñ£ûBÿþ®ïëV¢‹gûBÿþ®ïëÚÿóýsÿ[üjµ\ ?Úÿóýsÿ[ühþпÿŸëŸûúßãU¨¢àYþпÿŸëŸûúßãGö…ÿüÿ\ÿßÖÿ­EÏö…ÿüÿ\ÿßÖÿ?´/ÿçúçþþ·øÕj(¸´/ÿçúçþþ·øÑý¡ÿ?×?÷õ¿Æ«QEÀ³ý¡ÿ?×?÷õ¿Æí ÿùþ¹ÿ¿­þ5ZŠ.Ÿí ÿùþ¹ÿ¿­þ4h_ÿÏõÏýýoñªÔQp,ÿh_ÿÏõÏýýoñ£ûBÿþ®ïëV¢‹gûBÿþ®ïëÚÿóýsÿ[üjµ\ ?Úÿóýsÿ[ühþпÿŸëŸûúßãU¨¢àYþпÿŸëŸûúßãGö…ÿüÿ\ÿßÖÿ­EÏö…ÿüÿ\ÿßÖÿ?´/ÿçúçþþ·øÕj(¸´/ÿçúçþþ·øÑý¡ÿ?×?÷õ¿Æ«QEÀ³ý¡ÿ?×?÷õ¿Æí ÿùþ¹ÿ¿­þ5ZŠ.Ÿí ÿùþ¹ÿ¿­þ4h_ÿÏõÏýýoñªÔQp,ÿh_ÿÏõÏýýoñ£ûBÿþ®ïëV¢‹gûBÿþ®ïëÚÿóýsÿ[üjµ\ ?Úÿóýsÿ[ühþпÿŸëŸûúßãU¨¢àYþпÿŸëŸûúßãGö…ÿüÿ\ÿßÖÿ­EÒÉ$²%v‘ÏVc’mP/ñ4ãÂ×2—¸÷Qñ4ãÂ×2—¸÷WÕå¿î°ùþg›_øŒê 9Ñì~eo•ºzm:ÇæVù[ ÷¦×Ïc/S³ü(…|ßñŸþJV­ÿlôJWÒŸð“þJW¿îÿ¢^¸ªÖö0sµíþf­_Cæ x£Äûgö«qaöÈ|™ü¢>eìyèÃ' 0Ã'dÖ=~€Q^zÍ’wPüà'™ó¿ìóÿ"]çý„_ÿEÇV5­Et?‹’jwºv³-”Ú P$ÖZMÍÚù‚âF*L1¶<ã­lxþB>1ÿ±¢ûù­ué©_PGˆüCRÕu‹ÍWLðÁƒP‚êÊM>äxzæKéâýËÎU`.­p•ù±Kãmgñ™¼-«]kW­ðíôV2:Çp-"Uxæl;d³’ …ÆNÒ¶ÑNácÄ<]áíbïÅšéՙ㻸–Ñõ(|7s¨Kl‚(Àò&Š@¶äJ$%X.s’XFð•­Ô3ñ•ÄöÓGÅõ³A#¡ (©*OPÇpEu4Qp±ã7þÕõOx›Ã†Ææ*5½ÔôÛÆŒˆÕÜ1ªìn…’CtÇÓzúÓ´ 3VÖ´í_Ö4 È.µŸ5íõÅ«o··[Y­ÐJ¤|«µ¯?½{%\,x‡†ü+a'ƒ|¡Â)qk=ž±×#þÊ’­µÂ–wØT$€XS¸~lAøi¦>Ž^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžmâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢–t©ÝêP¾¡kuy³íZê3Áæì]«¸FàŸSëZ”W+WÑ›ÿÙIÿAOàòóÿŽÑý”Ÿôñþ/?øíhQSÉÀQÑô›";ˆìc‘>Ó;\LÒLò´’671g$’p;Õê(ª¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(—øšqák™GËÜ{Š(øšqák™GËÜ{Š+êòß÷X|ÿ3ͯüFuPèö?2·Êݽ0…`UÁe<®GÔGÔiðèö?2·Êݽ6¾{üyz˜áD‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢¹®kb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š."ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h¢áb/±éÿóé/þ .¿øícÓÿçÒ_ü]ñÚ–Š.)Nú ˜¦1Šꯪ܂;ô3S>ÑáÏùëþ ®?øõuVšö‘áŸéÚ–¯y¯Ù¡gvË4’ÈÀ,îÎÇ€ $ð*ø•á™t-sU·žòC¢Y½å휶rÛ]¤jŒàù3ª7̶’$uë[8E;§&®s±Ëáù$XãxØ€ªº­É$ž€:¬½®šˆÎö²*¨%‰Ôn€u'÷µÜOwþ†òlÝ Å±mŽʲô#§C\?† žëÃÞyi7°wÜIÜ˸'× ¡¾ 9Ø9šÜ«öÏX?ðmqÿǨûG‡?ç¬ø6¸ÿãÕÚë~1Ð4]sGÑ5MJ;mCY‘ãÓáebfd°È/P2Äd$ –/ÚIâÛŸ ¬s‹Ë{¯ÈYŽI$Eç;³gŒ`Ž} Gúÿ†xá~ÑáÏùëþ ®?øõhðçüõƒÿ×üz»¨¼Ki'‹n|2±Î/-ì"¾w yf9$‘œîÌMž1‚9ôÔûG½õÿ ñæ?hðçüõƒÿ×üz´xsþzÁÿƒkþ=^öz¡âMzßAðî§®Þ$²[iÖ’Ý̱]’4.ÁA €q’>´Z?×ü0{ÇöÏX?ðmqÿǨûG‡?ç¬ø6¸ÿãÕéV—ési Ìa‚JŠê¨gš“íôZ?×ü0{ǘý£ÃŸóÖü\ñêÐ ¨6ª•QÀ‹`}I$ýI&»ï´{×›éœ[:º“ÌŠ;*‰==ªgk¡Å»Ù˜?N<-qó(ù{qEN<-qó(ù{qE}6[þëŸæp×þ#:¨t{™[ånƒÞ›O‹þA<(ù¡÷¦WÎã?/S²‡ðâQEsQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~6·¾þÉð¹ka>§…soywgï‘ãk9!ó‘¥WÚ9 dà{ÆßÚ0½ñ&½¤hº¼6Px/QÒã7VÛÏq>ÖDHdQ! åžJŒ™p¹æ»»mFâÒÖ F°¸›ìð¤"HŠpª3ÈõÏQÍIý±?ý¯憎øºÞZɵù™E¥™Íü+´¿ÓgÔ ñ5ÔÞ"’ÝIÕÚ&0\ZÿË8£8Ä;:O9Ëå÷­Ÿ Iáãè„ÿ䬕hê× ®™t àx© N>€ý V´ŠKìZç5’à1æ-£8烆$vÈ‘ÔvßúÑŠJû[yãíÇ>-ñ'ŠõM+@´Ò;{ æþöKYa–ÚE¹iãÉ`êól\îPÂØæ¤ñ izïÓÄ^-ð»§ÞøJÐGnt™® FiØÄP))2†ÀrÏï.áŸIþØŸþW¿÷Ô_ü]ÛÿÐ*÷þú‹ÿ‹©³þš.ëúG“®‘åkdŸ<)«ø‰£ðM¤ÒEa-òýµd˜ºåý÷÷=ßöÄÿô ½ÿ¾¢ÿâèþØŸþW¿÷Ô_ü]ÓAuý#ʾè:½ž±¡ËtÒi¾"µ·™ui†.¢{éZ ö‹æ•¡¸nÙ€9* ΦiÉð›]ÓSœ8 ÝÛê—ré2™¯.L8}«fÛ‚òr¡Y¸ÆÆ+Ó?¶'ÿ UïýõÿGöÄÿô ½ÿ¾¢ÿâè³þš ¯é3Ïuo êšD·–þÓ¥Òï5ÝG%Ä*cß«B!i$<ðòáØîêIãŒ7B‘|5âÓ£ZOjgð多]§„®ôÑspÉû¶v–GÎ>u7Þrǽgûbú^ÿßQñtlOÿ@«ßûê/þ.‹?é ºþ“9ï hQx{â–ÚNÖ7‘u "„ªKr’Áå™[4»Z^[æ#w\V®™þ¢_úùŸÿF½\þØŸþW¿÷Ô_ü]W³‰¡„«Y¤yf,@õÆqž3è)KHê%¬´9߉§¸ù”|½Ç¸¢—â_üŠ×_*Ÿõ>âŠúœ±_ ŸæpWþ#: öÒÿ@±žÊ{{ˆY $°HN`Àà‚Ajzøïöjø‘â«ëËÏ_ß Èlì^ê+‰÷<ùD¡ ó(ÞÄd8À{Iñ^°úØÿïŠóÿ³¾·ûèÊ×òÿ‚iî’äkcÖè¯">+ÖOü¶þøÂW¬ÿÏtÿ¾?ì9?áÿ\þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W‘ÂW¬ÿÏtÿ¾ð•ë?óÝ?ïGö¿Ÿðÿ‚]þéë´W·ŠuƒÖtÿ¾7þ}cþ{§ýð(þÃÏøÁ×?ºv_®mí¼/1¹–«fI\"¨$’N’{Q_-~ÒÞ:ñw±xv+„ŽÖöÅfžDJÀ¼ˆÑƒœ!W žFpH%'‹– *ÖÝöj£ç}OÿÙgwenhywfar-5.12.0/doc/dialog/images/Makefile.am0000644000175000017500000000061313142134462016206 00000000000000 EXTRA_DIST=\ fox16-1.jpg \ fox16-2.jpg \ fox16-3.jpg \ fox16-4.jpg \ fox16-5.jpg \ fox16-6.jpg \ gtk2-1.jpg \ gtk2-2.jpg \ gtk2-3.jpg \ gtk2-4.jpg \ gtk2-5.jpg \ gtk2-6.jpg \ qt4-1.jpg \ qt4-2.jpg \ qt4-3.jpg \ qt4-4.jpg \ qt4-5.jpg \ qt4-6.jpg \ cocoa-1.png \ cocoa-2.png \ cocoa-3.png \ cocoa-4.png \ cocoa-5.png \ cocoa-6.png \ cocoa-7.png gwenhywfar-5.12.0/doc/dialog/images/cocoa-7.png0000644000175000017500000015717213142134462016125 00000000000000‰PNG  IHDRÐ0¯\ xiCCPICC ProfilexÕ–gTɆ«{r"Ì C†!g$ 9Ar•a† ã0dDEdqLˆˆ`X0(¸*AÖ€ˆb`0ÇdP®‹(·¬çÜ»ÿîŸ[çtÕÓo}õuuWç¼;9A ,@*?CèáÌ ˆdâ€H"‡›.pò÷÷ÿØ>ÞxòŽ‘8×?†ý÷ i^l:È™Žá¥sS>‹ð W Ì>…pv†aTÂt!²A„+Ä?ÏõbŽ™çós1Á.HL?x2‡#Œ€ôÑ™YÜx$ia>/‘Ùa{n‡‡°x©kÄ\…°nÌyâ`'f1'‡¿ÈóD욘.HáäÎÝü/»Ô”Lä{Í5*Ò“ù)ËÅgCG®1ÇÕ{)sg6§ÇòC‚t~Ìr¿Žº.° Ãùö^Ðó\–/plºÛbž$Ž—øÌæò 3C8=+Èmó‚Ø뺨Ç%º³ôÄ öâ³’×x/î\À\à 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ùãb ™l>רifbj"žþ¿iâZ›ßì{Æ\ AŒ›k91Ø%#5àù·@³.òákڊкiÛÊÍfÍçC‹ "Lò@h]`Ì€%°ŽÀ x? "À*ä '€T Ù lÅ ì»A58zpœmà<¸ ®[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ì d¹A>P ECñÊ„ò¡MP)TUCµPô+tº Ý€ GÐ4½ƒ¾Â(˜ ÓaeX^³`'؆WÂñpœÁÛà*¸>·Â—á[ð=X¿†§PEB1Pj(# å‚òCE¢âPBÔzT ªU‡jBu zPwP"Ôê ‹¦¡™h#´-Ú‚æ¢ÓÐëÑeèjt=ºݾƒBO¢¿c(%ŒÆÃÆ„câ1Ù˜bL%æ(¦ss3‚ùˆÅbX¬ÖM®Ŗa÷c›±Øì0v ‡ÃÉã pv8?—+ÆíÅÀ] âFpŸñ$¼*Þ ïŽÄóñ…øJüqüEü ~?M"hl~!—°p˜ÐA¸M!L¥‰:D;b01‰¸‘XEl"^%>%¾'‘Hê$kR)‘T@ª""]' ‘¾©d}² 9ŠœIÞF>Fî$?"¿§P(ÚGJ$%ƒ²Ò@¹ByNù,A“0–`Kð$6HÔH´J J¼‘$HjI:I®’Ì“¬”<#y[rBŠ ¥-å"Å‘Z/U#uNêÔ”4MÚTÚO:UºLú¸ô é1*ŽªMu£ò¨EÔCÔ+ÔaЦAs¡qi›h‡iWi#t,]‡Î¦'ÑKé'é}ôIªÌR™P™™™ 2"Š¡Í`3RÛ§÷_e•edce·È6ÉÊ~’S”s”‹•+‘k–»'÷Už)ï&Ÿ,¿S¾Mþ™ZA_!@![á€ÂU… Eº¢­"W±Dñ´âc%XI_)Pi­Ò!¥^¥)eeeò^å+Ê* G•$• •‹*ãª4U{ÕDÕ ÕKª¯˜2L'f ³ŠÙÍœTSRóTËT«UëS›V×QQ/ToV¦AÔ`iÄiThtiLjªjújæk6j>Ö"h±´´öhõh}ÒÖÑÓެݦ=¦#§ÃÖÉÓiÔyªKÑuÐMÓ­Ó½«‡Õcé%ëí×ëׇõ-ôôkôoÀ–‰û  1†Ö†|Ã:ÃFd#'£,£F£!c†±q¡q›ñ›%šK"—ì\ҳ仉…IŠÉa“'¦TS/ÓBÓÓwfúf\³³»æswó æíæo—,]z`éC š…¯Åf‹.‹o–V–BË&Ëq+M«h«}VXt–?«ŒuÝcíl½Áú¼õK› ›Ó6ÙÙ&Û·[¦³,vÙáeÃvêv»Z;‘=Ó>Úþ{‘ƒšÇ¡Îá…£†#Ïñ¨ã¨“žS’Ó §7Î&ÎBççO.6.ë\:]Q®®%®}nT··j·çîêîñîî“k=:=1žÞž;=°•Ù\v{ÒËÊkW·7Ù;È»Úû…¾Ð§ÃöõòÝåût¹Örþò6?àÇöÛå÷Ì_Ç?Íÿ·l€@MÀË@ÓÀüÀž ZÐê ãAƒƒ·? Ñ É é • mýæV& _¾.üV„BDbD{$.24òhäÔ ·»WŒDYDGÝ_©³2gåU «RV]X-¹š³úL4&:,úxô ÇSÇ™ŠaÇì‹™äºp÷p_óy¼ñX»ØòØÑ8»¸ò¸±x»ø]ñã  • ‰.‰Õ‰o“<“&}JöK>–<›–ÒœŠON=ǧò“ùÝkTÖ䬊¢4›´Ýi“BoáÑt(}ez{15½™º™?eeÙgÕd}ÎÍ>“#ÃÏéÍÕÏÝ’;šçžwd-z-wmW¾ZþÆü¡uNëj×CëcÖwmÐØP´a¤À£ ~#qcòÆß M Ë ?l ÛÔQ¤\TP4ü“ÇOÅÅÂâ›m7üýsâÏ}[Ì·ìÝò½„Wr³Ô¤´²t¦Œ[vs«éÖª­³Ûâ¶õm·Ü~`vÇý;ëË¥Ëóʇwùîj­`V”T|ؽz÷Ê¥•÷÷dîUùTµïÕÜ»cïLuBõ½çšæ}Jû¶ìû´Ÿ·ð€ã¦ƒÊK~ý%ñ—‡µµ­uÚu•‡°‡²½<z¸çëHÃQ…£¥G¿ãÕÖw7X54W:¾½nÌl?u¢ÿ¤ëÉö&£¦ÚfFsé)p*óÔ«_£½Úût×Ö™¦³Zg÷µÐZJZ¡ÖÜÖɶ„6Q{DûÀ9¯s]¶-¿ÿvì¼Úùš 2¶_$^,º8{)ïÒT§ sârüåá®Õ]O®„_¹ÛÐÝwÕûêõkî×®ô8õ\ºnwýü ›çn²n¶Ý²¼ÕÚkÑÛò»Åï-}–}­·­n·÷[÷w ,¸8è0xùŽëkwÙwoÝ[~oà~Èý‡¢ˆòŽ=JyôöqÖãé'O1OKžI=«|®ô¼î½?šE–¢ C®C½/‚^<æ¿þ3ýÏ™‘¢—”—•£ª£ cfcçÇÝÇû_­x5òZðzz¢ø_ÒÿÚ÷F÷ÍÙ¿ÿê Ÿy+|;û®ì½üûc–~èšòŸzþ1õãô§’ÏòŸë¿°¾ô| û::=ƒ›©ú¦÷­ã»÷÷§³©³³Ž3çPHÇÅðî”Ä+ ¾˜Ø9ï…ç" yÿްØÇÏyùÿäy¿<o À‘NB ðDÆdÔFFª#bKì`sóÅ QÄ-=ÎÜl ²±&Ÿggß+€ëà›pvvzÿìì·Ãˆg@gÚ¼Gû€¥º¹›YõÌöÍ-ÿ±û7…èªÍöì pHYs  šœ IDATxì Åýǯ7xô" Šb%j»bùÇÞ{¯Q£‰cIì&–¨Xc‹1jÔ("ŒblHïåõöŸïÜûóö핽wwÜ»÷]fvÚÎ|fßîwg;—ÓÔÔ$t$@$@$@$@$@ñÈ/s‘ €4Ï    @€:,f%     hž$@$@$@$@$€tXÌJ$@$@$@$@Ð<H€H€H€H€H üyÛ]ÖãÚ]£Ù`   Èf©ä¬]+9§½õ¢8 þ¢Ø   p´7±±šBÙ9«$   H S…uF è6ŠfšktÀ?,v™H€H€H ]Hج#“Äô:ÐEs[Dr[ʶ«3“%   uD alÚwÙu-¦×‰€ šã½ñäYGçK$@$@$@$àC ±OYb:­:NáMGKó šß¯Æ‘ '—vª–?Zš­"B:-:áIèFŠwXÇ-’ã©Ë­—a    `b ÝæêâÉ)O¤x[u:„tÊt ñì'jýât肤EË«õÑ'   H¯Øõî»Gš1ªEtÊt’„s$ìÆ»awÜpZœ›æ†µµÞ8ï¾Í—ì™è¤ è6ˆgWäjX}mß›©L¬xM§O$@$@$@$_ÑjŠÆïÍißwÃha¬}Û‹dŠè¤ è8ųWèºûV'ìÍçÝwë@Z4$o´z˜F$@$@$@ÙFÀ+T£õÏÍë†Q&Ú¾›æö‹ÓvDK³y’%¢“" “$ž]ñêö‹ W_!ºi±âÜt†I€H€H€H€‚pÅ«–Œç¦ù…ýâP/â#¥i:|87_(‘Æ…w ´Y@·Q @0^AêÝGm§¾A÷cùnö–ñÖ©ù4>ì·UD·I@GÏ^qêî{ÃÞ}t qAãÃ@|Ê#Í­ÏÍ«áXéš> tt*\#qð¦cß/åÝx7_Ðx¿º§Î­ÏƵEDçk­)ò]aê ë~4if+3[§æ°ñÂ"[Ë"N÷Õg3;ùuŸ> @|Z‰RSLãÔGMV_kǾnˆ«5[¥ÙÖ˜­Îlšæê:mÒ4a8ìû…mb2ÿIx:ŽÙgíÚ«áh¾›¦áBS¶Ûþð‡­wÛm·½ûöí»gaaá THG$@$@$@$jjj~X´hÑÛÆ½vÕUWM7½Zj6j8Ò~aóóÝ8oû ÛC'S@«èE{"…s‘Øì4|oX÷»^ýõ;í¿ÿþ—l[WW'Zž> @ÈÍÍ£õ¤¾¾þ“—^zéf#¢§˜n­hîš h]Ö}$k®Htã#…Ð ™pD˜}FÃáTüÆVñ¬eT`k|çQ£FímlT¶­ªª²•ó    ì"€ R#ž%//oÛwÜqÓ»f[e6¿Ð†®@6»6 ñnžXa” ;hÚDl¡Ðᣮ ¨^Ó2¤‚±šWã¼¾æA|a—.]öÄÌ3 @v€îÖ­Û¦—wšM5£v­*5ûȧ>â½y§Nóê~B~2´Û9¿0â4Þõ5Þë£#„ø\óT°Ùçë¦O-kÖ¬‘üQV®\ió"Í’óÖùÃ?ȪU+Í4¨Ê–——ËàÁƒÕ‰'+cã#ËV-–©ß½%?,üFjê+ñú@Š JeHïá²ý°=¤{y/)**²mÖÎHíg< ´WFm`Ú-¨‚Ù;óìí„úH×0|8M÷†mbÐ h#è"+ϵG×<ðÝ0rh\<~.Dg4×ÐÐ ˜¡ž;w®@èB$÷ìÙSJKK­0­¬¬ëO?ýÔ Þþýû[óŠ bµZç/¿ü®³{RZRbZŸ#U¶Î ùä“Ol ˆY'Ú3”ÿ}?Eþ3ýIéT^&½úõ’ÝICcƒ,]¾@¾Zð¡|üý;²ïVGËCv’s<ØÑ‘ @G!Ðü½›N¦¢Û*¤£!p³jO7.bYh[#ÚUhGÌç&ÐnaÖ"Zîï†5âbm -·"ÊúºÚÚZ™7ožн{÷ݺvíjôŠ+dñâÅb¾ì´yPI¿~ýì ¯o…&uΟ?ßÖÛ§O[g¯Þ=u¢á+V¬”E¦ÎŦN3Úë­·^Ô:1óüÙ¬)òÊ'H÷þdàྲãÆ{ɨa{KUm…¼óåK2­ü™?g‰¼4õi2ÏZ[o¼3l"5“ñ$@$@$@$­ U8ÇšV®`V êS¡Œt kù¸ý@:Êì³62Ú‘'žMÅ3òÆÐ²lÙ2+`1óŒY[L’WWWÛ¶ á “¤!/L:¢Íì¢Nˆnˆb­37'× kÛîÚÅÔYX$ÅÅ%6/L:¢Õ¹låbyýÓ§¤ëz¥Ògp©”uΓ5 ‹ä‡¥3ŒG•Tå,•ò®EfÕë2É1ɼƒúllê_?S¦‘ @6P=ˆ¾!DDGã)×J8Cã™…$ £µ¦9 ‚³:3 ‡5ÎÏ8…¥~Ì)¢¹åË—[Œ™bØ7cæ:„! ‘e:wî±Ú¥K—J÷îÝm~Åõõ R]Uc˨YIqqq¸N”‰Vç'ß¾+…y2x¤1/)+£½eeÓ™µªÖ˜pÛèü¥RÚ5_òKºZ¡ÿͲ%‚2ûõ<"b;™@$@$@$@YJ¯à¡!v!ž†˜F9ä…Óp+áJþo[´6J}=:ö5Îë#¦GòHtN,ˆeˆ]ˆg˜;`Æ›–Cñ*¨!r1 ­éhסNÌ<»zë„ÙêDÔ¹dÉ’¨u.®úInÒKzöÁlx¡äçI^n£ÔåšryMRbÚXØPn—p©)«—õ7É‘ÅK~ŠZ§·ÝÜ'   ,!¨]R­bØÛMÇ(§yÔG^MGØ›q\ÜÚH,šÓtõ5¯îÃ8„ý6W<#œMèÚŠL³0» A««k ©Ú\ˆ\wC^¤E«é˜]†ðvE¹['Â*Ê‘7V EUÒ¿WéÒ¹\ ÌLs^®äS<ÓnŒi}#6³¢ÙŠŠê¤w‘9«VEm'úOG$@$@$@YH@g U8£‹:ó¬ÚR» q A…tͳÑrq›qÄ- µ…;6\}O²ÝõÈHÐ2šŽ# ß Û¸X&®ØTèBD#ì:Ô¡bWóG«WŸë£öá ¾QŸúš/Z¥E¥Rbì¥ËŠK¥ÐˆçB3]”[`‚&©i¨—j³Õ™¶æȪâz)1B:Z¶1ü‡H€H€H€²€« ½"i*¦]Á¬Ó¥á i7yݲnZÌp¢Ú[±6Øë»ù¦› qºï†ó#B˜P@Ȫˆ†˜…€vÅ.¡³ÐÈ«eïçPvÎ*Œ±¯¢ÇA]*lF^¤£îH®W—õ¤¡¦BŠó ¥È´¹$¿Àlæ#ļB;zÕõ5’o¶êÜ:£^ªs¤W×õ¢ÖéXŒ'   vNÀê@ÓÏðU'ºqÈç 0¯`FW(뾉NÜÅ% hÄÁâqn>„Ý åÝ}¿° i…S@ce ¬õŒU0\ñ¬ÚÔ4_?üC^”‰&vñá ÖlÆê*¢ÕG}(«‚>ò¢L´:t&3—Lc¼aD´YÄéÒü#¦ Q¥äæ;íæó¢ÁüðâªÅÕ²qÏ­¢Öi ò   È>ªÑ3Ì*Ž¡!á¼¾ åPjè_·Œ†Ýôah^£íbæ‹K@·¨¹õŽ·ñºïæDœÆ»¾ÆÃWñì†su¦×­Ì ãSð˃X¶®°°ÐÎDCï«æÇÌ0ê€Fi,c§‚Ú­KÃHÇúÑÛ*¢µ>äAõïêÕ«í¯ "_´¶ê:Ræ­ž.‹~Z-C‡•IA®ùÐlù9˜n2áF)Ì5? cΑ?.‘’ÂÔm3©­âϘë¸Ð'  è0TÂWA‹°ÎD4#Ò\ñša87ÝÍJMàßD4§~h¯å¿Hs7¤ºûnØ„xw?¦€Æ¬oYY™¼˜Æ/ºZg…1K ¡tüPJ´‡ ”Á‡ÈQŽ2ÈïŠhìC`Ch#¯»t:ëu5•M²E¿ýä«Å¯È’NÆ”cý"iÈ5æÍoÌJC}“,ž»FV.©”­û“šÊZÎ@{ArŸH€H€H #€TÁìúÀº¯z<†SÚ ýëÔš†2š?RÍÛÂOD@·¨ÀÙц;Q6è×9Í«>@ÀÁdžxŽ&tM;ë  ³ ¬ÅŒY`ÌJÃ΂ÂBbùà0ûŒäHu /„6–§Cé¨åU<£ˆlÌnG«u”—ô’M{ï'³æ¾%µ•õfù½r)+5m2b¼¢ªÚ´•,ZV!#ûŽ“Î9½dUݪ¨uFj?ãI€H€H€H PMa«¢ ?‚0|Õð]¬ñ~‚Xóš"ms‰ hmœÝÝGX÷]_ãÕ {}M‹i Ùeh˜^¬Y³ÆšU¸bB6Ò¹È §3ÓvÇó['Ä1ÖÆ¯ §3Ø0Û@8Þ:!âËË{Ê΃N”Y ?•9?ÿdDùJèg©¯+”ÎCeÌmdÍÊ +øq¬híD: d!°4}S³ èE8õ‘GÓÜøh‚e]qíÝG=1]Lmħ6Ò¯2oš»°n(«i§¾ Èó‡TP1/~~»¦¦Æ i¬õ¬«f`6ñ¯j÷Œ.ÅšÙvë„ ‡_°R'Ä0ÚÙëõ»lfLCv ÿü7f¨!þÍ_lg¼‘Wí¬ÑG:   è@\M¨‚X³úš¾æQ¨4ÞöÛGœuоFº"[“Â~LÎ  !^§÷Æ»ûš'ßÔ1g Ýƒ`6BNu¿ö¾7Î-)œì:!è!Ž-ZdÍCÜãêl³¶U÷Ý< “ @ =¨B¾ ãhZXMü"Λ'V¹P©æƒ è…#ì¸Cm¨7ìîkÏá}ÀÈÓüê»eüâÜôHa-§¾›Ï/ÎM÷ kˆéHNóDJg< d1VšÐôUE4ºíêKÝWQŒ47/Ò5 á6»d h¿Žhœë#ÏfÁýãÿhs'Y @»"­mæqõ¤vq®xv…³¦iÞ„}ØxD- ;'ƒ†]ƒCœ»¹OGÚô·Î‘®aõ‡™•5ž5ñt$@$@$@$@„@=7]ýÖløH¯ì]ßƾwƒÀņx «o¢Âñ#N}|+‡’Zþ›Ìh­YE4ö5¬¾Æ©¯ñ^_Å6âéH€H€H€H€:h@èA8ˆ`¯VÔ}¤«^Ô8݇vÃÈ›§ K¤2md¬²ÚpäÓ°–õÛ×4äoKûPžŽH€H€H€H ýP ¨ºÐõÑ¿}í%Òb9-+Ÿoº6Î7Ñ©Qß“lw5ÍÛ(Ýw}p÷#…ýŽÃ8    ì%Iºñè½»¯a¥âî#Éišú‘ò…ãƒèp!Ÿ@¤FŠ×*4¾nÚ&øš®ùé“ d?h@¯&T­ˆÞÇÒˆ‘Ò#Å"ª T(Bfmúš û§aõ‘Çvã’Ù>ÔKG$@$@$@$ùt"ÕÕhµW7ê¾›OÃÚKÝW_ãöS)PÑH·¡Þ°¦k¼»ï†î ’ ´K®tÃ茻°:oØÝ×&‡ȸÐÿ’››c7詞=KdÔ¨þrôQ#¤¨¨-Ò²y\BFÇ;B-24ïhž ùÝjدîˆqIëeÄ#DOp;­9€¦i|Â>Äóc=&}úô‘c=Vzôè!yyy­ê ‹j/Jm ãCÌ ‡ÙßÏ– 7ÜpíEHi’UˆD8móÉÔ†z:Z¿¹žÙ³yκ<ÂBaµ7ÏÙfˆm`¨Ã cÄó5ùLQãŒï—ÈÀ~½›+§—¦æ‹G£ÑMMMRW× ¬–§žœ&§Ÿó†üõ®½R!¢õ¯ MÖ°ú‰t£ÍeâÐA$¯Û”ó–õî»ùãOš4ÉŠæÃ;Ì<-5[­@ »µëŒ´9Z;“‘ñ!`ÍšÉÄž(É?7ÈVÿ“Ë–\Sõ’mòÙ’iò™â>¾¤¢AºÕšûWØAšÕŒZò`†ƒg7¯Áà,îÖIŽ>ug¹êªÿȃ.g¾u¨xÛþuUj¾7.Þ#)‡¼¡ŽF©=^¥ŠˆIncÝ0 x÷#VÒÖ„F#ô¾øâ 9á„lU؇³³Í1ñجüLJ@}cƒù£q/B>™•²M[ÌBäQÂÈ6at ’iD4mJX^Õ kªl®pE ãCˆý8 .´™yhŒ h0~cS£ÔÔ5Éžm!ÏÝ7IÎ8u˵–¡êRù¯;|8Ž»0Zšt—Jƺð6iÑÒ½ùÚohh°æݺu„uOQa“„jîØ…šÌ»}Í&8GàüL|ÒÕÏT°­¯¯·ç¾žÿÉêK]]äçç·‹¿¥TpMÇhõ¤jì¢3hZºØþôÓOÒ·o_óz¸¨U19‚ çc6¸t1—þÖ âÍž±ù*k›¤Ê½lsé¾N€`hÚˆg£0 ]S'Ò³o©jÌk¡·RÈZud¤Ez¤´67+ÝW?Á¬Ðoºw?p‡«ªªÂe øpUá¼Vâ0†qóѬ‘¼‰yùå—eñâÅ&%ÄñÛn»­ :Tžzê)9èàƒì‡tš_äæ×8øAâg̘!S?žj‹—•–É Aƒdûí··mROÐãÆ›ßÞ¬Ìg¾ãüí‰oËÿû_Yo½õ,Ë]Æìbû¤HUþãO8^º”w‘»îºË¶KÿI'ó lŸyæYS±&"“#Æ!0_=z´üö·¿õ=_{í5éÓ·l¹å–ëñcŽÓ—^zIvÛm7E®ÿË_ÊÇlãKKKeƒAØs87§åâ?éb”+Ú…kÀ’ÅKÂ}C×€‘› Ä åüøÅ?nÜ8;vWþöJdO¸[Øü“ ÞÉd»ÑÐäé§ž–ƒ>8ü¡òGS?’3Ï8ÓŠãN:É[o½e»ãöåûï¿_>ù䓸úˆk¬÷üÜaûÂ÷À­ß°ùŸtÄ'Â4Ò5¶ºººÓ }À}pðàÁöž4bø…/£5kÖÈ3Ï>cóäØïF%» ÇEÉÎ_]ß$µ¡y’ýˆ¶®Ÿ¼ÿ–|4ù¿Ò³÷z2bËíd«ÆD+’ö´s~3δi9ñÜߦåØV|l^q¬éá© $[@û5ÞçÝ×þi<| kZÂ>fKJJ¬pVÁ _Et¨âæ1{¡À-·Ü"•••ö†© èׯŸHÛyç­ØÒ?pÍ£~¤x¼êøê«¯dàÀÒ¹sg;P "óOú“pÀòÍ7ßÈçŸ.‡z¨à&¡.RýéˆÇÅÝδ:C­ókÑG)K—.•ƒ:H¾üòKùôÓO­0@ ¿üë$Þ =ÎôÏÏ¥£AÙ~öÙg²|ùrÛ\ˆ‡E‹ɾûînþhûäí—Û<Bn±ùÁÇ"¯xÎáp#MÀmO*âƒrEn½åVßkÀ¦›nš’ö®^½Z0Ë:räÈpý7»á‹ãRÍ)‘ú“É×z}-//·}žðèÙk¯½ä†n°û+W® sR&ÊÉýÛÖ— çg´zlƒ<ÿ$#"L#]c+ÖT´bªMökëܹsí "îQp` `¶1öµ×ùsÏ9×^‡jjjìC Þêá¡"Îï¸éˆ¯1º6ŽÃžŸèÐø+N/+—/•±û,ß;C¾úbšŒÜ64ùãTcú½7/‰æ_¼ 4>}û7Os] æáö-Ñú£µSëÄøá´Àe ç‡ÐõöMg^I¾=¼õ´aßÕ…~C…ªæ©óî#Þ/Nóö“- 7 Š‹‹í`ª ^c‡/1°çž{Êõ×_ß*ìªáâ­Ç­³;í´“Eh‰äzöì)÷ÝwŸM~衇ä²Ë.“?þñöƒÈHeÒ~é;¾(ã7ìÃ^Áª R‡–I‡¿.Û”íþð‡0’+¯¼R>úè#¹ûî»Ãqn R¿þþ÷¿Ûl‘ÒÝ:¼áhíͤs8Z;½}r÷ý®‰prëŒÆŒ÷ïÿ{û€íÍ“ªcz“È~2ÙâøÞëë‡~(§žzjøšãÇIù¨O?2éüô¶7(Óh×X¼)ò2õÏÝ¿à‚ ì*K7Þx£V¦ñ¶Ió_z饲ÕV[ÉÂ… eĈòüóÏÛ•°Üc¥;\Û,2×~3ÒcÚfoü/?Î’©“ß''}'=záÞʯBÕ›?R=ÉŒÿóµçË€ 6”Ó.ûc¸=¨bB6ä¢÷+áö˜Êq{ó™J3U˜Õ7›y8Y¼²RòŠÚ¿©O3Ĩ^Ëw©Q³¶ßDh,eW1Ѷ“Ž yì iž¶vã—,Y"[o½µ]SñK›÷ß|óMÙ{ï½íërÄðÁràÚ™f\<æÏŸoë9ÐÌ*ÃaI=ÔAíÖãÙÙó¡ñX26h³fͲëXŸy晲ã;XsÜXðÊLÛ9Þ<9òÈ#eƒ 6°3¼¸Ž;ÖÖ…< ,ÿû¿ÿ³í‚€ŸôöÛ­˜èq‘ßÝ4¾DøyçgÏ“åË–I½9ÿð7lØ0Á ìí·ßúñù»B=zë1ôžmÎaS_«ûê'3>®à†óAÛ£>Úõ¡çܻל{`„4üâoç.Ê î„ã—|0\ßcŸßÌëÔ_}õÕöïe!bPÖ»MÍuc‡‡$m‹Öc¸qéŒO&[½žbÍ~ôáðÈCœ{às#/'ô]Ï}¬º´ë®» Xáz‰‰÷üÜÈ练Ï5õMœ8±Åuã´ÓN³-Ê<Úõ,R{¼ñA™F»Æz™žsÎ9r¼9õ|ÅŒñî»ï.x›uóÍ7ËäÉ“åñÇ·¼ñ°‚¶Á-1¦‘®¥îù§ß’4škâñ›Ý»w·(ø†h÷¯·#°ÕúÑ6˜ƒàš˜?ˆÝ­ IDATy+ Ö^vÈ«ùÝ4ÄUèêºFcÝ(•f5ŽJcÏQe–aþ_|c^¡ý|ÿí×}ó/X¸H®9ûh9x‡r¾[ÉÔ÷'Ùzn¾ò yê¡;[ÔÇï/”žxÀÖóñ”ÉrêA;šrýåÊÓÔ£í¹ñÒ“äÙ ÷Ê£÷Ü$Gï>\Î=jùìÓl;'Üw³|öá;òÚ Ëñûl)“þû²·âÙˆØGÂev—ÿMCÿ~%_é°«0üÖT7ʪªFY]c†íÂÕæ{›" ;Ô 4„j¨pgÄèûï¿o/⫸ ãuk¥±óYݼ‹:ž¸7ß|sÕUWÉþûïo× þå—_¤°°ÐÆß}Ï=öu9Ä òBcsöqã´õ›ã@ÌôîÝÛŠ@ØAø^tÑE¶?{챇µÕÜo¿ýl'œx¢5Qù÷¿ÿmMD0sýý÷ßÛº"rýõ×ÌêüóŸÿ”Ë.¿\ þƒ8´ [¼ϳÏ>[Î5báÝ÷Þ³7@Ä©;ÑÓ¦Ë6a•9sæxí²Ë.òã?Úcãv’¸y=üðÃ2uêT¹ð ¥Ð|`4~üøð8vúérî¹ç nG}´üë_ÿ²f$°ë;ÜäƒH<ùä“eúôé6 3 }Ó>$ËÊÖ=.n8o]Û¤#î‘Gœ#&L[o½UnûóŸ­ C:øâáDû}œ`‹ó(×¼~}ؔǛ;î¸C¶Ûn;{^£ly˜òñz# +z22~ùQ&•.®à6×ç€sï Ÿs·áÜCqÀµ&dp?ýü³ldfâ´ï^Æ8OÁé…^°× äuÇîÑæ±û³3v©doÝÉd«×S0DÿÑWœ·¿ùÍo,[˜½y9áø8ßp½†ÐƵü¯¹æ;Nj6àöÇ{~Þç5ÇÀÅéæºrÖYgÉ×_mà:¶Ñ®gn¢…ƒ2võ2ÅÃ&{þdÄ2X⺠³!<äb"s˜T¸øâ‹­ÉÎc¸³Í5ÔïZêíîµpÕÆ|Ç~òÉ'íÃ$ÌÁ(Òý lˆÀ<ðw‡*üà-îùçŸ/÷³FøñºŸ—ÖH^I­4™ ÚœæÉZx9vNÕüÛ*¾§ŒžÜ}íÙò¾¹wí}ÒµRÚ¥G8ÿÃWž Ýú ”óž&ÿ{û9¹ûÆKåì{'K§ÁÛÉ?¿Mï~Š©½e´3h£å¯7ÌÀ >òÁ7¦Ï&Î,ggösór%¯0ßší—ö˜7« ž1 /.ÀØì O\æ?¸X¼áßu:‹­uê>>~Ñ0òc%<Áã©3y㢤y´¼[·†Ñ.Ü@13€™A1HÇë1Ì âÕDôÌ™3­ÈF}˜U…ÃEË=â°'|8ØVk:n¸è»¶É6S”PVËGÉÖ* ‚b³ÁGu”µË‹Ö&}uqë=fõ!ŠqÓT‡~cöÄmVMÑ²È ¶ØÿÙÌ¢ràðí¤bñÏÒk³d³1È矖M¶ÝU¦¿þ˜ì}âÕöØËæIMå*yùî ‡Í7«•”˜ŸÀF{ðÙ} ·³¤4ô«¸ù'²óLzžªš•¸eÐþbOäñëW"ñ–ših#&$M Æt061]˜g–..°Ú |¸d«[«²°‡˜ù…ÀT{,ü‘é…ÝÕ?roXQh^ïšÀúÇ iÞ}-W`Ï>û¬V³‰y…Ö‡ú5¬eÔGxRßÝÌzÄïsÏ=gŸ¼ñp!ªuÁFâ³Ê0E€[fìWáp,ýª ±cÇÚøDþÑã%R78ØÙA¸cÕ<Àùµ æp˜aÇk®Ã "À íC¿q“Š4.ȧ㆙ì×_½Õ´¥onû ·åøÊÂ{^¹ýF»°§ùüÒ•“Íhþ/üMiÄãŽ7ŸæG|¤sXó¤ÓO„+Êø•‹uÆ5+G¸¬¼ÌÁé`ê–÷æÃ>œ›ÇF¬ÃüÅjÊø•8—öݼ~œçæQ>ÞzPâ#ŸÑ®±x˜Ç=ê·x£ˆcfâ5¦‚p. ÌÜN›6ÍÞcî1f…¿úÕ¯ÂËŽ£›aoyo›¡ùe7˜Ôp][ØâM.êV'·ÞxÃÅùyRZ”·6»*èПUÔøÒ¢räÅfÖþpóMÓ7S¥ïúÚüûô[¾Ý¡²N=£Æ#÷_v¸l·Ç¡R]±R¶»¿ä™ã÷ê7Pòróå¼;_53Ék'€l¦=FKA¾9?›ÛYhˆ+-4í6>tA^ŽÐf¿¹ýÞ2EZÆí+ ¿Úëk¿LyTa.Sø×˜˜g¾€618n¾ÐÐ^¸_d³€ýU€C:üc$¼žÇ.î¦Ä!ì݀ħûÞ4ï>òáCÜ8ñ¤1 [FÄCàBÜbI­Ïë£>8o<ö1³{IÔ»]˜màà ¤á†€×dxU×]ª˜]@ÿ‘>xð`kG|çw fч¥ú***|…t¿-3¿¼ˆÃ,9^×bFû˜%F›03­MHà >ìw±”Êž"¯hÑo\Láðª&3˜1Ôv ^ÃðÕ! sØÔáa¯za§7iÒ$›Å-㆑ß7|œ [r,Õ¤ùŽY(ÝêeëÖïö/V<òjo9ï>òVRÍ'>ÐÄ8­ÃëûÕáæ'ðÔ¸xØjÞDüD¸Fê_¬sopÝÁ"`af¤oÚv?>8ßaZ…7IÑòEjÊè9 _ëðcU4½­~2Ù¢-Þþy÷“ÁÉÄüã×÷hרÝͤ®™x‹†ïðýÞfeò5ÖËç¾I-1ÖÎÆG„XýEY€¯÷üðŽA4~Þãi½ðÛÂK¹Â†í†úðFÀ­?V³¸%…R\`f|_b>x+†ß¼yãWÌ-?Ϙ"ùæ´DžÿgÞpš{×À 7‘ƒ‡™ÙåÝdâ“‘J3«ŒzrÌß]]µ­óv—N]{Ê“7!£÷?N:™YaÔ¿ó¾GKmM¥LzúÉm¬³õVimþž 0ÃlêCþB#ºÑ/mgß 6’y3¿ç·Çm.£íGsv‡ò˜zª–/”Å?|îo¾Y?cΗJžùUa=î"“^µ|Aø¸¯Çµí1³÷%Ø GÌäb˜gÚš+Ef+(.´Ú mÎf—Õ¯ðpƒÄI©.vÑ6äƒC97Ÿ–GšæÝGú¨5#€FØ—c¬Ü6a­h¤¡½x5‹ôQ<Œ`U¤Á.³¸±aýc|á­ÇuÇqOS7?Ø@ãÕ$fc`C­é~ýzñÅ­pÔúqãÁJ+ð5?„%ò) ×}õ£ÅÇ“GÛ yá£ípnœÆk¿°²Ø×6hXËaßÍx|€‰WÞcÇŽµ5xý«å´-¯Çpù{Ó¼œðq§~‹¼é` ߯~=Òܺ#Å»ùâ­O9xóãïç¬÷Üù„ãƒÎCìã|Ç›!Øß+/äqÃZ?òâ(§_ÿ¨¬?dc›ÿ¬?>&Å%¥rÅ!ÃåªÃFÈ•Æ_ðƒ·ö2fÿcdõòŲçá§„ëï?pˆ\tÇ‹2å• rÑ>ëËå•ÛÏùµ¤hf˜ó€Öö@@ ÚÎÝ=IV,™kËÍúôm”Ñ~¡ f¥µ_Ó'>'ÿél+~QOÍê%rËé¿’š5KÂÇ}òæ³}ösáãB {ù”ql…5Ä}øáùÖ2,-[«½ì‰“¥ÿä`&/’3 ¡+cBÎõönPدa×Ç_!öÕ‡ öá#N7n„ÉÚ_1‚8ÌzbF_[cÆ×µ•Ò®©¤Þ ya¯‡ª×á ›»…7O´}Ü(!Ìá àp!Ä…Äë°\fÁpñw¾¬ÆL ^µuø!ˆô ¢v´Ê‘l£µ ¯IÑ?¼*uÎaÌøâã×.ÑÍ-¬³÷~c­\ªÒa›ª¶øÕ‹$œw¸!µ'— ®±Î=œ[8߃þ"þž!ÈÔV=Ó9§‚m<}N5§x®±xû„‡q¬þáéºh×37Ÿ_8¦ñ\cýŽ)"Úû-D¤¼AãÛÊ×!˜0ªmu¼Çø“Ù`ý>V¤ø©ˆo<¸.þå),.•næ—]§ù«*ÖHMU…tí²ùÕx7/ÂÞøåæãÃ’²ÎRRZÖê¸~ùµ>Ô³tá<éjÖ¦vïûÞúÝüÞ~Ūß/?Ê@6êfÐX[è:ó%aum,[U%ïLûYnÞ7×ê LN%ꌹ§YÂD¾6›9Š`-Eü†¤nØ×xøˆw}„Ý ÝÑ}„ý6¤ãm·õöº¬¶ÖÎÂ<NŸ]Ñì†52}D";kx™o­k0sºÆŒÚh‘¢óc;Ëó¤`ÑTóöì×vZ±f£Ÿõ!˜)àƒˆÑ£GÛW:#ï¾öȦÁÅÇ^ØRé`*‘ˆ¹D*Û”-u“mjF’\Sõv4¶øv"Õ®£1Už©fÛµ[½1©Ô£ÑO„€ÕÎæøMF@cƒmÄê•"µs¿^ö¡:‘ºÛS™¬Ðx¥…ð‘VqÀ/Z 4¨C n*ODÌìgëH*¹ÅS7ÙÆC)xr Î,Þd/©øó‘iü¬å4ª¯¾åÿ*ÎÌ!á/äÌn]]½ü2ó'ùøµWdÙO_Ûpƒšx¶G®Y- 1Ó  ØJáã,9t½ùEAÄë,t{4¶™H€H€H€2t6¬­ÍÕtVV hµoÆL)Öa>ýôÓíš‘+V¬°Ë e‰Ç6 @{%…jñQ/Ìf¡½°„®j°öÚ¯XíÎjív‰Þðd¤OGn:Ã$@$@$@$@Á¨PV?Xéö›»Ãh"`õ5ž> ÄC õ¯nÄSŠyH€H€H€H€H ƒ €î Ïn“ $F€:1n,E$@$@$@$ÐA P@wÐg·I€H€H€H€#@7–"   è ( ;èÀ³Û$@$@$@$@‰ €NŒK‘ tPÐtàÙm    ÄP@'Æ¥H€H€H€H€:( è:ðì6 @b( ãÆR$@$@$@$@”txv›H€H€H€H 1Љqc)    J€ºƒ<»M$@$@$@$¬ÐMMM‰Qa)    „ d»Ëj“““ðÀ³ @b²]ƒeµ€NlÈYŠH€H€H€H€" €ŽÌ†)$@$@$@$@$Њt+$Œ     È( #³a ´"@Ý #H€H€H€H€H 2 èÈl˜B$@$@$@$@­P@·B    ˆL€:2¦ @+Э0‚H€H€H€H€" €ŽÌ†)$@$@$@$@$Њt+$Œ     Èò#'1…²“@SS“466ÊA×ý"R_'R+’#M’“Ó$ ¦Ï¹æ¹2¯Iò ¤©PLŠH£‰ÊÍÏ“ÜÆiª7ùMd=Ê5š–O:¿ëŽ\>ùrrÌè˜1‹ä˜N>bbûõõõR`& èH › P@góè²o¾p‘¯®®– u•¦F3ólîMÐ9 MF8±bvŒRÉyÍjÚxyæaæ®ÍM"Tm£™®ÆÄ(Ë'Ÿ_y9o¾¾'/#I C à!â¹¢¢Bjkk%??Ÿ3Ð:VlVrP@'‡#kiGtºS‰1ÑhÄvFÚôÃXjH®™}n07„¼Ü33z™gÄtSS£Ô«F“ÖÔ„?Ÿ fy3#ŸD~yyfèH€Ú LL`×WÌ@G{kÐn:ņ’@ÐQà¤* —¯¿þZf̘!?þø£¬Y³Æ¾úÂH^|ðD¯Nãt~6¦kŸàçÑZW °¯[ýõeÓM7•áÇÛÙ —C08644Ňÿa¢šl®·Æ906³Ó†½iCÚa`ŠÙ´ð±X>eüÂŒ hWpó»Wíï“k‰¥úž¸öH !Õ:ÄA`ÆÊ‹ö|õÕWòÊ+¯H§NdìØ±rÜqÇIYY™š¯Õè| À^xà˜4i’¼úꫲß~ûY1­ß‚1"+ëŒ-´1áÀ F,c6R¹&õæ#Bg“^eêÉ3v˜6™ð¿Ô›±Ä÷ƒðY>ùü`bCG$Ðþ@ø¶Åñ>›^ªî‰±,G¦i°`­;«t[ÄUltÁr`Æóõ×_—Ï?ÿ\Î?ÿ|’èëþ…k¥ÞL?×Á–ÙgÌœàÃÁF#¦sŒA±Ìù°6ÿç™/sÍf,8ì¬t­ذŸ®7Ë'›Ÿy0iãM¸cý…°·$°î à~ Áä¾I Ú*Þ'ã#–ª{b|G?W&i°ø[άÐñcHmN\PÞxã ™9s¦\~ùåÒ³gOkB`®7Ö, µGÏ‚Úí¬/æ}Á«É.“tÉ%—ÈÝwßmmîöÞ{oëíé‚Õ9R•4óÌ ´Ó&œk343&› Œˆ.,„´6ÿ™ÁÂ>–¹ Ù?‘×`f«MË'Ÿ>@¢#h`mMä6÷ÉÀRtO Ðf5x—JñiÁÓØ<vØaÖtŠlµÑV¬:›áÖfºuî\.Gq„<ÿüóÒ¿Ùl³ÍÏèW6äK5L7rí,r½1‹Î3 >cß°™†š6qƬ£ÞämÄŒ3f¡Í fÔ5,Ÿt~y†?WÀrÏ|†I ó àÚŒë6fGƒ h”å}2ú§ãž½Lõ €öIò~UU•µÛÝyçíÌ3Ä368üAx¹ŽXwÅ—Ë<`ËTVVZ‡vë®»Nz÷îí-–Uû¡ …µ”°ýÂÅÕu¡Fûaá¨Q£äý÷ß—6ÚHJKKÝl1Ã%ÅÅæ‡QÌxÔûf<Ñ›IÁŠF0çó |Lh¦£sz.2æ9ö#C³Æ©iOÔµYï.å“Î/,ùm³£Œ9øÌ@$T¸.cö[P—è}rã‡Ê7Þh'§‚³=åO×=±=1É„¶R@§ppAÁÌ3L6h„õ1ñ„Ž??í6gÏ=÷”§žzÊF-Z´H.¾øbÙi§dÚ´iR^^îfm×á½öÚKN:é$;£ŒŽ¨`öèæÐì3>ÙÃ,°ù°ü `W2ùæ›odË-· tñîÔ©D ÍtrM~£àÎc Á\`s¾9N>l6̇……f];3)jâͬ´ùð°ÑçÚBè)4f,Ÿd~vaáÚC7–Q8OÔ1=d{ª<¼>ù^S½çö“u~`Ö÷6lA\[ï“è[´þiK¦ä]W÷ÄLé{iGðGÅöÒ³ hgMMÌš5ËŠçb3Û ‡8]h¾Á|(…‹NË­Þ~@…8\X ±uïÖM~ÿûßË‚ äÁ´q¨çÜsϵ˻m³Í6òñLJóÏž=[=ôPkÞ0hÐ ¹ÿo³ix <óÌ3²ï¾ûÚ@P÷wß}'ëýúõ“#í>ƒtï=ñoÍ÷Ä;ï¼Ó~›tÕUWÉcížøsOÄd–÷žˆû¤ÞýêYá¹·z®Ë{bqc^Ú@§ô€„ÈíÓ§]·tň¸Ðä4°UU IDATÿP‡ýíhÓó,mÿµÒ˜TVU"ÒLˆtëÞMFŒ!_|ñ…êɧdö÷³eòäÉÖøú믗 M°Ç8ꨣì,õ ÿ|Aúôî#UÕU¶ Ö¾öÚkåêk®¶âõ_pÁ²×Þ{Ƀ=(gu–<÷üs2~üxY¹j¥`f÷¦›n’Ûþògyö™gåŒ3Î-·ÚRxð¹û®»¡¿üå/²|År;CþìsÏÚ¾tàArØá!›ï•+Cõ\vÙerÅ•WÈôiÓåøƒì±çrÒÉ'É¿ÿýo9æØc¬¨¯­«µ¿b…[>fù8ÌD7bù ãÛÙó`4ðÄÇf½zõ²à]RR÷˜–!\hf‘jÍ̲©Þ|hU°•f¥Èøùæ§¼q;Àd4>.Dj‹L~ca€&™Qdù¤óÊ'|¶ûDfFÈø›ÅT@·å>‰ûAMm½·E»Ïà¾ÛâžhîÉ8.î .”'žx¦ÿ륗lÜúÜ/+œ{⟽÷Dcr‰Ûí=ñö¿ØiQÏ™gɳž{k¦Ý3à4jWM  G ‡ æø.]ºX±ç>¡‡Ä¡cÆqf\H®5‹G³— ÃÛæ4¤4Èδ"³Á»ÝMV­Z%Ûo¿½]Ú æ _ÎøÒ®7ýÜsÏɈá#P¬…ƒH·ß8‡õ•1s}Í5×ÈÊ+eÛm¶•)L‘#8ÒíÄE¡›™_´ë"yöÙgåÞ{îµöÆXRîÑGµÍIoO’Í7ßÜÌà†ì‡ "OýXöØc°“>LYúöékíÖÌW{åæcÀóÅX—ò.Vè£Qx¨€ ½– üT4~FO&Ýçœfûh0ƺÚàÄá¥@®±Ä0ß Ú¯iMÐØD›°Ë8f‘ñóm~ªÛ h“-È1â9Ïüå@@Cx³|rùÁ\&èM8ȸ3/ @jè}-Hím¹Oâ8¸Ú­ù¡Ûï>ƒß_ÀæwOD›ñ]W_}µm¶½'š{×5W·ážhÚÔªžm[Þ[q0¿¶®Ë{¢Àâ&@7ª`!þ0‹ [eD=̘ºOéÑD‚^ˆ_ž¢§L™"Ç{¬­ç½÷Þ³ö¿/¾ø¢Í‚é`â1þ|+@`~á–×zúöíއxF;/ºè"M–ÁƒÛt´mîÑ£‡MC0à ± ‡4äÁ1мBƒ8W·xñâp=(;Ȉ8˜]ÀiYoØ&6§k8ä‡f£Á,P|Ñ&ôi*ùß|S¢Ùhs+ sŒ†06“ÎöƒA Çža ̦¢Ù,Úa~`Åg“Ïx,¯œ’ÈXéH€²›@[ï“ £÷ø‘î3Ñî‰(‡·Äz¯LÖ=1V=‘ÚªíÐ~¹gâZºäÞ[ÖͽX( cjCº =ØBá›+:Quë?ˆÐ5ùÕÁtöÉ»í¶[XØžxâ‰ròÉ'kë/[¶Ì I˜_À6ÚuúG©õâGÏÇ{LÖ[o=7«="4¯þaûí£x˜cxæ÷ó‡6aÓt·¼+ˆÖ ù!¢Ñ&´iA\½™°Æ¯ ¢XC]H çš¿˜r`Ö?¦S |6´Çm“Ëý@º!®­÷D÷8 Ç&@›QÂ9ð‡ »,,C‡Y\ì놓aï†4ÝÌîb–xܸqöC<äúÒ&L°¶ÃøöÖxªÅj³÷ÜsÜvÛmÖ„déÒ¥ö)å´ k^˜iÀŒ3Ìh3ÌN¾¶GÛxC:Úrï½÷Ú%ûvß}wÛ¯Õ«WÛx·­O}¤¡íø‘͇z]Fêôb ÊÀ– Z^óFòQ?.R#½iûŠŸQ_±bE¤ì­âCóç­¢ãŽ`ùب¦ÆÎÂ$@DÊãí"îuÝ»w»e¸n'ã>©×?_ïsî=qÉ’%öG¹ô~ƒrkÞ»îºK~÷»ßE¼'¢ƒÈMéîûÕsK¼•Öü^÷%Äឈû5õº.Ù÷D·n†ã'@?«@9qÂãbqç}²Æ…þ¡EªéÿùÏì*ø£‚MñÁ,çw^øIùÒK/µ&˜eÞpà ­-4~.vÆ<òˆ]e«eàÂvúé§ >X€ÃñQ'|ˆpÌbãE\üPlÅôWóúí£Hßj«­̈ãâ‰/«ñk'™åéüÊé±Qöøã·í›8q¢¼óÎ;¶]î?8†^0T@+?Ìxà)àøXy`öQVVfëE8žr±êe: tT˜¼Á½Âñ\S‘§-÷I°ÖûY´û &I"ÝQNë@}hO2Ü[µzO|ûí·ÓrOD¿é‚0ßb­Ýó7'·ª?qÞ S–دaׇjþúð؇8Ý4~¸™9}ÀÄ'ä0«‰¥ÙT&TI a?òѵkWû‘Ä)ÄÚ´kñ¶á ¦(D:>XÀj^‡/Œ!hqÜXOä•AV²ðÖ‰ó vØ®M™7ß>2ðtFÑœ hÌ@C8cæ³óX'?Vƒ c9”ÅkF÷á&舱ŽÁt èH þ œ!@±Å;1‘®û¤ŽEºï‰8n"÷ÖtÞ•M2}LnÍ›7O†špµFœb m6¼r†­&>[Ò ûñ®°»Aìê>Â~›‰n^­ Ù7š#¢Hæ 4p¥ÈAˆbæøµ×^³&jŸíŠzÒQÆ)j !# GØ~Åëðqa2^?u¸ðÆ#ÜÁHÍ7p _<¤ì½÷Þq•GðÆÅ|Ô§ÒèH€H€# 3¨ðãuéºOj{ÖÅ=1‘{k:ï‰Ê†~0ÐÁxÊ ‘ŒŸÝÞ`ƒ ä•W^±?R‚×[ˆÇG‹L gqfˆgÝ0ƒü’Y·&+àì>”DC¼ñæVÓH€H€'€ë0óÓû!üD½c—Œÿ1±csJ¨÷j˜Þzë­­4~©¯ººÚ΀R<'„Ô>t€l¬Ÿ0‹ßÃ_pÖ™üÄjf)  tà}²mÄq?ä=±m -M(¹8ËéÓ5~Ââùºë®“éÓ§[A'ÆDÍ6â<|ÖdSÓ ØU}öÙgöëh|8®°·ælrÖ 5;B$ÐÁð>|ÀyO Î,Ù%²Ú„#SÄ)¾†ìt§N*÷ß¿ýRy[óËD£F²iøè‚Οf™çÌ™cm±8=DFŽi}kWƒ/ @û%Àûdüc×^¢Áâ',gV èLy¥v@ 0Àš 6Ì.莙ÔI“&ÙÙèl?Ñ‚–-sƒ>úÃj&Xbo“M6±,±V5lÉéH€H€Ú7Þ'ã¿örOD;³ÙQ}¤qt!ö°¤~v¾áV°„|˜&PD· üâõ^ii©}ø€ ³ÙþÇÙšcH€H » ð>}|yOŒÎ'©Ðé¤mŽ…“_×ÉÄŒ*„3ÅsôAÐ „4EstVL% öN€÷Éè#È{bt>éJ¥€NiŸãàOÛ4CðÃ(  O€÷É d,®Â‘±CÆ‘ d" èL¶‰H€H€H€H c P@gìаa$@$@$@$@™H€:G…m"   ÈXÐ;4l @& €ÎÄQa›H€H€H€H€2–tÆ F$@$@$@$‰( 3qTØ&    Œ%@±CÆ‘ d" èL¶‰H€H€H€H c P@gìаa$@$@$@$@™H€:G…m"   ÈXÐ;4l @&ÈjÝÔÔ”‰ÌÙ&   ÈjÙ®Á²Z@çäädõÉÉΑ @&Èv –Õ:O(¶‰H€H€H€H } €nßãÇÖ“ ¤™tšóp$@$@$@$@í›tû?¶žH€H€H€H Í( Ó œ‡#   hß( Û÷ø±õ$@$@$@$@i&@fà< @û&@ݾǭ'   H3 è4çáH€H€H€H€Ú7 èö=~l= @š P@§8G$@$@$@$о P@·ïñcëI€H€H€H€ÒL€:ÍÀy8    öM ¿}7¿}¶¾¾¾^¾þúk™1c†üøã²fÍill´›ö¨©©Ésrr4J4.aL÷ç£\àçäåHA^tîÜYÖ_}ÙtÓMeøðá’ŸŸžÓŸã½öŒÕqAL&ŒÍÚ–1D$@$@ñH‚ˆ¿=Yø«¯¾’W^yE:uê$cÇŽ•ãŽ;NÊÊʤ°°0«û¾®;WWWgTðÐ2iÒ$yõÕWe¿ýö³bÚuÉl'Ç;>šëblâks‘ €? h.Imhh×_]>ÿüs9ÿüóeðàÁ-f“~@VØ‚@^^žÉ®»î*»ì²‹üüóÏrë­·ÊO?ý$ûì³ =™Žã?ÍtMü-cN  ð'ÕÚÏäÁCjcažñÆoÈÌ™3åòË/—ž={ ¬3š-5RÛÖn@ãÿY ΋¾}ûÊ%—\"wß}·äææÊÞ{ïmýd âx¤˜Æ± Ø2f' H@¦h°›³XV èT½šIÕÉ€f°y>ì°Ã¬éV¶ŸX‚uÄø{9c_·ÎËåˆ#ŽçŸ^ú÷ï/›m¶Y›ß  nŽwì!_c»UÌA$@$,™ Á’Õ¿z¸ ‡•$ÆUUUY›ÛwÞÙÎ<ëÇ‚˜Ö°ë744šÙéFù裤¸¸X6Úh#[në­·¶& (—¬íw¿ûµÁNV}±ê¹ôÒK¥[·n²ÁØàqãÆÉ‚ ’Ö÷ø`Z_¿–±¦!"7ä7Ú G%ï¿ÿ¾`¬ÚêÚ:Þÿú׿Zð€ü_ÿú×qÚ—dùé8×ܶ®«±iëØ²< ( h%‘B3Ï0Ù8p =Bmm­CHóÛšš ðÖÎP£˜’ãƒ-8*cmöC¯á yÀ€Ò«W/ùæ›olþDOÔÝ–ñF[.¸àYµjU˜ Ú¢mOÔ‡7\pîEªÇI广w]Œ úGG$@$@É"@,’>õÔÔÔȬY³¬xÆl2â***¬˜i0ËÙ¹3s¡p½™9 mÈ‘‡¬¶ßn;+p°äÝwÞim©¯ºê*kz€<•¦ÎsÏ=×.Ó¶Í6ÛÈÇlËžtÒIòôÓOK½Éƒ|óçÏ̸¢ =ôÜxã6é/¾ø¢ l¿~ýdß}÷•o¿ýÖ¦¡Ün»í®ûHÇjcC[°4f—ÿùφã5õ£OˆëÒ¥‹]cúôévÿ†ë¯·í2dˆœqÆ––}üñÇe„©{ذarÓM7É[l!K—.µåп~+ÃÖ|¤¶¦VV¯^mÇB?`Ãòvßÿ½÷D\[ÇoÐÿk®¹&<^Vðn`©¯x Ù~ûíeÊ”)6ò{ì±òïÿÛîÃLâyÛm·µ°"]Ï6çÂà±s®½öÚk²ÿþûÛqŃ/¾øÂæCyîÝwßÝ>€œ|òÉ2~üxyæ™gÂé8ï°d >˜½ãŽ;l¼ã“αIdDÍ ‡H}C½ ž¹óæÚòÓÿ÷™œxâ‰röÙg[säÄxÓÆÕ6"mÅŠ¶ÔƒYñå+–Û}˜<÷ÜsòÖÄ·äÉïÈ–[n·¼hޝ¢ q_ÌøB ÎvØa›ÞßÌÿõo•7ßzS^~åeyïý÷l¿üò‹È—^v™­»¦¶ÆÎ`W€™©ç1ôÛ´ÍÛopKå‰}ô —F#J1ã‹1ÁzИF<¶D][Ç»Ñ̘_Ãõv¼Þmî?Æ ãî+ÆxrË1îÙ«§|ðÁrÊ)§È’¥K,“9¿Ì‘]ÆìbËýéæ?Ù.=ý§å¢‹/ ‡ðʶd±üÝ9×ð%P¦~Ŧ<Æûs^]|ñÅòàCÊ3Ï>#7ß|³,Z¼È¶g]ŒM¢cÊr$@$@$àG€ÚJ’â0ë‡ïÀl+„ĈúÛ-C`–ãÀïÀ3¢.ÇÄåÚx‘#ÆaE0f\oÿËí6y0³wõUWËÆolëÁ*»ÝMV­\eg#!j››ä€°3“Ë–.³e!tÇ>>\9š-ÿüsÏÛd|è““‹.¼HfÏš-Ó>fÓCí2y¶Ù²f}BûÞï}éѽ‡-¯ù¬¾š|¨3ã{ýj/³Ë9è ƒ¬h‡C=T,½zö’á› —_̰e&Nœ(#FŒ°ée¥eò›ÿû­ßöÛÌŽ{û6ååá˜È¦¡¶‡ûaÓCcqÂÚܳD][Ç<‡m<Ì áK/¹ÔˆüF´Üþ‡þ†Çؘx`ÆYÇigžy¦¬·ÞzrñEÛ· ·Ü|‹äåšþ™4Œ \ŸÞ}¤k—®áóN‡³çÚ¦#íXê¹¶ÓN;ÉŽ;î(¥%¥²Ãö;ØhŒWÅš ùðÃå .”n]»ÉèGÛ7¶N“>éíI²ùæ›Ûr……vfýã©Ûö¬‹±±ä?$@$@$$Y½ G’%T l>1ãZ^^.áhÎ*ä"UŽt¸ÓO?]n¸á†81Âi˜ÕF]êÞ{ï=;+ 3 8˜à=˜&@áÇ[FmãÆŽÛR›zæÍ›g…ºÖÙ»wo{ Äkœ¶õ£ º¡„!â ìn¿ývk‚|®CØ‚_ff“Ñ>˜Š¨ÃÇsh#f/a‹ ³Ô?uêÔíò¶%Z¿Q·rÔãØÅì°lZ󇄚Ž1‚€Æ˜!Mã×–‹JÖx£]t‘5ƒÁǃh‡rŽÖWäÁ‰x 5߀9:í‹Ö£ñêkºß¹3˜úÌ;מ#xD=0½)))±¦Z|m/Ú ³Î:+œŒ7)(«N«û©›µõ3D$@$@É!@޾µ¨HƒÝ§Š̾©È@¡Ö""TòÁáG>¼y°Mó _=ìl.lQ½îC±¦Ô˜aÖ_=të`†}«Ö áE‹Y­qèÂè„.ú¤i8.ÄDØu×]g?ô¶ÇÃ,)ì©]‡—9çœsäÝwßµ3•h¯öKËá¡@ƒvÁa[´~ë1\AŒ°n8LjÐg8¤%êPVMtoí3fÃÿøÇ?Ê©§žjß4ÀÌ%V_q\؇ãlŸ±Æ5XÃ);eæíŸ¦ûkǼ`»í¶ÛäÑGµKþ!?Æc78wp|ìë9·xHB[¢90C¿át\4.™c­ L#   ÖN-Éü1 @L¬\¹ÒŠMˆWT! Ó%nºŠ 7NÃÞ4Ä~øáÖvVgŒ«««­(D„-f ñ1ì£ýêÁÏZ#Ïwß}g >ƒ8ÅeÈ?hÐ û3ä°_…í+졵O8&ö1+ŽU6ð1C}ôùµŒÆÃ‡PïÚµ«ý 3ž°{V¾çž{ʧŸ~jgµ_xá;{ ðÊ °ñööéº)gKã´¼¶öËË—/·íŽ9°2 ®d7fàÇŒcû®mtûŠö»cŒÙjïGyÄŽf~•5.~…?ä£u¹ýG>8MƒtYŒ ìè!Ža~£"â"B¿°yÚi§Y1­õ¢­01Á‡¦¨Ç€ý¹Ö|ØÒ56†ŒÑ$@$@$ è„°Å.ÁÑaæVñ b¾†U€`Λ×M×4ø2X«h`• ˜Rà•9Ò „1ë«¢G˹DžXÃG_XUa«­¶²«&àc2µß†@ŠHƒI~xDëÀÅq±Öõ“O>iëÑ4õq,0Á¦qêC$ôføˆ3Ðø…@̈:Ô.µ‡±¡Ÿp0·@y¬-í×oí›újz<¯6a3ìu(“ìñ¾å–[ìZàÊÌí+l“uŒñÐsß}÷Yfè~¢|Μ9rÏ=÷Ø>ÃŒHß`fyÀE9 §ûšŽ7ø€ð˜cޱæ?{,=x×]wÙò÷ß¿}X±aÎ󫬬ÌÖƒ¼È‡S±†9D8€´nø©› cÉü$@$@$‹@f™"9sãV%áç#λáNŒ ñv}Ø%`_}˜`>âtÓøáæñ&>!‡7ØÙ⦽.fëð˜]ÅG²°µE{€v-Þ䵂3}XU"±×òø©k¯Ã¬0ÄŽš€¸é8–,Y’ðqQײeˤ{÷î¶Z´¼¼ö¸°±†¸v]~£­Ø`"ጙgØëb¶˜ÉMÄ¥k¼ƒôÕíÞ`9E]RÑM‹ƺԥ¥¥vìÑG<(xÏ<¬a >Ø>ãF8ÃtÈk³¯é^?Ucã=÷I€H€RGË”âÍ0&ÁuFœbÊ~m¶F³ÁβÁÙ°¯ñð‘æú»Ä®î#ì·™höÍ=)¢H†P¥K|dQ™S؃ªM'´+êUHG§¸[ñ—¨ÄA ñÃ"~3™ÑœÚÜFË- ¦ê ¸à ª1»¹Ë.»ØuØCãÇ_ÐN×é78c,Ôaõ <èÀüc–¨K×xé«ÛØ%'âô¡eñƒ,ê`ïŽsc…ŸCǪ*xáuø5^—ª±‰÷øÌG$@$@ñh©Bâ)ÁÆc¥o9VGo¼škËë9?Æ©¿c1ŽH€H€%ûcºÐYI|¤‡U°Ä›þ|5fÙ’a¶‘ÂægUÕjÛ¬Ï>ûÌ®]160ChË쳂âx+‰`~:Æ&X‹˜›H€H€"à td6IKÁW0ã€-~«àC®m·ÝÖ®˜4|˜E—:˜eÆÊ°uÆrlx˜ÁÊXɶÛÞâÚÒŽw0zé›`-cn  ð'@íÏ%©±xµŒó`&^Øôbëäbå ÎD'y«Ê0X+¢l¸á†²É&›ØñÀ2}Þ[Áñ,c¬eÌM$@$@þ²Z@gš(…PÊXíaY8, f™Ö^ÿS¦ýÅB Á´K±á>6Ì#-UŽã›ìº›Ø-c  ¶ÈvM“Õ:•â(Ñ“ mÂl46̆B8S<'J3þr*Ô ¤Óy^p¼cѺ›Ø-c  D ¤ó^›hÛR.«t[À¤£,N.ÌR&Û„ mç1‚àxgÆ$@$@$‰¸ G&Ž ÛD$@$@$@$±( 3vhØ0    L$@‰£Â6‘ d, èŒ6ŒH€H€H€H  P@g⨰M$@$@$@$@K€:c‡† #   ÈDЙ8*l @Æ €ÎØ¡aÃH€H€H€H€2‘t&Ž ÛD$@$@$@$±( 3vhØ0    L$@‰£Â6‘ d, èŒ6ŒH€H€H€H  P@g⨰M$@$@$@$@K€:c‡† #   ÈDЙ8*l @ÆÈjÝÔÔ”±àÙ0   ÈVÙ®Áò³uàЯœœœ¤u¯¸¸8iu±"   ÈDÕgÌá IDATÕÕIiV25XR”äJ²z:ɬX 4O    @€:,f%     hž$@$@$@$@$€tXÌJ$@$@$@$@Ð<H€H€H€H€H  è°˜•H€H€H€H€( y @Ð`1+ P@ó     ( ÀjoY—,YÒÞšÌö’ @Æ €NÁm¾ùæ²ñÆË!CdÓM7•n¸!Gñ¯rþüùr 'ÈÈ‘#åœsÎñÏÄX    „ P@'Œ.zÁ›o¾YfÏž-÷Þ{¯üùÏ–o¿ý6z$¥vêÔI®ºê*9õÔS%'''Iµ²    %@­$RàCÀn·ÝvR\\,3f̉'Êa‡fg§=ôPùæ›oÂG5k–ì³Ï>²á†Ê™gž)ÇsŒ¼øâ‹áô^xA¶ÞzkÙd“M¬('x;w¶uP<{Àp—H€H€H€’D€:I ýªill”GyDàCH—””ÈÅ_,Ÿþ¹tïÞ]üñp±K.¹D† &Ó¦M“£>Z>øàY¹r¥M_¾|¹ ý±Ç³¢úÖ[o•Õ«W‡Ë2@$@$@$@$>ùé;TÇ:ÒwÜ!W\q…TUU ´›RØqÇÃ3Ì«V­²‚ùÎ;ï”.]ºÈèÑ£íL³Î"¿ù曲å–[Ú™l”ßh£ä£>’=÷ÜS«£O$@$@$@$&Y- ›ššÒ„±õaÆŒ#ãÆ³Bfp0ÙxàdîܹvëÚµ«ÿä“Oììôúë¯o÷½ÿLžú¨<÷Üs6+fÀ$cÑ¢EÒ»wokòYiu0÷€môË/¿¬QôI€H€H€H c ¬K –(´NesŒ††+GŒam›§N¶c†hÞl³Í¬}ôþó9å”SdéÒ¥áU49äk²áðTç lÉH€H€H€H€ÒB€:-˜Eòòòäì³Ï–c=ÖÚ8c­è~øA`÷ wß}÷Iuuµõ>ø`éÛ·¯”––Ú´-¶ØBn¿ýv9ñÄíJÛÏ?ÿ¼MóþSˆt|høöÛoÛ0>>¤#   Hœh6*fú]öóçÝ È±!^îŸ×¯>LHqºiüp3û€‰OÈÍœ9SúõëgÅkB8…°]2fŽ!Œóóóí tQQ‘¶¨¿ 8|øp»ìIJ:ŒÕÂ… ­™Gn.°Ñ‘ @ò`2¯­oÝçÍ›'C‡M¸ª=zœb m¶F³Õ›­ÁÙ°¯ñð‘æú»>ŠÓ}„ý6mãþÑ]?¦ËjhÈ4W^^n’~\ˆˆóÎ;ÏšlÀœã_ÿú—ýÑÏȃçÌLÓ‘ ¬;ÐëŽ}‹#Ÿ{î¹òå—_ fŸo¹åÁ*t$@$@$@$@™G€:CÆ«l`£#   Èl4¤ÍìñaëH€H€H€H€2Œt† ›C$@$@$@$Ù( 3{|Ø:    #@aÂæ d6 è̶ŽH€H€H€H ÃP@gØ€°9$@$@$@$@™M€:³Ç‡­#   È0Ð6 l @fà©Ä9>Éømø8Ål$@$@$@$@L€3Ð<8l @æÈjÝÔÔ”yÄÙ"   ÈrÙ®Á²Z@çäädùéÉî‘ @æÈv Fè8Ϲ~ýúÅ™“ÙH€H€H€H`ݘ8q¢ÔÕÕI×®]ßpÕ×× mQQ‘H~~¾õ5œ——' RSS#ݺu[w oGG¦€nGƒÅ¦’ @,Ęøëß¿¿äææZ1]YYiÅ4ö!œÝ qRUUeóÆªŸé"Ð< H€H€H€H ‹@@C»b¹´´TÖ¬Y#Ò˜Fòé†h„1sM›tlFÌA$@$@$@톀 dµC†ú š]óÂÂB»t¤ÁÔƒËöÆ7ÌÐñqb.   h—`žQQQa7Ì2c_7tH…v»ìÜ:j4ô:ÏÃ’ @*`¶Y—‘«­­•%K–XñŒcaÖq°.++³âaº`( ƒñbn   Èh0ǀê¿üò‹|ùå—²páBY¹r¥µƒÆjÝ»w—ÁƒË[l!½{÷¶¦*º3ºsÒ8 è 6ƒH€H€H€’Aæø(ð믿–‰“gȇ3óä§Ê²ª¨—ä—åH÷ª%Òcù\éýÝòÝwßÉØ±ceèС4åŸ:,f%   L'€™d˜m¼òæ÷òÆŒn2WúK^—|)-/”®åùÒ¹¸»äo"Ë–|+ÿ›3]êþû_Û¥ 6Ø Ó»–1í£€Î˜¡`CH€H€H€H 9>ûb®Lüª³Ìmè#ù= ¥´k¡t//®ò¥¼ØØ?š9ºm)Uóòåûù“eúôéÖ¬ËÝÑÅ&Õ?å»ûë&Öaœ3gNă/]ºTfΜ1=RB¢å"ÕÇøÈ‚Ž!ìÐ>øàƒÈH zìU§-+ÏÕ´¡æH€: Üs>ù®@~¨è&¹]ò¤´Kt)ƒx.‹¥G—#–;Kïå²Áˆí¥±Ëk+=oÞ¼H+±.S@'Æ­U©qãÆÙŸ¿ÜgŸ}düøñv1rçvØa2zôh»?aÂyòÉ'¥OŸ>òØcµªC#®¹æùÿöÎN®ªìÿ϶„„HDŠDJ ‘ª( Dº ¡°ð‚ðŠ@@„WEñO‘W:/½I•ÞA)¡J“ZÙÝìÿ|ÏæÎÞÌìÎÍÎÌþÎ'wO?÷œïÌfóÌsÏ™2eŠgËŽ+éwÚi§EŸ'¶°émN½Mâ„N(ŒqõÕWÏÓôÿý¿ÿ×Ì=¦M›6O}½ä} ï¾ûn[}õÕm«­¶ê÷RóÞ»ß7 *y¯¦SÁ¿¯’ÀךÏ>û¬]qÅöü£0D¥ãPBD@jˆ»l<þïpÚà¨a¶Ášãì_XØVXr¤ ;pŒX`¸1ÒFa£ÃQßcg‹,ý9{ï½÷ìí·ß®¡UÔöT$ «ôúprÏ<`×\sþùq›œò/¼ðB»í¶Ûì7¿ùMÜœ|Çw´¾|ŒŽ8â»ä’KrϬ’~»ï¾»-µÔRñ^•>}û£ý(n‡Ã ÅÆØc=lã7îó|b¾é¦›b»þþ¨æXÙ¹ä} ×\sMÛu×]³Ã”O×’÷Þeßd>7¬ä½êSä÷Œ§Ç_yå/*;æ÷ôþûï·o~ó›q':ög¼²o¬†" "0 ðዯ·Ù—??ÖÖ]i”M âyÕ¥FØðpa[Øzam6bä¶`ðÖµ Ùøe&ÆmîÞ å€.SŸ­öÛo¿¸L©†{î¹§Mš4)V³ßbo›–/ºè¢ñiØìXÅÄiÚ¦Ò~œJDèmNé}²iú±1;¡Ô}Ýa³óÎ;Û­·Þš>w¾šc•ºyÞ×}7K±)uÊ‹­%ï½}ü¾Þ?Þn~Ä•¾W™@¿ÿýïcxx饗<ÙkÌëÀvMðÕV[-¶-6^¯ƒ¨RD@ê€À‡­6qé‘6bX‹µ67b?‰°5üÙÿ%Úð ¢?&nyWK'j±t•^¡M6٤בج|uÖ)´á+c¾Æ^zé¥må•WŽ_+S‰Uí׿þµ}éK_*´=ï¼óìüc,_{íµ åi¢Ò~é<@°ÑFE±ÓN;Ž"½ž¯v¾ûÝïF—ÜR~üãÇ_6¯ÏÆÌg³Í6‹®X_9©·püñÇÛe—]-ï»ì²KlÏž•|0Yo½õ¢Ø¹ë®»âX¿öµ¯Å$7ß|s´(²å™gžë‹ÕÛ½ÿïÿþÏÆoßúÖ·lÆŒvÆgÄüW¿úU{ê©§b×ßþö·¶îºëö8â4Ïk˜½©µeÛ•ZKž{—óþá¾øVÿà?°ý÷ß?ºñ͇~§Ä7;ì°ƒýä'?1\r–[n9[i¥• ï[•»¦þ¾WÎÿó?ÿ¿åá¾|ËÃ¼Ê ¸ñˆï“š¯ÜqÔND@j•@÷ÿoslÔˆ ž›‚q+L´%ØÊšƒnnê²– þØ*šóSZÃEWüÿÅZ]W-ÍKz^ .¸ C,ã«–£Ž:*΄O†øhºpã\úcŽ9ÆöÚk/ûïÿþo[k­µâ›<;íJû¥ãððÀE]d[l±EôÕÞm·Ýb5ŸHù€€PA¤žzê©ö‡?üÁ¶ÝvÛ´{!íí¯ºêªèº‚Ƹ·pÀØâ‹/Çä ,°€qÿÃ?<ºu¬±Æq^\,‡°ø×¿þík¯½fˆt„7!;^z ø&óA«äÂÁŒ±øPó©O}Ê>ó™ÏÄ®ˆE\Q˜—‡r_Coï1¯w©µyK­¥Ü{—ûþá~|àÁÝäØc5Æç5ߟðÙÏ~6>¡}å•WÆE7Þxc,?úè£cœgMýy¯þïÿþ¯}á _°ŸÿüçÆÚxo}ûÛߎ‡àNx÷Ýwíàƒ¶“N:ÉøàÇB>œyÀÍŠ`„t<¯Çð—¿ü¥ýõ¯µ#<Ò.¿ür¯R," õCÀ ßw…Y#¢ƒ£¥5劂&DtÏ-ADó-©,ÐRY?Z@×ò‡ùÃŽÿñl`?þx|Á°„Nž<¹ð&F0>ôÐC†%ð^±uUÚ/:÷ ‰+1Í F_|±ÝyçQD!FÇŽ¿FGXs¹`®?ü°7ΦNjŸûÜçâ³ØÜ)÷ànø‘Ó–ñ<ˆë×_Ýn¹å–ØvÛo¿½ýìg?‹?b-Í+[^, ½öÚk N°P²>Dáú믟çC¹¯aö~}­-Ûž|v-åÞ»Ü÷ŒñÕÇÊLÀMÿx¶ãµçÁW¬Î¼7¹7nn¸¡=ñı}ž5õ罺å–[Ú?ÿùÏø~BˆóA ñ~òÉ'þáX·yíø¸÷Þ{Çœ|Kñ•¯|%Îó?ÿùO|xÐt: øàʇEÞ[| ƒEæÜsÏ}õCD@ê‰@WgPÐáïhgø,Šg²a]sºÂÿmÁâÌbÂð_h ü©¦º¯¿÷Ýw­ßŸ - ³¢£–^¦tnR¾>÷@×#B±òÐÓ>ûìc&L(ø{{+íçý=^6ìBàͰw׉…Zțؘ1cbq• ~¢×ƒ¯Çc/ÏÆ^ϸ|µŽÏ*î/×…ÞÝo•~Xæ9A‰2÷ÁNÇó±Ò²Ri¬˜tÿ@ðÈ#D7’n¸!Z¹RYKv:~o¯aöžå¬-Û'½ui¾·{—ûþ¹çž{¢Û ÂÙÿøÅ˜Äµ‡À=Óûò~˜5kV¬Ë»¦t¬rçȰ|§îP|°Ya…â7ÔóAQìsæ™g¢Åš†>$­¸âŠñÛòéx|XB4ç;ß)|ó€›–h¨7­‹°–ðÿvÐËQ8·#œÃ"Óñ2ëâ¹ %ˆ²®rHÿ^Tyèš.îj_M/±ÄÆvqì€=ztŸÓ®´_úp‚Š¯Ä ©Hõ4¾ÑÙÀéG„áÇg«ÊÎ3Fß½£XGæ†5ŸqÜ+\$kÛWkƲŠXb¶ã“8ÖÇwÞy§¢mKݳœµ•ê[Iy93gÆS«ø 7jÔ¨x¬Í¼}ù¯Ó¸¿k*gŽÜçoû[|O¸Ð'¯:_öÛo¿½‡Å˜qù¶Â–öôy…t<~¯ø Á5hX¡±>#žƒM, æöŽ9áÛÕÎ ¬›ƒî¶@ÏN¬Ð°îù±††¶@Ï€}¾rÆÇ÷¸ãŽ‹® ¸F”ó•r¥ýX fÒX÷&NœH²`m$í—yeð&pXFÞàŸX±‚#dÜÂÉ8XÄù:ÞÃ!‡][èC:|¬ly©<¾ÏøþâãÍ“X3q_ÁÊɃŒÕ å¬-{¯¼kñþå¾ðñÆâÞ{ïõ®ñ}‡U¶Øk\h47QÉš|ŒrçH{Dî7¾ñ ïß#. ÇXžýƒ>Ü´ÇEŠÀ·fwß ,K;®*å|8¥¯‚ˆ€Ô:.ž #‡µ4Ykxr°­%<4Òm­á ¬ƒÄÂŽvaèZ_IíÍOz^þP³—â[o½Utt¬}\£.H)£Ž<‚Ê. þðóõ´[caò£Ò~>„ÏÉ¿²Ç7 ü˜ùšý¹çž‹M™×¿ÿýo›0aBt/!ø" ¸ð?ÅBˆÿ4Û‹±±»u³XÇŽá‡>¬ÁìêÀö<ÔŇö^~ùåc=b‰4âîW¿úUÜ¥ÄçMƒt,ús_D6üRa†Õë:.*øø"¦`°°r^Œ×ÛkH=ﶤ#à&ÐÛÚb£äGv-yî]îû‡BñÇO­¯÷Ýw_ÜiƒÃ¬÷¶æá¯{Þ5Ñ7ï{œ÷ßÓO?-Îì ‡IÜn>ÿùÏÇXÏ-ÓðõçØ>’÷v6·;;Pò>óoPX.<x󰯿G½\±ˆ€Ô,Dr¸pш;o„DØÕÎÚšƒ Å\Í¡®Mj0÷K(d¹‘õÞáÑG/!4þþ÷¿Ç]R‹.æá—‰DTòG4€‡Öø ™6|mŽË¢ëÄO´?ýéOq'Ä”ïŒÎ¤Ò~ŒÁ¹÷ˆK„:Ö׃:(néÆN|l™BÙO[rÉ%c»Rø úé§GžoøÝâàï~÷;;å”SŒÝ_<ÀÝ=|/W," µJ )X››‚Xn1¡mXkز®9曃zUÑ ¡Z!&DQ©P7ñðÀÜ6iL:{ñpQîé4Ÿ{b¹ÇñÃO(#¦Ì//Ÿ,h§†òŠÂôéÓ£ï°ûëV4ÈÜNø F@ˆ#äØMëZöA¶RsÊÓ«‡K (%ˆ]¶tËÞ+0E„|úÓŸÎVÏ“ÇêË®¸p„p_¯Ö?¬Ý°z¾ð q×î›'dÇ—™}•Ù­TÀʘúngó¥úURžgmÙµ”{¿<ïÆä5f' Þs|ˆÉò¬ÉÇÎ3G^C€•þXØSŸ}Þseÿòí=d9fÇó1ù°ÇëـÅ¿{¨e¦ž8Â~ºçglññí£«É>lo²{žo·qcFØÂ£GÙØ1ͶPxœjĈð cØòÿÊçÆç}0|õ7 'Ø׿5®d¼ðû´Ðï±pñÕ'[bñU·_作˜ò4&^ˆ]Ï“.v…âÂã”Ôó71Ƥ³!Ÿ"ÉöV~À dXžó„<ýÏÄ-–ÄRÏSˆár"„‹à÷è«o*ži‹ˆ©DÈÑ7;–c¬Ô½…T<Ó.›ï­oÞºÒÝqþÁ‡v è¡ýúkõ" " "  JÞxJpåB:lÉÑ\8Ø‘#§çºt„Xþ¹ßй‘©ƒˆ€ˆ€ˆ€Ô>¶§ã1¸ ŸƒGWØj6¢òQT‡é#°Ãó~¡¼ö×Rk3”€®µWDójJŸç9áDB„tgˆ»¯nÑÜ„sÜg%­‹€Œö¹p©±ˆ€ˆ€ˆ€ÔnËr|r0Z›ç‡ç,Ñá¡BötC7Óf¶,й_P èÜÈÔAD@D@D@jŸ@Wלà®N Ž~MA,wFWÎi®ø4aí/§¦f(Žšz94¨ŒþÎá •ÙM<8º¯PÓÁÿ1MZ! è|¼ÔZD@D@D@êƒ@Æ]¸l„'9õµ=(åÙ½d}©ŠJû•¯XùG}dwÜqG¡j~ܳp3%D@D@D@Ê'”2>Ïs‰„éÎw_áï šÛÃEyTÒ媖€t•Þ›o¾¹;Ö¾þõ¯ÛvÛmžnm±e—]Ö¶Ùfûò—¿óùË_ìì³Ï¶Å[ÌÎ:묒w>ôÐCmÊ”)%ëKUTÚ¯ÔxÙò»ï¾ÛV_}uÛj«­ U}Ï”ÈE Û²Ì“ƒÈè`yÏX¢ç„tÈSF›Ù²@çâJcy½äFV¼C{{»=ðÀQ4ÓbĈ¶þúëÛé§Ÿ;üö·¿µY³fÙ÷¾÷=;òÈ#‹2·ôˆ#ް·Þz«×6Å*+íWl¬bek®¹¦íºë®ö›ßü¦P]î=Ýr½Áú*!" " "0pººæw.ëŒ~MA,wFWÎi®ø4áÀM£!G–ºJ/ë~ûíWÏņÜsÏ=mÒ¤I±ª-ì\ÞÛñ‹.º¨-¿üòó ÃC½…Jûù˜e8A 6¬ÇÜ˹'.vÞyg»õÖ[ýVŠE@D@D@˜ Fç®&›ÝÙdÁƒ£û å1Ý9×­‹€,йp•n¼É&›”® 5 .¸ ­³Î:…6sæÌ1ÜÎ8ã =z´]~ùåQ€¿òÊ+ѽãâ‹/¶;ï¼3¶?ï¼ó¢EúÝwßµK/½´‡²Xi?úßpà vß}÷EaÌø§œrŠ­¼òÊ>tɸÜ{üñvÙe—ÙSO=eO?ý´tÒI†Ež²{ï½·äøªè Œ»pÙ.¿ûÝï¢PÿÕ¯~eÿûßí½÷ÞK‡í5çž¾¦^T¥ˆ€ˆ€ˆ@Utñmuø;?,œ˜ÒNOik »G„t[8»;œ©¾õ6Ö,Ñêr»!5HC»pôõÐ]½¼Òl}·ÄKØ 'œwú¸öÚk£ßt_ó/·>Ï·Ýv›vÚiöç?ÿÙî¹çž¾†.Y_î=K  ê@$‡ w Nl× "ºc½Ã¸šƒ%šWªEƒ•â2ÈJÝjþ—7‚Åó?ÿù½öÚkvÜqÇÙ5×\c?ü°{î¹}Â,·ß¿þõ/Ã?kÜ9úúºg#¼ý᣾" " "0? 4ksSËÍ!&´ k Çv7Ç|sPÏ¡*Z¡3UUeŠþ7¿¡tUÞ ÂC~<œWj/ç™3g—Üãò@y>½qÒ»p¾öµ¯Ù–[ni£Fò¦=âJúáïÌ|ÒÁ ö«æÞÅ>=².¶¥óPî=^xa{ñÅc··ß~;niLJ"2G¨ ”´-!Í…%:èè`8ëÑÁ(­“€tN`}5ôÑG£EQŠe»6¶ŸópÑEÙ3Ï<­É<øàƒÆ4Û»±•î´ùàƒ¢ËbõÄO´?ýéOqÛ7„('fC¥ý¾ñoت«®j[l±…ñ€âÔ©S£?6q*”¹÷8çœs¢¨ÿãÿh·ß~{ÙsÝtÓMã:öØc8.»|üú×¿Ž¢=»åE@D@D@ª@ ˆæf„s8°5¨h Ñ-Á—£5˜œÃÉñÃÖ7KAç†ÝTÌÊ裄O+u Åbʲ‚œ‹rO§1/y£ûMÈSæ——O ØSCyEaúôéÑw˜cµûðAŒà[Ö±.ì']NÈÛ‹7§'Ε¸sôuÏ7ÞxÃx(’ÀûK·ß3ꇈ€ˆ€ˆ@¿ àò9õÄöß{}Æ–þĈ°…]ض.ì}÷s³m‘…GÚ"£GÙØ…›l¡Ñf#ßþf™]|ðT›2eŠ­µÖZý¾?ßh¿üòËE…+wð°+شЖmÁ‚·qØxÜ4dnLÞˉ©KcÒé<½ yÒÅ®PË qÐ*´+ª 5LÀ÷{Æòœ'äí— ÙJÄ3sëëž.žiËg³ôž”)ˆ€ˆ€ˆ€T‘@°4c åB|¡[ƒA1Z¢ƒ)º%(Àh¥®Š·*Ca Vh0Ñì~`HB:lÉÑÔtÔ¡¼Û¥#Ä2§æ~å% s#S¨}lO‡BÏñ(ïQ yQ ÿâÅA*õ­€t>^j-" " " õA (evá˜N$DHw†¸ûêÍíA8G/_Ô´B.2ÚçÂ¥Æ" " " "Pº-ËÁÃ9üC#Ï »qtQ Ññ‰:ÊhÆ ùH@çã¥Ö" " " "Pººæw.ëŒ~MA,wFWÎi.=E˜ÿå” G~fê!" " " 5O )(åèïܶ±ël²àÁÑ}…ò˜þψiÒ ùH@çã¥Ö" " " "P‚0îÂe#<9ÈY íA)ÏæAÂö`‰Ê9¤»]8>>`¸>ÖU³”€®ASj@äµ£”ƒ4®!1'œg׎E:äÐí¡š& ùH@çã¥Ö" " " "Pº‚Å™CRÑì3h|¡ƒhú9ìÊ"$¡‹€"Ì…KE@D@D@D >t…“9AeX ~΢bá4·6[8SÅZƒ Ö,ÐÃêc=µ4KY kéÕÐ\D@D@D@D Zɘ ƒµ™Ó›C1ÝÆ±Þ¡˜«9ÔqàŠB>B–—Z‹€ˆ€ˆ€ˆ@]h Öæ¦ –›9³;„¶a­áØîæ˜oê9TE+4†j…|þ> " " " "0$ ÌI„å¦àÊÑÒ\X¢ƒŽ¶¶à¾A]0JW=4ºkhÍ›EAD@D@D@†$ ƒšÎáÂÖ ”1D·_ŽÖ`rn ª•ÔâæPЮÁZ@É_-ZD@D@D@®p’JsÎØ£xq·E:X¢Cº-¸qcVÈG@ÈòñRk¨ÁÒÅsP{øB·³s´DÕÜÄsÐΡ¼;®ÕÎ,% kçµÐLD@D@D@D jxŒýžñGŽB:lÉÑ\8Ø‘ƒc¾£U:¸o ¦ò€ÎÇK­E@D@D@D .°=û)ùŽòæHïpˆJÈGQV’ñ •ŽŽºXNMMRº¦^MFD@D@D@ªD (e|žç„ Ò!î¾Â1ÞA4·‡+nX†’VÈE@Fû\¸ÔXD@D@D@êƒ@·e9>9­Ís‚Ãs–è9Á –€n¦ÍlY s¿ ²@çFVÿ^{í5»ñÆí­·Þ²7ß|Ó¦OŸ> ‹ȱdÂTD@D@ˆ@Wלà®Ñe!¶puttFWÎi®ø4a­{~,EèùA¹†îñ§?ýÉfÍš…óN;íd[n¹¥Ýzë­öè£V}–‡z¨Ý|óÍ2vÕ'«E@D@D Áð `ôwîj²ÙM<8º¯PÓsý Ñ ¹H@çÂUß?øàÛo¿ýìÝwß ûB6Û&›lb+®¸b´DW²²>úÈî¸ãÛ`ƒ Šv?âˆ#zŒÝWû¢ƒ¨PD@D@D 2Awá²\4xˆ°=¨æÙÁäÜÑ,Ñ]- ÒÝ.í• ?”{É…c½ú?ü°Íž=;Šg–½öÚkÛ¢‹.jË/¿|YÒc9ÛÛÛmçwŽÖëRÓ±Ëi_j•‹€ˆ€ˆ€ä'€ÈkÇÜ qÕèd7Žpw;éG@·ÏµRç}h÷ºŽ^ÿsÏ=×üñh5þö·¿kæþóŸí / Ÿ4;lŸ}ö±#FØþûïogu–]|ñÅvçwÚ<`§œrŠ?>Öüñvå•WÚ³Ï>-ÉX®/½ôÒhu¦î²Ë.³§žzÊž~úi;餓lÁ,Ìé•W^é1v±öï¿ÿ¾ýêW¿²ûï¿ßHÿá°µÖZ+މ« sź+HKØüý÷¿ÿ½5Ê?üp»ýöÛí‡?ü¡ýìg?+ÜS  t‹3‡¥ ¢Ùm# f,Ð!1§«9jvæ’PÈE@:®Ák¼îºëÚ½÷ÞkXrçÌ™+¾Ëå†ï~÷»6fÌ»îºë¢P¥ß믿Å1"˜€uú‚ .°e–YÆ>ø`Ûzë­m¡…²cŽ9&Þ›6¯¾új¼ÿç°í¶ÛÚADUÐÚÚÚcìlûÎðKßóÎ;/ ï½÷ÞÛ¶Øb {òÉ'ÃfïMvýõ×ÛŒ3luÖ‰‚}—]v±©S§Úî»ïE>bš9îµ×^6vìØ÷VFD@D@D ¸owMNPKéœÃ!*áØîpzJ[8»;œ©báOµ k îÃD+/¹pä%6í±<ßvÛm†1♀˜>çœsú5,Í“'OŸJÃÇÒ°þ®´ÒJ6qâÄ(žO>ùäh~衇쪫®Šm¦M›VhOb·XÈŽím¼ýùçŸÇáCÀ5×\c‹/¾xô·Ür‹-·Ür¶êª«Ú¤I“â<°–O™2Åžþù(Öq Ùwß}cÊD@D@D@Š@$óg:ü™çôÁæ@L·q¬w(æju¸¢€åã5(­qÛà¡¿4`‰~â‰'Ò¢ŠÒZµ €XEüz7nœmµÕVöÍo~3º~L˜0!ºSx}Ú×Ë<ÎŽM¹·Çe!|(Ô8¬ÂmmmÑíSÅMùügŸ}¶-±Äv 'D?ék¯½Ö\ÀVzÿ7Þx#üÒ¶ÚÆo\Ö|€HEuš.k5¡F dN"lžk,k i.,Ñ­A=iEt0J+ä$ÐÓ¬™³³šÏ;ì°ƒ­¾úêñfÉáÇGß`Ê:üç?ÿ1^9î¸ã¢«;yàRâ!¯õöË.»l´8³'µ\IØ7ZAD@D@D  ‚pF<·„Ì¢[‚/GkÐáÙüø€akˆ›¥ sÃnhí¾½¹©Ô`| ñy>äCìŒ3Έ>Ñy§É.X®gΜYèJúÃ?,ø5³óyœ&ȃ~„¯}íkñàv ,¼ðÂöâ‹/ÆôÛo¿ãôGvì´ýæ›oHÜsÏ=¾ˆtöö-õpQáACø“§œÀ< î3ú!" " "P ÐNRiÂ9hènñ\°HKtH·?âàÕQõÐH¬œ@Vì6ƒSæÖÎÁ¹{õïŠÅù°Ã³J,Ïwß}·yæ™qR?ÿùÏí™gž±{î¹Ç.ºè"ã€Ü3þò—¿Ä-宸â ã!?'žx¢±­ÛÖ!‚·Ûn»Xµé¦›u{ì±GAØzŸìØìð‘¶çAA¶¾Cœã ½òÊ+Û*«¬bK.¹¤Ýu×]và 7Dw,ÒÏ=÷œ~úéQ@ÿò—¿´wÞyÇ~ýë_Ç[vÚiöÒK/ùm‹€ˆ€ˆ€8èþDrP{øB·³s´DÕÜÄsÐΡ¼;ö.ÕŠMƒe¹4õö !,¶„bqä>·ÎÓr.òžNc¾$ ïqxùbž˜2¿¼|b°€žÊ+ Ó§O¾»ì!Ü߀ðP XxqaK9ü°Ó½žá/3–²íÖ/¼ðBÜ:Ÿhþ`w«©'ް÷YÁ–7<|˶ªÓl¼ØiãF°1£G†Ël¡ð…òÈðŒþGá‹ç ~:5îxÅŽ\ý |cüòË/¾U®d¼`\›ú=.¶ãkç¸mõܘ¼—S—Æ¤Ó‹íÆ¹VKª™YÊ…£f^ MDD@D@D@ªG ìb×íïÜÕd³;›,xpt_¡<¦ƒÿ3bš´B>Ðùx©õà©]Ž-/Ø“šUD@D@D@Ê „qW|x0øA‡]µÚƒRžÍƒ„íÁ”s0Hw»pt±PÆ€jâ$ „âA%pï½÷Úª«®jßûÞ÷JÎãÐC[ì”l  D^;J9ø@ãªÑasZkÇ"òèöPM…|$ óñRë"°ÆkØúë¯÷š.u N*¼ä’K ÕœNxÓM7òJˆ€ˆ€ˆ€|L€Ó<8Ê?–#úš‚_tø ýãÿˆ®7Þx£m²É&vôÑGG1ËhKßí·ß>ÎåSŸú”Mš4‰ªyÖégŸ}ÖÄ8À`°í¶ÛÚAþ#èŒébëà?„믿>G¾Î:ëĻ첋M:Õvß}wCè#¦>ø`Ûk¯½lìØ±óÜ_" " "POعî£ÂÁ)qÒA8‡|GØð™“Ûà *ÃÂĤÃ5wŽÞ¿®§µÏ¹¦LæÇýt `y¾í¶ÛÂ/ÂGQh2búœsÎ){´3fØC=dW]uUì3mÚ´(žÏ?ÿü#Ư¹æ[|ñÅíõ×_·[n¹Å½ˆà5×\3öYmµÕìä“O¶e–Y&¶eN;ì°C¬kkk‹bôŠ+®ˆâÅ[,Ñ=yòdÛ|óÍc„÷O<Ûßu×]q.ˆj®›nºiLû1~üxc¬¬û‰ZîmΊˆó­·ÞÚ°O™2Åžþù(¾q Ùwß}ãØ”)ˆ€ˆ€ˆ@=àoêˆæÙöøK3ƒ`î [ØwŽpu·ŽöŽÙ6{v»Íš5Ûf}DöL³·^}'þmäo¹By$ Ëã4¨­ØÚ-ëŒÅ×Åh9“7n\´&ó›ß´}öÙÇ&L˜Ýp‡@@6,^Xh¯»î:C,#¢×^{íà;œ¤æ†=÷Ü3¶¿çž{ Q›þ²}ñ‹_Œ­Ýú¥}Zh¡ð ;+ÖÝ|óͶÒJ+E+w,?p§HÛ{¹ÇÙñ(÷ö½­#mçc1—4à¢Bàˆ€ˆ€Ô3þ6.5¦Ýn}p†Ý9ý}{öõìá—f!Ýi³ƒjžõÑlûð£YöÁ·ÎN{óùÇãßc L å GyœµB¡ŠÚî”ç gŸ}¶-±Äv 'Dæk¯½ÖÞxãøµÍÆo<ÏP¸y<òÈ#ó”S€ÿ2}ñ;Fø°óÐ|ó½ýxñÅcÿlÄÙò¾ò½­£X_>¤÷JÓÅÚ«LD@D@ê…‹'/;Ûžúç,»òÖ×mÔ¢Ãm̨V»P«Í ~ÏÂx~?8wtÌžwáx÷åÇìsA¸1©^Ö9˜ó”z0é—yoÜ$ð=& üxhK±»O”3Ìþó{íµ×ì¸ãŽ‹î?ü°áÂ}XœÝ2ÌX¸I`!ÆUƒƒKx@ÐuX˜ïøãJâññµæ¡Á¾Bk/¾Öý .|{[GÆW_¨7<(ÿ•UÛl…±A&Ïè°Þi·ïwØ;3çØÛtØ[ïÍׇöæ;3í¥'°EšÞŠz€gŸÊ#ÐÐ:ë/[’Úl…¿1>χrˆqÆÑ':ÏL9Åì_ûÚ×lË-·Œ–ãvÚ)>PˆkÆÛo¿E6û-³]÷±+>öØcñ:ðÀ‡ýxx6ßî»ï¾(¬¿þõ¯Ç¢Ùá“­oQGVkD7±ù„ŒOµ\U°${/÷˜þì â¯+¿èX² øYc1/¶êqyIÇÅšOžrŸÎ7臈€ˆ€ÔŒmË,5Ò¶ùr›}fÔ[ÖñölûàíìÍ7gÙ›3BüîGQD¿ùü¿l|ç󶯤 6!¸vú7ÊÕX®ÿ­®ÆXµ8FC»p¸u²ÁW2§<çbãŸxâ‰6räHcÛ8Ä'»` bÙÍ‚‡èØ&_i¶|[rÉ%ãˆvNdW ,Òýë_c*/»ì2ûÎw¾c‹,²H|@¶l3ǘøO#¨¹ âWÅCŠ/¼ðBÝ_ýêWíÌ3Ï´ïÿû±÷ÜT°®#ôwÜqÇKÀçú¢‹.Šî!¸ °[²«.#Ä¥ÖÁýo¸á†(˜±¬óŸÄé§Ÿó¿üå/í¿þë¿ 6„ÓN;ÍV^yåÂú{LB¨h¬Ðk}~Œ-±Ø,»îöÏWZìõ÷FÙŒÎ&1ë}»à;ö¹ñ³lÕå'ÄmhÙŠç¡0VU#4šË2iêíBX¼?=V,¦,{aÑæ¢ÜÓiÜ2·Üc<õÄ”ùååƒåôÔP^QÀýWÞDý ŒSÏË*¿PìÆPe˺4`-FÜ"’Àià=‚{;kdul-ÇØìv‘7`ÆòpǤÔ>Ð¥ÆÅbM_½­ÃÛ(F&À9ü­çBñm+c¹HS†3fLܺcehžmêoàoûË/¿\8ü¬’ñÂÓB¿ÇÂ7¾&æ+l¿È{91åiL:½ØêÚó¤‹]¡¸p¤ õ|ãcÒÙÐS)ek•o\B)ÿ&>u–À|Ž*&ž:?|ÞÀ/¬ à¼â™{y_¿ooëð6ŠE@D@D Ñ ð÷™¿±|³‹XÆ8F±_üÍt£â¹½Øè¸r¯O:72uú € K4bÙ³ h5õXŒõ P¾×³Û,™¯Z‹€ˆ€ˆ€ˆ€ÔIJ fD³çëh 55U èšz94Z' ]ë¯æ'" " " "PS$ kê嘿“áI[vÞ(Ø;šLòü¨ØÏ¹T¨dÌRc©\D@D@D@ƒ€ô`P¯{r¬7;k°÷s©p衇ڔ)SJUÏSΩ„«®ºjÜ7zžÊ¹yÇ,5ŽÊE@D@D@D`°H@ùA¸/§ïÝtÓMñÎTžϽN$¼ä’KzkÒ£n5Ö°õ×_?>íÛ£"ÉdÇLç”4SRD@D@D@j–€t;4Õ§ï¼óÎvë­·f[žÂ-Â&æeïñìÛß°5Žï9]lÜtÌbs*ÖGe" " " "PK$ kéÕèc.çž{®vØaÆ‘ÙyÃñÇÞÆ¢¼Ë.»Äã¯á‹[ÅÒK/°~öÙgãЯ¼òŠýú׿¶/}éK1ÿÀØž{îi|°qüõøñããµ9ò“cµ<òÈx,7Çw— Ù1‹ÍéÕW_µýöÛÏÖ[o=[mµÕâ1àŒÇi‡x`¬»üòËíóŸÿ¼­¾úêvçwÚÃ?lÛl³-¾øâvÔQG•º½ÊE@D@D@D *$ «‚qàYwÝum×]wµ_üâ†ûù<ဈsÛm·µ3Ï<³p”÷\Å*Ç~ò  P,Ɉi„+#²i{å•WÚJ+­d[o½u<þs»í¶‹ýá't’=óÌ3%­ÚÙ1³sâ$ÂÝvÛÍ?üðèj‚KÈ[lÇR~ýõ×G—æÂ|?ýéOÛÔ©SíŠ+®°SN9¥ ð9\AD@D@D@Š€ô@‘­â¸Xžo»í6Ã_Ø]%x`¯KtÖecóÍ7·6ÚÈ–Zj)Û`ƒ ;h`ažùdÞiôhïsZvÙe£ÅyÖ¬Y…z~ñ±t+ˆ€ˆ€ˆ€”OALpaì1"š‹¼§=ü» Ý– - é€4>χrˆqÆÑ':ïÛW ¬Æ´c .~ø¡qy Ž¼sìèèèQ¿ýöÛG‹1þÐp7Á’Ì/c±3þØìÂÁnÌïµ×^3ö^~ùåãP¸­¤ãb‘'O9ùü?˜ÑbøÛÈßnÍ©Xæo%õ{yÿ;Z \®ª1V-ŽÑÐÚ-›µ¾’9aqf»J,ÏÜüN<ñDÛc=ìâ‹/Ž;fð°ÞC=d>ø`|pïé§Ÿ6¶‰c‹º‹.º(nww 'Ø_þò»ÿþûãŽ<ìGXn¹åâŽþóŸí³Ÿý¬!¨q5ÁB~ÞyçÅ6éì˜ì¦‘ΉñØÉƒ¾øB¯¼òʶÊ*«Ø’K.·³»á†Œíô°H?÷Üsvúé§ÇÿØVïwÞ‰Ûîq¿ÓN;Í^zé¥ôÖJ‹€ˆ€ˆÀ!€xE$»8ö˜2ψe Pü-&ö«ZMƒe¹4õö !,ÞOÙ(S–½ä\”{:[æ–{Œ6õÄ”ùååÃN§†òŠÂôéÓ 7ü}ú§ÖáqãÆUu)ü2b1f\Ü/ØŽ.OÈΉ_æ^x!ž”ˆO´‚ˆ€ˆ€ˆ@ùØÍ ÇCùü%æÂÈ…&¢Œ H;ij[ŸiÓ߀.xùå— ß W2^0¤M ý ¾(|ÅÌWÛ~‘÷rbÊÓ˜tzñ¥çI»Bq,/ÄO÷“—”d‚ÔIH£g«-žáÅ/£›W<Óßû’&ðKŽ5ZAD@D@D ?þ.ûóDd·@»]]ˆÈ¥œ€€~ï½÷ìŸøDþ› ÑÐCô…ײE@D@D@“Öe4VeD3 š]H#°Ésñ­/Ï'á~Éö°év¶I§:«’€®G"" " " 5A¡Œ5™ç°.sŽWêºá>Ï< f',·P×Ä"j|Ð5þiz" " " "‡–å1cÆDŸg¶šÅ=cäÈ‘ÑEÒÇÁòÌN[<´Ïe‹,²H¶¼ââ$ ‹sQ©ˆ€ˆ€ˆ€Ô%?h «ò‚ .hì°…ˆ~÷Ýw£kÖh¶‘]qÅm…VˆÖi|¢Ê' ]>«†iÉþÊ<òˆ­ºêªñç@/ *véøÔ§>UÖ­ÂÎ+öÖ[oõëéݲn¤F" " "ЀpáÀ Ë»ˆ!˜±6ûV³Ä\¾3G"ð%±…œÂ"ð§?ýÉÎ=÷\ûûßÿn“&Mêq<ø@`8ûì³m±Å³³Î:«ìá=ôP›2eJÙíÕPD@D@Dàcø2»?3"šÝ®pÕÀ×™àu÷P*/Y ó«ãö|ðí·ß~ñ+¾ÞÙd“MâS·Õ^$ÜqǶÁØŽ;îhGyd®[pú héx^¦XD@D@D <üÍÇ•áœnoçBkµB>²@çãU×­~øá¸] ¿H„µ×^»êëá©ÞwÞÙØÄÝ_ù/©—õó)9=¾;;^o}U'" " "0¯•™¿ýlUG@0ûE>ÏßhÚ+tŸ(uB׋Ã;ÌÎ9çœÜ3æ¸mú²'ä>ûìc?ùÉOâø'ÿà?°ý÷ß?ºMüèG?*<…ˑڣýûßÿ>¶åþØ8N{üøñÑÂ}Ùe—Ù%—\b»ì²K< œÆøcáš±ôÒKÇ#ºŸ}öÙ8FöÇ+¯¼äþÒ—¾«Ž?þxËŽ÷ꫯÆû¬·Þz¶Új«Åc¾iüÔSOÙë8ŽüóŸÿ¼­¾úêvçw¶Ùf[|ñÅí¨£ŽÊÞVyhˆcþîf>Ïü=ôà"Úc/WÜ7Y ûfT-Ö]w]Ûu×]í¿øEt‹ Ÿ'|÷»ßµ=öØ#~ÊüÃþ`ÇsLì¾Ùf›Ùšk®iÇ{¬]pÁv÷ÝwÛvÛmë¶ß~ûØž'w ;ì°ƒM˜0¡à^Á8ô¹òÊ+m¥•V²­·ÞÚàˆÔm·ÝÖÎ<óÌø•}i‡àŵƒ'}K‰X|µ׈aÂÐc’ž_k­µ¢pfÿHÄóÉ'Ÿ\p½ð6qðcóÍ7·6ÚÈ–Zj©èýøã{U+öäÉ“ã/vZáãþù±æXýõ×í–[n‰Ç³³G2æÎÈü‡qÐAÅ(öÝwߨŸ2hTX•³Á¿Á¾ð £1ËÛxœm¯|iÐ¥ÙÔL bÓý–}Rø?ñÄž­(¾çž{¢ÛÂÙÿøÅ˜|ðÁ½¨×‘Šèͼ^žæÇŽÛëQ¡´MÛ3†çöøHó5×:ë¬c×]w]tåHÛù}9–4 £GŽYD·‚ˆ€ˆ€4"4CV7ð ³ë¾é½ï¾û Æ*ÿÛˆ,jMÚ…c ÈVq\Ü#¹ìFáK4åý 3gδ7Þx#ŠÙQ£FÅ¡°þâFÁ޵˜/óÛxãËšž=åõŸ„“P," "Ш²>Íì¼qÑE3ë&ÏsBþ`a£²¨uÉ=Pd«8..¼É BÞìX^Ýõ¢Ò[!ÀñGÆÄ‡¬ð !nÜmÄóåÄÕª>Þ²áT%,ξ sá?Š›o¾¹œi©ˆ€ˆ€ þw“ÅÞxãÑ`–.œç›x†Iî)•òÓ mn¤7>ÐøBãÎð­DÛÇëˆiK=¯ÿ¤ãáK}ôÑGLJÙ¡W–?þñÆC’òéq¤XíÉSŽŸù*ùP;ꇈ€ˆ€ÔM7ÝÔØ4€¿‡ü]Æ’osù»˜ íj.«‘4X1. m¨7E1ó£ Ñ|Øa‡U$žÁìŠAøùÏnÏ<óLÜ!ƒ-â.½ôÒ¸+ÇÕW_L¼øâ‹ã/mÙâŽÝ,°H#X±|؃Sï¿ÿþøÐ!÷yàõÄOŒ»~0÷⿇zÈð­&g«¹lÀ/›¯•p!9á„¢pOÇ[n¹å줓N2¶ØÃzå•W¶UVY%n·w×]wÙ 7Ü`l¯‡Eš§ŒO?ýôøÛì½óÎ;q‹<îyÚi§ÙK/½”½½ò" " " U Ðh,‹¤©·OañMs;‹)Ë^r.Ê=Æœ!IÞc,àä‰)óËË'¾ùæ›§†òŠÂôéÓãð~teEƒÌíÄYòx°mî!ÔlÀú̧VtKn¶M6µš£C«²ã1§^xÁ–Yf™‚دֽ4Žˆ€ˆ€Ô3 Jü F»`iFÎq³@ãêu|ûë[×ögýÜçå—_.ìÌUÉXÁH6-ô{,\lhÍ×ÇÉEÞˉ©KcÒéÅ–$ž']ì ű¼}4ïV&Ô†€PUâøÅñ“ÿŠ¡à«éŽ^V,®¦xfüìxÌ©˜Ø/6•‰€ˆ€ˆ€ˆ@5 `ýU(“€,Ðe‚R3¨Áý5>ŒÏ)½ú¨ýóŸÿ´§Ÿ~ÚÞ{ï=›3gN¼|J]]]1ÙÔÔäEæe…‚(UïåÄM-MÖÖÒf£G¶ &ØäÉ“mÒ¤IÖÚ:$ÐüX¯3ñu“ÏËöÞ·˜1ŸZMÅû¤Dç‹)Ë^X´¹(÷t·Ì-÷˜w/õÄ”ùååß|óÍSC¹‚ˆ€ˆ€ˆ@@o<òÈ#vÉ%—Ø‚ .h믿¾­ºêª1=lذ]Y{{»½ÿþûñþ7ß|³Í˜1æL™ÅôÇR§ºSÌõVc%ƒÁ,÷¢‹.:-ä לpu„«3¹È{91uiL:½øDæyÒÅ®PË qx »?ÉQ’ Ð ÊŠ€ˆ€ˆ€T—@gg§]uÕUvÿý÷Û¾ûîkË.»lÁâYÝ;•͵ÖîÿûßvÌ1ÇØk¬a›m¶™µ´`¿«^¨…õVc5ó“Yv¾µ. çÏ÷Y*Ê‹€ˆ€ˆ€ Ö«¯¾Úþõ¯ÙOúS7nœ!0ùŽ»´}¯Êh‚±k®qQøÉO~Ò8à;ñÄ­¹¹Ù6ÝtÓWã®5±Þj,d>2«Ætç÷¸O(ˆ€ˆ€ˆ€ˆ@Õ VñuæúÖ·¾e£FоÎ莎Î(¤I÷v½õÖ[öØcÙ¬Y³æi÷›ßü&ºeë-”Ïé,Ü—2æµÐB£mûí·Âžù¹µµ?ª±Þœ3\øröÙg¼¦L}©~yʃYxf_ èÁ¤¯{‹€ˆ€ˆ@˜9s¦]ýõ¶Î:ëDË3ÍEš§Ó¸³ÑÛ-|üñè'ý•¯|Å~üãÛòË/oûí·_ôevQxúé§ÛôéÓ界‰@÷±½=yDnw<'ˆè…líµ×¶¿ÿýïÆ\ûú³^Ÿãw¾ó[b‰%ìÃ?ì±®Ûo¿=ºÁx»jǃŬ¿Ì«¿ô`‘×}E@D@D  ÈpÛXd‘El饗Ž+={v…Ô»ºº¸s¢HÆ­bóÍ7~Ó—_~¹=øàƒÑÚ|àFìcâìÅØŒã÷ðzòs­Ñ<$Ç„K-µ”Ûh妾Ò@ßJ×ëóÃÚþ·¿ý-2ÂgÜË=fnžîoüÕ¯~ÕÎ=÷ÜÂxÌ~3«”u-ô“€®…WAs#ðÑGÙO<Åó ,WGÙ|`QH‡íìæµ¢vËq‡vÚiq›¹½öÚ˺ábŒC9İ:?ÿüó±I{êœ<øî»ïv—¿Óf4;nÇ\xxpøðáö©O}*Z²)«4ôg½¬‘ A»á†ÚÖ[omguV,ó:.×/~ñ‹ø&@Þ{ï½…6ìn²Új«EëõfáÃì½ï–[niçŸ~ôõÞe—]ìˆ#ްûî»Ï~ö³ŸÙ*«¬­Ý‘ã|fV)ëZ觇káUÐD@D@D Áà‚ÀÏ4ö\F¬"uˆ5¬¿MÍMÖŸ&d÷[Ð/øM?üϸWó¬fQؽ9nˆ–_ayšÅú…Ç.­§ׇ}ÄöÙgûËY‰ "ÒéïÑ„…:ìa,ÒŒ-·aÔ1'æ6~üø( ™óˆ#â=òþèÏzY"ùxÀÆÚ¦l9Åžÿ÷óqnÔÁíÆoŒbÿ¬ÿ=ËŽ;î8;ôÐCíÜóε'Ÿ|Òvß}w;öØc£Û˱¿=Ö¶Û~;»é¦›âŸ{î9;ì°ÃìC±5V_ÃFŒaXõwžºsÕ³ÛgÇ5ó›ëª× t½¾rš·ˆ€ˆ€Ô0„- Ž3&Š8v»@°®&dHÏèg"Du({û­·£m騖8\Ç å3Þžó,±¼ûn»ÛÁl«®²j,ç>--Ía,Zt iúwD{¬ïž _hö¦î¯ºÒõ2·Ç{Ü^{õ5Û`ƒ lõÕV·e—]Öþï¢ÿ‹ëñ¹éK_Š»‡¬ò¹Uì¿öý/»çž{¢Eý¢ /²‰'Ú6Ûl}Í÷ßo{ú©§íû(pâÆæ›mn‹-¶˜P¶µµÙ˜Ñcl±O,6hÌxuê5È]¯¯œæ-" " 5JÀ]+8ý¡æhÎ.dKM—Šk®¹fž­åË<¨G=cþüç?Ç:ØåÃË|\îÓ3t[£™Öp¯gŽˆ_,ãÔyyϾ¥sý]/#㾯#<2Þ—Ü.¾æ„»‰¯q…Vˆ‚ÿ…^°—_~ÙV^yåBÝ'>ñ‰(”)÷ölÝçé8àÜ1‹•y}w<0ÌzÞ£þr²@×ßk¦‹€ˆ€ˆ@Í@Tráz€Hãr tw[‹±|áßëÂ0-g· ,ÅŸýìgc{DåÞ{ïTÜÿý{Œáýü¾ä››?¶€wç»çå.%Ì·ÒПõâ ~ÑEEßgjäÂ?f¶Øc®¬•Ë×…[ÆØ±cm¥•V23y¯ãCÆk¯½E´÷M9xY:ž÷%NÛ$³JY×B? èZx4h01èCÌ!Ôe.̈±J{ÞE›ç·Új«( 9-@=ÖT¬³æ…^8ö¥Ë1ÖÛ;î¸ÃØÚÇ —ß'[NÞ/ü—9Þ›ö•úVº^vÞ@4³ÃëÃêÌÖ}ë®»n\ó„![û1OÒ<4¸ÞzëÅõñð$»”à M–kváƒ} ¾Vb抟ö^N™_ó‹Y¥¬k¡Ÿ\8jáUÐD@D@D  ↠] ŠY ©ç*uÄiÓ¦Ek3bï©§ž²=÷Ü3žfˆÐó@[öM¾à‚ l“M6±Ï|æ3¶ÝvÛyuŒ¹—[—ÝRìsÀú‹Íœ{›WA“ }ú³Þ¿þõ¯¶ÓN;Í#àwÜqG;è ƒì裎BQŒeúwÞ‰;˜œwÞy±{eÿä'?1vðÀÍzØÉÿs.œ=¿ë®»Ú÷¿ÿýø !–ýlhfÙûÕ[¾ÉßPÅ&àù»»XLYöâcåžNcÞñä=FÀ“'¦Ì//Ÿøæ›ožÊD@D@D@êˆÖØ[o½5Zˆq¹@üákŒøE^|,1z_×W_}Õ–[n¹hmí½ußµ. ñFh¾ýöÛѲËÌX|ñC®$Tk½¥îÀ'°K=²@ƒIAD@D@D ªFŽEï•W^c«[AS ² éRZeܸqqg‰jMŽû0ìI}çwÆíܘs¥¡Zë-uv ñ°ä’Kz²GŒë® åÚ—³mß@1+wžµØNº_ÍID@D@êœ"™>ýéOÛÕW_Ý*ØY‚r÷±Œ%"žýª{ÅWÄ-ã˜k*ìóέV×›wÅÚ;/âj2+v¯z)Ã}BAD@D@D@ªJË2VSNÇÃϘÛfÍš]7°DVàÞ\ìù|Î9çÄ]B˜#sukx%s«ÕõV²–lŸb–½O=åï\O”4WܰÊâ«»þúëG¡Ê1Ô=ôPLcÍ,å¶‘ûFetp7Äü?þñ;üðã gnýµ>ûíki½>§þÄóƒYæ7˜}õá`Ò×½E@D@D Á Âð3fº»îºË~øáx Ⱦðãd½e–Y&æÖfö•f«»ûï¿?ZŸ'Ožlk­µVÜÁƒJªja½ÕXËüdVl¾µþ¡t±WMe" " " U%ÀŽì¨}ì±ÇâÁì€ÁNˆÎ ¸W°L˜0!{ÍÖxì'?ö@„Á\o5Ö3ÌÒy׺€˜wMJ@i!O¡Êviø#b9`…-Ô8ž·ŠÑA\+8Á-êØ-ƒ«Ò=ŸË}!k½åί·vƒÅ¬·9ÕZt­½"šˆ€ˆ€4(„î\XñHñì]"¤Iϯ0Xë­Æú‹Y5æ>?Æ€ž”uhXiÊ…¢ÇÍj 3ÔÖ[Èt Ú…c@ñjpF# Ýh¯¨Ö#" " " "0 $ ¯h4ÐöŠj=" " " " J@z@ñjpF# Ýh¯¨Ö#" " " "0 $ ¯›ß%`IDATh4ÐöŠj=" " " " J@z@ñjpr <ûì³å6Ôvµ( ».!Bñ|õÕWgW[“º°ÚGy¾Ù²lÞATª­÷Q," " " "Pçžyæ»æškl×]wõ•d5`1Ø[[¯ó8;ž—WÏo t:yáqE P'ú%Šç‘#Göµ×{{òó- ´€öÅxì Ëæ½\±ˆ€ˆ€ˆ€ˆÀ!ðÔSO,ψç | ³šÒóÉÐ>aË8íÓ>Ù|¹ã¨ˆ€ˆ€ˆ€ˆ@xòÉ'íÚk¯n.žè¬ÌæËYëJËéSV›jû@—uÓ¤‘/ÈcªH§ù¤¹’" " " " õNñ|Ýu×Ùn»ífˆç§Ÿ~º ¦3kËêB׈gšÏŸl¹èjMÒÇñ¸·UÒ¦œv½¡:"PL<û„‰t¹:е¢Çý]iYã”+ ‹M&½Aš.Õ¶TÊ‹]ÅÆQ™ˆ€ˆ€ˆ€ˆ@xüñÇç±<#žSKtfiÅ4b_š23DlÚ7M÷hÔW¦?º·±Ó ¥é´åÅê¼Üã´Ò" " " " uH7n¸¡‡XΊgòsƒë@½ÜãRåÔSç!M{Y¿ã¼:Ï$²m=Oœ¦YDZæù4&­ " " " "P‡ÏÅÄrjyöú¹ËËjEŠS½˜Ö§é”Ž—§e¥ÒyÚZSWWéöM!$wñ4±§àž&&ïeä[æÖ{9±—ñ£ç)#íeÄ”­øæ›ožb!B`ÑEÝ%,õ‰pu†«#\s’˜2./CÌzž2./#æJËC¶PæiÚxº;Ñ‹H®ö.~óî)tOÎÓÓqím‰³i/ë w õˆiÙ.ÆÓ2Æór)ã¢Áó{Y“V(M Õm´*è¶¹iÊ´^îâÕcÊI§BØë¼Ìû¦qèRÓÓiLšà}ºsÝ?)«Z¨†€fBˆÒÞB±Ig—¶ñºéaPÄ»ö˜{{1yê|N^F>½B¶¼m¡@ ¢RÍF×miŒ &PæbÚE21åÄÔ¥q¶ í[–Ž•­Kû’NCZ—–“öºly¿ò½ èàúÑ•ñƒö›1¶ÄÅ‚OØëÉ{ð:)÷t±˜z@ºX&í÷§=y‚×û´¡¬T ÁçØÓOR\?y½ë®4vL/§ÌËÓ²4¶÷ò4.VOv¼ç³±·õ¸G=¸GA&Ó«€Î´­4ë H/cùIJõ^`ïCÚű§‰=P—æ)wQL9i¿Ò:oã1u " " " " ¥ ¤ŽViÞu]£Åü¢ÜÓÄž÷ö^––‡fóÜ£·2úh¨–€ö‰"DI» MÓéB¼ž&æ¢=ãyÞãPT”)ˆ€ˆ€ˆ€ˆ€ôMÀuš·Lõ›×•Ã^Nì}Òrñ=ƽ•{1~}…rÚô#€fðThúÍÒ2/ÕÎËÓ˜4ÀƒtzQîb™zÏÓ†à}I{;Ò>b×Ói]¶-yÞ ¤ZŒ–ižtöÊŠcò^–¶õ²lœ¶!íõ¤ ¥âîÚë=ï}¼Ÿ—gó^>OœG@ÏÓ¹—&ŠWÏÓ…´_Ù¼—ÆûSF> .˜]Ó†2‚—yšr/#öËë‰D@D@D@D@ò@\¿¥y¹Ô{š8M{?/÷ØË‰½}ZFš–u—t—y]{}Uâjh&(õŸXõrŸ¨/’¼§½çäceÓ>ŽÇ.˜i炚:ïOœM{íä wçôSD@D@D@D T¿y×r½Å.†=¦-éìåcdÛyyo±Ï‡˜v¼ù´ÜësÅÕÐÅnÈÄ\¼RŸæS±š–“æ–÷%MHrwI÷OÚQÇ)6Äô'¦Üï“ͧuÞ&4WÈAÝEp —¦]Ãy‹a/Oó¤ý¢}šö¼CLð¸;÷q¾¯vÞ¾_qµ4“u1êi™ /&M{Y©xi@g˸'ý½.ÍÓ×çäiòÙ2êD@D@D@D@ò@ƒyHõeh6¯÷´·Ió¤ý¢ÞÓ{Ÿ½hïyï›Ó1Ò:ÆKóž¦ÜeiÈæÓºyÒ} hÎo !Ó“›¤eÙ¼7÷ɤm©óöÀŲ bÊ^N:zÆ¥Ìû÷tHÎ#žÓ2Ò²óórÅ" " " " = ¸óRòi™ç½ŒØÅn6ímÝííˆ=ö¡Œ@Áãî\÷O3-ót¶}6oh_o\*îS@—êX¤œ›•¢>À%PÆåeiÞÇqH.¢½œ˜2b.úfÓ¡(–ùý<ïíÈ+ˆ€ˆ€ˆ€ˆ€ô€k8bh8Ï{>m›–§õ¤³ù´_Zçåi™Ï!Ó¶*¡ÍÍSÑZl"Ù ÒÞCÚßÛ³p‚‹e¾i9õäýþ©ˆvaìãû=½=}½×Q¦ " " " "P9´—_ŒR,íeiŒFKó¤)KË=-÷~¡yA¨“&xÇÝ¥óþ¤žàqw®ŒŸ•èì°ÜAšÞÜó§uô÷|±@êÈ.¨É3^*š½ÌËCu¬'¦Œ@\,+çþðú´Liy ¸~Kk(óòlšv®ï\{³åä½Ìco[NÌ=iGHÛ{>VTú£Ú'’ŠP&J>Ó9Â…qûBÓzú1–_>¦ iê}Œôž”{Òòið¼ÇiÒ" " " " óp½æ±·Hó¤=Oì"˜¶¤ i¹·÷ØÛ{\ª<[O;B6î.ý¸ÜóÅe è»!“MŨOÞÛ«cá.€iGÏû!)”§—ß‹2O‡dåÆ x>M§e±‘~ˆ€ˆ€ˆ€ˆ€”EÀužÇtò4úŽP,OYo—÷uq\*ö±ãŠŒéåÄÙ¶i]!]΄4.K@Fý8Á$Š ×´ÌÛx/òpAëåÄ^Nì¢ÖÇr1M;ÊȧímãÖè´.›öûxœö§¬dÈc}f\ºÈ]™•P,í§×{Yì”üðúÔêLµ—§B¸·4}|NžNó”eC_õÙöÊ‹€ˆ€ˆ€ˆÀP%PJË9êÓ6žNãÞÒÙ:ò~qO§±—{L§ç&‹ÎÉërÅMAqçê@㦒Ni:V©£·Kc/÷ØûkS¬®·2ê>VwnÞ|±6ÞV±ˆ€ˆ€ˆ€ˆ@OÅÄc¶,Í{:Ó4£“OËŠåÓv^ŸöIë=MLðvݹ$Ÿ×úÌýµ@3†O(+T©ó@¯÷´÷£—yïW¬ÎûÑ–Ëûz/÷^æ±×eó”Òòî’*þì—šy”áÊ›eæì"6§m½.-KÓ¥êÓ6¤=¤í½L±ˆ€ˆ€ˆ€ˆ@õ®Ù²4ïi™I±toei]¶±|Å® Fˆ‡—…¤‚µT>]°·OË«TðvôKÓ´'ïã‘'x›î\ÏŸÙ¶=k•p½i*oãqÚ¶Tš¶¥êÒro—–¥i¯'ö­÷ò~Åý¶@ûÝûi‰. Y1›7ÏXÙ>>~_ui;¥E@D@D@D@Ê#ЛP-V—-+'_N›t¶Ùöý¶<ûàeöñ}â.hËÉÓ†öÙ>>f6ööÙòRyŸC©z•‹€ˆ€ˆ€ˆ€T@V{eóÜ©X™—gëòæ«·’¹#UÍí3+a‰¦Ú±7-V–m“æÓtoc¤uÅî‘­W^D@D@D@D º²"7;z©ú´DtlâÉÄåˆàrÚôvÌ-•¨’¢63~9íJµ)Uo1Pâ™ÁT@; 2„tœ‹·/—+–½kÞöÞO±ˆ€ˆ€ˆ€ˆ@u ô*t‹Üª·ö½ÕÅ¡R8û\ç‹€.Ü,(iO÷—Ó®œ6}ÜFÕ" " " " ƒH OAæVN›ªmQW‹ù* }BeZ¤½9qÄrú¦sPZD@D@D@D <e‰ÞCåê;?,ÎÙyŠ€N'Q˜N»“–@ÎQ^D@D@D@j›@.‘œ]Ê`ˆætƒ. ÓÉ®‚ Î©¼ˆ€ˆ€ˆ€ˆ@lÁœEWs:;AòÕŨ¨LD@D@D@@­‰åb„ëB@›x±2 íbTT&" " " ƒO „q¹”J@—»hµJ 4WÚQýD@D@D@D@D`(€НºÖ," " " "P1 èŠÑ©£ˆ€ˆ€ˆ€ˆÀP$ =_u­YD@D@D@D bУSG¡H@z(¾êZ³ˆ€ˆ€ˆ€ˆ@Åþ? ¯ç®mF²IEND®B`‚gwenhywfar-5.12.0/doc/dialog/images/fox16-4.jpg0000644000175000017500000006472713142134462016000 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀüˆ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?õ€ÿ¼9à_Ù¯Ø,¦Ö¤·ÿM¿½æv dQ! ÞVåWaA ±$ú/ö&Ÿÿ>v¿÷ðÒh_ò·;#ûŸÞúÕ’}#‹þú¯NNP“Œ]’8ôi6ŠŸØºgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷ѯŸô¯‹>4Ñ<'ã kÄ6Ú>®ú‰æÒ,á…ÙZóÖ5V ™0¨<1Û¡ëšN¬Öí‚„_CÞ¿±tÏùò´ÿ¿”béŸóåiÿ+È'ø«ãUð§Û‡€ö_Aª=Ó4S², ˜.¾q —©àŠ«£üIñN£ñBÐ[Üè7>ŸÂ0ë&Þ&pdÌŒ$x‹F$2eJ„l  f—¶—ó1ò.Ç´ÿbéŸóåiÿ(þÅÓ?çÊÓþþWÍWß|Y«ÊšÌÒZiöW> Ôuhlô½E™”©YrËòʸ# ’xâº{?W¶þ#ðþ’šuž£§]ßXi7¦Cq<(ß4Œ¡l½¹È<íåüÌ~Ív=»ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¾~ð÷ÅÙÜêš$iÚ…ðÕu»•¹ÕîÚ(£µµ”… ‚K`ñØžjÞ¹ñ÷R]&]WIðæ“ ½¯‡mµ™âÔ¯ž9e3¶ÕŽç zž38£ÛËù˜½šì{·ö.™ÿ>VŸ÷òì]3þ|­?ïå7M¹7zuµÓC ™¡I xÈc?ôÎ/ûèÖœóîþòmÄ?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷ò›ý‹¤ÿÏ…§ýõÿ׫ÿ¦qßF¢?õÎ/Κ•GöŸÞcÅi?†¾ñ6w4V6°êpÈ.·mh™wðO—–9\É ‚ ë~' èzŸÉ(;ûŠ+ÒŽ•x©Or#QÁ´ŽëBÿ$dtÿ¹©Î?¹ýõY0èö?2·Êݽ6¼ð麰º>ÑÆœ‚;~ËûUŒã(=—ê(úç÷CêÏùŠV¾ð]¡œÛx7Û„’9ÊXD<ēվ^U°24ÿøBüý¦šŸü">ûtm%ÏØbóÇ,†ÛWtÀÇJµE\_ÊWÌUÔ<á BÛì×þðýÔh{Ÿ.[(Ù|ç9y0GÞnç©ï\ÿÄ?…zî­›RžkkXmÖØÛZÃlF«#DÒÆv‘¨ bºª)»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõQ`r/ûê¨ÑBÇwñÕ¼ÎOâXÿ‰ |¸þï÷½è©>&œxZãæQò÷âŠú<%okB3µŽZ‘å›GUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾_üyzøáD(ªWгê[L¢HZ)£a•b ‘ßCÔ ÅMoÀ­b&¯á†ÕD¦± ˜ þ`êž^wnã¦3Xr«j_3¾‡OEeéhš„Ö–íè2öž[}U”0ú*K«=ÒÖ[««]> xPÉ,²FŠˆ d³ÀrI¢ÑïøÁ Ë·õ÷U$Ó´©],,™eXB¤ê8¬Wð&µxöz6§á½Jæ0KÃi<2ºÁ%T’(´{þðBòíý}ÇIETþËÓ?èiÿ~Wü(þËÓ?èiÿ~Wü(´{þðGyvþ¾âÝSû/Lÿ u§ýù_𬠷ڕ¥Ú$öö“‚'PUfí퀠à`UFš”\“؇Q¦“[ÏXê^ ¿ÕdÒloü=u¨ÄH’Ò¡y“r€äcéZßÙzgý­?ïÊÿ…M£ßðÿ‚UåÛúû‹tUOì½3þÖŸ÷åÂì½3þÖŸ÷å‹G¿áÿw—oëî-ÑU?²ôÏúZß•ÿ ¦ÃÃë­G£5­ ¾’Ý®R/³bVUfÎ1ÕÔc9æ‹G¿áÿW—oëî5è®s[Õ| ¡ÝÅg­j^Ó.f]ñÃw<0»®q¬A# Ž=+]4Ý-Ô:XY2°È" Ê‹G¿áÿ/.ß×Ü\¢ªeéŸô´ÿ¿+þeéŸô´ÿ¿+þZ=ÿø#¼»_qnŠçu¼iúž™ Š%ª]HcœD¡w®ä»òpzŒœUm[ÄtB];U×|)ay<Ë{›»x¤L€FUˆ# ƒô"©ÓI)_rFÛVØêè®I¾ðŽ­wöm-ô»ç6©v­oÉDÎ謮ÓóFマ*âÁ¢6¤úp°·ûBB³0û'˱™”|Ûv“•ÑÕx\ÅŒlm-FûÂ6ößi¾ñ,VÐ\yÛd}qãVÚβm>`+LWº|±ÆÄÛ>çf?{¹·ý£oÿ<îÿð_þ&íùçwÿ€’ÿñ5ÀÜxßš£¨é:„×òZêÎ{dÖݺks(Ù#mLÎ̧6ìM½^—ÿö½o5Γ­6£÷ŽI,µ‰dUcæn\¤˜R<æàcLcbm~çf÷sOûFßþyÝÿà$¿üMÚ6ÿóÎïÿ%ÿâk†ñ'‹tm+QÖàºÒRdÜ: W»QJã±Îü9—E—ÂVo¡jŸÚV»i´ï´n]îÌF?»ž=p_<5©_øsÁ¾!Ôµ;7´Ñ¡žk[[I‰‘^2$”ÈÛ†üª«“Œô¯_¢‹â~ñ5Õ×´c¥\»AªØ]I5œþ ›P‘$UWA4n»m¤ ¢69a—!žÖ¼íkÀÂÏÄú­þ¹wÃk¶ßÈè·"ÑØ¤±¶ ²d*£8;Aß\í…R-~fû[ÕµY­VE³Ží¢Ûyœ1QjXàmË– gžNK…8øSªkWÚî„÷ž!²þÓ’)»a6¿4÷,Æ&%~ÄÑ*Û/Ý meò z/†vÿjëÛ‰ çóޏÜõÒU-?M‚Êæêâ'‘šé÷¸b0IãsZÂiBIõ·æg878µÓü(ðF±‰©h𾻡ø³N ,0Ÿ[Ý5e’gF+‚T!܈ĸ<œŠ­ðÇV×ïu]IuëÖ Nµ§\x‚iîO)Žß±4J¶Åe ÷Hr2ù½¶ŠÊæ–k|Š’Š“Á¡·ÅËa x†ó[¶ÿ„nVy'¿{½®n!ÏÎä•b0Jdãå\óêôQp±æ^*ÓµWâÝ톓¦Ù¬þŽ;†¼°k Q®%*‰õÜ=«âðø_JÃuõåµÎ…áØÌþ!šÇÍ(®ªb†4au 1ÊÃ2Žõí”Qp±ãÞ#×D÷rÏâ?ß衼7ow£-­ãÛ­ÅÓ‰LÅUHH¤BGpÁû§5{­kC¡Ç¬k‰§ÙKá{¬î¯¡¦Á{skq+È­jûÐ)' óǰ«µ¤æœ"—KþfpƒR“}Èó?i ª|NÖÔu;!…íÝ ÛÛ¶ÿ>ëkB Ûƒò“´çx®kX×µíCE·ŸûjþÖ{Ï ø~v’Þb›%žûl® p ƒÇ#ƒ‘Å{•Í,yŒÖÏMÖu}/Vñ±¥ØÛè‹.Œ§UŸuÍÃ4ÞqË97¸ˆ›p†šÛOù7ÿb‡þÙ× ÑEÂÇ–éš>¡¤èmãÍrùoå²ð»ÛAm¤Y5¼žQTåšG/'îÔ)ù@äãšçô¯ë±7‹-|9z·Œ¾7ÖIo®M¬„¸ ë”’T~ýØ,2¦y÷*dèe…ãgÝ}Û—sãc ŒlMºrèö’oÝ6 7îÎÝBuÆï38Ãñþµ±Ž˜LcËM®ác#Ãòyž#‘¼ß3\®|Íý.äÎ÷éŒc#ÆÔÆÅçþC¯SÄG}¥ xPßnÖNnIó¤¾nÐ3ƒ÷õÛ[i¾F°×©+˜Ì,]ÙÛsH]¹bpp@8 Ñ«©$ínÄS‹W¿sçk})üCáéïnîõ«ÍF‡Í.WS¹ 4¹U\*Aõ“]U•Ž…­ëþ¶ÑõëÛ«¦ê&Y­u™¤°™ÏdLªÃÇBAõú+;—c–øUwwyà{W¾ºšîhn.­¼é›sºÅs,HX÷m¨¹=Ï5Äü ðÖ¥áÏø‡RÔìÞÓF†y¬mml&&ExÈ’S#ncòª®N3Ò½~Š.÷ FɶüÌç纑åžÕìômkÞðïˆ4_é?¼c‚Ø-ö™ÄÌ$™ÑŠàîDb\u9„Úö¼ÞðÜÚn·¬Í,º$OâY#‘¦kK"ãý%2Ù[Œy˜#,T;`˜Ö½öŠÊæ–!Ï…ô¨ü1§_^[\è^ˆÙÜÏâ¬|ÒŠê¦(cFRܬ1ó(ï^ÙE =â=tOw,þ#ñ þŠÃv÷z2ÚÞ=ºÜ]8”ÌUT4ŠD Dw ºsX÷ºÖ±$:zƸš}”¾±šÎêóÄSi‹5Ó«yÎdHßÏb3±Î9ÎÖÜqë¾(ðôšôf¯êúu´‘47Y4*³!ê xÙ”ã#(Tó×¥kY[Aeg¬K¼¬Q"ôUQ€Ð w î˜÷²/„¤Ô®-îošÌ›™ Ï—,†ÜÉÒrGƒÒºŠ­qg×¶×lÎÛ~ÀÁÜ0sVj§$ÔRè¿VL"Ó“îÿDQEfXQEQEQEQEQEQEQEQEËüM8ðµÇÌ£åî=Å|M8ðµÇÌ£åî=Åõyoû¬>™æ×þ#:¨t{™[ånƒÞ›N€çG±ù•¾Vè=éµóØßãËÔìÃÿ !EW)°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÌüUÖ¯¼;ðç^×tÖE¼°³yá.»—ró‚;ŠÔÿ…qñ;þІ‰ÿ„¡ÿäºÏø™ _x§À߇4Æ·[ÍFÑíâi䯥¸Ë7`:ž§ÐÅz×öÕ·÷ò` ˆíž+¿ñŠéö6ÇI#pê7 #œ¤ŒàŽõç^Ò|iáÍ;MðÜ?ØWzFž#·ŠúYå[³&¡„&Òá]Þ`ÛÚ¥Œ_ ü@Ó¯¯®tÍRu‚õu›½:.Öo$˜åu\ĬªÒÀœð9®¾2ðãkØë~æçí×Ù¥ò<ð2aó¶ù~gû·gŒf°Çƒu!¢}ˆMgæÿÂUý³»scÉûoŸ·îýýœc¦xÎ9¬Ý+áí톮 –Þ CK]]µ(¦—^½£&àÜöEesÁÜÀ$g94 NÊ×ÅZ%Þ¸ú5¬÷71ÊÐÈñYLð$Š2ÈÓ„òƒ r¥³ž1šåí>!ù¿ Yvµo7‡¥ÕþË24I¶6`_ìBÃsØ AƯƒôxvâM!bÒ®tF½¹ºK³s"Ý*Í#˰Åå•bÈݼdvÍržøk¯xÀº†¬nôÙcÖ4ymï|Ù0Þ<¥’7ØYâ<¬ÜexùhÐ5;MÆþÕ-† !’ !{9ž O'4¨Ò(þú–^œóOÓ|káÍFÞòk[»£ö;oµK–Ç)‡œH‘²‘N jåu/xƒÄ–¯kâ.É Ð.t{g°wÊÓù[¦ue] y+ˆÁn§æéZ–º?Œe×fñ-üZ Z¶‘%……¼2¼;º;I+˜Õ•sa¶ï˜æé4ŸèÚµé´Ó/㼑mb»c,‚)3å’àmËHÎ9Æ9¬ÝSÄš‡ŽtM#aªR+ï¶|áÒ&+gO—Ü>•ŸðËÁ·ž {ëîí¯4ëÒ·)ŒG0»`¸U]¾S`Êr¼Œa|e¥øº÷Æz©£éúÖZL’É›­NXd”ÉFFÕÀÆìƒ¸ç¦v´QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžmâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@É|eÔo´…ž#Õ4Û™-oml$– òŽ£ ×Iÿ iÿè©üAÿÀ‹þEªQ¸›±fŠ}Ý”:mh×w+i,—W,Y¶Èà»,q“€`À®Â:·3ý`Ù»fÝÜn¢Ás¬¢¹í#ÅQêÚ´–ºvªÜXÇq-³êbÞld‡Q™Œ)]Á äc5Æio/¾Oyo<÷ší·‡%¾»¾Šü›YÄÐ?EÞNES‚À2X.z¥Åé¿4Õ²gÖí5-#ÊÒÛS^ÄŠ·6èÌ‘3Ë”`¯ó–­é¾3Žîk«IK»…äŽpXÖŠ(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(—øšqák™GËÜ{Š(øšqák™GËÜ{Š+êòß÷X|ÿ3ͯüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þBŠ(®S`¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Çž>,ðn«á¡{ö•³[›™¸ˆ7VÚ98¸Éî:×¥ÂC­·ýü“ÿ×!ER“BjåÝrXn¥]¬’©VÞ;~gvÇ g†«ðï…uý='MñL#@³u[K§¹HTäB&ó6ìåÆ[o|ó]®9øB¿âSöí?ù˜¶÷ùô÷ö+¿à;¿v¬Ý3áž™â}k‡d´:ƒ_µhI-ìnÒKã1;IBÊ0àW ÑEÂÇ/á¿jº ô–öZÕ³h/u=в–ęѥv‘‘f³{’ŒœqšÀÒ>Âw>Òõß³Ú_éRØêm7G,ÍŒ\¢ï[óó à àüÕèôQp±ÁMðò}V-üO¯iDºDÚM§Ùí>ÎÑG.Íò1ÞÛå>T|€ª0~^jå§…|@/î5‹ÿÛ\k+¦¾Ÿaq™åÇn¬ÊÍ#Fdo1Ë"ó*ü¼“]\,rÞðt~¸¹MÔn%Ó®‘d–Þã29ºé$þa=d,¸Æá¸c$Z¯…¿ðî£qqmg¨B`žH]¹ã8èNq×¥w_ð’ÓOü•ÿí•qi"Z9ÝFÊÇ@Ómìlaxì¬-Ý#Bí#lI$êÌK3qÉbI<’I¯?ð ñWˆô-Å·>*–Ùuâ½d6p5²@øqb¾i}„ûÀÝÎÜq^‘ªÜÇu2_šíåC€r}hÒàuQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžmâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ÜM ¼M4òÇk÷Ø(ºš«ý³¤ÐVÇÿük•øùÿ$cÅ¿ö —ùW¨§øYÿDÓÁŸø"¶ÿâ*ã’ÝŒXdŽhxdY"އ*ÀëÈ#ð4ê³®[Ûév±ZéÖQCmiÇokn$*"Žp+ÌþéRøƒÂÚŒ5k“j—ðÅ}/“¨È–È[`ål_¸r¥¸<çš› ô:+É|/¬xƒD[›µþÌ}ãÆWv@b´:õÐH$Ý´aØ|›@'pÎ*Þ™ñ^Ôu¤–ÓK’m1õ‡ÓM¬z5ãH±¬æ¸7Xò0K”Ç ݸb‹ÏO¢¹êþ"ñÄšºË¥[h‹{sj–¦ÚGºe†G‹y—Ì ¤º·aÀïšó_k÷šÏÀ}[O´ŽÞßOÒ«h–(ñ´fÜEº™ƒƒç&$z—¥mØk-‹ÄøkS›C“P¹Òd¿±¹·¶•a‰ÑÕ9ÈK€dB2Ásµ¢¸…ž3¾ñ²ß_k;K6[F‰$ód{JáÇ“ó(CŒ°ù¸ ä¾)øêÐx®ÊÆßŶÚD.·§Çy¿Xeºgž3(uÜ !c»?).sþ¬Ñ`¹ì´R#+ t`Êà ƒE-!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžmâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@µÝ#L×ô{­Y‚K:î3ÌQÊc2!껇#=29ÇB5ÔÿÂC7­Ïýüÿ×1«ê6:F›>¥©\¥­ºïšgû¨¾§Ð{×%ÿ wáý'þŠi¾‚v=QºR£„eڤ̒Y˜ž[Ò¹(¼ áˆu! Œð°¸ûO‘ìëmæîÝæyü­Û¾líëÏZÞÓ®­õ 2ÓS²•f³¼ˆMo*ýÙc$ᇱǸÁSQ¨ðhŸdû'Ø¿sý£ý§·Íøùó|ï39ÏúÏ›;cT á =eµh`»‚áçûCÇ üñÀòõ.ЫˆÙ‰ä’¤“É­‹K«[´wµ¹†uŽF‰ÌN+©*ÊqЂ#¨"¦¤3׺%¦¹&³kͽ̒´Ò$W³,# 3˜ùEŽyb¹Ï9ÍV>ð·Øa²]/d0éï¦(K‰Tµ«®Ö‰˜6]pN7ƒÈÁæºJªš–œúWö²_Ú¶ŸåþÔ&S–KïÎ6ãœçÈÒüá7ígÓw­Å©³u¸žK…[sÖ3ý…ÂôãŠe¼5ei{mÉ[Ûo²Lò_ÜI/3ˆ’Frñ ÉùP]2º+£VV ZZ.nŸ é~¢u $µ­c´>Q*†(ó±J´íÉã gSõLÕâ†=FÑ'Xnbº’¸–'Fpʸ"¯Ñ@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( _âiÇ…®>e/qî(£âiÇ…®>e/qî(¯«ËÝaóüÏ6¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ (¢¹M‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ãçü‘ÿØ._å_A×—_YØê’Yjv6÷ör²ÛÎ¥£”u†y£¡èr+gûjçû¿ùoþ.®2±-\ÅFU‘š (IJ)è[Í“¼{ánàýCÁÚ‰õh¬®Éñoý‚åþUô\b™-Øó 9ãN´½kk›Quš°ÜÄcš1’0èyFã•<Ž„3[ÄÞMhhâ %uBp,äbr}<¼îý+¥ñP•¤e‚ÊRPŒzódÁ¯ø[¬ø?Oðv‡áZ[+FbKÝ:å»kýÃ|¥,Ù“.$Á!³Žjl;ž¥jv:¤3Ka?œ\Km!ØWl±¹G^@Ξ‡µ\¯Ó-î4è_µÕ58îÇsZ˜EÛ‹s ºƒDèacd1mÄ8¨4[_¸ñKÍzÂÃ[]}ã{;¯LŽöbr¢4°ò¼¶  È $Ň* Ïm¬¨¼C£Ëácâˆï3¤ F¼7[ÿ© X¶Ünè Æ3í\_oôë¿\ {Äw‘ø±u+¸Æ“&¥$j°«È" j#§’Ä›NIÎìð8 ^Þ7Â;ûO]ÜZJ<#qý‰k…mn`û1Þù÷“÷•¾àÁQÉbX.} ‰4)4m¹C)Æ2"Ÿ^#±}oer<­êZÝÊøVæ{èå¸{¯³^¨‹ÈÂ1")NfýÈ >AòŒV¦…«hcUÔ£Ó<_©ê]Iµ[é5If6—Ô)YKŠB†RQHÚQp õ,=j³umBÒ.-íµmkMÓç¹;`Žæé"iNq… Ao¸ƒšŽ¹y¨GâÛ»õÖÞkip<¥k|“˜Ã2³nóU`c<·Œ¯µÆþ8Ô¿·ÓUqhú›%¤RU* ½K²ù¢A¶"¥K3‚(°\÷:)’€²í$r3œRÒQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEËüM8ðµÇÌ£åî=Å|M8ðµÇÌ£åî=Åõyoû¬>™æ×þ#:¨t{™[ånƒÞ›N€çG±ù•¾Vè=éµóØßãËÔìÃÿ !EW)°QEQEQEQEQEQEQEQEQEQEQEQEQEQEQE«€ÊÅ#}¤0 q‘È8 Ž?Z±ö鿹mÿ€Ñÿñ5ÏxÛ^‡ÂÞÔ¼Eqn÷éð4òD„e^ gŒâ©h|Iÿ¢=­ÿàãMÿäŠi7°›GUq<“²™ ü«µB PIèI¨©¶éx4ûIµ 6±»š-óZ´Šín`P²’¬F9*HÎpHäó‘xëÃjBÂéæcqöo>;)ÞÛÎÝ·ËóÂy[·|¸Ý׎´jKEføYµÖíîgµŽd[kÙìÜJ%á‘£b0O©Ç|v¥HaEoâ½:Ÿ$7CO{jYUó¼µBäcv7`tÎ=è~ŠŽÖe¸¶Šá *PzàŒÔ”QEs>#ñχ¼=s,±Õà²+Ìš-ä°øÚ<ÔˆÆrX©Ç^(¦¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(—øšqák™GËÜ{Š(øšqák™GËÜ{Š+êòß÷X|ÿ3ͯüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þBŠ(®S`¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Œøáms{ðÄövvòÜ\ϧÉ0Ä…ÞGnUG$’@u¯uþаÿŸëoûú¿ã^’E ’'hÜte8#ñ©ÿ´/ÿçúçþþ·øÕFV%«’ø }¡ŠÅ.ß1% "œã2É‚+˾ê²xºƒõëê–Åc/“§HöÎW gålo¾rÁ¹R oz¥¤xU2ê¦Kmm5÷¹ñøræif¶óÉXþܲyK BB mùK Ÿm¢‹…6ð-†kâKíïÞIâé]È5i4Ù$V…žCK­¥<’ˆ#Ü0F6ç“Åøg@×m>_YxƒDÔ¯u; Ï*Ú» Eû9 jb1L[ø2d ¡¾ÑEÂlj.‹¨Ékvžе= ïþk›{÷šÙíMÅó¼½À̸›÷À°ù‡ÌsÆž…a£CªêWZGƒõK/ `I©`úT±5íÁuÚ« (2ÈÍVpmëóÞµE kðsIÖ´›ýB?Ú^>­%¼&ÖòW3¢Y„µóBæFÛ·÷rwäçåÛñ•Þ·âßh¢Ös¥ÛÌÚ­üÞYò˜Ã"-Ý YdÇ\Eï]}\Š(¤0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(—øšqák™GËÜ{Š(øšqák™GËÜ{Š+êòß÷X|ÿ3ͯüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þBŠ(®S`¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(â6½7…¼ ¬xŠ xî$Ó­Zábr@}¼ã#¦}iÿØ?¿èðûÿ7Ÿü‹T¾-èúŸˆ>øƒDѬä½Ôo¬ž h#Æ]Ø`xS€'Šö¿·CýËŸü“ÿ‰«ŠMjKlóèí¯­l,×Uû0Ô"n–Ù™¡Y²…€%FÞ ž¸Àä´¯AªÍšg‡õëÍ*i„1ê±ÁÙßæÛ¼'šS?Æn9Î9®ïÅQ ÜÅ ‘hä‚­µ¤“žyóOøsBÑü%sáYnWNŽ+!©ÃyÛ< „•-æ‡Ø2Sa¸ÝŽjXÍo øÓGÕïgÓ¦¼°³ÔÒúêÖ+¼C4˯˜¨pØ; àzœfµF½¡oû k:wö®ÝßbûRyøÆsåçv1ÏJácðާŠÈš\kxÞ5þÖ$<{Œmßæç=|žß{cµgi> Öíµ§êQx‚æÕ!ѵ¨¤:v©au, ¦ê(.RF·b3µÀ?)ë×),|Má»ë+»ë/i7V¶@›©á¼ã€IÞÀáp<ã¥yÎ¥áx†Å­"ÑÃFÛ·Z2»O-̲ˆ¶ªùLH…<¦å‚·ï8QÍlXYë’xŠ>Ÿ¦‚úzisnZúBêê £” Bª\ƒûÆùGrÀw‘ßXÉyö8ï-ÞçÉù+*—òÉÀ}¹ÎÒAéÅs ñþ™£j:…´ºf«sm¥˜†§}Q˜,üÀwîpíò²±Ø­€Fk3á…u¾¡§ê6ð\%ÒEp—й+oØðì_dXýÙmnpÙÝãÿøRñˆ.-´[Ë»›Ö¶:EäñÃek€¸ó¶È¾d—*@qEÃE8ç­†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErÿN<-qó(ù{qEN<-qó(ù{qE}^[þëŸæyµÿˆÎªÇæVù[ ÷¦Ó 9Ñì~eo•ºzm|ö7øòõ;0ÿˆQEÊlQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW3ñWZ¾ðïÃ{]ÓYòÂÍ焺î]ËÎî+SþÇÄïú*'þ‡ÿ’ê”[v4¨§=œÚ]…¥½ýê^]E WB/)euw á2v/ œ¤œ“ÆxwÅZþ¿ ¦­¦øZ# ^:˜.eÔB\¼,p&ù{vód GlñJÀv4WáˆuõõΙªN°^®³w§AåÚÍä“®±£Kƒ••AÚXž"µ×Æ^moûoÜÜý Úïû4¾GžL>vß/ÌÿcvìñŒÑ`¹¿EbZø«D»×Fµžæâæ9Z+)ž‘FYpžPaŽT¶sÆ3\½§Ä?7á¢ë.Ö­âðôº¿Ùc†F‰6ÆÌ àˆX`n`[H8,=Šæ´ø{T¶v€†H,…ìæx$<œ|Ò£H ÆØé$nC†á¤s‚T‘œÞ¼ëÂ:O<9§i¾‡û ïHÓÄvñ_K<«qödÀT0„Ú\ »Ì#;{WoE+ÂêCDûšÏÍÿ„«ûgvæÇ“öß?oÝûû8ÇLñœsYºWÃÛÛ \A-¼†–º»jQM.½{FMÁ¸ìŠ ,Ê烸€HÎsé´Qp±Èø?Hñ‡n$Ò-*çDkÛ›¤»72-Ò¬Ò<» ^YV!ÜÛÆGl×)áφº÷‡ü ¨øjÆïM–=cG–Þ÷Í‘ó áƒÊY#}…ž#À*ÀmÆW–½fŠ.<ÏRð'ˆÇæVù[ ÷¦×Ïc/S³ü(‘}OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´W5ÍlEö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÄ_cÓÿçÒ_ü]ñÚ>ǧÿϤ¿ø0ºÿãµ-\,Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑEÂÅ)ßA‚SÆ8¤Uõ[G~†jgÚ<9ÿ=`ÿÁµÇÿ®ªÓ^Ò<3à=;RÕï#³µû4,îÙf’Y8eÙØð$ž@¿¼3.…®j¶óÞHtK7¼½³–Î[k´Qœ&uFù‚¶Ò@޽kg§c4äÕÎv9|?$‹o»WU¹$“ÐçU—µÓQÞÖEU±:Фþö»‰îâ¿ÐÞM›¡¸¶-±À9V^„tèk‡ðÁ3Ýx{Ï-&öû‰;™`wúá”7ÔG"{3[•~ÑáÏùëþ ®?øõhðçüõƒÿ×üz»]oÆ:‹®hú&©©Gm¨k2šŸh÷¢Ñþ¿áƒÞ<Çíÿž°àÚãÿQöÏX?ðmqÿǫӾÑïTÔõÛÄ–Km:Ò[¹– ²F…Ø($p2GÖ‹Gúÿ†xà>ÑáÏùëþ ®?øõhðçüõƒÿ×üz½*Òý.m!¹Œ0IQ]CuŒóR}£Þ‹Gúÿ†xó´xsþzÁÿƒkþ=ZUÕRª8±l©$Ÿ©$×}özó}3‹gQ÷Ry‘GeQ# µLâ­t8·{3âiÇ…®>e/qî(£âiÇ…®>e/qî(¯¦ËÝaóüÎÿÄgUÎcó+|­Ð{ÓiñÈ"Ç…#t>ôÊùÜgñåêvPþBŠ(®c`¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ÆÖ÷ßÙ>×-l'ÔàЮmï.ìà]òb/ñ²4ªûG$ŒœÏxÛûCƾ$×´W†Êê:\fêÂ[yïî'Úȉ Š$!<³ÉQ“.<×wm¨ÜZZÁhÖ}ž„I@®Bƒ†`AÀ¹ê9©?¶'ÿ Uïýõÿ[ËY6¿3(´¢“9¿…v—úlú”&±º›ÄR[©:»DÆ ‹_ùgg‡gC ç9|¾âÕ³ác‰<<}Ÿü•’­ZáÁUÓ.<ïQõ!‰ÇСªÖ‘Ic‹B|æ²\F<Áå´gðpÄŽÙ:‚.ÛÿZ1I_oëcÏ<}£øçž$ñ^©¥h€ZGoc¡\ßÞÉk,2ÛH·- ÓaW‘yÑ%òK9fÜAV•Ó¸|ÃvGÞç»þØŸþW¿÷Ô_ü]ÛÿÐ*÷þú‹ÿ‹¢Ïúh.¿¤yWÂ}W³Ö49nšM7ÄV¶ó.­ ðÅÔO}+BÁ¾Ñ|Ò´7ÍÛ"°%@ YÑ´Í9>kºjxCSƒÇá{»}Rî]&S5åɇµlÛp^NT+7ÀÅzgöÄÿô ½ÿ¾¢ÿâèþØŸþW¿÷Ô_ü]ÓAuý&yî­á]SH–òßÀztº]æ£à»¨ä¸…Lb[õhD-$‡ƒ>\;ÝIçŸ"H”!b~eØŒ‚G8i>+Öÿ[ýñ^öwÖÿ}Zþ_ðM#]Ò\lzÝäGÅzÉÿ–ÑÿßøJõŸùîŸ÷À§ý‡/çü?àëŸÝ=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠò/øJõŸùîŸ÷À£þ½gþ{§ýð(þ—óþðCë¿Ý=vŠòñN°zΟ÷À¦ÿÂO¬Ïtÿ¾Øoùÿø#úç÷NËâµÍ½·…æ72ÃlÉ+„U’IÀrOj+å¯Ú[Ç^ Žö/Åp‘ÚÞØ¬ÓÈ€‰X‘0s€„*ä“ÈÎ ¤ñrÁ¥BÛ¯âÍT|ï©ÿÙgwenhywfar-5.12.0/doc/dialog/images/cocoa-4.png0000644000175000017500000014013213142134462016106 00000000000000‰PNG  IHDRÐ0¯\ xiCCPICC ProfilexÕ–gTɆ«{r"Ì C†!g$ 9Ar•a† ã0dDEdqLˆˆ`X0(¸*AÖ€ˆb`0ÇdP®‹(·¬çÜ»ÿîŸ[çtÕÓo}õuuWç¼;9A ,@*?CèáÌ ˆdâ€H"‡›.pò÷÷ÿØ>ÞxòŽ‘8×?†ý÷ i^l:È™Žá¥sS>‹ð W Ì>…pv†aTÂt!²A„+Ä?ÏõbŽ™çós1Á.HL?x2‡#Œ€ôÑ™YÜx$ia>/‘Ùa{n‡‡°x©kÄ\…°nÌyâ`'f1'‡¿ÈóD욘.HáäÎÝü/»Ô”Lä{Í5*Ò“ù)ËÅgCG®1ÇÕ{)sg6§ÇòC‚t~Ìr¿Žº.° Ãùö^Ðó\–/plºÛbž$Ž—øÌæò 3C8=+Èmó‚Ø뺨Ç%º³ôÄ öâ³’×x/î\À\à 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ùãb ™l>רifbj"žþ¿iâZ›ßì{Æ\ AŒ›k91Ø%#5àù·@³.òákڊкiÛÊÍfÍçC‹ "Lò@h]`Ì€%°ŽÀ x? "À*ä '€T Ù lÅ ì»A58zpœmà<¸ ®[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ì d¹A>P ECñÊ„ò¡MP)TUCµPô+tº Ý€ GÐ4½ƒ¾Â(˜ ÓaeX^³`'؆WÂñpœÁÛà*¸>·Â—á[ð=X¿†§PEB1Pj(# å‚òCE¢âPBÔzT ªU‡jBu zPwP"Ôê ‹¦¡™h#´-Ú‚æ¢ÓÐëÑeèjt=ºݾƒBO¢¿c(%ŒÆÃÆ„câ1Ù˜bL%æ(¦ss3‚ùˆÅbX¬ÖM®Ŗa÷c›±Øì0v ‡ÃÉã pv8?—+ÆíÅÀ] âFpŸñ$¼*Þ ïŽÄóñ…øJüqüEü ~?M"hl~!—°p˜ÐA¸M!L¥‰:D;b01‰¸‘XEl"^%>%¾'‘Hê$kR)‘T@ª""]' ‘¾©d}² 9ŠœIÞF>Fî$?"¿§P(ÚGJ$%ƒ²Ò@¹ByNù,A“0–`Kð$6HÔH´J J¼‘$HjI:I®’Ì“¬”<#y[rBŠ ¥-å"Å‘Z/U#uNêÔ”4MÚTÚO:UºLú¸ô é1*ŽªMu£ò¨EÔCÔ+ÔaЦAs¡qi›h‡iWi#t,]‡Î¦'ÑKé'é}ôIªÌR™P™™™ 2"Š¡Í`3RÛ§÷_e•edce·È6ÉÊ~’S”s”‹•+‘k–»'÷Už)ï&Ÿ,¿S¾Mþ™ZA_!@![á€ÂU… Eº¢­"W±Dñ´âc%XI_)Pi­Ò!¥^¥)eeeò^å+Ê* G•$• •‹*ãª4U{ÕDÕ ÕKª¯˜2L'f ³ŠÙÍœTSRóTËT«UëS›V×QQ/ToV¦AÔ`iÄiThtiLjªjújæk6j>Ö"h±´´öhõh}ÒÖÑÓެݦ=¦#§ÃÖÉÓiÔyªKÑuÐMÓ­Ó½«‡Õcé%ëí×ëׇõ-ôôkôoÀ–‰û  1†Ö†|Ã:ÃFd#'£,£F£!c†±q¡q›ñ›%šK"—ì\ҳ仉…IŠÉa“'¦TS/ÓBÓÓwfúf\³³»æswó æíæo—,]z`éC š…¯Åf‹.‹o–V–BË&Ëq+M«h«}VXt–?«ŒuÝcíl½Áú¼õK› ›Ó6ÙÙ&Û·[¦³,vÙáeÃvêv»Z;‘=Ó>Úþ{‘ƒšÇ¡Îá…£†#Ïñ¨ã¨“žS’Ó §7Î&ÎBççO.6.ë\:]Q®®%®}nT··j·çîêîñîî“k=:=1žÞž;=°•Ù\v{ÒËÊkW·7Ù;È»Úû…¾Ð§ÃöõòÝåût¹Örþò6?àÇöÛå÷Ì_Ç?Íÿ·l€@MÀË@ÓÀüÀž ZÐê ãAƒƒ·? Ñ É é • mýæV& _¾.üV„BDbD{$.24òhäÔ ·»WŒDYDGÝ_©³2gåU «RV]X-¹š³úL4&:,úxô ÇSÇ™ŠaÇì‹™äºp÷p_óy¼ñX»ØòØÑ8»¸ò¸±x»ø]ñã  • ‰.‰Õ‰o“<“&}JöK>–<›–ÒœŠON=ǧò“ùÝkTÖ䬊¢4›´Ýi“BoáÑt(}ez{15½™º™?eeÙgÕd}ÎÍ>“#ÃÏéÍÕÏÝ’;šçžwd-z-wmW¾ZþÆü¡uNëj×CëcÖwmÐØP´a¤À£ ~#qcòÆß M Ë ?l ÛÔQ¤\TP4ü“ÇOÅÅÂâ›m7üýsâÏ}[Ì·ìÝò½„Wr³Ô¤´²t¦Œ[vs«éÖª­³Ûâ¶õm·Ü~`vÇý;ëË¥Ëóʇwùîj­`V”T|ؽz÷Ê¥•÷÷dîUùTµïÕÜ»cïLuBõ½çšæ}Jû¶ìû´Ÿ·ð€ã¦ƒÊK~ý%ñ—‡µµ­uÚu•‡°‡²½<z¸çëHÃQ…£¥G¿ãÕÖw7X54W:¾½nÌl?u¢ÿ¤ëÉö&£¦ÚfFsé)p*óÔ«_£½Úût×Ö™¦³Zg÷µÐZJZ¡ÖÜÖɶ„6Q{DûÀ9¯s]¶-¿ÿvì¼Úùš 2¶_$^,º8{)ïÒT§ sârüåá®Õ]O®„_¹ÛÐÝwÕûêõkî×®ô8õ\ºnwýü ›çn²n¶Ý²¼ÕÚkÑÛò»Åï-}–}­·­n·÷[÷w ,¸8è0xùŽëkwÙwoÝ[~oà~Èý‡¢ˆòŽ=JyôöqÖãé'O1OKžI=«|®ô¼î½?šE–¢ C®C½/‚^<æ¿þ3ýÏ™‘¢—”—•£ª£ cfcçÇÝÇû_­x5òZðzz¢ø_ÒÿÚ÷F÷ÍÙ¿ÿê Ÿy+|;û®ì½üûc–~èšòŸzþ1õãô§’ÏòŸë¿°¾ô| û::=ƒ›©ú¦÷­ã»÷÷§³©³³Ž3çPHÇÅðî”Ä+ ¾˜Ø9ï…ç" yÿްØÇÏyùÿäy¿<o À‘NB ðDÆdÔFFª#bKì`sóÅ QÄ-=ÎÜl ²±&Ÿggß+€ëà›pvvzÿìì·Ãˆg@gÚ¼Gû€¥º¹›YõÌöÍ-ÿ±û7…èªÍöì pHYs  šœ IDATxìœÕÙÿ¶zGDPºŠ ‰bPÁ‚b_¥)&¨ƒ†?ŠŸ€Š’XˆyM¢Fß— Ch¾QTTˆ  E(éEzÛÂÿüÎîs=;;·ÌÝ]ܽüާŸ9óÙ¹¿ûÜgÎT:yò¤0 ÄF )¶flE$@$@$@$@$мH€H€H€H€H  è°Ø”H€H€H€H€( y @Ð`±) P@ó     R´­pM+™Pá&Í “ @0K%'ìZÉ•*Ú±Q'À_H€H€H€Ml—[M¡ì\UL’ ÀiH ¼ ër% K(šé®qþañI€H€H€*¸Ý:Ê“˜þÁt@Ñ\‘\’¾êÊädI€H€H€Hà"·@6ó¹ï-¦@4Ç"zció]CÜ- €XÄr,mä‡Ó§T@Ç(œ# âHu>çF‚¶÷ƒe$@$@$@$@Á Ä$€a#µTg‡8•Bú”è„s8¡®Üa³HŽe,w\¦I€H€H€H€‚ˆ*t ‡‹¥]¸6áÊíЧBH—¹€Ž"žýD­_™žº u‘ÚêxŒI€H€H€H€ÊŽ€Wìzóօm_Ö"ºÌt) çp"Ø-wÓîIpÓ±´qÛ3M$@$@$@$°ÂÖÎmã¦&¾úµõ+³ã”•.P<û‰[o™æ5váj:RÚD«×q“ ÄG ¬˜-.R½Öi¬3ðæQî-óæµo™Z쎡ioï˜ÚNËCqIEt‰tñì§nÞ›öæq`( ZâÓuîxn[MG«×vŒI€H€H€Hàt' Â5o=ò~eè킖û…2 îx¶¬$":EG-£Ø¦Þ´æ#ŨK5[¶Ù*¦MÙÚeš×8\™mì´×zô¨œÿ $Hx–äää‹üãw3G÷¥Ù˜MÅ/´¡+MÖÖ¡Üm-~¡M/t\:´×ï*€¿/)šRAŒRm«eÞXÛ <­ZµjWÁòÌ@$@$@$@$Ø ¤kÔ¨ÑÕåŸÍ¦šQ†VÈZ†<ÚiŒro”iжš+. íœ_eZîÆZîq „ò$ó­ ±ÙPæP§ßZ:$6lýû÷Û¶¨3_,ĈpiÒ¤‰T®\YRRR? <\ð޹~ýz9p`¿1óô@ߪU«ÊÙgŸhL|³2>>²÷À.Yôõ\Y¿cµÏ=‚Ÿ$=5KΩÛZ:¶ì*5«Ö‘ôôt;×Hó 7–“ @E%`tQc3whAÌ^˳÷РРì4F½¦#h½7m+ƒþX@A^y~¿wmƒØM£…–Å'AtF yyy õ–-[B"¹víÚ’••e…é‘#GÂzÉ’%Vð6lØÐúؘŸÂ«c~ûí·¡1kÖª%Y™™fö•ä¨ó°üûßÿ¶cžyæ™QÇÄá†òùºOåíeÿÊU³¥Îu¤V&’—Ÿ'{¾Û.«¶&‹×}(×_Ø_Úžs‰dšýÁˆH€H€H€N…Ï»©1‡­B:W0«ötËÂö…¶5¢]…vØvnE`ív6i Š5íÆnZÛ ,ڦВ !¢¯o8qâ„lÝºÕ èºuëŠnÕ«W·zß¾}²k×.1OvÚ6äŒ3ΰ^ßM!ÆÜ¶m›·^½zvÌ:uk ÆÄÄ÷íÛ/;͘»Ì˜Ø7,Ú 4ˆ8&,ÏË×|*³ÿý²ÔlXYÎ:»¾ü¸Å5riËkåè‰ÃòáÊ™²´ê‡²món™¹èe9i¾kµoÑ ¾@á¦Ér   HTЂ*œ£Y •+˜UƒzËT(£^ÓÚ?æ8€Ž`}ÖIFÚ1ÚIJ©xFÛ¨úðáòwï^+`ay†ÕFòcÇŽÙ¹ á —Ô¡-\:"Yv1&D7D±Ž™T)É k{&]½š3-]222m[¸tDsïþ]2gÉ©Þ Kê%ÙU’åPÞNY¿çKãÆqTŽVÚ#U«§›U¯³¥’9hÛ¤^ 3~£HLYG$@$@$@‰H@õ Ž é ":H¹bÂ7ˆ:€Ž4›Â:L ÁêÌ‚d(­e~1À (,“áN)|÷ÝwV ÃR ÿfXàá.¡–x¸€ 6èS¥J•°ÃîÙ³GjÖ¬iÛ«(ÎÍÍ“cGÛ>êV’‘‘}"ùïÿÌ—Ô´d9û|ã^’.F{Ëþ“›eÍÆ…ÃøF§ì‘¬ê)’’YÝ ýÕ{w út¯Ý'ìšv다¡y¶‹Ú.&]däâïä5ï¶D™–»±–#Vñ즓ÔÒëæ¦ñ¼yËÖ¥¥¥YK4ô¾j~X†10Ú@Hc;ÔîXšF=Ö†ØV­ã¡ Ò|äbü·¬—±Óiø˜–éÄ5FoŽÃ˜H€H€H€H ñ øiAÕŠ~u ¢å.íã–•8Ñíy‰J¸E›˜·^ónìM#¯[¸ý²œH€H€H€H 1 ¨tc©æ5íÆH# M¤­^¢iàˆ:Òž}êÜÒjï5¯1Úi±nn9Ò $@$@$@$@§X4¢ÛÆ¥£åZæjL-‹;.Mmz £½¦½å–G—õ$@$@$@$@‰EÀO ºzQëqÔšÖ¸ÌI”¥€ÖƒÐØ=”éæ–#­å{ë™'   Hlª5ö­–#ö-ÓØ[_â|PëD¼í¼ywâ¨óÛÜ6L“ œ~ü4b4]éRŠÔ6žv¶OIVáp'ä¦Ýɸi´Ñv»õÞ´ÛÞ[8âÄ ™?¾|ýõ×ràÀ8‡ƒ¾'°oß>©^½ú÷L•²-5”Eú×gI¥$c38YXì½°¼LNžÌ—+¯ØT„73%#Àû@Éø…ëM®áÈÄ_~òäI©R¥Š´lÙR~ò“ŸHZZZüƒí«Ô»yöîNÓE÷%We蘪݃Ö @ë´<îâù•W^‘zõêÉ€¤V­Z’œœ\l¼¨ö¢Ô™°¼€™á°vÝZiÚ´é÷bDi’U‰p Û‹© õr´qá8_®Û-gQ·H3¥C`ÓÖrþ9µy?(ÅkvíZÞcÝ¿ßÐ_½dãdM®…ãä±ìäóóóeÏž=2oÞ<™4i’ 8°,D´Î»×´Æî”NY:Vd’AÚºŠ~Þ¾Þ¼Û>æô|`Eó-·Ü"I°@!àpGW‹´çâ°mÑåÀ 9œ40d‚«£ô¯ ²-ø«+m¶»çIæº s°÷÷F€J– Š؆ú¦ ¢Òÿû(2|üý•—ñyÐ3Qº×¹–Œ+î–¸mj€t‚®ª]§¶ôêÕK&ÿãÍuÍ5×h“’ÄØ÷–¹õ‘ÒAú¡­{˜¾ãÆ* };G)t'ë¦ÑÍ›2TüÕøf´bÅ róó$¯¥O5‹J@€lK/B×ïŽæÉ¡cBÏýÓwoF,/”Øæå©ˆŽpX3ÞbF¨!¹Âµ±k‘FúŠË/—‰'ÊUW]õ½Á2ê(%nàÞÆ1˜›GÚ½¥•xg:@Y hìÃ=ݧƨ‹T¯íJã¦w5jؼZ q¢C.%ÚÃéÙùdþIc€.“kòª"ÀÏÅçTM¬,ØæææÚ›™^ÿ¥u,999’’’R!þ–Žœ8)Gs*Þ5[Vç®´®Œ¶§â~°qãF©_¿¾¤§§›>Œ#Øp=&B(‹û@I¸ào=55µ$C”‹¾åkiAù¡îúwžÂu‚ÏÒÒþ¼ña¥:2Üõáê|† Vtªï4~‚Y`æÞzo>ØÑ™ÖG õÁÉÅ V…³žø‚ÝÆ…{«T˜˜5k–ìÚµËÐ/àò‹/¾Xš7o.S¦L‘ž7õ´‹¶×¹íµ qò/¿üR-^d»ggeK“&M¤cÇŽvîAÆ ºßXÛÛ+óàPcÇø¿æýKÞ{ï=iРeù“Î?±Çdt(«öƒ’jU«É³Ï>kç¥ÿœJæAÙNŸ>]>–IŸÞ}îK—]v™Œ5Ê÷:|çw¤^ýzÒ®]»°ãø1ÇÓ™3gÊ•W^©¨Bã¯ür¥,^¼Ø–geeIã&í5œT©Ðª°Ç©b{,÷¤œh$ÿþ,ùnÏÎб!qnÛÒ¬U›"ee™ùÕÏn ô¹}ب²ÜM‰ÆÛü€÷Ü_wïÚ]d¿¸¿6kÞL¦N™*7ÝtSèAå…‹ÊÝ¿¼ÛŠãÊ•+Ëܹsm?÷Ú?~¼üïÿþ¯üûßÿ]ƒ~×,:¢÷Xïõù£Ž? }> ;>òNEyÐûæî{ìØ±bLƒ>Ï>ûlû™tnësƒýÆ9tèLŸ1ÝÖ§¦¤Úç.½ôRÁ¹ók†§ª¼4¹bÞ‘®1Ôk(ëãë~CwùÉe?±÷xÝ'âÒÞ¯°X°â…uÈC{•Â.¯ÔeQ~܈¼œ¼¢÷[äün6Zþ·¿Œ“cÇŽJë .²SBy­zgJãæç»S´‘Æ)ÒØdt|oùáCeû– Ò´å÷móÌ/>Þ¹£o¸qNu9ؽ<ýû§£Þ_«V­jýmÒ߬Oåï~÷;›ß¿¿À}þùç×®ïH׸íXøÚ¹>ÑÞ/”eyÐûæî{øÐaÑÏ,eªÇãw [¶l±D|F!€kABbº7â²a¿fïCÇ·_j𫾴@D#øí÷T”—&×S1_?NÞóƒyàõ^ÿ¶¼ð¿q º»¶Ý15­×ôÒÐ\úk®¶)aìêB¿[-†G¹{0Þ¼_”ÅJ[@Ç=‘²ì˜‘‘aO¦þ¤€Ÿô„GÛ/üx~ûÛßk¿j„XÇq€5à’K.±Vˆ–p¡víÚò /Øê &ÈÈ‘#å‰'ž°D†ësªÊqÜAŽO>¿ûî»öË~‚Õd ís*âr^AÙŽ;6„ä7¿ù,\¸Pž{î¹P™›w\/½ô’m®ÞÛŽ4ßòt Ÿ(¡ú¼°Jg=f¿rÜ/¾ì*¹ã~·‚û6ÚCÌúµ›’”Ïo–LüÓùûÜÕ¡q ]ÌÔCº$ãc~‘Ž7Þùƒ­Ž‹1b ±Þ_?ûì3¹ãŽ;Bû€õú±Ç³†Ý—î_c-—§ëÓ;OGc‰tÅ/EA>³~ýë_ÛU–üq;-G¬sÒö<ð€\xá…²cÇ9÷ÜsåÿþïÿìJXÞc=•ùXA牫¶9Õ±÷ü¸ûWönYY¦­b5תýbRCs¡èo© zÄ8™XÊ?qEÚòL=6´Á…ˆ‹i·|÷îÝÒ¾}{»¦4Ê÷æßÿ}¹öÚkíÏå(ÿä“OäÆo´–fÜ<¶mÛfǹÑX•°¤Æ vÇÇþôbÔr,´5kÖØu¬ï¾ûnùñ~dÝIðÁ‚ŸÌtžÛ¶n•¾}ûJãÆ­…7Á+®¸"t\Û·o—[o½ÕÎ þƒý«Ý/Æt7-ÏOS‡Í­×9xËá—žsŒ«€_ûž9ýËÌILJEÇÛªU+iذ¡=&ÿÓO?µ+œyæ™–å ù‹å„}èyZh>|q¼gŸ}¶üüç?·ütž}ø¡ý2V8°äâ)mß«ÎÇ-ÓqJ³}P¶îpÝ èuÎz-?ùä“öƒìjóÅp‘ÚÚnÈ!öËš¶G"üÞ{ïµ×Éw{÷J®¹þðk}žwÞyòÇ?þ±àoÄçï ãè5¬ûÐkx­¹†µLcݯæ5.Íò£ÆO÷XN¾ñƒÎ7>»ØòL[~Ør×\ó_ûåKʰ~]¥gÇ3dÐumeÆßþ"Gí˜ù²Î,ó8¨[[Ùa~úÖñÇ$ÿœü×Ð~Ÿxà2ýåç忹WnúQ#ù÷góåŸ%{vm—Á×µ“gÆüÚî7ßüÝ`“žRníÚÚîsù’E¡qtü Ç”C´ö`‹s†ó¥çNãpç×$þÖ´Æz?Åšý(Óý1¸öp¿„»ÑC=$¸!1}èµ.72gè¸ë|¼×g3Ÿ{ì|î±ËuÁ¢÷;ï¼ÓZP‡ñ#ÝÏtë|4¯qÐû@¤{¬—é¯~õ+4hý›Æþa1îÒ¥‹à׌0$ IDAT¬qãÆÉG}$ÿûß-_|YÁœv›ë9ܽãèÜÕú˜oî (‡_lÍš5­ïaˆôùõ¯0lu|Ì î ¸çßb~•kݯÆh«íµ 1ÊJ“+Æ w®qŒþóŸ‹ÌmøðáöWdÌ%Òqàþûsí>eî׸ŽñE†ô w~ô>ÐnŸH<Âq WîòT¦8ßùXXÀÄ'ŽŸÓE@ŸVhÕ Ní¸Án5bôã?¶7\¸0!VqC?xð 1~> ó¸©ã÷\`ËG-?ýéOíÔß~û­]íŸ{þyûs9Ä ÚBcsòøƒ°ã›ý@ÌÔ­[׊@øAøþ¿ÿ÷ÿìñtíÚUp“ëÞ½»bðí·[•7ß|ÓºˆÀr½nÝ:;@D6jÔH`Õyíµ×däƒ Ä€ya‹5àæyÏ=÷È0#Èæ/X`?Q¦ávÏœtæ„T6oÞ,à…EÚ7lØ`÷/$ð“ćžú]´h‘à•f0êÝ»wè<Ýy×]2lØ0Á‡Fÿþýå7Þ¸‘À¯¯—i‘ø‹_üB–-[fÓpÓ rlz ¥eëî74\·®ï?êQöòË/Ûkäoû›<ýôÓò‡ÿþoùë_ÿj»ƒ/¾œèq#klq%™Ÿ_'šþø%äOú“tèÐÁ^×è|Ü|™òîåz £+z 71_düÚ£OY†M{ŽKræ 9i É•¬Ù¤à÷¾JöW?ó¯O9„óºM[å­yŸÚ©¥¤gHƒ³Ï•»·Ë‡ôNÿu·ü×o&ˆ•ŸÉäg†Éž™rá5ýd÷–#²uÓZYñí©r8Ûô­$6n’ôº»dÅV3S²aÓfY4ÿ}étóÝò‹ÿ~GŽÕj$z—¦ÿQ<5K’RÓmÛCÇóeÖ´‰rÞe?•¾L‘¹¯<)ÿòéÿÐ$¹ßoþØï©(Û ç×äŸû«ÞOqÍ`Ìÿ6×)îm?ûÙÏìß5^Ø€¿g\Oÿüç?C÷U\o¸_Chã^Œ{ôÃ?lžU¹)ä6`Obá?ÞëóÙï±Ø w™ûÊСC嫯¾²iPeé~æÎ!R:è} Ò=ÖË_:`ìyʈe°Ä}î0ø’ C^:†/#FŒ°ìð™‡p¹‡úÝK½ÇÏZ„cÆ}ûþ‡YÚ †¸=‚Q¸Ï/°í†-xàž/T8÷øsß}÷Éÿ·Fı†ÒäŠ}†;×ør#¾¨Àet¯1BLž<Ù.ñ†ÏãHÇû/¾⺟Tx¿Æßî×~çLýîñÚ'V6%ig¼Ñ,yy¹§€Nx 4~:ÒoCÖ⫇Ùb °pÂ…ÛÿüÏÿD솛6¾õAè"À"K*ü• Xõí<ú¿jÕªEtÇÀ ±M›6²~ýzûÇß"<…?>ì?ÍAÔÃr€€v˜3¬Òg¡‚Ÿ(ÿë¿þËÖáø .0¢ü¼KöUÖ¢ 7¬©ðDš“Öá&„9ƒa‹-ìTñá‰nž`Š1ñ0¢àÖ^°šâCâóÏ?·Õøò¿<|‚+¬‘\jÜ1+b8p÷€öÊ!ܱ\wÝu–Í9çœc¿¨áæË^çÎ-/\cEŸ%(>R¸k¸x˲/Á[óŒ Ì7Š2¯p+H‡/ǬÖñ±¼3aŒÝüß_Lß$Yö¯öØÒo„¤U®!-~t4»¨«,š=±pü‚ãqÇG »Å¾QqÛúÒîÒ©×½RãŒf’”’.i™U̸I’Q­Ž¤eUµmÑ®É亻ž”Ú[KóWË–o–‡ÆÁ|‚Wi··ox,8ä@ÿÆrÅß6 ðÅK°p@×òÔP‡çD`9Æó#rÿùÏ´ºXîúŒt…îí¡hwÑE¹oè=«<Ýc½^§Nû‹Þ˜1c콄ììlËŸ›àë®xî^ê_ó³mÛ¶öó_fpï( [°ÇÜ!ôqîðE–ܲñ|vÝpà öWPª^}õUùñl-ç±G¸ûu¤ó®OYó±š º ›ù»Äµí•è!¡-Ð8°Bàf‹06ûK“ù!š€¥ønP+¶Ž©y¬,¡i´ÇJøoݰä! KÛhwlMc^ø`€e–A1¨ÇÏ$° Âê ýÍ7ßX‘ñ`UEÀMËÝÊÇ7|øVk=>pÓw}“m£ÿ ¯öЬXDþÈa îׯŸõË‹4'XT n½ûƒU¢X¿˜ ŽÖw~X5Eû¢-Ø"¿iÓ&Û†P§õZvªcwîA÷¹#èñºýñ¡£åú¥Róhç=n¼¹Ó­Ç5‚/tn™_?Ý'Æ w k›Sg¦ašVp®AÉïk´·ÇЮK/¹áαEÚÜõ­4hz¾TÎÊ•ŸÕêBY¿üC»ÝOzzŠd˜ c¥¦˜9æ“’*Iõ: l{Ýojj²m§ýQŽvõÎjê—a¾ì¡\ÇÁØtÍk\Öå`ë½.tß‘âXî¯èvØtˆÝ¼¶¢A…Új?[Qøú‡»>#Ýc!Ü`´pï;îü"ÝÏ~¨{¬¿Ë÷aˆ|X5ñ „™÷xP¦ýÃÝKµŸÆè€ûD.î=:~IÙâ— üÒ«÷oŸ–EŠ]‘Úyë‚~váK,ÈX% Vxqì×H´ãˆt¿öžk¤>Ú¦¤±k€´isª­žÂßg¡Ÿ/Ð^0ðás$QÃ÷Ê!–_LüÁ"àÂÕ yý#÷¦‘GжÞ5õ1ê¼ù‚Þb›1c†µ«ÛÄíÆ½BÇÃøšÖ>cL|Sïb,…Þñ‹o³øæ/¢:~6ÂÅ «2\ðÓö¥OUãtÅWØòxþÑýÅÓpðã‚pǪør€à7'¸k ÀÂŽ%ÖÜ€/,øV˜ŽRáÎ Úéyƒ%{Μ9ÅÎAIŽÍ_¼é’ì_Yx¯+÷¸1/ä´_½r² Í?à…¿)íƒrÜ@½í´=ÊÃ]ÃÚæTÆ)É’•žüý.UA ð-‡xMM®$™èç´¯Uï YñÑFüšk¯ðËøžÍÿ±‚û@9B†é†<|AÞoÇÊJ+˜ƒÚ êÐœÌøiF`Ã¥$TfÆ°í’ Ë¹§£é«ãîÞîÏþãÌóûB“*Ãr°u¯‹"û “Á5‡ÍÛ× ‚÷ºrÛ¢מÛen­óŽ£ÓAy¸ë3Ò=_æñë—îãáÙ ü¢ˆ}–Ç{,\\øüXºt©ýŒyÞ¸^}õÕ¡eÇÀÑm‹´·¿·mPø²‡ˆ„Qà %a‹_r1¶ºî¸ãÆšv¯‘Xûh» Ÿ]èƒÏæÛn»Íº båˆpÌ?ÚqxÙ" \½õ¨ó–yû MiW@c<äÍÿHÙ4\I Að·…Ï‹DÐ8ö ¸€°d~žÇ…‡›€»é‡2¤½xË4ï­óæÑNÿïø¦2\X(ÇÅq‹%}t|Øw_¨÷ÛÂ1ók‹2XÉñs-,ÊÈÃJŒ9ás¤9¡ßÞá¿‹¥üÐþcø£ÅO´8nÜLðS-\f`ÕÒy \Óˆ5 wøÔáË~ê……àã^‚àöqÓhïž7<œŠŸè°T“¶C=, šeëŽo'ï3¿r”i_o½7và…•Tàó‰4ñ‹ ‚ŽáýÆpÛ€xjY,lµm<1,¶™i©’‘šjãÌt“6y”…+O2Çbî¶ÓþÇW÷’cFñ¯ÿ³ä½ß~#ÿYذþ1ž~Öýºçe¸°a\ì~ðÆO“°ÆÀ‡ZëýŽëõ×_·ÂQÇÇVZA¬í!,ÑNYh¹æ5ŽTKƒ¶EŒ¹#¸eZ®Ç…<ú"¯sдöCÞmr|à'ï+®¸Â~©ÁÏ¿ÚOÇÑþº—¿·ÎË wꃱh ‘¶ˆýÆ×} Î;\¹œÑfƒ‹D¦Ù²2ŒˆF>L9,Ð)Æâëmv«óå—¿{E¦þa¸<ðÓsd쀎rÑ•=䧃†Ûña¼~ÀpyéÑÁ2ú–ó¥Y›ŽÒ¸U;+˜u¿vlcg>m:üDÚ^v½ŒîÝFÞxa´Ýo²9©ÆÂ«óL3n:Ž–ë8'ì–§yµ;°+t\“Ÿú•,›;#t¼Ëæ½*“ŸZì¸ÂqˆV¶zb=Wzùµ×ëFÏ­^gznaÙÄý@}>QŽ6:Ä~ã‡kr´X°zLJfã·ÞzËZL¼‚BÔ+Fc þ8¼ãEë‹öÍš5‹Ø,ÒœôË‚ßêwèW­ _<ÊSˆ‡í©œ¿úÖŸÊ}–ƾ²Í·Êß?'U0$nP˜Þs¹y­ò™·\Ÿq*›•4â¿rvÁãдbžOaSÜl“¯ø©î}¯,öî k"žáÀý}Ú´iÖxK£÷žé~m¾ñÜb¹ÇFÛ¯[WÁ² %eï}¨¬¸Æ{®ã=œ—²Fx¸Ká‚ÞoMåüqz$@$Pî L.÷3äI€Ê‚t6¼›Z šëtÐY - Õ¿–¬Ã|×]wÙ5#÷íÛgýtÊâBâ˜$@$@$@$pº€ÆÂµx¨®Ð^x˜P5X¢rHhíž4œH<ô†oFúíÈ­gšH€H€H€H Êë]q[Ÿ6ZO‘ž`µœ1 ÄB 1—¡ˆåÈÙ†H€H€H€H€â @4v!   8} P@Ÿ¾çžGN$@$@$@$ è8 ± ÀéK€úô=÷}Ï=œH€H€H€H Ðq@c    Ó—ôé{îyä$@$@$@$@qH‰£OBv9ãŒ3ò¸xP$@$@$@$àX»v­¤¤¤Ø---M’““%55ÕÆ(OJJ²›ö9yò¤äååI~~¾ìÝ»W‹Oë˜èÓúôóàI€H€H€H€‚ €JŒíI€H€H€H€Nk - ñ“ À©%è,¡t¥J•NíÕ½‘ H¢k°„м~I€H€H€H€H ´ P@—6QŽG$@$@$@$Ð( úôòàH€H€H€H€J›tiuÆ{饗䢋.’K.¹D6mÚäÔ0I$@$@$@$PQ ðE*ÏÜ–-dÄÈ9²êËí’œþ!ÅÜœÃòŸÕ/IFFŽ<ôÐp9묳î‰ÍI€H€H€H€Ê# è€geäCï˹—œ)#{­d¥'KJR%ó¶#¤¡¥íªyæm=ù"/üù’–Y_rNV—Å_Ô‰¸¼ÝgÆ ö@5 ½ýç÷¿ÿ½tïÞ]Î=÷܈ýc­œ3gŽ}ƒP¿~ýŠu‰TW¬q)œ8qBŽ;&U«V-¥9 ”=ºp` ¡ûá;¤yûsdÇÙ²ï„lÝŸ#[÷åÈv³m3é-&ž¿p¹¼÷Þ»rÂé¾Ãî—ÏVíµ¯ÀôîêðáÃ2|øpiذ¡ 2DhÓ#FŒ°M'L˜ kÖ¬ñv‹;¿`Á™={¶oÿHu¾JP8kÖ,¹òÊ+¥V­ZòÆo”`$v%   SO€èÌí{àÓ3dÏ‘|9™|RRBN61ŒÏXï°’1AçääÉ+/½ &’]u£$×h"’ñÐx×¼† &«W¯–•+WZ1‰:¼g~çÎn³„KŸþùòꫯJ·nÝîØx@$@$@$@‰O€èçØ è´TÙb,Í+W|)c=@v›|öñ|Ù4_ö=)Î}[6mÜ Ù5êJ›+n–½Gó$/=µ˜zóæÍ2qâD7n\H)—ö¼Cç§J’i›–múx,Ï:tðÔÍŽ9R.¿ürÛË/¾(«V­² öîÝkEêk¯½&óæÍ“±cÇÊÁƒmÝ“O>)ãÇ—§Ÿ~ZvìØ!ð¥v¾ôéÓG®¾úê"ûï½÷¬%ýí·ß–f͚Ƀ>h»A$÷ìÙSàŸýõ×_Ëc=&ƒ–¥K—Úö?ü°ÝÇG}d÷ñ×   HDtáxVS²ÒeÇ¡\©š+Ò¬sùÏŠ¥²÷»2sêc=N‘ƒÆbÜìÂ+%½aùÎX¥Ë—´¬Œb{Ùµk—dggKZZqqí6¾÷Þ{åÎ;ï´E-[¶”eË–Ù‡ !r±D^ff¦­kÑ¢…Àùºë®“—_~Yn¹åéÕ«W¨Ÿ;æý÷ßo÷ýÈ#¸ÅÒ¹sgѲѣGËe—]fòƒh_¾|¹@¬×©SÇŽûüóÏ ,ÍíÛ··óh0`€´mÛVî¹çk/283$@$@$@$ ( žÈtcMN5¾Ìi)’‘š.Wõ»Wf¾0J6~±ÀŽ”]¹štê1HÒÓSä˜ñ‘N5>ÒFt{¬¹‡’ýû÷[7 o½æ›7o®É"b{îܹ²bÅ ¹õÖ[CõÛ¶m³i¸‡@üúX¾'OžlŶ÷=õééßϳU«VV<¯[·Î®a W¸^hh×®À­CÃÝwß-O<ñ„,\¸Ðú7k9c   H4táxFÓ3Ó¥JF²TËJ5[š´lÓ^.¹¶—¤$'Ùíš>wIƒúuM]ºTËN•ª)Æ…ã{aª»ÃÒt2cÆ - ×®][`u^´hQh»ýöÛígœq†µTû a — øUo߾ݯ‰-ƒ«VÉ@{ø_CèÃj®õ(×ðÜsÏ Ä>Ü=¦M›¦ÅŒI€H€H€H áP@<¥YU2¤ºÄÕ+gIjÙR«Ze¹¡ßÒ Ñ9ҺݥS×îR³J¶T¯’)5*gš¶iR¹jqˆSÔ7 XÌ_yå+aÅÆœõáDäŸzê)kÙÆÛq\ëׯË $ è€g³Aí,©eÄqšØR¤VÍJÒ A¦üüþ‘r›ñW®S;Yj×J–ºµÒL}–Ô1"û̺Y¾{yüñÇíÃx]ºt‘sÎ1ܬn§ÄòÚoˆZ<(Ø»woëo ûüÃîþËx}xÇŽíºÒxÐ tá²qÛm·YQŒzˆúk®¹ÆZ’aEÆ8h7eÊùÓŸþdç‰}c ¾ë¯¿^rss­ï3TÄzÖ˜?Æ„k Vô põ€•üóÏ?·ã ‡H€H€H€H "¨Ëe¸`|d+ÖùÅ(ónäØP®i7ÆBÈÈk lä£L7-om,¢ãMy\á›o¾±BÍ»þ²ß`qÑÞš7æ¯ȹ—v1þÀi’nžÿKÁŒq´ÀX#it¥œ8&²eË Yõé2jpgë²aªŠˆÐµk×JݺuËÄ 8pÅ€;–ÀsƒZ¤cyÓßÑ£GmW<”1ëºg¸cb_pIIÁ)b   ¨h 9ð9Ž ‹@'¥¦¦ÚeЮ¦€Ö°Kùš_¨± X´€¶[·nµ¹hmÃÕ£ÞS÷•ÙÌkéĨ*UN7äµ1ÊÝiwƒ4Ó<Ò~›).x§´Ææ¸ÑÎ7$´ Špܾ0¢Ú m×g²w]e9û¬æ5ÞF=´!¼š6±q‰6z:Oö¬Y,I;>5i—°Ãc\¬°OÀwœ øvE8kG]ÍùpâuîÕÈ3 €—@ik0ïø?t>¡ô÷ôÒÁŒoh}z÷²¾ÀSæ¸KD". ±XÁ£Åz   ¨J[ƒ•·cNh]Ú°q1`õ ¼(ná||u¿ͰæV©RžpDË“ T\ÐÏD4¬ÊAÜ#î‚ÍI€H€H€H€Ê1¢O•ã‰rj$@$@$@$@$PP@—‡³À9 TÐæTq¢$@$@$@$@åty8 œ @…!À‡ž*, þúë¯ÛÂc銴àM€5kÖŒ¥9Û ”sÐOÐÌ™3å‚ ÚÊ AƒŠ¼¥Ço˜|óÆž¥K—Êo¼a_Ùí×eXoÆ ö@x%·¾ý¯ÇÆ«±±½\ª• IDATt^i„9sæØ7õëׯØp‘êŠ5.…¼%ñÈ‘#|1K)°ä$@$@$@§–]8ðÖWSžwÞ¹qŒ oÚñnZ‡ö¿Û¶mó]3úðáÃ2|øpiذ¡ 2DhÓ#FŒ°³š0a‚¬Y³&À #7]°`Ìž=Û·Q¤:ßqîÚµKÚ·o/×]wÜtÓMÒ¹sgÁ+×H€H€H€H ¢ :À™‚ ÎÊʲÂie¬ -ôÚJˆjSŽzíƒØû6ÂaÆÉêÕ«eåÊ•bÞùnÇBŸ;wÚt"þƒõ³aí®S§Ž=¼»ï¾[~÷»ßÉË/¿œˆ‡Ëc"  H@´@8©*šsNäHnn®äaËϳ"ÙæHF›\l¦[NNNHH»»Ú¼y³Lœ8QÆϨ‡ûFýúõCMa¥îß¿¿}£á}÷Ý*GbêÔ©Ò´iSÛþ™gž ÕaŸx[bãÆ¥ZµjÒ£GP&öìÙ#:u’Å‹k‘ÇŒcÇkÓ¦,Y²$T·qãFéÖ­›Ô¨QCZ·n-Ó§O·uøÒзo_yôÑGCm'Mš$C‡ åÝDzzzH<£üÌ3Ï”M›6¹M˜&   rM€:àéÌ?™_  µ8?¯ÀÊ á¬›Zž! 222Ší–g„:«s FŽ)—_~¹Ìš5K^|ñEYµj•­ÆÃŒ©¯½öšÌ›7OÆŽ+´uO>ù¤Œ?^ž~úiûÊqøR»óìÓ§\}õÕEöÿÞ{ïYKúÛo¿-Íš5“|ÐvƒHƃðÏþúë¯å±Ç³>Ýðï†åýá‡ìã£>²ûƒx‡kJ´pôèQ™¬æPr Ï=÷œ@ìã Ä´iÓ´Ø7†kÉ_|a…<Ø1 @E"@ðlAôª`†X†Õeº!¯›¶C7@œÂ ;jÔ(ùä“OBÕ°"¿óÎ;¡|¸ÜûøãåÝwßµM \±¶2ÖyÆC~ú ,ÒnÀ°PãáB¬Å¬«àáB¸WàÅ®]»Z7¸iÀbþÊ+¯X +6æ¬'"ÿÔSOYAüÒK/ÙãZ¿~½[$ƃ=ôõ¯†{,ð°Ä3 @E!Ð.êNQš'ËØA8Cà íuƒÐ}A„j=|ýÂã?nÛtéÒE`5†ð†Oó]wÝå×¼HD-ìÝ»·µ?~\à·Œ¾ˆázÿb¬èMÅ´¡{ÕUWÉm·Ýr¹€¨¿æškdß¾}öÈ7ß|Ó6Ǽàj«õ³Ï>kÄZÕ×_½}˜¾ÏxˆëYcØp-™?~±¥û>ûì3ë¢â;8ÿüó­;ŠÎ1 @Å&P¬<©é8Ô'äüb”y7X´±¡\Ónœ\X®1<ê£L7-om,¢ãMy\/è€0…E´€vÑ,¦x« „'^Íý=ÿž`‹Õ2Þÿ}¹ñÆ­èök‰Õ:Ö®]+uëÖµËÄùµ W†}ÀîúCm«i¬½-À~ÇŽEÜ3ܾØÜGðå€H€H€H â€æÀç86¡“𫹺¨BO¸šZ+xÁ8]- íÖ­[­kg´¶áêQoˆ©ûÊlxé–5Ës6äµ1êÜiw³¯ç(,CÚo3Ŷ<›ãF;ß@ä‹Å¿Ü`QÆjÑ„9. Ï?ÿÜ®bi©6Œ‹6â ñ 4ðí‹pÖŽºšò®o³Ökì®Q­eŒI€H€H€Hàt"@àlC0cýdø¿õÖ[1õ„ˆ…KC4±Ó`lD$@$@$@$ðƒ €p `íÅêxQÜ`aŽ šaÍ­R¥JTwHã°ŽH€H€H€H ü €x. ¢aUâplN$@$@$@$PŽ à>      P@ÇŠÍH€H€H€H€H( y @Ð`±) ð!€×ýõ×íá±tÅ Zzöìi_¼K{¶!   (ß( žŸ™3gÊ´•AƒyKß0xcÏÒ¥KíÛ ì×Ä–a9¼ 6Ø75jÔ(4.^ݽ{w»t^ØÎ*æÌ™cß Ô¯_¿b½"Õk\¼ØgóæÍöÍŒxû" T$táp¶ôÕ”çw®}%2Ä wC96´ÇºÑÛ¶mó]3úðáÃ2|øpiذ¡ 2DhÓ#FŒ°³š0a‚¬Y³&À #7]°`Ìž=Û·Q¤:ß%(Ä—„_üâÖ2ߺukÙ¸qc FcW   8µhÀ‚8+++$Ž!’°64¶Ð+Ó!ªM¹ŠhôA_ïÛ‡ &«W¯¶¯7ï|·c¡ÏÎ;m:QÿÙ´iSÈÊŽ7;¾ð òä“O&êáò¸H€H€H€Œ-ÐN(D0nΉÉÍÍ•úÈîâ®)á¾<<ñÄrÝu×É 7Ü ·Þzk¸¦,'   rG€.OIff¦9rĺcÀ’ é :a†Àöлví’ììlIKKóë*»÷Þ{åÎ;ï´ù–-[ʲeˬ_5DîE]$˜B‹-~Ì¥/¿ü²ÜrË-Ò«W¯P?›(üçþûï·û~ä‘GÜbéܹ³hÙèÑ£å²Ë.“cÇŽYѾ|ùr+ÖëÔ©cÇ}þùç–æöíÛÛù@´0@Ú¶m+÷ÜsµŒÜÉ=zÔú…ûí·v[·nµÖr§ “$@$@$@$Pn ÐðÔÀ Ñ fhlHë¦eI•LyR²m‹>Þkî¡C‡dÿþýÞª"ùæÍ›‡ò®Øž;w®¬X±ÂZoaÁ…Õ+"À ñë`ù†»ÇËpiÒ¤IhÈvíÚÙr-¸ûî»­»ÊÂ… E‚Ô:o ±ÿç?ÿÙÎbú¡‡ò6ažH€H€H€Ê-„С‡úJ?¬ÉË)))Öz Q›ššÚBù´‚2´õ³@cu”Ϙ1#®ÙÕ®]ÛZ-Z$ºÝ~ûív,¬= Kµ_€0†Ëüª·oßî×Ä–ÁU¾Ùh_¯^=+ôa5×€z”kxî¹çb̧M›¦ÅQc¸†|ðÁQÛ± @Å!P¬<}B èpî%9½*˜!–aµE™nÈë¦íPç §ða5j”|òÉ'¡jX‘ßyçP>\î}üñÇòî»ïÚ&¸P8`ÓXçùéC€°H»üÁB‡ ᎢaåÊ•‚‡ aÍÆŠ]»vµv¸iÀbþÊ+¯X +6æ¬'"ÿÔSOÉäɓ套^²Çµ~ýz¶HŒÕW>âÿüç?íC‰E1C$@$@$P¡ ”…+O@èðl`I:gˆbX¡Ã] ¡Z_g¿ðøãÛ6]ºtX!¼áÓ|×]wù5/RQ‹{÷îm-ÅÇø-£/b¸^tìØÑ®¨U=TLë ºW]u•ÜvÛmòꫯÚbˆúk®¹FöíÛgˆ|óÍ7m9æ5eÊkµ~öÙg탂pÓ¸þúëíÔð}ÆC„XÏÆ„[Éüùó­µ^÷‰Kôaå‹/¾ØºšÀÿÇ?þÑmÂ4 ”k•"™Ø8Ô'äüb”y7X´±¡\Ónœ\X®1<ê£L7-om,¢ãMy\á›o¾±ÂnÑl´Ÿà7Þxà Ϛ5k†Ï:ØbµŒ÷ß_n¼ñF+ºµÎa‰]»v­à­|X&.HÀ>àŠw ø_»A-ÒU«Vu‹}ÓðEF€€ß±cG÷ ·ö÷|9ˆ7@ìÃB æ±Ì-Þý° @qÐøÇ£ t~5WU}žK{Bk`/¡k¢´Åîs\ÑúxëQoˆ)ûÊlxé–5Ës6äµ1êÜiw³¯ç(,CÚo3Ŷ<›ãF;ß¿ ò.± q¡ÁÍe¬6M˜ãúüóÏí*7ß|sX8+lÄð§Aƒ¾]ƒˆS]͹¾ÍÞÝ5ª½u±æaÑæÚϱÒb;   òF€:À`ÆúÉð~ë­·bê  —†hb;¦Á؈H€H€H€Hà'@àÀÚ Ÿ]¼(n°0G ͰæV©R%ª»G¤qXG$@$@$@$P~P@<Ѱ*q¸ 6'   (ÇŠ>uVŽ'Ê©‘ @y @]Îç@$@$@$@$PaP@W˜Sʼn’ ”Ðåá,p$@$@$@$@†" xª°€øë¯¿n¥+^Ò³gOÁ‹WH€H€H€H€*> è€çpæÌ™rÁmeРAÅÞüç oìYºt©}{áàÁƒ½Õ¡<–ÃÛ°aƒ}#P£FBãâõØÝ»w·Kç…— 1gÎû¡~ýú%R]±Æ,    Ó˜]8œ|}5åyçk_g Œ·,Ç—† Ê!CdàÀ6=bÄ;« &Èš5kÌ0rÓ ÈìÙ³}EªóíP …ørWˆâUç $@$@$@$PQÐàLAgee…Ä1D2Ö†Æze:Dµ)W>èë}á°aÃdõêÕöõàæïv,ôÙ¹s§M'ò?øòpûí·Û/ ‰|œ<6   Ä#@ t€s  ›s"Grss%[~žÇ6oêÑ&›©Ã–““Òî®6oÞ,'N”qãÆ‰ŠgÔ'%%IýúõCM!4û÷ïoßhxß}÷…Ê‘˜:uª4mÚÔ¶æ™gBuØ'ޖظqc©V­šôèÑ#T§‰={öH§NdñâÅZdã1cÆØñÚ´i#K–, ÕmܸQºuë&5jÔÖ­[ËôéÓm¾4ôíÛW}ôÑPÛI“&ÉСCCy¿Ä½÷Þkô9çœãWÍ2   (·( žšôôtÉ?™_  ˜ÎÏ+pÕ€pÖM-ÏÐÅöË3B‡ŠÕ¹#GŽ”Ë/¿\fÍš%/¾ø¢¬ZµÊVãaFˆÔ×^{MæÍ›'cÇŽ•ƒÚº'Ÿ|RÆ/O?ý´}å8|©Ý€yöéÓG®¾úê"ûï½÷¬%ýí·ß–f͚Ƀ>h»A$ãAHøgýõ×òØc |ºá‚ËûÃ?,ØÇG}d÷ñ×”páÕW_•o¿ýV~õ«_…kÂr   (·Ú…#äRQŠø333åÈ‘#ÖÖbH¿€}Ã: í' wíÚ%ÙÙÙÖد¿–ÁR{çwÚlË–-eÙ²eÖ¯"÷¢‹.Ì¡E‹?æë®»N^~ùe¹å–[¤W¯^¡~6QøÏý÷ßo÷ýÈ#¸ÅÒ¹sgѲѣGËe—]&ÇŽ³¢}ùòåV¬×©SÇŽûüóÏ ,ÍíÛ··óh0`€´mÛVî¹çk/2xa–wì?ü0,;¿~,#  ¨8ÊBƒ•§£OhNÜ–äÀqáÏŒX7S/˜“ùÆ ÚØ÷£7Àš{èÐ!Ù¿¿u³ðÖk¾yóæš,"¶çÎ++V¬[o½5T‡ R!~ý,ß“'O¶bÛËÇg«V­¬x^·nlÚ´ÉαI“&¡!Ûµk'pëÐp÷ÝwËOùä“P5¬Èï¼óN(.÷>þøcy÷ÝwmõØ4ÖyÆC~ú ,ÒnÀ°PãáB¸£hX¹r¥àáB< ØµkWûP#Ü4`1å•WìX±1g}8ù§žzÊZ¶_zé%{\ëׯ×a‹Äð»†ˆÖ /˜¹öÚk탉E2C$@$@$@å”-ÐO –¤ƒp†(†:ÜO¡Z_g¿ðøãÛ6]ºtX!¼áÓ|×]wù5/RQ‹{÷îm-ÅÇø-£/b¸^tìØÑZ˜aeV1­ƒ@è^uÕUrÛm·…\. êáF±oß>û@ä›o¾i›c^S¦L±VëgŸ}Ö>(ˆµª¯¿þzû0%|Ÿñ!ֳƆ1aýž?¾µÒë>“ @"¨Ëe¸`Ä¡>!ç£Ì»Á¢ åšvãäÂr!àQeºiykcoÊã ß|ó¦Þõ—ýƒ€ð@Ýo¼a…',§ßãñï ¶X-/ ¹ñÆ­èök‰Õ:Ö®]+uëÖµËÄùµ W†}lß¾Ý.s‡‡Ý éªU«ºÅ¾é£GÚrø;vØñüb_pÁ—   ŠGšŸãØ`„N¯æê¢ =áj h ¬àã tM´€¶[·nµ®ÑÚ†«7F½!¦î+³á¥XÖ,ÏÙ×rĨsc¤Ý bWóHûm¦Ø–‡bsÜaE2U0Åp¡ÁÍe¬6M˜ãúüóÏí*7ß|sؽ`\¬°O€ˆoРo×X„³vÔÕ<¯W¯ž‹ÃùLkÈ   HPÐN,3ÖO†/ð[o½SOˆX¸4DÛ1 ÆF$@$@$@$@?8 è§Ö^¬žuŒáæ s¤Ñ kn•*U¢º{D‡u$@$@$@$@å‡tÀs «r÷ˆ€»`s    rL èSgåx¢œ ”Ðåá,p$@$@$@$@†t…9Uœ( @y @]†g/+¹è¢‹ä’K.‘M›6•áž84 À©"À‡’޲倌9GV}¹]’Sôý2ÅÉÍ9,ÿYý’yyJŽ<ôÐp9묳Š7b @…#@ð”|è}9÷’3eäo¯•¬ôdIIªdÞÖc„4´´}_y[y×Í þƒ¤eÖ—œ“Õeñu"îËámذÁ¾¨Q£F¡·ÿàõØÝ»w·KçE ÆÊ9sæØ7õëׯXHuų€H€H€H€Nctápò!t?üb‡4oŽì8#[ö­ûsdë¾Ùn¶m&½ÅÄó.—÷Þ{WN!ÝwØýòÙª½¾kF>|X†. 6”!C†ÈÀmzĈvV&L5kÖ˜aä¦ ,Ù³gû6ŠTçÛ¡…×\sà͇•+W¶Ž›H€H€H€* Z œ)èüô Ùs$_N&Ÿ”T£“M ã3Ö‡®dLÐ99yòÊK/ˆ‰äGWÝ(É5šˆd|c´÷m„Æ “Õ«WÛ׃›w¾Û™à=ó;wî 0«ŠÙôŸÿü§\wÝusòœ5 ÀiM ¡-Ð'OZŸŠR;ÁV@§¥Êci^¹âKûëòذÛä³çËþ£ù²ïèIùpîÛ²iãÉ®QWÚ\q³ì=š'yé©Å,Л7o–‰'ʸqãDÅ3&š””$õë×ÍVêþýûÛ7Þwß}¡r$¦N*M›6µíŸyæ™P]NNŽ}[bãÆ¥ZµjÒ£GP&öìÙ#:u’Å‹k‘ÇŒcÇkÓ¦,Y²$T·qãFéÖ­›Ô¨QCZ·n-Ó§O·u`Ü·o_yôÑGCm'Mš$C‡ å™   8½”¶+oôZ@Ã*\Ú!-+͘›“$³AKiÒæ9p`¿Ìžò?²sÏw²s÷^y÷µ¿è“riÏ;äp~ª$™¶iÙ¦'ÀòŒÐ¡COMÑìÈ‘#åòË/—Y³fÉ‹/¾(«V­² öîÝkEêk¯½&óæÍ“±cÇÊÁƒmÝ“O>)ãÇ—§Ÿ~Ú¾r¾ÔnÀ>}úÈÕW_]dÿï½÷žµ¤¿ýöÛÒ¬Y3yðÁm7üôìÙSàŸýõ×_Ëc=&ƒ–¥K—Úö?ü°`}ô‘Ý^u×”Hmî¸ãùâ‹/"5c @$P¬`À+Šï¹çk/2¸“ùË_þbÇ‚µÇðÉ'Ÿ8µL’ @ù&@è€ç'ÝX“S““%#-E2RÓåª~÷ÊÌFÉÆ/ ÄkvåjÒ©Ç IOO‘cÆG:ÕøHgÑí °æ:tHöïßoÝ,¼õšoÞ¼¹&‹ˆí¹sçÊŠ+äÖ[o Õo۶ͦárÙe—…ÊÝ,ß“'O¶âØûí0=ýûy¶jÕJ ž×­[g×°†+H“&MBCµk×NàÖ¡áî»ï–'žxB.\(¯¾úªûưncƒÈ_»v­üáK/½Ô·- I€H€H€H ¼ :àIÏL—*ÉR-+ÕliÒ²M{¹äÚ^’’œd·kúÜ% ê×5uéR-;Uªf¤Žï…©îV[X‡g̘¡EâÚµk[«ó¢E‹D·Ûo¿ÝŽqÆg„,ÕÞA!Œár¿êíÛ·{«Cy¸jÀ7íëÕ«g…>¬æPr Ï=÷œ@ìÃÝcÚ´iZ5†ö–-[¢¶c   (/( ž‰¬*RÝâꕳ¤Fµl©U­²ÜÐïiÐèiÝîÇÒ©kw©Y%[ªWÉ”•3MÛ4©\µ¸ Ä)´ƒ[„ëÂ+ò;ï¼uVxpïã?–wß}×¶…p=pà€Mcg<ä§Â"í<ð 5.~ü¸õ[F_ø/Ãõ¢cÇŽvE ¬ê¡bZǀнꪫä¶Ûn ¹\@Ôcæ}ûöÙUCÞ|óMÛóš2eеZ?ûì³öAA¬U}ýõ×Knn®õ}ÆC„XÏÆ„kÉüùó ÈÚ¶mkçŒ×›ã5çx(‘H€H€H€* J‘–1>²ºŒ…_Œ2ï‹66”kÚ¡¦×yÄ(ÓMË[‹èxSWøæ›o¬0õqÞ!`£XLÇüõ9÷Ò.Æ8MÒÍó)˜1Ž+æÆH])'މqO8!«>ý@F îl]6LU± _àºuëÚeâŠ5ˆP€óW ¸Sà¡<7¨EºjÕªn±oúèÑ£¶~ÇŽEÜ3ÜØÜGRRâÿî+7ÆÁÃ%ÇÓ$@$@$@±€æÀç/6,f„ £ zÂÕÐv)_ó 5V‹ÐvëÖ­Öµ3ZÛpõƨ7ÄÔ}e6óZ:1ªJŒy2´!¯åˆQçÆH»¤™æ‘öÛLqÁ;¥56Çv¾!~ä;\bÚ m×g²w]e9û¬æ5ÞF=´!¼š6±q‰6z:Oö¬Y,I;>5d—°p0®w¥Œ°=øŽÓ AOiA6á¬!œ5¸¾ÍZ¦±»Fµ–a鯯@$@$@$@‘t€³†of}z÷øO™÷˜zBÄÂ¥!+xL² ÀJ€:~X{±z^7üD)@4Ú[¥Jû‘HmYG$@$@$@$P1P@uVŽ'Ê©‘ @y @]Îç@$@$@$@$PaP@W˜Sʼn’ ”Ðåá,p$@$@$@$@†" xª°€øë¯¿n¥+^ÐÒ³gO©Y³f,ÍÙ†H€H€H€H œ €x‚fΜ)\ÐV Tä-=~Ãä›7ö,]ºTÞxã |ø° >\6l(C† ‘Úôˆ#ìü&L˜ kÖ¬‰k®~,X ³gÏö«’Hu¾JPøÕW_I»víì—ŠŸÿüçÒ¢E‹ŒÆ®$@$@$@å@ik°òv| mƚͥ ˆ³²²¬pFBûÁºX ªM9êµbïÛ‡ &«W¯–•+W†^m>;wî´ã&â?8¾›nºI|ðAkÅÇ1†¸%âó˜H€H€Hà4$PÚ¬¼!Lh tiÃVÑœs"Grss%[~žÉ6oD2Úäb3uØrrrBBÚÏæÍ›eâĉ2nܸxF}RR’Ô¯_?ÔVêþýûÛ7Þwß}¡r$¦N*M›6µíŸyæ™Pö‰·%6nÜXªU«&=zôÕibÏž=Ò©S'Y¼x±Ùx̘1v¼6mÚÈ’%KBu7n”nݺI5¤uëÖ2}út[ñÛ·o_yôÑGCm'Mš$C‡ åÝÄܹsûÆëÍ5$ú™'c   Ä @ð<¦§§KþÉüm¬©ùyVfgÝÔò ‘‘Ql/°<#tèСX[0räH¹üòËeÖ¬Yòâ‹/ʪÿßÞÙGÛ5¤ù¿nÞHÒi‘0Ñ„¤Ž‘fMƒF¼/ÑDÖdÑh´Ì Þfy›ôÏXcMÚÛä—!¢^BfZЃ ÒidòJX!¬´¼!ï÷·¿uïsRwß}Î=ûÜssÎÙçSkíûT=õTíªÏ>½ú›R»ö‡új½Ì(‘úÌ3ϸW_}ÕÝqÇnݺu¾îî»ïv'Nt&LðŸ×^ê0iœ#GŽtÆ kqÿ—_~Ù¯¤Ï˜1ÃpÀ~•Xí$’õ"¤ög/\¸ÐÝ~ûí~û…öwKüŽ?Þ鯽öš¿ŸÄ»¶¦$¥E‹¹ýöÛÏ÷±Ï>ûx1®û‘ @€@­ÈôŽŽxÝ»wwß~û­ßŽ¡Õâ|«§Z–ÀNÐ_}õ•ëÙ³§ëÖ­[Áa^uÕUî’K.ñ1t{ï½÷ü¾j‰Î¡C‡:GIûˆµù”SNq=ö˜;ûì³Ý9眓kç3ÍÆçï}Ë-·„nwôÑG;óÝtÓMŽr6lð¢ýý÷ß÷b}÷Ýw÷ý>øàƒN+͇v˜Dû…^è† ⮸⠿2Þ¢óæ‚¶§HxkÕZ{¡%ôµÿ{ùòå¹—'“Úრ@ÕB€è”OB+ÐÍÚÏ,­Ky»Ìש!òwêìcÕ&ž´š»~ýz·fÍšxU‹òÀsåPlk+ÄüùóݨQ£ü¥Uo½¬¨¤í!¿II+ßÚîqÝu×µÿá8 äÅóÒ¥K½¸ÕVÑi–ô D¯¥Ë.»ÌoWyë­·œ½iu¡Õ=÷ÜÓýêW¿ò"þ—¿ü¥ç0gΜ0Œ< @¨Zè”F«ÉË]ºtñ«Çµ]»vÍ]¹r·&Ÿb“V u:‡üS§NM9‚¦ð¾}ûúUç·ß~ÛÙ5fÌ_©³§µR”$ŒµåBûª¿øâ‹¤ïÓVÝvÛÍ)¾ÿþ^èkÕÜ’êå·ôÀ8‰}­¼O™2ÅÜ­¬ölýõ×^l«R|tŸ¶þ!Ѫ#€ @ BÐ)ÁKôš`–XÖª­|v©l—Å©.ž$µ‡ùÆoto¾ùf®Z«È3gÎÌ•óe´â7Þp³fÍò!®k×®õyó¬—üì%@­H‡I/üi…Z/j;Š%¢ü´š­?þx¿Â®mZ1Ÿ4i’ÈZÅÖ˜íåD•ï¹ç7yòd÷È#øy-[¶ÌºmaO:é$¿òl/!jkˆ¶uüä'?iG€ T+ö@§|2:ÆNÂY¢X«Ðùö@K„Z½ö:'¥;ï¼ÓÇwÜqN«ÆÞÚÓ|饗&…·ðIÔjÿðˆ#ü îÆö-«­¬¶^qÄþD êabÚ:‘Ð=á„üiO?ý´wKÔŸxâ‰nõêÕþ…ÈiÓ¦y¿ÆõÄOøUëûï¿ß¿(¨m§žzª™R{Ÿõ¡Î³Ö¥6´µDÛ2´Â&ý£B}ýüç?÷[I4Îßþö·N{«I€ @ 4hå2_ŠÄ¡¤œdå‹_ZÑÖ%¿åC+5¥²Y x•eå³Ëüƒ£щ‘¿¤¤$Lã".©3ŵ•ôB¾*(á©OsoÇ“ÜRluZÆìÙ³ÝðáýèNŠÔiK–,qýúõóÇÄ%ÅäóéÚŠ¡íÚ&[‘îÕ«WèNÌ÷ÝwÞ/¿råÊÛ3º—¶èíIš³žŽÚÓ?JH€ ìÒúÿq]Z”NÒ—¬|ö>—FZC'xiqPº¦­¤Ø+Vø­mÅæ«õÆFuE—>º¡cͶ—Êæ—U]h•/ÿyŽfŸòIWäöþœæW$·Oéu”ô£Ò6­(ë´‰¶„¹~@óæÍó§XœuÖYyI©_°QJ’ˆ×KyI©álíì4•ýÍVo6<£Ú|¥XÍYçI“ @€@­@@§xbÌ:?Y{§OŸ^TK‰XmihKlÕA€ @'€€Nñ´Ú«Ó3ô¡msÐ s¡$ѬÕÜ]vÙ¥Íí…ú¡€ @ z  S> ‰h­*§Ù‘ò„C€ T1–oUñ@ @€ªºžc€ @¨èšyT € @   «á)0@€ š!é— œ]òÒâÏ>û¬? ¼˜Nô–3Ï<Óx¥˜xb @€@­è VML2- ÛúR`)âùçŸw?úÑ7zôèV_þ‹÷§/ö¼ûî»þë…_|q¼:WÖqxü±ÿúÏÞ{ïëWŸÇ>í´ÓüÑy¹àvd^zé%ÿ¡óÎ;¯U/…êZ〠@t„+p»^ÅŽÈíÓ”üCÿ9K dý +~ɯKñ:7úóÏ?O<3ú›o¾q×\sÛk¯½ÜرcÝE]äó×^{­ÕÃ?ì/^œb„…C_ýu÷â‹/&ªKlP¢SŸC×ÿ¨â× 7ÜPb4ƒ @;–@¦W ËR‚¸G9q,‘¬db0÷Ÿ+$ª#¿‰hµQÛø×¯¼òJ·`Áÿyðè›ï¾/µùòË/}>‹vÞyg·iÓ¦ÜÔ6oÞì;ì0wâ‰'æ|d @€@5`:ÅÓ‘–Àݼi³Û²e‹ÛªkÛV/Ž}9ªWÌ]Q. DÒá­>ýôS÷裺{ï½×™xV}§NÜ{ì‘ Õ*õùçŸï¿hxõÕWçüÊ<ùä“nÿý÷÷ñ÷Ýw_®N÷Ô×÷Ýw_×»wowÆgäê,³jÕ*wä‘GºwÞyÇ\ÞÞzë­¾¿C9ÄÍ;7W÷É'Ÿ¸“O>ÙõéÓÇ <Ø=õÔS¾Nÿh8÷ÜsÝm·Ý–‹}üñÇÝå—_ž+Ç3]»vuv=øàƒnРAî¸ãŽ‹‡Q† @UIò±ì´ÓNn[ã¶&‰ém[›¶jH8Ûe‚YZI«®ñ¤•g¥Ã?<^Õ¢|ýõ×»cŽ9ƽð r~ø¡¯×ËŒ©Ï<óŒ{õÕWÝwÜáÖ­[çëî¾ûn7qâD7aÂÿÉqí¥“Æ9räH7lذ÷ùå—ýjúŒ3Üàl[…D²^„Ôþì… ºÛo¿ÝiO·öwkõ}üøñN÷xíµ×üý$Þµ5¥­ôÙgŸ9Uã$A€ Z!ÀŽ”Oª{÷îîÛo¿õÛ1´Z,™”$:µ:-$ ¿úê+׳gO×­[·¤æ9ßUW]å.¹ä_>è ƒÜ{ï½ç÷UKä:ÔiæSN9Å=öØcîì³ÏvçœsN®Ï4ÿ7nœ¿÷-·ÜºÝÑGíÌwÓM7¹£Ž:ÊiϲDûûï¿ïÅúî»ïîûÕʱVšµýBû¼%„/¼ðB7dÈwÅWø•ñ'$²%Ä%ÖI€ @ V  S>)­@K4k?³í}E´íƒnÜ킎Ö÷eÕ&ž´š»~ýz·fÍ¿Í"^oåZ¶…Ø~å•WÜüùóݨQ£rõzYQIÛC$~“’V¾'OžìÅv8nņãÔ¶ ‰ç¥K—ºåË—û10 ×塇ê´­ÃÒe—]æîºë.÷Ö[o¹§Ÿ~ÚÜy­â´âýqtú € Ô¶p¤|ZZM–xîÒ¥‹´ZA¶ý¼²¹r·¦}¾ŠMZÖª­üS§NM9‚¦ð¾}ûúUç·ß~ÛÙ5fÌ_©³§µR”$ŒµåBûª¿øâ‹¤ïÓV íÍV|ÿþý½Ðת¹%ÕËoépûúÄ”)SÌ×j¥{øðáÿñ·1€ @ ‚Ð)áKôš`–XÖª­|v©l—Å©.ž$Nµ‡ùÆoto¾ùf®Z«È3gÎÌ•óeôâÞo¼áfÍšåC$\×®]ëó:çY/ùÙK€Z‘“^øÓ µ^.ÔvK|ðÓË…Úí?þxÿR£¶ihÅ|Ò¤I^ k[c¶—U¾çž{üÊö#<âçµlÙ2ë¶•Õª¶ÎÖ6 @¨5láHùÄt$„³D±V¡ãÛ ¬;‰P«×^ç¤tçwú@¡Uc oíi¾ôÒK“Â[ø$jõ¢àˆ#üJñÆö-«­¬DêGáOÔЩ&¦­ ÝN8Á]pÁ¹-õ:NnõêÕþ…ÈiÓ¦ùpë‰'žð«Ö÷ß¿QPgUŸzê©þeJí}ÖK„:ÏZ—úÔÖ’9sæ´:ºOΞ=Û¯tÊgøüóÏ»ýhˆ=zt‹¯ô$u£/ö¼ûî»þë…_|qRˆ÷é8¼?þØPeï½÷Îõ«ÏcŸvÚiþè¼¼ST¼ôÒKþ Bçw^«V…êZ—ÉñÙgŸù¯æûBc™nC7€ @ ¬2½…£¬¤¢ÎìÓ”üCÿ9K díñ‰_òëR¼ÎþüóÏÏŒþæ›oÜ5×\ãöÚk/7vìXwÑEùüµ×^ë‡þðûŋ—m¯¿þº{ñÅû+T—Ø N}Íñ§?ý©ûÅ/~á†ên¾ùævôFS@€ °c °‚·q=râX"YIû|tå6ÌKTG~Ñj£¶ñ¯^yå•nÁ‚þóàÑ7ß}_jóå—_ú|VÿÜvÛmîÒK/õ_u\³fMî ½{÷Îê”™ @"À tЇ),»yÓf·eË·U×¶­^ûrT¯˜-º¢:]›7oÎ éðVŸ~ú©{ôÑGݽ÷ÞëL<«¾S§Nn=öÈ…j•úüóÏ÷_4¼úê«s~ež|òI·ÿþûûøûî»/W§{êk‰û“(=ãŒ3ru–Yµj•;òÈ#Ý;ï¼c.oo½õVßß!‡âæÎ›«ûä“OÜÉ'Ÿìúôéãìžzê)_§4œ{î¹N¢ØÒã?î.¿ür+¶²]ºtqÚ #VK—.u?øÁü8[†@UHò¡ì´ÓNn[ã¶&‰ém[›¶jH Úe+ÏÐJI{|µò¬tøá‡{›ïÏõ×_ïŽ9æ÷ /¸‡zÈ}øá‡>T/3J¤>óÌ3îÕW_uwÜq‡[·n¯»ûî»ÝĉÝ„ ü'ǵ—:LçÈ‘#ݰaÃZÜÿå—_ö+é3fÌpp€»á†|3‰d½©ýÙ .t·ß~»ÓžníïÖÊûøñãîñÚk¯ùûI¼kkJ¾¤4¼ñÆîØcõs˜&A€ Z!ÀŽ”Oª{÷îîÛo¿õÛ1´Zœï˜‰N­NK`' 课úÊõìÙÓuë֭஺ê*wÉ%—ø˜ƒ:Ƚ÷Þ{~_µD®ökæSN9Å=öØcîì³ÏvçœsN®Ï4ÿ7nœ¿÷-·ÜºÝÑGíÌwÓM7¹£Ž:ÊmذÁ‹ö÷ßß‹õÝwßÝ÷ûàƒ:­4vØa~<í^x¡2dˆ»âŠ+üÊx‹Îƒ‚^Ôʸæÿ‡?üÁýñt "ÈB€ ê%€€Nùl´-Ѭý̲vY7¶ºq[´ :Zß—U›xÒjîúõëöÚû;pàÀ\ÓPl¿òÊ+nþüùnÔ¨Q¹z½¬¨¤í!¿II+ß“'Oöb;.þÃq4È‹gm±X¾|¹c(r=ôP§m–.»ì2w×]w¹·ÞzË=ýôÓæneµú}úé§»ßÿþ÷îàƒv÷ÜsûÙÏ~æW¶µ…@€ª[8R>!­&KÜ‹î¤HÖ±dÉׯ_?L\RL>Ÿî¡­ÚN¡—Ãd+Ò½zõ ݉ùï¾ûÎû%pW®\Ùb{FØ@÷Òöýã ½I"_ûªããno¿´‡ @ ?iýÿ¸.- J'鿚ÛUýÿrøÿÍÒz‡I‹ƒÒ5m%Å®X±Âoíl+6_}´¨76ªû(ºôÑ k¶5¸T6¿¬êB«|xE/¦åÊÊ']‘Ûûs6š·âSûUPb·ÙtꇦmZQÖim sý€æÍ›çO±8묳òBQ¿:a£”$¿çž{&6-F8[C;ÍCåpo³Õ› Ϩ6_©Vç?“ @€@­@@§xbÌ:?Y{‹}éM"V[ÚÛ)†A( @€@  SÀ×j¯NÏЇB´ÍA+Ì…’D³VswÙe—6·{ê‡:@€ ê!€€Nù,$¢µªœf{DÊ[@€ PÅZ¾uVÅ-ehö~—Òm @€Š u –iÝÖ)E<B @€RȺË´€Nù¬ ‡ @€@›Ðm""€ @Û ðávEåt€ø³Ï>ë/¦>Ðræ™g:}x…@€ PûÐ)ŸáóÏ?ï~ô£!nôèÑ-¾Ò“Ô¾Øóî»ïú¯^|ñÅI!Þ§ãð>þøcÿE ½÷Þ;ׯ>}Úi§ù£óò6NQñÒK/ù/wÞy­Zªk\Ç·ß~ë>ûì3§©èC2$@€ P+ØÂ‘âIÙ§)>ø‡þs–ÈzË4~ɯKñ:7úóÏ?O<3ú›o¾q×\sÛk¯½ÜرcÝE]äó×^{­ÕÃ?ì/^œb„…C_ýu÷â‹/&ªKlЧæuÀ¸K.¹Äéˆ/¿ür;z£) @رXúKÁ[‚¸G9q,‘¬¤7MuåŽl‘¨Žü&¢ÕFmã_#¼òÊ+Ý‚ üçÁ£o¾û¾ÔæË/¿ôù,þY´h‘ûå/é–/_îúöíë^xá7jÔ(¿/N$@€ PíXNñ„$‚%p7oÚì¶lÙâ¶êÚ¶Õ‹c_Žê³EWT§kóæÍ9!ÞêÓO?u>ú¨»÷Þ{‰gÕwêÔɯÊZ¬V©Ï?ÿ|ÿE믾ÚÜÞ>ùä“nÿý÷÷ñ÷Ýw_®N÷Ô×÷Ýw_×»wowÆgäê,³jÕ*wä‘GºwÞyÇ\ÞÞzë­¾¿C9ÄÍ;7W÷É'Ÿ¸“ÙPx IDATO>ÙõéÓÇ <Ø=õÔS¾Nÿh8÷ÜsÝm·Ý–‹}üñÇÝå—_ž+‡™·ÞzË 4È‹gùO:é$·qãF÷Ê+¯„aä!@€@Õ@@§|4;í´“ÛÖ¸­I@GbzÛÖ¦­ÎvÙʳ´ÒÎ;ïÜê.ZyV:üðÃ[Õ…Žë¯¿ÞsÌ1~¥ö¡‡r~ø¡¯ÖËŒ©Ï<óŒ{õÕWÝwÜáÖ­[çëî¾ûn7qâD7aÂÿÉqí¥“Æ9räH7lذ÷×V ­¤Ï˜1Ão±¸á†|3‰d½©ýÙ .t·ß~»ÓžníïVüøñãîñÚk¯ùûI¼kkJRÒ|5w‰f¥ï¾ûÎsÓŠ4 € Ô¶p¤|JÝ»wwzNÛ1´Z,™”$:µ:-$ ¿úê+׳gO×­[·¤æ9ßUW]å÷ ËqÐA¹÷Þ{Ïï«–È:t¨Óx”<ð@§}̧œrŠ{ì±ÇÜÙgŸíÎ9ç_§va7nœ¿÷-·ÜºÝÑGíÌwÓM7¹£Ž:ÊmذÁ‹ö÷ßß‹õÝwßÝ÷ûàƒ:­4vØa~<í^x¡2dˆ»âŠ+üÊx‹Î› ‹V·ÿáþÁ¿ˆ©ýÐ$@€ PKXNù´´-ÑlZ"Zy»TöWCäïÔÙǪMiÒ$/vµŠ­1Ûˉ*ßsÏ=nòäÉî‘GñóZ¶l™uÛÊj¶%Åk¼Õ$@€ P Øò)é¨5 g‰b­BçÛ-jõÚ뜔î¼óNsÜqÇ9­KxkOó¥—^šÞÂ'Q«GŒáWŠõRžö-«­¬¶^qÄþD µlbÚ:‘p=á„Ü\àž~úiï–¨?ñÄÝêÕ«ý‹}Ó¦Mó~ë‰'žð«Ö÷ß¿QPÛ4N=õTÿ2¥ö>ë%Bg­K}j[Éœ9süj½ÝӬIJV¶µ}EçAK˜“ @€@­hÐÊe¾‰C{C.ÉÊ¿´¢­K~ˇ¶s³ß¬¼êeå³Ëüƒ£щ‘¿¤¤3‡%Lµ¢­¤¸¶’ö?÷Üs^xêÓÜÛñ$·[–1{öl7|øp/º“"uZÇ’%K\¿~ýü1qI1ù|º‡¶bh;…ö^‡ÉV¤{õêºó: CI~åÊ•-¶g„ t/miÏ×%ö%ð%¤wÝu×°{ò€ t0iýÿ¸.- J'鿚ÛU{ŸË†!­¡ÿz¬ÅAéš¶’bW¬Xá·v¶›¯>ZÔÕ}]ú膎5Ó¾¶KeóËÊZåÃËž£Ù§|Ò¹½?g£yçɬ@ S‘I?4msЊ²N›hK˜ë4oÞ<ŠÅYg•÷.ê7~RFÞàX…D|¾íÅgëÎNóP9ÜÛlõfµšÝÞ¤m%M‚ @µHâ©I0ëüdm9˜>}zQ-%bµ¥¡-±]TgA€ Tœ@¦t•÷’ÀkµW§gèC!Úæ¾ —Ô¡D³VswÙe—6·{$µÇ@€j‘@¹5Xµ1È´€nkr)C}jU9ÍöˆRîC@€ P«:BƒU‹–oUÓÈ  @€ªº  C‚ @¨^èê}6Œ € @   «ð¡0$@€ ê%€€®ÞgÃÈ @€ªº  C‚ @¨^èê}6Œ € @   «ð¡0$@€ ê%€€®ÞgÃÈ @€ªº  C‚ @¨^èê}6Œ € @   «ð¡0$@€ ê%€€®ÞgÃÈ @€ªº  C‚ @¨^èê}6Œ € @   «ð¡0$@€ ê%iÝØØX½ä @È(¬k°L 膆†Œþ,™ @¨^Y×`™ÐÕû³bd€ @µJ]«OŽqC€ T„º"ع) @€@­@@×ê“cÜ€ @!€€®vn @€ P«еúä7 @€@E  +‚›B€ Ô*t­>9Æ @€ PèŠ`禀 @µJ]«OŽqC€ T„º"ع) @€@­@@×ê“cÜ€ @!€€®vn @€ P«еúä7 @€@E  +‚›B€ Ô*t­>9Æ @€ P™ÐÊM!@€@=ȺË´€nhh¨çß.s‡ @!u –i]‘_ 7… @È4t¦/“ƒ @(7t¹‰Ò @€@¦  3ýx™ @€@¹  ËM”þ @€2MéÇËä @€ÊM]n¢ô@€ ièL?^&@€ Pnèr¥?@€ L@@gúñ29@€ r@@—›(ýA€ dš:Ó—ÉA€ ”›ºÜDé€ @ ÓЙ~¼L€ @ ÜÐå&J€ @™&€€Îôãer€ @å&iÝØØXn^ô@€ Ьk°L 膆†6/Õ€ @å&u –i]îýA€ @Ío€ @)  SÀ"€ @h~€ @HA¡€ @@@ó€ @€@ è°… @€šß @€R@@§€E( @€Ðü @€ ‚:,B!@€ €€æ7@€ Ð)` @€ 4¿@€ ¤ €€N‹P@€   ù @€ @ L èÆÆÆ(… @(¬k°L 膆†rüè€ @ ¬k°L èÏ™P@€ E]&‚ @€ ÐDÍ/€ @)  SÀ"€ @h~€ @HA¡€ @@@ó€ @€@ è°… @€šß @€R@@§€E( @€Ðü @€ ‚:,B!@€ €€æ7@€ Ð)` @€ 4¿@€ ¤ €€N‹P@€ dZ@766ò„!@€v0¬k°L 膆†üsáv€ @Y×`™Ðü|!@€ Pnèr¥?@€ L@@gúñ29@€ r@@—›(ýA€ dš:Ó—ÉA€ ”›ºÜDé€ @ ÓЙ~¼L€ @ ÜÐå&J€ @™&€€Îôãer€ @å&€€.7Qúƒ @È4t¦/“ƒ @(7t¹‰Ò @€@¦  3ýx™ @€@¹  ËM”þ @€2MéÇËä @€ÊM]n¢ô@€ i™Й~xL€ T#¬k°L 膆†jüM1&@€ iY×`™Йþe29@€ Š@@W;7… @¨UèZ}rŒ€ @ "ÐÁÎM!@€j•ºVŸã† @¨tE°sS@€ Z%€€®Õ'Ǹ!@€*B]ìÜ€ @ V  kõÉ1n@€ Š@@W;7… @¨UèZ}rŒ€ @ "ÐÁÎM!@€j•ºVŸã† @¨.¹kÞtÉ’%U8*†@€ÊK`ÿý÷OÝaçÎS·ÉrtóÓíÒYþ¡37@€ P.¨Æf’èrý¤è€ d›@¦tcccÑO¯[·nEÇ@€ Ÿ@ –¿—ê­É´€nhh(š<{{ŠFE  @(H +ØQ•VfZ@§aÞµk×4áÄB€ Ô)tóƒgºNÿÀ´!@€@Jèf`¼D˜ò—C8 @¨Sèæß©ß”©Óÿ 0m@€ Šº:Õï†`@€ P·Xv­ÛGÏÄ!@€J!€€.…m @€ê–[8š}Öü®Û_8‡ @e&€€nºuëÖ2£¥;@€ P}8º·ýÏÝÌpÛ¶mí§I€ @™'€€n~ÄþóŸ3ÿ°™  @€@û ðaûÒ @€@@@×ÑÃfª€ @í'€€n?Cz€ @¨#è:zØL€ @ ýÐígH€ @uD]G›©B€ ´Ÿ@¦tCCƒã ƒíÿ‘Ð @(–€´—4X–S¦tÏž=ÝæÍ›³üü˜ @¨*Ò^Ò`YN™þJŸ>}ܺuëܦM›\×®]YÎò/™¹A€ PQZu–xÞ²e‹“ËrÊ´€îÑ£‡ëÔ©“Û°aƒ¿ØÎ‘åŸ2sƒ @ ’$ ;wîìz÷îívÞyg·mÛ¶J§Cïi­×­[7u(E:‡ @ÈȲxÖ$3½:÷É@€ @ LÐeI7€ @õA]Ï™YB€ ”‰ºL é€ @ >  ëã93K@€ 2@@— $Ý@€ Ôt}ž3³„ @(t™@Ò  @€@}èRëÓœøà÷Ç?þÑ-Y²Ä­[·ÎmÛ¶Í_6¤ÆÆFŸmhh0—3_ÎeòÕ›_¶¡sƒëÚ¹«ëÕ«—0`€;äCÜÁìºtÙ1hGÌטؼUNÃKñÖ¶˜i<Õž’Û #ˆöËM²òÅ/­hë’ßò¡íÜì7«_¯êeå³ËüƒW­Z51ò“ @¨aÒúӟܳÏ>ëzöìéŽ=öXw衇ú|·nÝ:tf›7ovëׯ÷÷ÿ¯ÿú/·zõjwæ™gz1½]ê”w•œo9fR fá¸wÛm·±Qù£èÚ][¢kkp©l~YÕ…VùðҿȬ¬|Ò¹½?g£gØô/9yb B€ òغu«›>}º›;w®»úê«Ý~ûí—[ñ,ïò÷fZH«ÝË—/w&Lp‡~¸;í´Ó\çÎZ¿+_ª†ù–c6;’Y|¼Õ. wÌ¿ˆS¡ @€@]`1c†ûðÃÝ 7Üàúöíë$0õ߸ó¯ï•M´ŽØØ¼¸(Q¸Ç{¸qãÆ¹xÀuêÔÉzê©Þ–ã®U1ßrLd2+ÇpwtÚ>A‚ @e' ±ª½Îº~ö³Ÿ¹ï}ï{~¯³ô–-[½V¾Ðõç?ÿÙ}ôÑGnÆ ­âþå_þÅoËHj/!›óoÛš»¯|×.»ôr#GŽôÂ^ã³ÕÖö@(Ç|scŽqÑ?Bþã?þcûœbõùÚ¥ñW‚Y{xW²-º’ô¹7 @ þýö[7{ölwä‘Gú•g 4i–íÖ­½MÂwÁ‚~ŸôÑGí®ºê*7pà@wÍ5×ø½Ì& }ôQ·hÑ¢V¢R}J [߯²Dn“݉è]Üßþíߺßÿþ÷NcmojÏ|mŒÿ÷ïþâ/þÂ}÷Ýw-æõÆoøm0Wn[)fíe^©öèJ‘ç¾€  Ó¶ïÿûnŸ}öñ3Ý´i“…ªKº%p·y‘¬m§Ÿ~ºß7=mÚ4÷Þ{ïùÕæë®»Î‹`[1–_ê[ýØ=¬^å­Í«ÑzIN/þå_þ¥‹öÛúUnÕ—šÔ¶ÔùÚø´Ú>kÖ,ÏH{ÆÍoVc³|{í°aÃÜ“O>™ëOãßÑÌJe] íÐÕð @ c6nÜèþ÷ÿ׋çwÞÙÏN¾o¾ùÆy!g×zuK´r¼Å=òÈ#þ˜¹_üâNBwKt©›o¾ÙiÕù“O>ñ~‰HÅ«^‚S/®]»¶É—ØÿV·iã&tžÆ¢—wÚi'·÷Þ{û•lùJM홯æ¨K‚ö¸ãŽsgu–›4i’÷Y®®;î¸Ã¿„© ßyç\ŒN7:t¨_½>-úLJØ[ÛáÇ»§žzÊïõ¾è¢‹Üí·ßîþçþÇýÓ?ý“2dˆ_íöw0³RYWC;^"¬†§À @# -:ãYMg.K¬JJÔI¬iõ·¡Sƒëäß&Ôé·ö¢_´ozþýYÍ6n³épÜÈ Zà¾\ù¥ûéOê~<ôÇn¿ýösÿïwÿÏÏÇÆþ“ŸüÄŸ2äGCܯ®þ•{ûí·ýŠúïžþ}Ü Aƒœ³ÊV§d|ùå—^D[ÛƒùÂþ¬­lÛ‘ÌJe] íÐÕð @ c$ÄôBŸÄœ„šD™ 3Y­J[ÙD›•þóŸ{a¨¯*©^«©Z•`Þu×]}[ÕiåX«·o¾ù¦Ó¹ÐÖ‡Úè²ûÄý*Û¥ýËú¼·âKMj[ê|uò†D³NÑü´ê¬£ûþîïþÎÏMãCí§q*¯—9æ??½<©SJ´ZuZ¹ÖÉ"ú‡ˆÚ*Ù\e5V­â+ÞüòÙµ£˜•ʺÚ±…£žc€ dˆ€D\·nÝüƒ¤hÕëÊ—$ê$ÇŽëW›%ö/^ì.¹äÿ5C =KŠÕ¹ÉS§Nu't’;à€܈#¬Ú[ÝËV—m¥ØÆ Õ_­@KDkÌ…ÆÕ¢Ó  6í™ïäɓݨQ£Z øóÏ?ßýã?þ£»ë®»¼Ð•(ÖÊôš5kü &S¦LñmtVöµ×^ët‚‡V£5d¢ýç–L8[yôèÑîÒK/õ/je?ž:šYü~µVn°TÒÀ#xöëN²òÅ/ý3G—ü–­~ñ*›•€WYV>»Ì?xÕªU#? € " ÕØ9sæøbm¹øÓ^c‰_É‹í£ð¤´âºråJ·ÿþûûÕÖÂÑmך€Öh ͯ¿þÚ¯ìê f­øjr)©\óÍwo |%"z0žô•H7ùO•Çë’ʊ׸õl ¥ŽbVèžÑ˜ÆFõE—çÞ][ƒKeó˪.´Ê‡—öæXYù¤+r{ÎFó맇ha"A€ PV=zôð¢÷Å_ôV‚ÕVAÃdÒù´Jß¾}ýÉåœî£±XÒ™ÔøÃüqns©©\óÍwbi¯½ö²l «­Ú RlR|1Çöu³bÇYqèj|*Œ € Pã$’uòÃ~ð7cÆ ¿­B'KÈo{l+1E‰g»´ªû /ø#ã4ÖPا[µÎ7í<’â—l9™%Ý«V|Ú>A‚ @e% •e­šêëxÚg¬Û6lØQxéLIDATà·nh%ºRI÷Ö¥3ŸŸxâ JˆÆ¨±Újx)c«Öù–2—x›Žb¿O-•+÷ ®%JŒ€ Ô´*«½ºÇ{¬ªú õûï¿ïóZÍÌ·m#õŠh`Û$æçÍ›çn»í6/è5¶ö®>Ûí«i¾6¦öØÁ¬=ã«d[^"¬$}î @È8‰0í3Ö1tÿýßÿíæÏŸï?rØa‡9}Yoß}÷õåŽÄ Õf+­£îæÎëWŸ9ä÷7ó7þ} ¤\©æ[޹ìHfIã­ö—ÐIO  @e% /t¢†„ìG}ä?ü¡0t„DgG&m¯Ð úðÈ€üg¯u4žÎ“Ö~ìŽH•œo9æS fḫ]@w̯&$@€ º' ¡ªãÒ´×X"VXÑjú<·¶Ut”ˆ–ÔÖ }ÁPGÔé´ ]¥žù\샬Ô|‹_¡¸J1+4¦j«C@WÛa<€ Œ0Óv ]ZýÕþèŽφÑ¡„´ò;*Uj¾å˜_¥˜•cì;¢ôŽ Ì= @hA@M«´µ…¢Åͪ Poó­ä:NáèP¼t@€ 5è¬=Qæ@€ СЊ—Î!@€²Fµ'Ê| @€:”ºCñÒ9 @€@Ö  ³öD™ @€@‡@@w(^:‡ @ÈtÖž(ó @èPèÅKç€ @ÅX¶lY±¡«FÝÑE‚ @¨Ï3f̈϶*ua¹?å$|ã¾xÙ@%Êkm°€ @5N`éÒ¥næÌ™nôèÑ6“¸LÒ‰…b­Îl¼?ó—dwô t8xa¶¤ Ѐ @ v „â¹GmMÄt£Y‹Wy‡¥ŽÐ6³6±xÙüX@€ :!°xñâÜʳÄs { ãšÒÊf;„dGh°Ùb®ø°M¼\l?ÄA€ T9… º—^zÉoÛ0ñìŽëÀx¹˜Ù™®4[L›¢bʽº¨›A6!³ªR>,ád!@€j€ÄóË/¿ì.¾øb'ñ¼dÉ’œ˜ŽÍ-® M#š…ï˜b±+Ðå¤õc¶Ð,SL\¡>¨ƒ @¨"IâÙ^ ö@«M+šmïL‹ê§X4˜ða>_l¾ù“®¤~ðA€ Ô( ´Zy–xW¢cSKÒˆmiÊX-ŠaÛ0ß"¨­B{t¡¾Ã…ù°üIuæ7¶!@€ Pƒ´Mã•W^i!–ãâYåæd:ЬùÍæó«^u–¼ùÚmÓ è4ƒˆÇZY6Ìk¡ÏÊ¡Už@€ Pƒ$ž“Är¸òlõÍÓ‹kE¹C½Ö‡ùŽùC_¾|šX×ÐØ˜?¾!JÁ],/ky pË˪l>•;7×›_Ö|zÑÊò)o>YùZµjÕã‘%A€ Ô ÝvÛí¢hªÿ][£kKtm ¬|ºÌ'1keùt™OVWèŠ9Ÿåcù¦L‘\îS8ìæMChœåÍ*FâÚbeãyó5F/Žê%¦Md›}êÏüfåÓ¥8%+›5_h•'A€ ä'ê6Eåt[s^> Zó›x5+¿ò¡¶:óYÛÐFMr}Z>´Ê+Y›¦RÓ_ùÊ–Ê! 5 ‰ÒB)iÐñÉ…1V·(êÔ±YÒfuo«“UYu6&ó©^Q1—,6ç @€ H Ôl 0ÝZ b%ùLL›H–•_Vu¡Ç(ÎR<–“bÌ·Iíâ1ËåÐñØ â¢T~»Â6æK²‚¨~T§ƨNIÙüò©líÔ6Ì«lW”͉låI€ @mu™¢M‡²Òca½Êq_ØW¼.l«|˜ÂºÐ¯¼ÕÅýí*ÐÑÖÆØ>h»™cÂV6)Ù€­^eKVgV~Ë'YÕ ¤‰eåíþŠWYÉê­ÅÈ—/)NÉÆØTâ/ @€@>¦Ÿ¬ÞtWhM+Æüò™?ô…ù0Þü¡Mª—OIq–¬•ãÖbͶ¨—nሠèXl©E›@(xÕ— ,^oulm”7qlyYKª Ëò›(–_y»Â:‹1«: @€@~¡†STX6]Zi1»ä·¼¬•-Þ|¡? kuB>µíÐT.m•UÞi˜'bþÐ*¯KàL,[ÙúSòfãmä·¤8]Ö—•e-©½Rèkòð€ @ ‰€é'«3=fV~i2++oe³aòò+YÞêå‹·±¸Ð*&µ·dù°O«+É–K@ÛÍ50£ñ|8hå•Ì·e«ÊêOõ¡Ïê"·OvÏÐ/Ÿµµ|h››¶húÈC€ ´&`:Îjâ:.^6,›/¯¾¬Ît_hã}ª¬Z‹iªÙ^ÆY]»l)Zƒ“-”˜x^e%ÙxÞ|q¿€êž²¡HŽŠ>…ã±¼¬.Å«?+›\¹$ € @ m¦Ó,2ÔoV—O ›_Ö.µ ýÖŸú·|h ù­NVIíÚJÅÄ´è#€Vç¡Ð´›…>už/Îü¡U^ÀÔ‡òá%¿‰eÕ[Y1JÖVy‹SÞÆ#kýZ>¬‹ÇªL‚ @(L ÔbŠ ËÊǯ¸8VÙ|a¬ùâ6ŒQÞê•WÊg›j·×[ÙÚX;óÇËæoeÓèV 84€P¼ZYM”·+^6¿ÀX{ùT“ fÄŠ‘OÉ|–—ß|²vY½, € @ é/%ÓoaÙD®ê-/æ­ùÍš_ÖâCŸòJ¡¯ÉÓ䳺ÐZ}Yl9´/Qj“1±j~¨MReË[+ ’õÏ[?fM0+εꬽlÅ)©¬d¶©Ä_@€ |Býf1¦å YÃf«|ü²>âqæ/dm<²Š³dmTýVŸÊ–C@'ÝP3ñªú°ŠÕЯ¼.Á²¶Ê+…¹ÉÓôWqªÓWldÕ^V~»O¼ÖYLN‚ @HA@ºKÉ4\˜7 gu&†Í–•·KñaÞÊÖ¬’Ù¦Òör[qß.[.­Ášµ¼Y Ð&æÍ—Ï ^˜$„ã>ÝSí­.,«­Éò*Ç}ª#A€ ¤# f)ÔsòI³Y½å-&,+o—ê-oÖÚ¤±Q7>©’ÙxÞW–ò§Zƒ Ei|VoVõÊÛ%@j·&Š£ª\2ŸÚ*…‚Øò²v¯0·rh•'A€ ä'`:̬"•·²åóYi>«Ó.Ë›h6+k#kÉòfÍ·mÕÇã[•Ó hÝP¢ÔRRÙêd­Þ*+&„­¯°^í£dqM¥¦¿òY¼Ú[YVåÐs>»—Y« ­ò$@€ üL‡™U¤åeí²¤ëÌgùÐ*NåðR¼•­m܆}„uê/,[^~Kò…)^ëZåÛÐúxC”b-u“Ð/[¸ &ŒUÅ›Ë&ˆåS2¿òaªW¿òY•-e[‰çЧ¼¥øøÌ… @hIÀô˜yU}V6Ÿ¬‰ÝxÞbm%Úâd-¶‘OI>%³M¥¦¿Ögè³|<>^vÒ¾œÏ¶) ó5Lðëfù„¨ D“–ÀU’O—ù²õcLD›_V>Y]jÏG.ï³ûYÙâT&A€ ´€i8YKÒpV–µrúÃzåãå°]XgþÐgcˆ[Å–%•" uóP´& $>@Å[ Û[œ¬&®dbÙ„oèW½ÊvÿPD›0¶þ힯¶cuò‘ @€J' íe—zIÊ›/´ÒhaYyùB¿åã~k…焺òJVg¶ÉÛú¯ê•Ì6•Šø[Š€Žw«›J†7·²Ù°Ní­œdHIuÈ&¨UV¡h6Ÿù£j_/+Ÿ’lRÞW6ÿ±úÐG€ @ 5Óoa|æçgúαŘûU6ŸY‹-ÆêžŠS ã­ì+JýSm E¨ªrhÃ1 „ ãÐÚDÃzµS_vYŸ&¤Uo}„÷”ßÚ(¯¤r˜¬l6¬#@€ К€é5³–•·²¬‰`Å*¯ú-ެśÍç×+N)n›¼ÛýV.É% ó¼H˜tC 6£6x‹MªÓÄM+N1V–µ¤È^v/ù,esÀäWRJVó¡Ïñ€ @ (¦ó̪‘å¥ï”’Êòº¬­‰ã|Öúö7JèÓü²ñذ.—/æB% s½nÏhIÂ5ôYŒµRYLК_Öü²&j­/ÓŠ“OeÙ0Îʲñû†}FÕ¹vñ¼Ê$@€ âHsYŠç“Êò…—ÚZYzÍÚÈZ¹PÞÚ†1êÓ’üJq›Ï烋ùSª€.Ô· ÒĬŚàµzó›(×&zUÖ ´ÚZ]X¶{Xß²vEÙy+ËÆ“µû)C€ ´$OË…~å­lù°¬U6¡œT¶:k/›ßúµ>Ì–•/[*Z@'lãÐà$<ÍjPa^eKò“BálmLܪNIBZua½‰f³ŠS²¶ùlSÔö8+c!@€’ ˜³Z+糊S]ü2¿¬é¼0Æ|²¡¿­¼ú‹'µ±dy³Þ_ìö - íŽy¬`"U!6 ù¬Î|ªo+ ”ÚšUÞ.[¶²ú²¾Í'«·MÞí­~»‡ @€@1LÅcÍZå­¬x+›MòY]ký˜UÛ0ÅËa]ÑùT:a:éF˜„© Ðòf“Ú˜Oml«†õ£vá¥X+Ê«N)Œµ²¯h®³<€ @ x¦õÔ"žËVo>ÙBy«cl5:¬‹çí>fÃöòåMiVŸÕI*pW LU))oWŒÕ›Ï7 þX}¸ê¬jó‡B¸P^mlL–ËòÅS[õñxÊ€ @ ^ äÓrÆCõaŒåC[(¯SÙ.ÝÃò¡5¿YÕY¾9›8&«Ke"Ū‚¢4 ó¾:¡N1Zó›µöI1Iu…|ªS²¾šJ­ËI1‹… @hI I<Æ}aÙò¡ óê]åЗTã¬>lÖ[^VÉâšJA9íê³:hï ´ú°Å…ªê,)Æê-oíc>‹±vIuÖN±º¬­µ1¿•eÃ~Ã|C€ @ 4¦ÏÔ:Ì[9ôY^ÖòaœùBk±qŸµ“U²ú¦Rë¿mÕ·n‘à)‡€Žw«™Hm+o“P¼åãýYÙú²¾å·6æ³~¬lmeC_˜cÈC€ ¤#`zL­Â¼õb¾¸ ãU¯Ëñú°.~Ÿ°ßxÞbÛeKÚ¡;ƶqØ Baš”7_1V1çoÙ|óå³ñ±XœùþBy@€ ôL̆-ÍgÖê¬Ü–U¼bì²rÆÆó*»R¶o¨]ÉÚ7n¹Z.¥P°Ê'ÕÉgþ¶l¾{Y;Õ+ÅËMÞ–‹‰iÙ‚ @¨O&~ Í>ce³j›”7_’û¬ó[YV)Ÿ¿©²”}Ëòìnî*Ñhà&Nãy5ˆ×…µ­]ܪÞ|a>Þ‡ÝÃú‹—­­Õc!@€Òˆë¯xY½…¾¤¼ù̆mÌgÖêâeù•B“§ŒÛµ­q±•Ã‡ÅÆl"6nÃX« }a>_}£¼¥0Þ|X@€ òH®q_X¶¼Y$)_ÈÖÅÛ'•KÞº¡Î”:â%Bõ«‰„‚5_9œ°Å‡>õ•/YœÚ…yÅ«lý©¬d1M¥–ã±-k)A€ BšÊb̆±ùòŠÍWú-.ô…y«—µ¯7»l»W íîí\‰Îueâb6mY}ÅÛXÿmÕ…qä!@€Š#PH¨&ÕÅ}Å”‹‰ Go÷ʳuÞQ+ÐÖ¿ Üm1eÅ(>ÞÆúŒ[‹ûó•m ùêñC€ ”@\{Å˺S’Ïüñº´åòͤ¹§²­@ÛÈò¬D«Ú±…&ùâ1a9Ìê#¬KºG¼ž2 @€@y ÄEn¼÷|õ¡?Ì«}[å¤ßR«óþtô txK›t(„å‹—­üÖF¾x¬µ c¬-€ @ rŠÕga\˜·‘'ùT÷ÇËÖ¾ClÙW m”V¢bâ×Âóù¬>)>_]¡Xkƒ… @Øqâ7^G’¶.o|¹Wžm& uƒ6D´±Äl1"¸˜˜B÷ˆÝ’" @€@™äµ±þ‹‰Ë“ÏïoÑQâYw¨€6@Ei?‹O°ÅŠekš6ÞÚa!@€ÊK  ÐM¸U¡øBu¾«ŽÎ6Ö" s7‹”´åÛ°ÅÄÓÆm¨† @¨ 6q4¶bbÊvD]1,v¨€¶¹"má²íËíiŽ< @€@qнyºJÕvG¬8ÇÇY¢16W'B€ T7T"9>•Jˆæp Ðá`”/ƒ ŽwI€ @ † TZ0ÇÑU€ŽPeDu|€ @ {ªM,'® 4ð$B;‰ >@€ Pyµ Œ‹¥”)]줉ƒ @€@©:•Úv€ @¨Gèz|êÌ€ @ dè’ÑÑ€ @   ëñ©3g@€ ’  KFGC@€ z$€€®Ç§Îœ!@€J&ðÿH©$}kΑ¦IEND®B`‚gwenhywfar-5.12.0/doc/dialog/images/cocoa-3.png0000644000175000017500000012027113142134462016107 00000000000000‰PNG  IHDRÐ0¯\ xiCCPICC ProfilexÕ–gTɆ«{r"Ì C†!g$ 9Ar•a† ã0dDEdqLˆˆ`X0(¸*AÖ€ˆb`0ÇdP®‹(·¬çÜ»ÿîŸ[çtÕÓo}õuuWç¼;9A ,@*?CèáÌ ˆdâ€H"‡›.pò÷÷ÿØ>ÞxòŽ‘8×?†ý÷ i^l:È™Žá¥sS>‹ð W Ì>…pv†aTÂt!²A„+Ä?ÏõbŽ™çós1Á.HL?x2‡#Œ€ôÑ™YÜx$ia>/‘Ùa{n‡‡°x©kÄ\…°nÌyâ`'f1'‡¿ÈóD욘.HáäÎÝü/»Ô”Lä{Í5*Ò“ù)ËÅgCG®1ÇÕ{)sg6§ÇòC‚t~Ìr¿Žº.° Ãùö^Ðó\–/plºÛbž$Ž—øÌæò 3C8=+Èmó‚Ø뺨Ç%º³ôÄ öâ³’×x/î\À\à 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ùãb ™l>רifbj"žþ¿iâZ›ßì{Æ\ AŒ›k91Ø%#5àù·@³.òákڊкiÛÊÍfÍçC‹ "Lò@h]`Ì€%°ŽÀ x? "À*ä '€T Ù lÅ ì»A58zpœmà<¸ ®[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ì d¹A>P ECñÊ„ò¡MP)TUCµPô+tº Ý€ GÐ4½ƒ¾Â(˜ ÓaeX^³`'؆WÂñpœÁÛà*¸>·Â—á[ð=X¿†§PEB1Pj(# å‚òCE¢âPBÔzT ªU‡jBu zPwP"Ôê ‹¦¡™h#´-Ú‚æ¢ÓÐëÑeèjt=ºݾƒBO¢¿c(%ŒÆÃÆ„câ1Ù˜bL%æ(¦ss3‚ùˆÅbX¬ÖM®Ŗa÷c›±Øì0v ‡ÃÉã pv8?—+ÆíÅÀ] âFpŸñ$¼*Þ ïŽÄóñ…øJüqüEü ~?M"hl~!—°p˜ÐA¸M!L¥‰:D;b01‰¸‘XEl"^%>%¾'‘Hê$kR)‘T@ª""]' ‘¾©d}² 9ŠœIÞF>Fî$?"¿§P(ÚGJ$%ƒ²Ò@¹ByNù,A“0–`Kð$6HÔH´J J¼‘$HjI:I®’Ì“¬”<#y[rBŠ ¥-å"Å‘Z/U#uNêÔ”4MÚTÚO:UºLú¸ô é1*ŽªMu£ò¨EÔCÔ+ÔaЦAs¡qi›h‡iWi#t,]‡Î¦'ÑKé'é}ôIªÌR™P™™™ 2"Š¡Í`3RÛ§÷_e•edce·È6ÉÊ~’S”s”‹•+‘k–»'÷Už)ï&Ÿ,¿S¾Mþ™ZA_!@![á€ÂU… Eº¢­"W±Dñ´âc%XI_)Pi­Ò!¥^¥)eeeò^å+Ê* G•$• •‹*ãª4U{ÕDÕ ÕKª¯˜2L'f ³ŠÙÍœTSRóTËT«UëS›V×QQ/ToV¦AÔ`iÄiThtiLjªjújæk6j>Ö"h±´´öhõh}ÒÖÑÓެݦ=¦#§ÃÖÉÓiÔyªKÑuÐMÓ­Ó½«‡Õcé%ëí×ëׇõ-ôôkôoÀ–‰û  1†Ö†|Ã:ÃFd#'£,£F£!c†±q¡q›ñ›%šK"—ì\ҳ仉…IŠÉa“'¦TS/ÓBÓÓwfúf\³³»æswó æíæo—,]z`éC š…¯Åf‹.‹o–V–BË&Ëq+M«h«}VXt–?«ŒuÝcíl½Áú¼õK› ›Ó6ÙÙ&Û·[¦³,vÙáeÃvêv»Z;‘=Ó>Úþ{‘ƒšÇ¡Îá…£†#Ïñ¨ã¨“žS’Ó §7Î&ÎBççO.6.ë\:]Q®®%®}nT··j·çîêîñîî“k=:=1žÞž;=°•Ù\v{ÒËÊkW·7Ù;È»Úû…¾Ð§ÃöõòÝåût¹Örþò6?àÇöÛå÷Ì_Ç?Íÿ·l€@MÀË@ÓÀüÀž ZÐê ãAƒƒ·? Ñ É é • mýæV& _¾.üV„BDbD{$.24òhäÔ ·»WŒDYDGÝ_©³2gåU «RV]X-¹š³úL4&:,úxô ÇSÇ™ŠaÇì‹™äºp÷p_óy¼ñX»ØòØÑ8»¸ò¸±x»ø]ñã  • ‰.‰Õ‰o“<“&}JöK>–<›–ÒœŠON=ǧò“ùÝkTÖ䬊¢4›´Ýi“BoáÑt(}ez{15½™º™?eeÙgÕd}ÎÍ>“#ÃÏéÍÕÏÝ’;šçžwd-z-wmW¾ZþÆü¡uNëj×CëcÖwmÐØP´a¤À£ ~#qcòÆß M Ë ?l ÛÔQ¤\TP4ü“ÇOÅÅÂâ›m7üýsâÏ}[Ì·ìÝò½„Wr³Ô¤´²t¦Œ[vs«éÖª­³Ûâ¶õm·Ü~`vÇý;ëË¥Ëóʇwùîj­`V”T|ؽz÷Ê¥•÷÷dîUùTµïÕÜ»cïLuBõ½çšæ}Jû¶ìû´Ÿ·ð€ã¦ƒÊK~ý%ñ—‡µµ­uÚu•‡°‡²½<z¸çëHÃQ…£¥G¿ãÕÖw7X54W:¾½nÌl?u¢ÿ¤ëÉö&£¦ÚfFsé)p*óÔ«_£½Úût×Ö™¦³Zg÷µÐZJZ¡ÖÜÖɶ„6Q{DûÀ9¯s]¶-¿ÿvì¼Úùš 2¶_$^,º8{)ïÒT§ sârüåá®Õ]O®„_¹ÛÐÝwÕûêõkî×®ô8õ\ºnwýü ›çn²n¶Ý²¼ÕÚkÑÛò»Åï-}–}­·­n·÷[÷w ,¸8è0xùŽëkwÙwoÝ[~oà~Èý‡¢ˆòŽ=JyôöqÖãé'O1OKžI=«|®ô¼î½?šE–¢ C®C½/‚^<æ¿þ3ýÏ™‘¢—”—•£ª£ cfcçÇÝÇû_­x5òZðzz¢ø_ÒÿÚ÷F÷ÍÙ¿ÿê Ÿy+|;û®ì½üûc–~èšòŸzþ1õãô§’ÏòŸë¿°¾ô| û::=ƒ›©ú¦÷­ã»÷÷§³©³³Ž3çPHÇÅðî”Ä+ ¾˜Ø9ï…ç" yÿްØÇÏyùÿäy¿<o À‘NB ðDÆdÔFFª#bKì`sóÅ QÄ-=ÎÜl ²±&Ÿggß+€ëà›pvvzÿìì·Ãˆg@gÚ¼Gû€¥º¹›YõÌöÍ-ÿ±û7…èªÍöì pHYs  šœ IDATxìœEýÿç’Ké !´„Þ»ÔRQQ: ¢`ág—¢ˆþEQŠ?Šô"رŽ Ò  ½÷äþó™»ï“¹½}êÝs·ÏÞ{^·7³Óç=³»ŸÝ§©¥¥Åa @€ Êô©,± @€ @@3 @€ Pt°ˆ @€ 4c€ @U@@W‹¨€ @@@3 @€ Pæ*â6\Ô&o®ÒT€ 䀀ÿTrn¿•ÜÔhmCçàˆ¢ € @ "Ðhb;³¡*œ€ @ Ȫ°Î”€î¤hf¹F/<°h2 @ E æeYÓ=. «ÍÉIÛP#“ÊB€ "P³@öõ­8mO‹éÐUˆæJDo%qzh Q, @€@ JÄr%q\OˆénÐ çR‚¸TXJ߸jã§å @€@õ*ÀQ¶¥â— Yt§î]p.&t‹ùG¬+É•äç‹€ @ :e…n[v•Ä+§˜Ⱥ;„tÝtñœ&jÓü¬ëª +×òÆ @¨¤ØMîÇ%WV4~½EtÝt çb"8öÝq'ÄîJâÄñqC€ ÔF ¨°²‹ãÄî(JêK…iqÓüB>õÒuÐUŠç4q›ô³}³c¸æ.¦8åÂ-l@€ Ú³mÙ• ·0³­É}ù'ý’û–¶./v¹€.!ž“6¹¯†Æ~æ6»"ÏüÓâ)¬˜¿¥Ã† @èZÅmš)¿8,v[m“~Éý¯«g¢»T@wB<Ç"×Üf RûɰbiÊù[86 @€@eRE«OZ‰2N±ýØ?v«†åöC+ºRDw™€®P<'…n¼on³ÕØJÜÉxÉý8…•2ÕÄ-•a€ @ o’BµTû⸱[iJíÇaiî4?«G©°§«Dt—è.ϱxMs§ù †ù›mã°r~q8n@€ êÄâÕR–ò‹ÃÒÜi~ÊWþÅÂ,\¶L¯ÕGžÞvjttZ@wR}ú8¯õÜÊ•+ûå/ùm/¢òÍšÛÖ4Ð6»lû 6?¹c‘ûs×, kZÂQdöY—1ñ[‰Ûij¥1mþkí¹çžïökTvY²dIÈœ€ @ù"  R/ž]ß¾}wÙ}÷Ýßã[÷´ßæûÍį´a,ýn“§œ[é Fš¶–µÐ5 èB©k&€×ø´w™ –¯Å5¿¤mqäßøðáhæ@€ oÒ#GŽÜß·ò~3ÍhÖD« dóÓ¾â™-ÿdù™±¸¶_“Ý:n\š[~æÛ柴ՒW°¡ßä—jfw- .t¯¾úª›7o^ˆ«0cá¼w'NtC‡uÍÍÍN ä_Ì$óœnöüî‘þì&¿ýœ[¶r±¸ý»ÆmévÝ|7jØX7`À€P×Rõ,Vü!@€@£ðºhC_wiAÌÉ™çdÓ¤Ð$ìÌV¸¹eËXxÒ«ýWµ€ö‚®¸ò\SºÅ‘»Ãü*±ûHt–2«V­rš¡ž:uª“ЕH3fŒrkñ÷Z;m¶—Ö«&þ€ @ ¯¤M8—›6±`6 šô3¡¬ps[úŠíªt‰Ùg«d©‚§’Íijâ–Ћ-r³gÏV3ÏšµÕ$ùÒ¥KC]ä–ðÕ’…)®–t”šÙUžÝÅ–gŸ¦>AX‡x÷ˆá>ÏþÜÀƒB\-é(•çìy3Üï¿ÅXg°[{Ò`7d­¾náªénò¬§ý2Ž%nIÓ,7lÄÿÕë!®Éw§âN\{3Ÿÿú¥˜@€òHÀô Ú&w5"ºI¹ÂY·šYèªt©Ú´…©R2Ag¶: nóK³FÆ`™ÝWË)J™9s欙b­oÖ ¼–KØL¼–€È-­82J³ÖZkÍvÖ¬YnÔ¨Q!¾‰â•+W¹¥K–…4¶¬dàÀ…<•¦Tž=ÿ7ׯ_7i¿¼dÈçµ·›×òº{iþr¿„ïnžåhv̓F¡ÿÜì™NistÑz@€rJ@à¥%v%žå–-Y‰˜V:Å•1wáÜ\ýÿÎh«”ÙVºöÍ/i+Ž…³ÈtS¹%Ë»ÏZî gm–Nnù› –ÈÕ,´…«BI£<5ó¿p˜ÌSË6”§â(Ï™3g–ÌsÆ’)nƒ-ƺ1kk6¼¿ë×Ü×õí³Ú­èãÓõmqƒ|û¯>á²lÈJ·þMnÆÌ)%óLÖ›}@€ Ò‰& Õ$Ñ&†“Í4q¬tÇlŵp¹“qäW•©X@{©ÂJ 7ÛâÚ¾l‘;m‹Å³Ü}K Ý‘¯–f—%hí몪UW"7ÞWa¥òU¸f—%¼cQç)·‰rÅ-—çªKܺëŽpÃ׿ú÷ó3Í}û¸f¿¤¯¯·útåjmþˆ~0`…·®s¯ÏŸ_²žj?€ ä€Í@›pVmæÙ´¥5[âX‚Já&š«Ì^ËU¼Œ£bm5l³­âf'‚Ãnš@V€¥±p5XnÙ±;ø•[Â!áªÍ„®D´Ü±Q&v-~©|MŒÇ¶Òi_Fâ[ù™mñJå9xÀ`7ȯ—2p°ëïÅs?= O?ïV´¸e«Vº¥~[áëÚ¿o?7àJ7È éRy†Êð€ ä@¬ “"Za&¦cÁl3¦ éØ_qã´qXYw­:™±U8iÇñf[ E~¶»åWö%B-¡5-1+‹]UÂf¡×ÒÈ?Í(½Ö9›0Ö¾‰r•£¼LØÊ­¸ WÞÅÌØáë¸U˹ÍýÝ_çAÍýüæ_BìÛ?ôÞÒ•Ë\³ß–öYáa¬t«–6¹±#Ö)™g±²ð‡ @ N è@ßϲM'Æ~Š °¤`VšX(Û¾÷®ÝT$ ½hTa•˜8žÜñ¦ôñ~šÛ„´A++ õe }ëY_ÁˆÅ³ èP¨¯¾½ø§¸JSJìêÅA}³Y_ï0m¶òSZä²WiJå¹Þ¨ÍÝ‹3r~ñ†Ñþ‹ ^HnäÅteéú4ùuÚmãb•ÿáÅù3–ºÍÆìX2Ï€ @ L ªe&˜MKCÊ$mÊ­¡­ÿã4æŽÃÛ¹¥y½¶+¯"Ý.çŽ;ÉÊÛ~S~æÛæ/ÛÄsìîc3½qf±[?˜¢_Ôgëú÷ïf¢¥÷MókfXyH+Ž„´>cg‚:ÎËÜ ×÷£%¶MD[~Š#·òß „_T¼Ru8b7mÁ“nú”nÓ͇¸~}ü‹„~knÒ t‹w¯výûø…ñcä­WgºAý¹‰#·uË—ð3æÖ/Ø€ ô¦ e› •Ûf¢BšQa±-‹/·LÇo ­á-Z•1»u¯ý…Å›BãýØ’¼_V@kÖwÈ!AðjX¿D h›Ö,±„¶ÂõC)¥n.”F/*¾D¹Ò(~,¢µ/-¡­¸ñ§óÔØ¤Y¶¸Åm?á÷ß¿q3‡ú¥ëp«úøåmOüºU+[ÜŒ© ݼ™‹ÝNë¾Ï-[¼œè$Hö!@è ¤M0Ƕ°í›ž¹eL ·îµþO j S‹_,ŽÅmg×" ÛeíXÅ#¯àLkœÅ5[ ddk“p—º>N˜õ•€Õ² }‹Y³Àš•Ö:g ^ [ ]‰aÅ“Ñì³f‹塸Úú<òHWž2JoâYùHdkv»TžÊcØ ±nëq‡¸—¦þÙ-_¼Ò~o˜2Ø×É‹ñEK–úúÏwÓg/rÛŒŸ[«i¬›¿b~É<‹Õ@€ ÐàLJØšhÓƒÈ-Û4¤ìX›𠶏>IçL­Ú*g¥ÇûrÛ~l›¿Ù`î¤mae×@K`kvYZK/.\–UÄbWBZk¤%rWÆf¦ÃNâ_œ§Ä±¾­_‘[Æf°µlCîJó”ˆ6lŒÛkâ w¯¿6Å‹òyÒÏnåŠþn­~›ºwn´³[8oQü*«T=Ž @9$PЂ¾m¶lCzQÆlű°Ø¿” VÚX\'÷•OYSV@{ñi•LË,ïËm›ÒZ˜ù™Jú•ý!e,Á«Ÿß^¶lYÒúÖ³}5C³Éò—xµuÏjR¹™í8O-áHËS럫ÉSbXõÐìõú÷õKCö(üü·f¨%þ§¿9#Ìx+®­³V1€ @ ˆ5¡ bÌf[ÙÇl¡2ÿ¤;m_~ÁHûz‹l *Øet!f«CI«|Ò?Þ·8•ر .;¢Ù` QÓýÖ~ÙI¿8m1wWç)A/q<}úô°<$.×f›­®¶ÇÁ @€zéAʲM—Ғ¢ðRâWá2É8åÒµ¦jû_­€n—¸ÈNÜ0E±Š&Ýñ¾¥1ñ\Ø7¬È•‹ovœ&Í//æ¶tfÇñÒüâð4·¥‘˜.f,N±pü!@€@Ž tЄ¾­&¢ÕìX_Ú¾‰b…ÅqnarwÚt¥€NkˆùŶܕlÜm·ÝÖéF’ @€@CV,5ó¬ÆÄzÒ'¿X<ÇÂÙÂ,nͶÖx”L¬u QsǶ'#¿x‹ïä.¶Ùo+ÜÜfoq‡÷Ç@€ ô£G>Ê7õy¿é%A=²í¤[ûÉMW›üÍm¶÷*øË-³õ®\ÁÝÔþWÎ@[Î&¢µon³ÍÏlóOÚ&¶å @è]¤¥e$‚“ZÑönzÑül_"8v+n—«X-™Y%Ë¥µŠ+ž¹-mÚ¾…)~gê§ô@€ Æ#`Ðtal«5iûÖJ…•3–¾\¼Ôp«\j`ÂÓ*cv"8ìZX²R¶ÛJïs§•ƒ @€@~ Ó…±¿Zï›Û¨Äûr3fv±xÿjt!QŠ£XÅü- —m›ÕI¶…[|l@€ üLjBÓŠj}9X,¼˜UD­bU%*Ù*d¶EÓ¾ù™ÛlÅIºc¿®¬ŸòÅ@€ dŸ€M¤ÆRµNêFÛã™ÛZiûf›Ív=ª*W4é¶pó÷cwÍ#! @€@Cˆµ`ìVcâ}¹Í$Ýñ¾Åé»Vm2»ÒÊ(~ZóO³+Í›x€ @ù ¦ Í/ÙÂbþÉxñ¾ÒȘݺWáÿzÆÎª‘Ö0󳊛­4É0Ë€ @ ÿÒ´ iÅ´01ÿ˜Ž¥‰ý:í.9ø•b…•«X2Üöc;éÖ¾mÅÊÅ€ @ ŸLƶZjûæŽm¹e§”)îÊià’ºTÉ)aqƒ,8YAÛ7[ñÌ-Û¶Ø_n  @€@ï"P‰FŒãÄtÌßübi~5Û]) ËUÂb¶â›;٨ؿ\¾„C€ ä‹@šŒõ¢…«Õæ6»î$ê) ­fÇ‘Ÿm±¿Üæov2œ}@€ |0hv²µæ/;iÌÏìdx§÷«ЕV$/¹W\ai[7 @€@ï#¦ËéʘR©¸µÄ i:óޏB±;®LìV‹gvžtÇñ“aUï/_¾Üýíos/¼ð‚›?¾‡W Ö˜;w®1bÄ\]Fà¾û7pM}ü½mK[–É¡Š+˜*9´¬^íöÛ÷µ.ë'2ZC€óÁ]å‚iW‘lŸ\Ûó芽––·ÖZk¹Í7ßÜí½÷Þ®ÿþ]‘­ò¨TÚU²šøñÄÜUÕ»3ºª‚ŠDŽmQ €…™ͶÄóÏ~ö3·öÚk»}ìcnôèÑ®oß¾ò+ˆê$J« þ­Ì<‡—_yÙm¼ñÆkDžÑ„U+‰NpxzòL·Á„qF»‹¼6mºÛf£1ŒÙNŒÍv]åÃù LĤ«Jý_~™sl`Õ…L•\ÛF`\%–c£ýÕ~rbÖ¬Yî/ù‹»þúëÝñÇ_m5Vñæ6;®R·¹+ÐÕT²š¸qC•.™6¹ǯØ}ÿý÷Ñ|ä‘Gº>šÙ“шs·éÄàqÿV`m4›Ž®3­r#—{¾ãk¯ñ€U þ­ˆ*ã ®…øm®V«ëû°]öu#YËŸóõH×%˜v=S]³àÚ9®º érdFÒIºjÌØ1Žr7Ý|³“æ:è ƒ,Jglí'ýâðRîjÒ)nÜÌÔ|+Щ‰ËxÆ•ÝJ–Ü/“UíÁº3úÏþã>ñ‰O„L´/f›Ëâ Qù—B`åêUnUË”`¼:A`Î’UnáÒV±Ñø Á¿p5ÄuÕ*Ñè ’v Àù ’N{À´ÓS3€k*–š=ãi¹÷Ýgwíµ×º8`Í„e͹Wœ0¾<*Q¼/w|©¨8Órë) Uv܈d]V*<¿¦}]0µ\cäÈ‘áâi3ÐêèÂ’šrî݉ZVû;ù¶Ùè<‘0•¶Ä§»Ú¹xy‹[²¢k÷•+W†“™ÿ®jËÊ+\ßææ†8–ĵÇl½ú®«Æ€òé®óÁ”)SÜøñãÝ€:T_“#Úšýx̃é.¦•²Záõ~ýúU=³ñ²Æµ«@õÔyÂΩ²µéÝ(]K»úz“ÂÊtd± ¦Â‹…¥dWWwŸiÒ³PÍ“áÉýêZçc/Y²¤F«¬ gëøÖb=ã¶ÒšÚ¿þõ¯ÝŒ3<ýVþòße—]ܦ›nên¹åwØá‡…Ábñ­ 8¾ùÉ®Æÿé§Ÿv<úHH>dð7qâD·ë®»†ºW“OµåV?\¬ZJP¯øÿÄÇÝðaÃÝå—_ÞÖ¢V«;™/]Ùâ–W1QúÇ_Ýî–,^Ø®¾ñÎï?ÚwònÇÝöv'œõ¥8¨à~ð¾ß¹ÑãÆ»Í·Þ±àW‰ã[Œt—]÷+·ËžûuˆþòóO»gžjà që¬?Ñm½Cëî¹<Äuu•cV瀙3f¶«ÎÛl»MÝÆ`r¬½ï}ïsÿó?ÿã¾ø¥/†zÔkì'˵FWâ_Ëù ÛM6ÝÄÝzË­îðÃ/¼¨üð#»OžþÉ Ž‡êþüç?‡êÅu»úê«ÝUW]å{챊ε:Ç>úè£!ŸÁƒ» 'nèvÛu·ÂõAqþ!bÛ¿îð¯…i±sìÒ¥K;0­¦ ºNš4)\“¶Úr«E*£… ºÛï¸=Äë×Ü/¼´çž{:õ]5å*ƒ®Žß•\U¿¬‡¼ï·÷ÿìí¾ô¥öçø®æç;¤ƒ âYmaÚ—öê‚®¤´}ÙÚ’µ±ðu¬‡GW è´Ê'ý’ûÖ.ó—mn «ÙÖ]РAƒ‚p6Á,ÛDtkÆÖë¶×ºÿï|Ç-^¼8=«À„ ‚øSØ^{íÄ– P‹cv1]Äÿûßÿº 6Ø ¼¹š_"ó’K.q‡z¨{î¹çÜ¿ÿýowÄG8]$ÌË¿;üu wòÆokíÒêpÌÑÇ„ ;ì0÷Ì3ϸÇ<¥H‹ß#þ¾ë5>Ô¾4Óõ\æ…ÞŠUíÏ ÚK;(äÿÜÓOºóæ„ê>ûïÇÝœ™ÓÝï:¸ÿ<,ôÒ*ÿÔ`¹Ï7-Ÿ{ï¹Õm¹ý.n£-vh×ìRåZ>Ê×êÇè?¹®¸Èí}à¡nÊKϹ—žû·Ûïà#Ý¿sM¡Œ8~ÁÓ;êá/®ÕŽÙK¿siê9`ë­·®Ë˜]°`Ó,ë6ÛlSÈ_ã1lž³LwŒÁPPâ_©rk9c«›k;¿6,Ôâ†ëok*¿õ­o…ýyóæ8ÉCu3Nñ±[ªÎ•œcCamù›;¶KåÇ3w5ñkaZì»há¢LKÕiêÔ©aQ×(±mu¸ŠÎz¡ì¬3Ïrï}ï{ݲeËÂMžêé¦E"Z¦]¿+¹ve½ªá‘ìÕÃí–kW(+ñÏÆ‡ô–ÜÒ\ö47µÖ]]nì’cv2/ù· Ԕܗgš_ˆ\Ë¿®еԡîi:Ó)豂ux¹ÂµŽç›ßüf‡hZW-Si>qš Øc=Â,Šf³Š™1cƸÿøÇ!ø§?ý©;ÿüóÝE]^ˆ,–¦»üÕîjÚ®7Ÿÿð‡?„›=‚5SM–¦;재×ò6AjïµÚyÃê”ô?ñÜVQ!ÿ+/ù‚{æÉ‡Ýg¾ñãBÿÈ_i¥¿Vùû‚´|¾péuÁ_B8™Z|õù+Ï•AÜéܴƵ/søÈ1î³^üuëÕîÇçNýüEÁ¿\»,ÿjëS,¾¸Zž¡BþK;Ô’O%ÅiVöë_ÿz¸ÁNƯW™ÉrjÙWÝj©_[•Ÿ<¿þóŸÿt§œrJ¡Œ4NV¾Ù•´£·œcµ„1É´ŸsÎ9'|eé / ÑŒ©ls—JoqÎ;ï<·ãŽ;º·ß~ÛmµÕVî®»î _Â*•¶Þa•¶Áê‘ÅkW²¬®²}ìWOwP¬º¾hR­Í–æê ¦í“ùnª:SŸ²“€Ö#®RÛ*®Mql0ÈûÏœ9Óí´ÓNá›ÒòŸÕ¶ÿ§?ýɽûÝïvúÚ‡ü|ðA÷| Ì4ëäñæ›oÿøYe}ROùHPÇù«<Œæ¯OÆi ÚK/½¾cýÉO~Òí¾Ûna9‰.,zdfõ|sÚ4wÌ1Ǹ 7Ü0Ìðê$¸ï¾û†2ç­·ÞrùÈGB½$àï¿ï¾L¬\Å7ó_!ž>L[.wš¿Ö%Šçïï½75þÛ‰:ÝçëdùLŸ>Ý©½[l±…[wÝuC›¬Ü‡z(¼¬°Þzë–?¾âŠÀIõ°~zØ_|ÕÞI“&¹O<1ð³zþõÂÍŒX©?æÌ™ÞÒ¶üã¶Y}b?˧+ã/ñku—®Xí×A¯v‹ý×8ûõKVh[]Ö_XÂ5_úVa×ýè"÷‘ý·tŸþðþî_OÔ˜Õ[ûiñÿ™{Wø±§öi,è8Õ±­±ke~âãw×\sM!¯“O>Ùýè‡?tgúÓáXÔwêÿ÷ÿ7ŸJ«‹¤ÒÚyèâ‹/v[ûóÈþ¦þá‡.äcùwåLko©ü«=X»ÒØÚùTßìW<½Ù/£Éq¹×ŸC’œT73eô€}ü‹Lb¥óA±¶Ø9ÖÂ7I9Çî–rŽU|}®K“ vÞ8õÔSÃD‹ÂT—Rç3+ÏlÅOc[-ÓRçØ$г< IDATÓ3Ï<Ó}ÜG¯š1~×»Þåžzê)÷íoÛýõ¯u7Þxcà­›ÕUf¦_ÊQì\·ÁfWûk®üµ.vÔ¨QaE¿ÃPêúu_¶–¿ê¦å :çéŸÊе±4[q-¾ùÉ–_WrU~ÅúZmüÁ~ЮnŸùÌgÂSdÕ¥T;tnÐùä’¶c^7švÌë;O(ôFœ¦bœŠùÇ<©ú{µ>,àíåË–»Þ" {Õ ´„j5‹Úu‚æÅè?þñpòРÐÀ”XÕ ][ûu> ÚöuR×÷vÛmü/¸à÷þ÷¿?|ƒú7ÞßETüþèGaYˆ.ˆŠ+a¬-6Ú×ò÷åüÐ_hÇD ÖIøž{=ûï¿¿ÓIîC Y|â„•_ýêWa‰ˆf®_yÅ‹ŸNF"rýõ×wšÕ¹ûî»ÝùŸÿ¼“ø¯Æ(/˯’t:yžqÆî,/þö÷¿‡  üÌœ¨Óç£:é *¯¿þº/}¤ýÕW_ eë†Dë$uñÒ[¿<òˆÓ ª¿ÁèCúP¡ŸN=í4wÖYg9]4>üá»_üâNËH´®ï(ïÓ¾N't’{òÉ'ƒ[Ëtªi›µ¡«ì×f-s}-w-~B·)ÜÞûYŸy“ý/á?s‘Äl‹û×Ôåíâ/\¶ÚýæökÝÖÿó~wÌWnvùÙ%îÿ®ø®ûðׇj¿:åu×4l}÷ïi­å¾úÚëî‘¿ýÉíuÄ'ÝI—Ýë^˜Ûß=yçuîO·\ãŽ8÷Gnƒ­wsþöºöå™+]“O'×sÚ|2õ"ú?>lÉâîç×\\ÛͺiðKƯ¥½Õð×øˆPá2ÿt˜šrÐØ;,eìéå6=tŽÐ¹B3e¦¼öšÛÄÏÄY4¦uÜiüêX• Ð8Õ±þóŸÿ<œ/Wu¸îºëÂñ}ý 7¸K/½Ô]vÙeAŒ—©~·W{>PÅŠ±µó©ªýj«ÎmýèG[ý`C’“Ê×9Sçk m‹ÅÿË_þrè'[6±s¬ÊPY—WxŽUš 8ÍŸW>õ©O¹gŸ}6¸%@­oKÏâ:”rWË´Ô96ÉT7gšì¹Ä‹e±ÔySˆ4Q£‰ÝÌéæà³ŸýlXr¡q,s†?‡¦K“íеVf©_¾¡²oöŸ6Óͤ–=ŠQ±ë—Ø]„­xè¸Ó •ŽÝÀœ}öÙî*¿¬Qv¥¦+¹ªÌb}­›½ïÿûáFEKFgÏžínºé¦pƒ§ëq©vèÜ Aûä1ŸÖ?bŸ'nèóDð^³¬Zµ²×èÜÏ@ëÑ‘Ý ©ƒm«ô`Ó §–ph»òÊ+K&ÓI[w}º2šÐLªÖ+I°Ú¯óØ/ø >¼är p$·Ýv[7yòäpÁÔÅX/¼èàS9z4'Q¯™ÅS5+­W=¢üà?ÂôOë+ÿî¬D·f¢õxM3=*«ÞF¢XKQtbÐ7"ížRu²0Í–¨Îb¸Ùf›…ªJdèĤ“§˜*ÏýöÛÏéä›/~ñ‹—Ö­ê"ñ¯ý+ëæAëòtWÍj”ZRçYO·~…p•—¿«½¢\Õ¶µºËûû!L2¾ä÷ÄíörŸv±³ÁVn“w覾ðT!…ë•P+Wû[îyˆÛëÈO»‘6q-}úºGwƒÛx§ýܤ÷s}ûv»öÉÀ_E¦ÕSþ f¿í®þìûÜÅGoæfN{Åó¿7„´iñkio5ù„_wlÅSÕÿ´s@¥c¯\A|pm´QÛzÓú±' E3 ßøÆ7Â/}I¨Ù¶ðFµÓØ&Û¢c[b#.:ã¤0½'¢™c½?"!÷üóÏ'³,ì×rŽÕ2Û%Bu.ÞyçÛ7윕¥sl¡Ámޱcdžåx_ýêWÃxÒ„Ì!Cc]7Å;þâI±si[¶,å¹ýöÛ‡ë§nfÞùÎw–¼~•c«pÕ]B_}÷Žw¼#Ìäv(¸‹=j¹véå_=ÕD•ÌwÞévß}÷p£\I;Šó¥ú§Xš.ÆÑ!;éªð¸Q¶?iìH{åÝäzZ¨YluÖ¦‹“×þÏÿó&ì—èeÍTêÀÍb[ž¶¯—_Ì­øú’ƒîàu×­Y&¹5°,Ž¥ó6·ê¥ ¨f´lAXK§Ç$š…Ò¬³Dô‹/¾D¶Â5«*£“–ÅmÝáËhmµùë “~¼69D*ñOi-}‰h‚$tk6øØc ëòJÕIˆd$n“åiV_¢ØnLOíÖìI\?}5ÅÒ*®Øjÿ5?#¨ôºšQ˜…›_wÛƒú÷qû·ÖI£TB4iŠù77û1ÞÇŸÀ¬i“Òöñ~ko°iÁ`Û¬è Où+¼¹ïšrµ?bì:…øÊcî[SÜNû¨Ÿüû7÷u–öÍôS~C†¹ÿ¼1n=7zÝ ýP¬þõôWVÇJì´s@¹±§1$ô±¥_Gë$wÚø“`°x6!`û•´¡ÞqT—Zê“ÆÖò‰óL²SX’“ö5 +Ñ'cÂ/Î'æ øµœc%Ü4iŸwâú•:ŸõÔ96©ÎÃùZV¤'xffâöÈÏÒ;—Z:³•^F@¹¿–©ëW%lõ´@OzÍèümõ3¿Rv±ñP*ª½vé&N3È·ß~{К…—Wù#åÚQê˜OöÕ½T‹ÓY;ˆå¶L‚ÛwuÐS¾Ïû´MRê%í¥ >ãòjÚ_esÖJÍüJ`ꀕÑÀµ§};È“níËXÜä7í`•­°ä~kjÝqÇaFØ–Mœà—WX~ÊßÜ–Ælå©ÙwùÙ¦¤‘øÕݬÖPéæ@BÔòÒc# ^Í*k)‚Œɨ,{«Z' }ýºèZ•WKz]à´ŽKÂ]ŸœÒÍLZ´\CF3ì;ìÐþ ºaÑM„X©>2j·.RÅúEñ¬ß4“ýûßÿ¾Ct¦m¡ü7Ð ÒÁú®ÉÅtkKú7÷õcÊ·qpŸ>Šïõ°“ 5ÿ^hËoÊñù‡pïgå&ã«Ðñ·p f¾Þš‡<|z@ô“€nÍGÞVn?Ÿß€AƒÝö{¼Í¿uÇÿ¯¢]!M'ã‹k±ã­P§„Cc!m<”{q9rë¤/GØØS1ñX´b.¦qúd<íËÄq,}OÙiŒÊÕEiÒÒ‰LÌJûqÜ4Nò‹ãŸd>ÊKFþµœcu3¯'VžòÒ»z¢¨2³xŽÕRA™˜…®O<ñD¸ÆüÈ/+<ðÀ ŸÇ8®ÜÉôÉ8!BÛ?c/©IØ”º~•c«'¹ÊÛ–8ÅùVêŽÇH¥i,^5×.¥Ñµù¸ãŽ KuüK„«þåÚ‘d«}ãš WXÒ/™FqºÂÄZùißÿÉÜZJ" ¢cK,Ϻõ¨PÛsh4€ô$=ž×ÀÓI ÞlÀÉOîä&$I?ÛO†%÷O‹þuáÔ¾Ö“i`É_ƒKâVŸô±ü’¶ò“Iúk_3ëZ/©|´nWË6ôb†Â4hõ˜L{õ˜HBU³ j¿Â'MšÖëåÍ¢ÉOŸê[´hQjY OÛŠ1K‹+?Í’ëq­f”µ¯YbÕIwÌ¥ê¤0Íàk ¨>å§´Z?¦ƒVhÕnLeô¨VKf4«eõ¿¹e›‘[Ëm´¦N7#zÔ«‚ûýò™8MìVü¸ßôrªÑéSMOáša°ýjmÍêßÏ ì×/؃x·ß—_9ÿæ0ÆýKÄWIК¿f}+ ù‡p/°-ÿd|ùo¿×Áî™ïu³^Þ-_8ÇÝùÝÖu‡aZå%êÙ¬1§2þÖ®¯>ã–Ì}»Ð®%sÞv3&?Sˆß야þÌ?]_ÿrJh{‘|ŠåßÁßs­¶/Š…rcOOtÞÑ ¢n`µÌÈŽ7«ƒò–±}Ù“üx×Ò*=I2ÿÖXíã%ÓY\Ù6&e›¿Æ¤Æ®íË­¯2Ø~gíjÏ*¯T’aÉý®à*àÿ¥µ½Ô9ö]~RCçL=EÓÚu½?¡§YY>Ç&yk|é­%Ö·³õ¡¾þb,Ä79>’}PŠ_²<ËWvgØêS®Zï«zËV~šµŽó/ç®v¬ÖzíR=ôýv=Ñ{6zÿFßE–¹v¤±ùëŸ8ŽÊ‰÷»êÚ%~É­¯¿vÄ\¥M¤½¬¡"9ü—k­GxºˆÉVGÆ®“]©MqmðÅñ,…ÉmaÉ}ù뢹å–[†GXZ‹|üñLJøzä¤Jß4ÕÛâ–‡lËßÊ·0ó×¾f±uÔ ª>š®;\=&’T¸Öµé£ÖKÀŸ~úéín"~ò“Ÿ„}=ZÓ³hÓ6nOZ¹æ';Ž×-ÇâIäën|óÍ7ëÀ®¿þú°ŒDZi´¾\}×IߊV˜ê«“fHÔf|t3¢¯r(Lëò4Ë¡ ›¾;ª·Ÿ­Ü¸_ä§q Mùªl]ü´Z&5£5ÔžÖ®{î¹',űüuáÑ—Vd[|-ÕQ²‹ûÊ1Û»ö~w`¥è´zjÆ[e«ÿM—œážüË…v=ù—»Üûõèmí]:†ûÎiº¥ f¤æ_=Ÿ~U÷‰—d_é¸Ö˜MŽ=%õ¯–hj_ëõdHëòRœØmù+®Æ¹­e”OéäkO¦u—“²-LcÒÎòÓø´—­>×ò©ÖßÒ+]%i‹±U>Ö>Ë'f ?ÍlÆœ”Fqd¬iùÄaiñ®üõâ²cµŽW/né«I ­É¾õÖ[_½¦e :¯i‰‚å_ê|¦ü­]ßÊý“îxßÒÉÏüËc©l‰g}MCçL=f×$‹ÞÑ=å­kŠ—Þ‘ÑLµü,½ÕÕúÏêbþVŸd|ó/uý2¶b¯¯€$Ùjv_þú!3-¿Sýt=ˆ9«ù[=’õµð¤9®¥úZy}ôÑa¬h YåÚw¥IŽÕ´þ‰Ó¨ÉþéÊk—µÃX&Ë–€6íNNÿ5%§ããvz(­g$“ÞæÛr'7ÙµÉßܱ­£Pûfk ‰öeËÏ6óßÒ “5¿â#Tctç¨Y½m­ßx­”5Íìjò­&®Ö9ÉÄ/YzÝAk“8¬Åè)a.#§¡tÒè“8šÓÉ?6z³Z3)öÒcVέ‚‘H¯ÆHôj­µ¬bkKÕIIÕ>=*ưf|õrI¼.1ŽSÊm³÷i}T*]½Â®}l™ÛpýµÃAd«â²tpõ¤ÿœo¹a£Æ.ª=]Ÿ˜ÜÅê3åõ·Ý'véøÐÉôÕì—{[ïÕþ"—Žg 2]ˆÁÔr>èŠvÕ›S%çX=}Ò͸¾þ!a›Rç³8^𻦕œcÓÊ*æ'\§_,nµþe«™l-a´µÕ•–_/®µöu­íP{ëÙ?•ð4ýh¶&ì´©^Ò[ÒšœªÕø%3'û´ÏúMß¨Ô QZk›öÍ_¶üc[îxÓeÓöåNÛ¼wáò.³¾mÁV@ÒH¨æÞhy‚ŒîšìÎÌ]o­;êbF¿¶ZM¼¶(ÁšÖ…E_ïxÀçø·¿ým˜1Qûc#!š£qx)·Žd~¥â+Lñ7Ùd“’ÑJÕÉnÒ2°u‡iaåütã‘%3Ä ®¡kÞçi­ša)äéÿ¡Cüáô@¹¡é(W\ûú5â]mJ½ZÇV|è.¾øb'AlþãÆ n-ë8ï¼óÜßÿþ÷Rb鬳ΠîX@_qÅnÉ’%îÜsÏ aÇ{¬ÓÅb·ÝvsŸþô§ÝöÛoï~ùË_†Y—Ï}îsnÈ!¡ÌÑ£G»n¸!,ùÙÏ~—/_î~ñ‹_¸½÷Þ;\`tW×·oß0Ã)Á׳­9¹²¬¥o´œÆê}º{â‰'ÂI=ÙZÂ1pàÀ‚¸0`@xÁPé‹mqGk«Ímv2žöûõëW(+Ncq-­ì¼k[£ôDŒÄó¾ûî‹Èë Ìh»íXƉþëÚ†&$¨1€²NÝÖCš–Ù}÷݃pþÉO~⮼òJ'¬^}íBa‡vXxÜ([³ŒZ ­7Ç•^/‰\¹5“òÊ+¯·f­õ%­[NƳ}Ù2JoyÄn…Åùk_&§Õ7_ÿM£ô–m¨¯N?ýô|u­É9îfš@€:O@/bZ¿€@€ @ Bú„€ @¨ºBPDƒ @€€äZ@—øþu·öþŠ+ºµ¼z¶råJ·zµ¾Až/“‡¾Qä¥ù]ùjM^ÆX^Ú‘¯ÑEkòH +¬^lsýášR¬ßÒ¥KÃÏb§¥ÒOw—ûŬßüæ7!ÎN;íäf̘áÆçžyæ·ÕV[¥eYÖï…^p÷ß¿Ûb‹-Ü;ßùÎ’ñý/7º;ï¼Óý÷¿ÿ ??~ðÁ»I“&•LSIàèô¢åW¿úÕJ¢WG?Gþ׿þÕ½ýöÛîÔSO­(MÖú¦š6è&äü£»÷Þ{Ã/dî¶Ûnnß}÷­¨Ý¥"uÅ‹ó_¶l™{ä‘GÜßþö7·|ùrwÔQG¹­·Þ:Ž‚»p¬t줮>VæÍ›ç~þóŸ»§Ÿ~Ú9Ò½ë]ïr»ï¾{‡_®íX| µj°F!“k]k'h†âŸÿüg»äO=õ”{â‰'Üã?^V@ßxãNâHº³æè£âûµ×^s^xaI=sæL·á†:¥‘Øþå/éôËd§œrJg«Ñ.½î*uÁ˜8q¢[k­µÚ…Uºsûí·»OúÓnÈ!nÝu×­X@g©oªmÃa‡æÔG¤ÿþ÷¿~µ+t’ù‚ ÜäÉ“ÝvÛm— ªh_‚àÒK/uúЇÂSÝ8}ãßp§Ÿ~zE鉔 +åû¡³ÇÊ”)SÜï~÷;·ß~û…‰€C9Ä]qÅîØc-_81 †&€€Né>‰ÂŸþô§…9sæ¸m·ÝÖ}ô£­HßrË-…´u\wÝunРAÍ^sÍ5¡~ÿ÷ÿŠ=ï¼ó:[|jzÍPJœé&C7 µ˜C=4´¯}íkî/ùKÅYd©oªiÃK/½.´o¼ñFÙ°Ša‰xÏ=÷¸/}éKN7]µÝ€Å`À€î‡?ü!º˜=˜†c¥<üÎ+:êFÚŒ®7ÜpC»ãǰ!|Èõè®êªO}êSá‘Üå—_^ÈRKvØa7bħY=4ó±},ÛmÍÞj&yƒ 6pk¯½¶ûÊW¾wpKGž*Õ:P>¡m IDAT©Ì‹}@ ÛÐeúG³ ·Þz«Ó¬®Ä²ÌÔ©SÖk=𫯾–Iüä'?)äôúë¯ÁQðˆW_}µ»þú냀ѺæýèGîùçŸbÔî”Ûxヰ×cÄXðHäj-õ¿øE÷™Ï|&,ïÐr‚o~ó›¡@ÅÕúj­Ñý׿þÖéj-wš¹í¶Û‚÷•W^éþþ÷¿‡ö׳]iu_#õÍzë­ç>ÿùÏ»“N:É}âŸè0>4f¾óï¬>P_è†fÕªU¡ùýúõs§vZèC»/|á nÉ’%ÐèIÉ\nÎÔ7]tQˆóá8ˆg׳Î:+,Ÿé8ÅC7Qê[¥Ïûz¶”æçÆ‹c¥~ÇÊþóŸ0rÀ¸½÷ÞÛþù¹74(N]œM˜ÅÓºÏ3Î8Ãéähæg?ûY(š}ÕLß^{í„§…—²%:õ¢‰^Î’Ñ#À?üᥒT¦ÙE½ø¥ò´¾ø½ï}¯ÓK…±‘`—ø×ºVµÍfDµY³ÎšýÔŒãöÛo^$‹Óš[åÈ襙±cÇw=Û Hü÷FêU_Oî¾ûîps¢§ÿøÇ?ÚµJK„4-üío;ô^æ“ÙyçÝ»ßýn§™lŸ… †EÛeàw´æ}ذa቉úFn=‘øÓŸþž”èæO3dzÉô­·ÞJ&o·¯5´Çw\Xë®5јÆ$À±RßceÑ¢EáXÕ„„Þ•éª ‘ÆmÔ½‡@sïijõ-Õ  DÈ%—\Ò.±Ö–êíë“O>¹à¯ÂJŒ^:Ñ‹+šµ0£å]eTÍdyä‘aÓ „wÝuW!{­g5£¯‚hM®.°úRˆf6ï¸ãްF÷ÙgŸu;E-k×»]É 4bߨ øÀÂ첄©–ÂLŸ>Ý :44/îÝĨO}ôQ·Ç{„'ŸûÜç¸ÑË›2ñ†àQäŸúFF¢Ü–gèKZ—­¦4#ñ¬%ª›ž˜ôíÛ7-~ @€c¥¾ÇŠŽ%m2ùÈGÜ 'œ^8o€¡A!N@@§U=JðÁÃK|q4­_– ÐËoýû÷ƒÊºõ• }CÅëi4ËxöÙg;½¤WÌèÓzÜjßýîwÃË/úº†^>Òìu9 ¸îj—êÔè}£™{-±3-³xÏ{ÞÓµf³$®õ…ÝiZkÜ5ãe¢»CÂ6¸o4^etƒtÐAµÅ(mi9–lèi â¹4«,‡r¬ÔÿX‰û_Çé?øA§Iç@ ¿X‘ҷ/¿ü²;÷ÜsÝ™gžé6Ûl³0Û¬gmZ“ªõ zéN3Ó²e4‹[‰ÑŒ°¾Ò¡¥9úq ¥®0Z bµæY/:&¿=mëší{ÑzPIõ—ÐÒ-ÐìäܹsS«¥™Òõ×_ßé%3õl—•!»QûF3ú<ð@áOþüç?‡å_f´¤CÌ5ÆôEÍB›àÕr -ÒÒ=%)Ö?›l²‰›6mZø¬–âi]¼^½øâ‹ÍFK„ëIHšÑwĵÎ]k¶õò¡Ê.·Ü#-üz–ÇJýƒv Ð׉ôGÏ=;ö)ÝABY3ËßûÞ÷‹ƒzyÐ6Íê©o,_{íµa-´f%P*1šúJ‚Ö³*=BW9ÅŒ®NÆšyT:¹õCiF¢G‚Yøõã)Æzü 9 —»ì²ËB°^PÓšh}³ÖOëe7] nºé¦8ypkfRâJ/$Ú·†«m×Í7ßÚ"Q§Y~µKu(g²Ô7Õ´A/pjV_¢X¢Y/ŠïFmTh²nLô(Xý£~Qêi€Œ¾Ö¢§ úr‹¾E®Y.=*Öšæ¤Ñ’•%Ám/4éÛäú¢‹Ä´¶ìø(ÎCŒus·çž{†å<ú*‹¶xV;Ž;›8Vê¬èÝ»ôÄO×½tÖ.›#ƒZA]A ©ÔEÑ ¥¦¶BÒlù%7 rmò7wlk!¥öÍÖíË–Ÿmæ¿¥Ÿ)­y­Ã‹/¾~ñ­’GÐ&LðÅWo43'‘£—ðª1šeÔ,¡Ê­¤~•æ­/3höX")þ^ü \mš}´ã¼ÏüµŒ@‚ÚÖÍÆñäVYš}‘(4S¯vYþÕØYë=mМ <¸Ã· õC z±SBYO$X×~­­oñÕò ·Ö§Å˜¨ÿ7þÜž^>ÔÍ¡„8F€c¥öcEÇ”^ÔÕ¯^ÚÅ@ ï¤]ÊÓú$k­Æk‹“}Úgý¶Úo+ý¦ÏRÙ¦}ó—-ÿØ–;ÞôVÛ—;móÞÁ¿`ûkmÑï·J¨b:A ØKXå²”hÖ2ˆ®6ÍúŠC)#A‹ª8®‰gù3&êàVY±HW„zµ«Cáxd­ot#¢™ßRF¢¹ØÍ\ÌZñ´v½”Ië? êrë§KåIX> p¬t<×Uz¬(ž=‰Ëçè U€@t•úi†üË_þrav9‡Mlè&é¥=Í`a Ò8VJó!èèîáÜã¥hÙ@©/rôx{yôã*@ <Ž•òŒˆÔŸºñç=WÚ”@€˜À]g³Ö_ݧø0€ @€@…Ђ" @€D ׺Ä×Gè}@€ :È»˵€N~G·Nc¤l¶}s@Ymð_NËÉCߨSòÒŽÜ °5(/c,/íÈÑТ)9% V/¼¼D˜B¶s“{ÏNé‹äÿñìB7k¾×]Üì¹Åg¥{~ê27bH_÷»¯lꎽô÷êôåÅ¥„ôëÛä¶Ú` ÛaÒ`×ìÝù÷|7ùíÒy ÜǽkÛanÒÚýÝ”ËÝCÏ-roÎY‘’{u^?8y}÷Ä+KÜOÿ8³º„%bÔÇí°Ñ`7jh³»çáôŸ O&ÏJߨ^ŽëúfñýÝ#/,r¾´È­ÒgÚ‹]¸ß±é·ÇæCÜŒù+Ý3¯-uO¾ÒúSðE’TäÝ™1–V@-ã.-üz–ÇJGþ]}¬ ØÇí»ÍZnãñÜü%«Üã/-vO¿¶ÄÿÐQDzñòE s£]ß!«Ûl0¨Ývøî#ÝŽ\ÇVþžã=; ª³5ÛwÛ¡îì÷¯íEY‹ëãg|Ú†îðÝGÍvøà¾î_ÜÄmíE÷Œy+ÝÞ[ u»nVÝ/$Í<  ÆàµŸý·[ËÝüÙÜ™ïçÚ1ýf%QdØÍJßH ÿèÔ Ü&ë pSg-w§¾g¬ÓMF)sÉñ빓ãÞš»Òßà pGîY¼/KåS.Lý¢þ©ÕT;îj-‡tõ%À±Ržog•ñ#ú¹=ü„Éë3—û§@Mî»'¬çØ~­òhxåÕ`Ã7±ú,^¶Ú]xç[…„kù™Ò?3ÉÝûļ0«\(âøòÍåæ²HÒvÞú×÷ǧü–¯lqGí5ÒÝýÏôÙÚCwîë·Ô}ëŽÖºßøÀìBÚ®thfK{Øø ”¾{ÏÛ…Ø;Lä>óµÝ:#û¹¿ºÄ}ãö7ÝÜE­K;¾|ô:^X.qw>˜.t×è0“ÜÏ Ñ»šë®)²,"ùpþâUn¸_RÌH`kYÁ„QýÜ´Ùí—mè&àš3&º‹ïzË}|ÿÑnëõºgßXê¾éëý¶ŸЯÉëÛ³•Ÿy×c·ý’„K|\å™46Óú­®Â?üÝWÂÒ…JÛ¥üÒòM–SÉ~Oõê÷ÏüÅ«ý~‹g§Cªã2›ež£Öï±ÅP÷ëGçuhšÆŒúC}wÐÃÜ"wù¯§;ÝhÈè©ÂqûŽv[¬7ÐIýü¡9©ãk³ ܇ŒszqÛç6rza©·êÓó?8Þí´ñ`7{áJ÷»ßvO¼œ¾|$n—Ê.7î“}+íû¨+Ž•ö9ºp|>òbúq•ŒË> ÐØjßØí®¸öZjpàk¹oy¡¹pië×±~Ç÷N\?ßÃ/z9,±ˆ—V¬=¢Ù Ýô{“ì6½×ÏP|ê'¯¹OúíÈ=Gº üÚrF³¾‡î:ÂýáÉùE£þîñy~9Á wÃÙÝ÷h¿<@UÎéu·üu¶ûÜuoQõ‰ýÇ„üô~àS“»³®zÍwÙd·»Ÿ-ÝÓ‹½4sÁM­3.ا^1%ˆçZÛ•–¥~YéÕ÷Hÿd@kÍÿ3%ýâ©%57Ü7Û}ñÈñî‚7n§ÆÌG÷åofV¸³®~Ý=å×Fé¨uÂÒÅ[éïÍôäáCß~%Œ»Óçø1‘4š»öO3ƒHVß\ñ»!Ê×><ÁÍó7`¯·ÿ}Ž;çÐqɤ©û•Œ»Ô„xfŠÇJýŽ-—ÒÒ,M,ükòwã}³2Õ÷T¨t ®£×êë>çgíîxpŽAl0Ò †šÅÓKz£½˜Ö ô®þå°JÌa^@?æ_6kn?/½¹ÔíV&­ÖÛ~å˜uÜ[^ iV²˜™¿du´z!ïœC×v—¸žÓK…±¹ôî·Ü?Ÿ_ä_^[âg1ç†e _º¢Åýöñù¾]«‚ÐziÚ²ðcœÖÜš‘”ÑK36ë^K»,¿Zì¬ôêþn¿†ûÐw wg^õzºÅÚó“{g¸ó¯ŸêoN†ºΙè¶ÛpP»¨÷ú›£[ÿ6ÇIÿð·ÓÃÓ†­ü“-ÍÑSÍÜkühíæD¿Ž:i´´D³×šEVßh¶Z³ÚŸ>·ÐÞžŽh ö¨¡ÅŸf(ßJÇ]²ìg‹ÇJ}•ý›Â±ª§<›ú'@•Lˆdk„P@ éÓ¤µä”Ã4šœë…ò¿ių&Ž÷Ë6† ìë_*o^nÕªŽK ‘CK>†è%/ÿò™™µ"×üeKÄ\ô±uÝ’e-îë·Muþ}Â’Fꇾ¾ñë‹/:n]÷…#Öq_øÙÔBšxéÄä·—¹qþ%]`çxá¬Y”wùw}Adâ¸îùi•¯o®¶]… ÕèÈBߨêZwþ±ýF»ÓýÓ„ä²™´¦iIÆS“_ñ7DÜÿ;e}÷Þ¯½è–,oíÔ¸o´$D7i[®?ȿտÔiÌyÈØðr }U¥ÒÏ *­ÌGýÕmë3ô¥€õÆô÷e,I«fÕã.5<3A€c¥òOpÖr¬èk:Úd¾zì:îKZÇ}üÿ½öùä—ºHßjFUŸ;åGSœÖ¯ÆF3Á«½’=ãÊ×JÎ8ÆiÌ-ñ£ÙD­E®ÄHh9_ü×nVV<Çùéå¾[ý£z½¤WÌhr¥þÏ~ç¨ðòËGüò ÍZ^æß&/gbWm»Êå]*<+}³ß¶k¹“ƈ‰ÚRõ¶°þIÁwü“€{üS¶Ÿ8ØýÓÏ,'Ö0ëó~Zú!£›¡çüéc.ìúõê÷}kód’vûñë·ý˜“¹æ3\¥ë3kwí*ÁNàX©ÿ±wò}~âââã‡;½s¢ãä—@ûçûùmgU-[×?ò>ëýãÜÿ˜ã^óŸ'Ò·>móK‰Ýžšïöï^êÒËw2šÅ­ÄüÂ/¯ÐgÛ¶÷/!ÊH„Ž,òb š>‰tƒ_S§Çƒzä^ê±û®›.<>ÔÌõ޾Œä·§÷Ú²u]sø^´ŸmþÓ¿æa®¥(Z»lÅj§eëîïÖò³ìiF3¥Š»Ù„ÖåŠSM»Òò¬Ô/+}#~z)ï×Π̬o´f8ÍèåÎ7fv¾‹ÿòˆn^4¾Ìl7qêǚƘf¶çù%úº‡Ì(?¾¦ÌXæ¿îüS‚ÖÏþ­å㦙7|žúÜâȶ%Sý ¥z™P3åãýZk‰ðbŸ!¬vÜ¥Õ¿ž'À±RÿcEÇ«]ôýt}C,ˆçžÿÔõ&À t á7ìy|¬Ÿ•Õ›OþdJX?ü¹kßp_Ïgûfoà—K|ݿȧozÏö?Ä£õã_¿mZ»e+üÉ5glÆžÆÅ7M O”‡~Àæ,ÿÍìã?§8ßÝÿŸáQñÉ?œâV$–iÉǃþtn÷_á¸Û·+~;Ã}õ–iá¥Ä;?¿qxÙq°ß_òu}Ê¿ô”4ÕŽ»dzö³A€c¥þÇŠžR~íØ î¿ÜMËØ´ìMÇÈ?¦R¿UîÅ›M§¥ÙòKnšÓ&sǶ¦4µo¶¼öeËÏ6óßrÖ¬YW{ÿšÌ‹/¾è&L˜àúöU¶¥Íß/þu‹R)5ó¨%z ¯£YFÍÎô¿HWn]s5ùêË ZÛªYÈxé‰f°íµVW³ö`œ¿â™¿–Hè%?kfñUÖÿÖëš©W»,ÿjì¬õަ þ"»ÔÏò'ÍòG§®ù¥GɶŠw´Øši=¹˜ÓöéÄd\í«ÿ–ø»xmõ ß_zz¢e;Ž•ÚSFõ7¦º` ww]þÇÏV­Zå¦M›æ6ÝtÓšqŒ=údŸøY¿éÀÒzF]¸lÓ¾ùË–lËoi¶/wÚæ½ƒÁö¹¨¸cZ˜:aôÕŠZŒDóô¶õ­µ¤/–F¢Y_q(e$¨–ë»h)ÆÄ³‚ôÙ³RFeÅ"]qëÕ®Rõ(–µ¾Ña¨ååŒnªÒL’u)ñ¬ôiý'ñ½dyé~M+¿|àXéxLTz¬(^¹sn¾G­ƒ@ï$€€î%ý®™H-ˆr/izC4SŸ¬æEĆh•„@p¬Ô*YBU@@·!ûÍ—KÕ j²MpøſʑÑ*S-@€2B`éüöïVe¤ZÝ^ tòQCµl@€ PŒÀ´Ú^+–]Ãúë>  @€ P!\ è/OVˆ‡h€ @ÕÈ»˵€^ó¾j»ø€ @µÈ»˵€®µÓI@€ bÐÅÈà@€ è(xA€ @ t12øC€ @ …: ^€ @(F]Œ þ€ @H!€€N‚ @€Š@@#ƒ? @€R  S à@€ bÐÅÈà@€ è(xA€ @ t12øC€ @ …: ^€ @(F]Œ þ€ @H!€€N‚ @€Šh.ÐÛüg/lémM¦½€ @5Èõ tK ¢¸†1A@€ Ð)y×`¹ÐMMMê|C€ TO ï,׺úî& @€J@@—æC( @€Ú@@·ÃÁ @€J@@—æC( @€Ú@@·ÃÁ @€J@@—æC( @€Ú@@·ÃÁ @€J@@—æC( @€Ú@@·ÃÁ @€J@@—æC( @€Ú@@·ÃÁ @€J@@—æC( @€Ú@@·ÃÁ @€J@@—æC( @€Ú@@·ÃÁ @€J@@—æC( @€Úhn·—³–––Š[4jhSÅq‰@€z#ió+ku5¬²³+×3ÐMMˆâl 7j@€@o w –kÝ(m„ @è^èîåMi€ @ NÝàHõ!@€º—º{yS @€@ƒ@@7xR}@€ î%€€î^Þ”@€ ÐàÐ ÞT€ @ {  »—7¥A€ 48tƒw Õ‡ @è^èîåMi€ @ NÝàHõ!@€º—º{yS @€@ƒ@@7xR}@€ î%€€î^Þ”@€ ÐàÐ ÞT€ @ {  »—7¥A€ 48\ è–––ïª@€@Þ5XsãuIå5njjª8òì…ˆíŠa€ ” P+‘Mfƒr=YêT € @ a  ¶ë¨8 @€@O@@÷uÊ„ @hXè†í:*@€ ÐÐ=A2!@€–ºa»ŽŠC€ ôtOP§L@€ †%€€nØ®£â€ @=AÝÔ)€ @ a  ¶ë¨8 @€@O@@÷uÊ„ @hXè†í:*@€ ÐÐ=A2!@€–ºa»ŽŠC€ ôtOP§L@€ †%€€nØ®£â€ @=A ׺¥¥¥'˜R& @èÕò®Ár- ›ššzõà¥ñ€ @ 'ä]ƒ5÷Ô,–9j(b;‹ýB @Èió³S—ž¬I®g {,eC€ ä“:ŸýJ« @€êD]'°d @€ Oè|ö+­‚ @¨tÀ’- @€@>  óÙ¯´ € @ NÐuK¶€ @ù$€€Îg¿Ò*@€ :@@× ,ÙB€ ä“:ŸýJ« @€êD]'°d @€ Oè|ö+­‚ @¨tÀ’- @€@>  óÙ¯´ € @ NÐuK¶€ @ù$kÝÒÒ’Ï^£U€ @ Ãò®Ár- ›šš2<´¨ @È'¼k°\ è|IZ@€ Гš{²ð,•={!Ë=²ÔÔ€ d•3ÐYíê@€ IèLv •‚ @È*tV{†zA€ d’:“ÝB¥ @€²JÕž¡^€ @™$€€Îd·P)@€ ¬@@gµg¨ @€@&  3Ù-T € @ «ÐYíê@€ IèLv •‚ @È*tV{†zA€ d’:“ÝB¥ @€²JÕž¡^€ @™$€€Îd·P)@€ ¬ȵ€niiÉ*wê@€rK ï,׺©©)·“†A€ ¬È»˵€Îê ¢^€ @Kݸ}GÍ!@€z€@s”™É"G e¹G&;†JA€ Óæg¦*=Zf {?…C€ 4t£õõ… @èQèÅOဠ@FÝh=F}!@€z”ºGñS8 @€@£@@7ZQ_@€ %€€îQü@€ ÐhÐÖcÔ€ @ G  {?…C]ÿ˜´ IDAT€ 4t£õõ… @èQèÅOဠ@FÝh=F}!@€z”ºGñS8 @€@£ȵ€niii´þ ¾€ @ á ä]ƒåZ@7555ü¤€ @ Ñä]ƒåZ@7Ú`£¾€ @Ù'€€Î~QC@€ @@g¨3¨  @€@ö 4g¿ŠÝSÃÙ yá°{HS  @hlÌ@7vÿQ{@€ n&€€îfà@€ ÐØÐÝÔ€ @ ›  »8ÅA€ 46tc÷µ‡ @èfènNq€ @MÝØýGí!@€º™º›S @€@c@@7vÿQ{@€ n&€€îfà@€ ÐØÐÝÔ€ @ ›  »8ÅA€ 46\ è–––Æîj@€@Þ5X®tSSS9ª @€›@Þ5X®tc=j@€ Eè,ö u‚ @È,tf»†ŠA€ d‘:‹½B @€2K 9³5ëæŠÊ ‡ÝŒœâ @h0Óæ7X…ëT]f ë–l!@€òIÏ~¥U€ @u"€€®X²… @È't>û•VA€ Ô‰ºN`É€ @ ŸÐùìWZ@€ P'è:%[@€ |@@ç³_i @€@  ë–l!@€òIÏ~¥U€ @u"€€®X²… @È'\ è–––|ö­‚ @&w –kÝÔÔ”á¡EÕ @€@> ä]ƒåZ@çsHÒ*@€ ž$€€îIú” @€ ÐpÐ ×eT€ @ '  {’>eC€ 4tÃu† @èIÍ=Yx–Êž½OÞe©?¨  @È*f ³Ú3Ô € @ “Йì*@€ Uè¬ö õ‚ @È$t&»…JA€ d•:«=C½ @€2IÉn¡R€ @Y%€€ÎjÏP/@€ L@@g²[¨ @€@V  ³Ú3Ô € @ “Йì*@€ U¹Ð--üeC€ 4tÃu† @èI螤OÙ€ @ GÝp]F…!@€z’º'éS6 @€@Ã@@7\—Qa@€ ž$ÐÜ“…g©ìiÓ¦e©:Ô€ @ £˜ÎhÇP-@€ l@@g³_¨ @€@F  3Ú1T € @ ›ÐÙìj@€ QèŒv Õ‚ @È&t6û…ZA€ d”º‹:æŠ+®p/¼ðBÕ¹Õš®š‚¦OŸî.¼ðÂj’€ @ t ˜w¼ãîž{îI )îuë­·ºÉ“'P$¤X: ÞO~ò“…TÏ>û¬[wÝuÝ£>ZðûêW¿ê®¼òJ§°‰'ü“ŽY³f¹«®º*é]×ýÇ<ÔwõêÕu-‡Ì!@€@wȵ€niiénž]VÞ{ìá|ðÁB~&œ{챂ßý÷ßïöÙg·Ùf›9 V3‡~¸»ûî»m€ t+FÖ`•€Êµ€njjª„AÅq$X=öX·í¶ÛºcŽ9¦Ã’yóæ¹ãŽ;Îm¹å–î”SNq‹- y/_¾Ü}á _pÛl³ÛwßÿßÞ™ÆJZUkxw7ÝÌ4ÍDeAE(ÁQ…D¸—ÁA~0 q01Q`4QAf!&Ê à€¨(Êe”FèFp@Á0MÓÃýÞ]ýV¯³û«:UuªÎTÏN¾³öZ{íé©óãíÝ»¾s@ºÿþûGS§àÏ>ûlZ°`AΕ€>è ƒšBùŸÿügÒ|;ì°CzüñÇÓ‡?üáœwÁ¤{ï½7wÞyi¿ýöKK–,iÎõÀ¤C=4í³Ï>éÆolÆcåßÿþw:å”SÒÞ{ïÅùµ×^Ûl¾øâ‹Óù矟.¹ä’¤õ‰Áßÿþ÷f{»ŠòŽ=öØ´ÓN;¥·¼å-éÒK/Í鯽öZs÷ÝwOo}ë[ӹ瞛^}õÕܶpá¼çNÖÝnnÚ @_ýÖ`ã»úÑg›Özôíw—±æšk¦ÓO?=_£Ø`ƒ Ò•W^9b€o~ó›éè£Î×*î»ï¾æ)ðu×]—žxâ‰ô«_ý*·KäŽVÖYg,Ô} }Ï=÷¤ãŽ;®) o¿ýö,5Žúc=–‡<餓ҶÛn›N;í´týõ×§ÕVküµv éÏ}îsé3ŸùL^׿üå–K8äCÒ­·ÞšÎ8ãŒó$èøÃ&ííûßÿ~Zºtiºúê«[Žã]ã8þøãÓK/½”פµ¿ûÝïÎÍßøÆ7’þa¢ñ®¸âФö¯}ík¹MûÒ½òN×íù°€ @`Ð]Ð}ûÛßžÞö¶·¥5ÖX#Ûò$Yâú=ïyOÚÿýÓûÞ÷¾tÇwäÑo¹å–|òüüóϧ=÷Ü3ýþ÷¿Ïâs´©uãÎ;ïLÿú׿’µN…uB¬Ó\‰qÍSåI4¯·Þziã7Ñüõ¯=Ÿ>K ?úè£I§¿eQ­}Ýu×ÍýÉ'ŸLºCí²ÕV[¥ /¼0Ÿ$ï»ï¾éÁtSK«œ‡z( r˜Ï›7/m¾ùæ9_üˆ#ŽÈÿXÐÉýQG•®¹æšcu²îp @€À 4Ž'8ÁtZ§¡º¾ Q©gîܹ#¶·úê«7ýí¶Û.ÝvÛmÙÿõ¯¿`è/&ê„XW0¶Øb‹f~]EZ§ÀwÝuWÚc=ÒÚk¯Þô¦7åp hÌvZ$ª·ÜrËœ>gΜlëî'éúÄE]”tmÂ;æiŒ™3ÿîò8£­A¬ô_9ÚCYÔ¦«-.;ï¼sÒ[C¸‹ÑI… @ãKÝ‚·¾„'ÑçG¢õä“ONýèGóàô&½÷YÅEÂY¯•ÓÝ`Ýñ}×»Þ•›N=õÔ|ÇWñ<0ß-–ï¤è:¥õõ h•vZ_dÔòt»ÛrÌ1Ç$ÝÙÖ›2tÿZoòÐ[9ÆRt C_°Ôûªuª¾Ûn»åõi̳Î:+ßÙÖýn=ººqÎ9çŒe:úB€ ˜Ñî¿ú«SH¿®Î*V>äzw=ÚY+ⶺƒ­vYÅü8¾cõ¶oWñžŠ¾('!;k–†íOÑI©ÞÆ!Q¨“YÝÖó /ä;Ê:©ÖëëôE¹²èäùå—_Nn¸aÙÔw_BTkÕõ‘n‹ö uê\uí³¼ïÝí˜Î×— ë®hˆŸ~Ý4'€ ©K@ÚAßqÚ~ûí{ÞD¥•N¬:ϯýE6½“wixä;.«¶hUþ0ˆ}Õëž*œãM[idåÕ¾DX‹¥u0 <½ñÂEo½P‘Xoõå: o=ãQt‡¸ñì=xŸÚO¿Ä³Æ.ß bæg @€&+þR @€   ;E @€DÍï @€º €€î©€ @@@ó;@€ .  »€E* @€Ðü@€ @  è.`‘ @€ 4¿€ @è‚À´ÐúÓÐmþ c˜H… @è„€´—4Øt.ÓZ@¯½öÚéµ×^›ÎŸ{ƒ @“Š€´—4Øt.«MçÍÍ›7/½øâ‹iñâÅiöìÙœFO盽A€ 0¡tê,ñ¼dÉ’$ 6Ë´Ðk­µVš9sfZ´hQ~¸Î1•Ù @I@zÖ¬Yiîܹi5ÖHË–-›Èå tîi- õÁÍ™3'?¥Èà€ @MÓY@@÷ $Ã@€  ôp|Îì€ @ OÐ}É0€ @ÃA=Ÿ3»„ @ètŸ@2  @€Àp@@ÇçÌ.!@€úDÝ' @€ 0ÐÃñ9³K@€ >@@÷ $Ã@€  ôp|Îì€ @ OÐ}É0€ @ÃA=Ÿ3»„ @ètŸ@2  @€ÀpXmªoóòË/Ÿê[`ý€ @`¨}ôÑSz¿S^@Oõ`Jÿö°x@€ 0„¸Â1„:[† @èºwvô„ @Bè!üÐÙ2 @€@ïн³£' @€À@@á‡Î–!@€z'€€î=!@€†z?t¶ @€ Ð;tïìè @€ 0„ÐCø¡³e@€ Þ  {gGO@€ !$€€Â-C€ ôNÝ;;zB€  !ô~èl€ @ wèÞÙÑ€ @`  ‡ðCgË€ @½@@÷ÎŽž€ @CH`µ!Ü3[† @`‚,Y²$ýéOJ÷ßZ¸pazñÅÓ²eËòã%-_¾ø`úÑ~”Ö^{ítÀ¤ÝvÛ-×çÌ™3нöÚk饗^Êóÿò—¿LÏ?ÿ|:üðó˜^)uú»„‰Üo?v2Ìâº7ÜpÃ+~õ,«ž%Õ³4<ò—U[´ªÇGÿ"³¯zÝS…s¼i«Ï°ñ/9EŠ‚€.€àB€ Ð_K—.M7Þxcºûî»Ói§–¶Ùf›æ‰ggj=šµN»ÿú׿¦ .¸ íµ×^éÐCM³féü®e2ì·»Ofåz'»€Ÿÿ¿(©àC€ 0$Xoºé¦ôÐC¥O~ò“i£6J˜ú?îÖç{}FS#._q¸(Q¸Ùf›¥³Î:+]tÑEiæÌ™é½ï}o¶ý˜uRì·GfýXîx¡ë@€ Ðw«ºë¬çø@Zguò]g è%K–f!­z»çÙgŸMóçÏO‹-Z%ï+_ùJ¾–Q×_B¶_¶´9¯bZ׺뮗Ž:ê¨,ìµ>Ÿ¶ŽB?öÛ\sÁEÿ¹âŠ+Vî©hoÕ¯›øD0 ï‰ì‹€žHúÌ @˜Æ^~ùåtÛm·¥}÷Ý7Ÿm>ûì³³ö‰±lùhlã9Ü.éŠÓh}IN_ Üb‹-Ruß6Ÿr«½×¢¾½î×ëÓiû-·Ü’éθã¶Z›ëcµ|pºêª«šãiýãͬWÖ“¡z2| ¬€ 0ͼúê«éÏþsÏk¬±FÞbÿýïSÒÕëìV=E]R/I—\rI~ÍÜÉ'Ÿœ$t—TÆ8÷Üs“NŸx≗ˆT¾Ú%8õ…À^x¡«iZüêâüê<­E_\}õÕÓë_ÿú|’­X¯e,ûÕõHÐtÐAéˆ#ŽH—]vY޹MWÏù矟¿„©/@þáhæèí&{ì±G>½>´úLJػïûßÿþtÍ5×ä»ÞÇ{l:ï¼óÒÿøÇôéO:íºë®ù´;sgf½²ž ýøádøX @`šÐ½ãYMï\–X•”¨“XÓé3ÒÌümB½ýÖ_ô«îM?p~Wó¢W)Øx9ne¶ãöJËíëÏ[?ŸžJ¸>ð§Ó)§œ’.½ìÒüeA‰tuÊsÌÐ uõ³êDZcå“ÛjjÓš´¶7Þ8 h­yÍ5×Ìstûc,ûÕU´þ³Ï:;io‡¿ÿðôÄ_ŸÈkS›¸ýüç?Ïbÿ²\–.¼ðÂôÙÏ~6]uõUé‘GI'œpBúêW¿š¯½|õk_MGudúÅ/~‘÷øøã§ÏþóéÜÏž›öÚs¯´æZk&êÿÏÿþOÕ‹_[œÿQ3ÞÌ´¯©Z8žªŸë† Lb¶úÒàܹs³ˆÓÛ.$Xe›Ï ÉJûÚ¾Äò ÇŸÎ9眴ۮ»å¸æ™5kf5–2BZýãW¢=·7Ö"­»Ðz7õXO {ݯÖöðü‡ÓÓO=<ðÀ´ç{¦m¶Ù&]Ýõy?^û;ÞñŽüö]ß²k:ý´ÓÓ]wÝ•OÔ¯ûáuiÇwLúЇò]ó3Ï83-\°0ýßÝÿ×ä¤`vèaiÓM7MëU_ œ={vš»ÞÜ´é&›N3}:Sµp=U?9Ö @˜¤|µBýOBÍ'Ðβ­–¯+7ß|ó*¯–“XÖõÔ®±T.¾øâü†½åÃ1«yF–Æi´Ö§Óp·k¿:W›ã#û¶öƺ_¬ëâõÅ/~1O¤++ºv!á«¢5麉÷øÆ7¾1 þ¿ýíoéÉ'ŸLo~ó››m›l²IÊŠ;_¯îs=¸b̺˜Ûv0ÌFÎ1õÖ@˜f$Äô…>‰9 5‰2 3YJÛ·h³ÿÁ~0 Cýµ@µë4U§³Ì믿~î«6ëôö·¿ýmÒ{¡=†úèñÖ@˜F$âæÌ™“¯Ô@«]O«"Q'xâ‰'æÓf‰½ ¤}ìcù¯Jè¹(WïM¾öÚkÓ!‡’¶Ûn»tä‘Gº9[ÍåÓeŸ{ :ýÕ ´D´ÖÜn]# ŽúŒe¿—_~y:úè£WðùÈGÒ§>õ©ô¥/}) ]‰bLÿç?ÿÉo0¹úê«s½+ûŸøDÒ!Ö• ‰?Ý5–ø•¼X)1ÚoJ'®O=õTÚvÛmóikûìÑ[- uZBó¹çžË'»z³N|u¹—Ò¯ý¶š[_Eo }°,úÇJ¥›òŸ*/Ûê|åkÝúlø„uû·IDATÚ•A1k7gµ¦«öùÕ£—s/©ž¥á‘︬ڢU=>º›c_õº§ çxÓVûny§‡ha¢@€ ÐWk­µV½7ÜpC¶¬>'ÈÒ­´ÊFm”ß,ѯÅi­ÅE菉óÎ;óëÜ´æ^K¿öÛj~½)Äåu¯{«#¬®^è*H§Eù¼¶oPÌ:]çdÌC@OÆO…5A€¦8‰d½ùá oxCºé¦›òµ ½YBqß±ˆ-J<ûÑ©îO~ò“üÊ8­5 ûn×6Y÷Ûí>êòÍK¶ŸÌêæš*1]Ÿ @€ ¾ÐɲNMõ×ñtÏX_l[´hQ¾º¡“è‰*š[Þù|å•Wæ·„hZ«OÃ{YÛdÝo/{)û ŠY9ÏTò'î7x*Qb­€ tM@§²º«{Àd¡ª?C}ï½÷æºN3[]Ûèz¢:ø‚Äü}÷Ý—¾ð…/dA¯µõôÙÓO¦ýzMc±ãÁl,ë›È¾|‰p"é37 @`šÓ=c½†îw¿û]zàòÙ}÷Ý“þ²ÞV[m•ýAbÐi³Þ+­WÝÝ}÷Ýùôy—]vI{ï½w~ƒ‡þ@I¿ÊdØo?ö2žÌêÖ;Ù¿Dˆ€®ûÔˆA€ ÐWzã…Þ¨!!;þüü‡?ô ½ B¢sE×+ôýá‘­·Þ:ÿÙk½Oï“Ö}ìA”‰Üo?ö3Ìâº'»€ÌoM$@€ ¡' ¡ª×¥é®±D¬þÀŠ^¡¦?Ï­kƒÑ‚ºZ¡¿`¨WÔémzz}çs§äDí·ÓõµË›(fíÖ4ÙÚГía=€ iJ@ÂL×%ôèôW÷£)žÑ‚PBZõñ*µß~ìo¢˜õcíã1z<(3 @#H é”vPW(FL6 œaÛï$@>Ð%ðŽâep@€ éF=Ý>Qö@€ 0Pèâep@€ éF=Ý>Qö@€ 0Pèâep@€ éF=Ý>Qö@€ 0Pèâep@€ éF=Ý>Qö@€ 0Pèâep@€ N üå/é4uBó&£€^^ÑC @Ï7ÝtS¹ÛI© ûý§¼ë„o+}ƒªÔ*×}°€ @SœÀc=–n¾ùætÜqÇy'¥¬Ó‰írÝf[ŽçxOv¼O ãâ ¶§ Ð € @`êˆây­µÖm#ֶΗ?neÐÚ›±õÆJßq, @€ÀX°`AóäY⹇;Ð¥¦´o;’ƒÐ^°m§ W~ìSúŽC @€À$'ðÈ#¤Ÿþô§ùÚ†Ås¸]êÀÒïdwÖ•¶ôé(§ßw ;š4$yC¶jR=ú!* @€ÀT' ñ|ë­·¦ã?>IŽÕYAÔ8jS‰9jS‘@v\1ùî§¾±.ßOUmŠlÕ)€ @£ˆºLÙÖaí¬ôXl—_ÆâXe[ì«z,±-ÆUw[“ßV@WW?–÷ =™ca+[W¼`·Ëwq›­â®×Yµ ¤Å²êž_ùòUÜî1”£X«¢<¯±áñ€ @ ë'·[wEk¬Çs<Æb=æ;m]»b*Êsqû¥u®íˆviàÂi+ ‹Ü^]o ^å…•ín`÷QÝâØuYµE_q‹bÅU÷Ûœc«6  @€@kQÃ)+úÖuÑJ‹ùQÜuYûÎw,Æ«´UæhSß–~ h/TBTu ÒXqŠ»(ODz/ë¢þ*1Öˆð€ @ Ž€õ“Û¬Çl—&³¯º}ÛØ¦ºâ*®»]±²ó¢U=õwq=Žé¶žl¿´'×Â,FËz\´ê*Ž•V |ª¬ñÔcn«Â¹xÎWÌ}]vE×ýcŒ: @€Àª¬ãÜRê¸Ò·–mU×Xn³î‹¶S¾J´Îi´¬l‹yn“íE@kq¢íJÌ)ëòUd˺ce\@5§lÉ•›K\ë²z”¯ñìÛV¡fQŒ@€ 0:ë4gFýæ¶VbØqY?êãOã»m»¸ÛdUÔo´ÒIΈ1ºÐ< MOc¼UžãѪ.`Cõø(n±¬vûÊQq_Õ§º×#ëq]me®|  @€@{Q‹)3úª—O)Žå;s+mÌQÝíª«´²Ö•íöÝÇý/}ÇW±ÝèU:· hQ¼ÚWÕý”¾ããþŠÉłقX9Š©8æºâŽÉúq»,€ @ ;Ò_*ÖoÑ·ÈU»ë²±î~ŽÛ:.ëüS]%Æ‘FÌmѺ½/¶Z‹—(õf,V÷B½Iù®»}AòXeÝãØZ0+Ï‚Zmî/[ÖSžŠ|Û†ÇO@€ V¢~s޵\;k1l«\ÕËÇc”yŽ·³^¬ò\ÜG~Œ»½+Û]7¡fñªöèG±ãªë,÷U]% äF¤ñSyjÓ_±‘UYÅ=OéÇ6çTé@€ .Hw©XÃź5œÛ,†¾ê~”ëö=ެŠmÃ[é–çü1Ù~ h-ÖbÔu[-Л‰uÇZYÁ‹EB¸ŒiNõw[ôÕ×kr]~S€ @ ;Ò`.QÏ)&Íæv×}Õý¨Ýu[÷éÆVÃä¢>*¶e=7öò£Z‹Š¢´\‡ÛmÕ®ºRÿÒZWMÍâ˜úªDA캬çŠõ2ß~´ªS @€Z°³U¦êö]oe¥ùܦ[®[4Û*^ÖsY×m/íhíeþ*~·ZJ”ºÔùn“u»*+Â+¶«ŸrTœ×ð?s¾úÛ—•c•ÛŒy.[·E«:€ @ 5ë0[eº.ëÇ#H×9æz´Ê“åÛwßÒÆ1b›Æ‹¾ëŠ»(KéǶUê£ hý-ðU)zj’+}§{11Wmη‹e bÅTW=ާv«˜ûÈw½ª®"žcLu—r}Žc!@€F°sT~ŒÙwLÖb·¬;×'ÑΓu=öQLE1Û†×øé1cÌõ2¿ô“´¯“[ÙQt«Ž5qMÖJˆz!Ú´®Šbz‹¾Ç1$‹hÇe“Õ£¾e½ å˜ç³ï<ù@€ ±°†“u‘†³/k?æÆxlW½ôc¿ØæxŒy ¥Un_J/Z“GÑZ·rÊw‰ý'««X,[øÆ¸Úå{þ(¢-Œ=¾çt¾ú:ÇmŠQ @€z' íåG£ÔÕ‹V-úª+ã®—q÷«Ò›B]u·Ù6¢«þT»ŠmÃëàg/ºV“JÆÉíÛÆ6õ·_gHEmÈÔò5^ÍŽ9^5çvYÅTdëê¹qÅ·Çu@€ U X¿ÅÅ/ëʳ¾³ vŽm—s;±šSy*1ß~nèõG?´E¨*?Ú¸F°0ŽÖíê§±üxL iµ{Œ8§âŠüXìÛÆ6ê€ @«°^³uFôU·/k¬\ÕUbÜù¶Î·m/Û•§RÚFteÜ~O¶#Ýâ‹„uj±QŒzñέkÓÆ-€•§û²þ#)ŠÇÇs)æzUmS\Ec¨ØõËIü€ @舀už­:¹.}§Rç+Öîq_‹ãVÖcç‰jÆt\¶ÌmÍz'_ TrGº9êÊŠQ'\cÌ9î%_,h—u\Ö¢ÖcYL+O1ù²1Ͼl9o³jnö+ëò)€ @ær)ëu¾bñQ_ûÒkî#k¿]Ý}cŽÆtQ\¥´­b9¹“½ èvc{‘³Îµàu»ã¶eqmÑ+_'Ðêë¶è{-ë§ªŽ¨Û—-‹û—q|@€ ‘Zi¹WݾëÑ׈ò-”ë|·¹é;îq=†ãÑW½o¥c]sC‹“ð´Õ¢b]¾‹â”(œÝÇâVm*Òj‹íͶÊSqßV¶‘µ2Ï>€ @ ž€5˜[í·²ÊS[ù8.ks“ñÑê¯,êãâºmŽwz}CÉ hÏØÂj©Jñ‚s›cj­”úÚªîÇ'Ðö5–ÇvLV¥´èÊŸn_¡@€ Ð ë¯2×ñhU·¯|û¶u1·uc=Ž­úÆRú±­ãzWºæºn"-LÂÔ tݶ®cêã«Gýâ£\ûíêjS‰¹ösÊ6×±€ @°ÖS²}·;&Û®îö˜ãÓèØVÖ=mì¯XËÒÍé³éJ@×̪…I ªÔÕ½på¸Ý±Ü)üp{> @V­´œy¨=æ¸m»zÙ&ßæp=ZÇmÕæúŠjíšÜÖ•Q)î®:(yFUB§XÏÍ5mÊq^´ŽÛº]N][»˜ÚTšm5—û©]¥ôÑ‘?;ÉÙ€  '‹ßv»/sìÛªo]ݱ:[Æ<†ãöeUZŽ|0÷ìÏèCÕ-Üâ´¬«CÙ7êݯ´jw,ÖË1<‡Ç+}÷u;€ @ ;¥þ*}cuuÇlcÇlÝVúŠ«Äx#ÒÇŸc:Ö::¸Ê‘ÓŠ5[Ä–6æº-Æb½U{ÌQÝ%æ;†… @è:áZƢﺭVRWo‹meÿ:¿ç«Le_"Ô¸ÚH¬­ü¸açǘÆjUœ§~±®|ùO¾ŠsÞÈŸeîÈV<@€ h§©œcs[Õ•Ûª-Æc±îvY—²Ýñ1Ù1Ÿ@{ö1žD7‡©*¥˜íÖ×Xe?Z[Ì£@€ ÐvBµ®­Œuâw’W[æùäÙƒêÚã{á´øÊQ~ÙÇc–Öùe¼•ï5´j'@€ Ð?¥ö*}ÍTs¼lëÖïßNVŒÔ·h¯¬ÅI´š-ˆZ+s¢ëíÆˆmus”íø€ @ý%PŠÜrôVí1ëê?š_—“çíõuu¹sÍAŸ@Ç)½é(„+}÷QÜ}+sÝ/æ¸/€ @`âtªÏb^¬{åu1µ•ñÒwÿؾŸ@{•mN¢•bñëôV1·×å·jk—ë>X@€ ñ#P ÜÒ+é¶­e~¿Ož½È hM0ŠˆÎ)^Ha;Áä´›£˜€ @ OZŠÚbüNòZå´Šç)%ž5ø@´u ¤óZœ_c;ËîÚm¾ûa!@€úK ­Ð­™ª]~»¶<Ô …³×:.º9Y¥¤]Åv’×IÎ(ÓÐ @€ 0FÄÕÚ:ÉéÛ+ê:a1®Ú êðDÚé²cËcé×@€ @ 3‰ÞCuÕwêrH|@€ )L`¢s‰nÒ èròÕuTˆA€ éG`²‰å:ÂSB@×-¼.†Ð®£B € L<© Œ;¥4­t§›&€ @½˜ÙkGúA€ @`  ‡ñSgÏ€ @=@@÷ŒŽŽ€ @ÃH=ŒŸ:{† @虺gtt„ @FèaüÔÙ3 @€@Ïþ`yë&›ÂIEND®B`‚gwenhywfar-5.12.0/doc/dialog/images/gtk2-2.jpg0000644000175000017500000003625113142134462015671 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀë?"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷_x/LÓ4xžH –éãýä¡ó¼œnù°ÜŽ|’ž3Õ<;á…¶Š}4^êŒRÒÆÕ·K1O$Q݉WC¡ÈÜìî{ë_7üfÖõ]?ã.«4.#0ÚÁ»c;c(íú¹jú¼«<Çèó[w÷Up´# q²HõüE6ŸÛ5Ÿ‡ë ˆ’K;õ¹–!êÑár}¥±®ÏH¶ðö¯¦[êZlvV—)RS†ÐûE|°¶Ñ¿ÔÒ„’=£ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¸OÚWÔôO†w†“rÖWKcšÃ{¨•‡Ð© ýkøcãÿ=Ÿ‹¯|Uiµ™â½>}šê=’#U]Ñ(èçæ=ëäÝY§k¿¼ÙB6½]þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯Ô˜þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯¸ø¹ã 3Bð•‡ö™­kºÆ’ÚƒKlf’9]±¦D¬[æÀ žâµõ‹:害 5׆ Ò4MJÞÉæ»¼Ê#–vÃBZ%"6^.bGAÍ?m/æbök±ë?غgüùZßÊ?±tÏùò´ÿ¿•æ¿|KãÜø²?Ï£\G§k×–Pˆ‰bòä&€cî³|ǽz†éœ_÷ѪU&ÕîÄãЇûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}|óîþñZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿•qŸöæ°ÓôHïîP ð‘ç¦æ=°É­|ÿÓ8¿ï£YÞ•—CYAi¤g˜÷.IÎkåx§ˆêdÔ©´ß¼Þ½­ë§S¯ †fî¶*N¶V¢kZv !Ú³ù»âјcoÔŒ{֕Ι£[[Isqmc1©wv—@êjo²Ühwq]ÑŽwjóÔno¾i&` m©i’KÅ’*gþøJóò.0©¡^nïÙ«ëùi¡–gJ8:.ªW²gUo1¿í:WƒÖkCÊKqs䙪® ǦqVô)t-Râk6Ó#³¿€f[[†Úàx`á—Ü®+ukð ,ûTQŠæ¼K«\Ûø¯Ã—èC]è­ÏmñÈáXu$ÔeÜ_W‰…&Ûævûû[õ¹ò<úëÆŸ.îÛ#½ñ=Π­¼Ri‰w{tÅm­-Žé%#©êQ݉VUƧ%„?jÕ| ±Ù™ÖðO$cÔ¦@ï´“õ®/Ç:•õ¯Å RT`¼0Àq±” qÿ-Tÿá%ÖyÝxX ¨¯œU§UÁ7¡ûVYÁÐÅa!YÙó+õëÚß­ÏeÒìü=©éðêX\Z룑 éôê+Ë>-øNŠå5+6ò6>ÖÄŸ)$†äp1Ücƒ‚ÀÍðPžK¯i…TÚÁqñ‚p¤ß¸o”T߯t)>Hù¸^‡ë_M•Õ–"*roT~}åtcR¦¢M&Õÿ®§§è_ò€ìîŸâ÷5ÅüOð;xŽhµ]3ìQêG幡¹9ØøäI!‡Lž¹ãª¶¸û7†m®BC3í`@î=ˆ9ùGëUÿ¶ßþ|m?ò'ÿ\¯<.!Êž3HRç„]ú'ük,ÆÖÃÀšF);Mì·ë,iþÒ®Iý+Ö~x2øx؉îöâC5åÉãÍúÀt¯ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿU‹Îñ»{W{y•õ{lËzž§ê–†ÏSÓlom‹+˜n#!e!”ílŒ‚„ ‚ÇCÑl5;½NÇDÒíoï9º¹†Igÿ}ÀË~$ÔÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñUÇõ¿î‡°ó ¼9áù¯Zú_hò]<ërÓµ² ª»BØÎनn tªúWƒ¼%¤Ë4º_„ô ž³ÊÖÖQÆd‹û‡h_n•¡âmsV²×SIÒcŠ{‰£º™}Cìè©Ð3œ¼‘)*…UKs±$Š}SÆÍòm,_ü½ú´«»nÌâŒí·Ï\y’cw–¾iõµü¡ìs>ãÀ¾ ¸Ò¡Ògðg‡$Óà‘¤†ÔØEåFí÷™Wn=ÈëRKàÏK¨Yê2øK@{ËHí'6Q—Sî*eBö§j¹>©ãæù6–/þ^ýZUÝ7fq ÆvÛç®<É1»Ë_4ŸTñ€ó|›KÆÿ/~­*îÇ›³8„ã;mó×d˜Ý寚}i({Ü[E°Ôîõ;Kµ¿¼æêæ%Ÿý÷-ø“ZöÎ?ûê³§Õ<`<ß&ÒÅñ¿Ëß«J»±æìÎ!8ÎÛ|õÇ™&7ykæò~/ñ>µÿ /Õ¦ž(g×oážÙ¤˜$é­Ú¡`ÊŒAÚ¯ŒÎ —\Ÿ[ò«ùïý³þú£þÙÇÿ}V_öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüU\ò«ùšŸöÎ?ûêûgýõYÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñT}sÈ>¯æjÛ8ÿïª?íœ÷Õeÿm¿üøÚäOþ*°<ã[ÏxsûNëM°ŽC}{Tó0+©bOãäíEÉîsÓ¥\ò«ùŸý³þú£þÙÇÿ}V_öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüU\ò«ùšŸöÎ?ûêûgýõYÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñT}sÈ>¯æjÛ8ÿïª?íœ÷Õqž$ñ­æâ? ii¶=Vúh'fó2¨–³J6üýw"óéŸ\ÿí·ÿŸOü‰ÿÅQõÏ ú¿™©ÿlãÿ¾¨ÿ¶qÿßU—ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú£þÙÇÿ}V_öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüU\ò«ùšŸöÎ?ûêûgýõ\g€|kyâiÝi¶Èo¯` žfEu,Iü|¨¹=Îzt­ÿí·ÿŸOü‰ÿÅQõÏ ú¿™©ÿlãÿ¾«æ=cIºšïF·‚ò ‰ylÚ@¤9êPž9êA57öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüUqcéañô½•x]S„©»ÅœÞ½/޼UÒâÒâðõ”œOs,Èï·¾ÅRr~¸^•ÑGáÝ6/ ÇáØ­Õ,â…bó.ÞŸïdg>´ïí·ÿŸOü‰ÿÅV&µâë»ox[F†ÂÉcÕ廬y>rÊ‘ÚÍ(Û–ÆKF¼œñŸ\Œ°L.›§Fž?À+BU¾6gÞAâ½,yÖºà^â…ˆ‘Ûr³~œT~ð–·}âhcú÷$o“¥i/þ^ýJEÝ7fqÆvÛç®<É1»Ë_7ñ.ƒªÂEà”µÓ%˜C¯êwSHƒ¬i,l®å#@¹2.IÜØ-#eØ#Æ—š¶•®>¯y6¥ÿôÖӦˆwÞÞcÊŽ2êAOºI.y9—ž9Ö.´=jþ=dÓâ´¿1Í’7… Þ´„m%Š»Êœ›’=ûÁV×ú„zï…#¹¼nÉåÓ÷H»NWæ+ž#Ðô¤oÙµÕÍÓxFžéY.$:p-*°Ã;~`G={Ð{âwK—ÄRÌ-ïb‡ZƒN±‰bmÑù±[‘»o,˜ÇÉcŒ€F:_^j:Æ…?ö•´ÚeÉy!ŠP‘ÑeEpJäpÀàƒÔruî¼ Ô·S\øZ9¤»AËɧ†ic ä¯ÌÐS ð’Á¥¾•†¼» ¶[Dá¾öW9ïž´äþ]êou®iú¤·^eÒ¡º‘%–(Ú%a™À¶â$w=1•ðù59>ÞǢϓ^j«k$˜Ú²ë¤ä×Ô¡é^‡¤xTéÍm¥xu¬af.ÑÛÙ˜Ô±êH“À湯†>Õ‡€[MÖ<9z[ýGͶ»²lxþ—_úAqPøÒóVÒµÇÕï&Ô¿á‚rÚtÑnûÛÌyQÆ]H)÷I …Ï'gÆ>×§ñ§‚. Ñ5)a¶Ôn^yÕÙbSe:‚Ä (,Àd÷ w­›ï[_êê7¾Žæò=»'—OÝ"í9_˜®x+Kóщ#xZ áKHFÒX¡û¼©Àù¹"åïŠuÝ._K0·½Šj :Æ%‰·GæÅnFí¼°cc%Ž2îÀömustÞ…§ºVK‰œ J¬0ÁŽß˜ÁÏ^õ%׃¡º–êkŸ G4—h#¹y4ðÍ2 a\•ù€Ààú ç »ñ³àPEoý—­® ´‘Õ‘L›HŠP£%N8 õêWÀ——.5=/P7&þÂáVc-ÒÜ.5eØáŒ…A=ˆ5ÒCá‡K}* l°0’Ùlq†ûÙ\`ç¾zÓ´Ÿ 6‘jmt¯µŒ‹˜íìÌjXõbäñÖyðù59>ÞǢϓ^j«k$˜Ú²ë¤ä×Ô¡éU¢ñuî•:h)g«¶³-ʤ‘ê%n„*by¡ƒ— å¶FœƒÓü1ð¶¬<Ún±áËвßê>mµÝ“aã{ÙØeXr¬¬Ï{ÖÊxNM=ôôðuºÚ<‚W„iÃc8Fß¼~´ àµøŠ@M¼J¿ÿ‰8–ŒÈ‰çÞK ¨R2sÁÁ©eâÍfçÅéÑiu¥­êØÜÈ‘IÞZ³K»î…‡Êy+ógµvÁ°7³>ŒÛIBðºFÔ^ ]Féî%[W)›…Ž0 ³(÷ w úŠŸìWŸóé?ýû4}Šóþ}'ÿ¿fÈ(©þÅyÿ>“ÿß³Gد?çÒûöh ó¿‡þ%1Ê>eàŽzšô¿±^Ϥÿ÷ìט|iž°’Ù'…¦µ™"¸ˆ^'*+ªvº6f¡ée_ï&aˆøIÒN|/Ì­ó¯Aþý%.’sáx¾eoz÷é+›üyzއðÐQEÌlQEQEQEQEQEQE‘ã]aü=àÝo_ޏ}7OžñbfÚ$1ÆÏ´žÙÆ3ZõŸâ]"Û_ðæ§¡^<±Ûj6’ÚLÑRD(ÅI‚q~”—'Œôˆõét†Šø<7‚ÊK³Ÿ!gh–UMþ¥Xtã$‚Fjé_´ B9•5 t¾KylÍűO´G<‹:ûnu8#p8ÁÞºð¥„Ò]Ëç\‡¹ÔãÕæ\ ’$‰T|¿s®G\“ÏjçÒÚÞhÚ",ÚŽOÝ~ìnH“™¨ï–ÊxÒÞoÛøvÓM¼¸—>mÊ€'†H‘¨ýè%‡N89âÞ·­j:w‹4-5l­dÓõId§3°™$Xe—„Û¸ˆ îÏÍÓŽji> ¶Óu;}NkV{È¥¹’Yd0Ÿ´ Ú7‘yx º$#`R9â®x‹ÃGXÖ´­OûwT±m2S40Û,6rŽ„·™1ÊHËÁ¸ÁæÔQE!…Q@Q@Q@Q@Q@Q@Q@x&»#¼þ;/ 'þ>nN•¨€ïuàZÑýïåñUt#Ÿøòµ¯K*ÿxù3 GÀ}àÕIt»DG"—xû²u®›ìVóéýûÍø$çN³ù•¾qг%uuŽ+øÒõᢱYÿϤ÷ìQö+?ùôƒþýŠžŠÀЃìVóéýû}ŠÏþ} ÿ¿b§¢€ ûŸüúAÿ~Åb³ÿŸH?ïØ©è >Ågÿ>ß±GجÿçÒûö*z(±YÿϤ÷ìQö+?ùôƒþýŠžŠƒìVóéýû}ŠÏþ} ÿ¿b§¢€ ûŸüúAÿ~Åb³ÿŸH?ïØ©è >Ågÿ>ß±GجÿçÒûö*z(±YÿϤ÷ìQö+?ùôƒþýŠžŠƒìVóéýû}ŠÏþ} ÿ¿b§¢€ ûŸüúAÿ~Åb³ÿŸH?ïØ©è >Ågÿ>ß±GجÿçÒûö*z(±YÿϤ÷ìQö+?ùôƒþýŠžŠƒìVóéýû}ŠÏþ} ÿ¿b§¢€ ûŸüúAÿ~Åb³ÿŸH?ïØ©è >Ågÿ>ß±GجÿçÒûö*z(±YÿϤ÷ìQö+?ùôƒþýŠžŠƒìVóéýû}ŠÏþ} ÿ¿b§¢€ ûŸüúAÿ~Å|«â©ª|CE(ª<^À.:±Ú×Ö5òŠÏüM¾" Ê?â°nçþ=-«¿,ÿx^ŒÇðBø$çN³ù•¾qг%uuÊx$çN³ù•¾qг%uuÏŠþ4½GGøh(¢ŠÀÔ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+äÿŸø›|D”Å`ÜÏüz[WÖòŠÏüM¾" Ê?â°nçþ=-«ÐË?Þ£1Ä|о 9Ó¬þeoœtìÉ]]pú,Žž…ã— pS‚8z“í·Ÿó÷?ýü5Ë‹v­/R¨ÿ ¥Åý¶óþ~çÿ¿†¶ÞÏÜÿ÷ð×?1­ŽÒŠâþÛyÿ?sÿßÃGÛo?çîûøhæ ¥Åý¶óþ~çÿ¿†¶ÞÏÜÿ÷ðÑÌ;J+‹ûmçüýÏÿ m¼ÿŸ¹ÿïᣘ,v”WöÛÏùûŸþþ>Ûyÿ?sÿßÃG0Xí(®/í·Ÿó÷?ýü4}¶óþ~çÿ¿†Ž`±ÚQ\_Ûo?çîûøhûmçüýÏÿ Ác´¢¸¿¶ÞÏÜÿ÷ðÑöÛÏùûŸþþ9‚ÇiEqm¼ÿŸ¹ÿïá£í·Ÿó÷?ýü4sŽÒŠâþÛyÿ?sÿßÃGÛo?çîûøhæ ¥Åý¶óþ~çÿ¿†¶ÞÏÜÿ÷ðÑÌ;J+‹ûmçüýÏÿ m¼ÿŸ¹ÿïᣘ,v”WöÛÏùûŸþþ>Ûyÿ?sÿßÃG0Xí(®/í·Ÿó÷?ýü4}¶óþ~çÿ¿†Ž`±ÚQ\_Ûo?çîûøhûmçüýÏÿ Ác´¢¸¿¶ÞÏÜÿ÷ðÑöÛÏùûŸþþ9‚ÇiEqm¼ÿŸ¹ÿïá£í·Ÿó÷?ýü4sŽÒŠâþÛyÿ?sÿßÃGÛo?çîûøhæ ¥|Ÿâ³ÿoˆƒrø¬‚9ÿKj÷϶ÞÏÜÿ÷ð×Ïšã3OãÖgŠòwrIû¯5èenø“0Ä/p÷Ý$çÂñ|Êß:ôï×5ðcá—ÃkÿƒÞ ¾¾ø{á+«»ŸØM<óhÖï$®ÖèYÙŠe˜’I'’MtºIÏ…âù•¾uè?ß®_Àš§Ä øAðÏü"~»þÈÓmì~Ñÿ -Ây¾TJ›öý„íÎÜã'êkŸÿ/R¨ÿ!­xO¾ø¿á¿øF|5¢èŸiÐ5o´gXÅoæí¸Ó¶îØ£v763Ó'ÖjZ¼Þ-²ðÖ‘u–Ê[ë‹©`ó[j:"¢.@É.Icœ>l‰Xø·\ñÞ™¯kÚ>‰¥[iÚeí¢­–­-ãÊ÷Ú¸$=¼A@ç¹ÎáÅ]×|?¦kR[Íz— qm»È¸¶¹’ÞXÃcr‡•¶œ.W88 æ{𣖽ñf·¡øŽþËRµMNÊÆÂÂk››uXfi§œ#3áíÏ[œ Kñ_Ißy!°¸{HVàÅ$.¯$ m*ÉÆÍ䄜âÚN+¨ÿ„WB6÷0=¤²­Õ¼6Ó´·2»ÉL쀳1bCHçvrsÉ5ðn€ö#orÖ·«(žÑ¯f6ÇÍ$ɈwlRI'€0I#šC1üWã ï&u¬Ù.Ÿæ¨Ö“A‚á¥ÚVTàašUEì=ñÍC¨øÓVÒ¼Cª íÛM°Ò¬¯®ÂL›­’\,‡?òМ0­‚IôGÂz$–pZ^Aq¨E¯* û¹nyxš&ÈÇ*QØm9“ŒóUn< á©îy­nÝÖÞgݨ\4P³4i(/‰gcóç9 äq@­|r÷S(·Ðn^µº:kùè Û[’H?p¶ BN6ÓÅkø'Ķ~-Ñÿ¶´Èfl’µšQ´Î«Ã0^ªn^y;IèA5ϼ4e¹se9)24l›ËfmÒˆ×~#Þzì<úšÖÒt;I7?Ù¶«j·2ù²G!7í •\í\…ÚO'’MdxQÕïd×­5››[™ôÝPÚ¤¶öæd6ðÊ>RÌF ¤u=tµáï é: ÝíÖš/Ä·Òy·&ãQ¸¸ø »»pª21À ­š@QEQEQEQEQEQEQEQEQEQEQEQEQEàZÑýïåñUt#Ÿøòµ¯}¯Öï|x7(ÿŠ«¡ÿÇ•­zYWûÇɘb>ß´“Ÿ Åó+|ëпIK¤œø^/™[ç^ƒýúæ¾ |2ømð{Áw×ß|%uwsáû §žmÝä•ÚÝ ;1L³I$òI®|Z½yzŽðÑÒQ\Ƶá? ø_âÿ†ÿáðÖ‹¢}§@Õ¾Ñýc¿›¶ãNÛ»bØÜØÏLŸZ;ÍQ­&‚)ÃJ ´­©ÀÃ4ª‹Ø{㚇Qñ¦­¥x‡TÚ3¶›a¥Y_]„™7Z $¸Yå¡58a[’,}Eq–¾9{©”[è7/ ÚÝ5üôí­É ¤¸[¡'›iâµ|â[_è¬é1Hš|®Éi<Ë‹7‡"F”1*¹ ôü)vYÿÏyÿïÈÿ⫟í^^£¡ü4rÌ|[®xïL×µíDÒ­´í2öÑVËV–ñå{‰m\Þ   sÜçpâ®ë¾Ó5©-æ½K„¸¶Ýä\[\Éo,a±¹CÆÊÛN+œ Žnl³ÿžóÿß‘ÿÅQ²Ïþ{Ïÿ~Gÿ\Ƨ;ÿ®„mî`{Ie[«xm§inew’8™ÙfbĆ‘Îìäç’j!àÝ-ìFÞå­oVQ=£^ÌmšI“îØ¤’O`’F 5Óì³ÿžóÿß‘ÿÅQ²Ïþ{Ïÿ~Gÿ@ÎpøOD’Î KÈ.5 •åAw-Ï/DÀ™åJ; §#’qžj­Ç|5=ÂO5­ÛºÛÃlûµ ‚&Šf%ñ ì~|ç$Ž+­Ùgÿ=çÿ¿#ÿŠ£eŸü÷Ÿþüþ*€9Cào n\ÙNEÊLÛ&òãY›t¢5߈÷ž»Ï>¦µtÍMÓé4ûQj—Ry’¤LÊ›¶…ʨ8N}ÜdóÔ“ZÛ,ÿç¼ÿ÷äñTl³ÿžóÿß‘ÿÅP#ð§…t Û}›F[è Ûµb›Q¸¸E'åY]‚’I$ŒÞ¶ê}–óÞûò?øª6YÿÏyÿïÈÿ⨠*}–óÞûò?øª6YÿÏyÿïÈÿâ© ‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚ŠŸeŸü÷Ÿþüþ*–óÞûò?øª‚¼ Z?½ñàÜ£þ*®„sÿVµôÜ–Ö³\É5ÉH‘‚À¹ ñó×Í:6µÿ …|Eâ!mµ5¸/|‚ÛÌ~nfûw`g±œ ã ¯K*ÿxù3 GÀ}9ᣟ'Ì­ò·AÿLåªÕgÃG>O™[ånƒþ™ËU«ŸüizއðÐQEÊlQEQEQEQEäš÷Æì½rÿLÿ„oÎûÌyŸnÛ¿cÎ<³Œã¦kÖëäŸÈó¯ÿØNçÿFµTUÄÏNÿ…íÿR·þT?û]ð½¿êVÿʇÿk®Âÿð€ ¯ÿoÿhÂGÇög•>\cåûÙß¿øq³æÍqô¢Ô›VØ­¼®ÿÂMá{=oì¿dûNÿÝy›öívO½Ÿ»žëj¸¿‚òK´ûoÿ£ä¨¼'ñ'LÖícºº²›L‚])ue–Y¢‘¹Û÷ö1(Ãpá€Ï8ÎsEsúçŒ4MW²Ò®¦•înî~϶ŒžSyO(/Ž@*‡ÏQÛ$A§xóך[êækx–ò[ “@áä–7‘E—Ï–íòä… `€†tôVž3ð´wÐrнÔPÍÖÜ­¬V'Ü8 Ì ã½'‰$Ó­t =nûm•åÍ¥¼2@A ö™ã…è €Ÿ`{ÒÇâ}ä¾UÔáÛ`²=Ô§"(„gfB6|§†àõÅ 6(®|øÓÃÍn›V‰Q®>̪QĆm†O/ËÆíÅà1’0GQ[uí¦£aý…Äw·‰"–3•u# бEPEPEPEPEP-{þ@wÿõí'þ‚kæO†‡þ-5ÀÜ£ý.Ç‚9ÿU•}7¯Èÿþ½¤ÿÐM|ÉðÐÿŦ¸”¥ØðG?ò ²¯K*ÿxù3 GÀ}cᣟ'Ì­ò·AÿLåªÕgÃG>O™[ånƒþ™ËU«ŸüizއðÐQEÊlQEQEQEQEã:ÂOøOuokðgy:õÝ·•ö?78`Û³½¿Œcµ{5s.õO ÛÝøgT»ÚåÍôÚËlTÄûBç|ÊAùIÆ;ŠÃ*ªén ×Ôäÿ᛿êsÿÊgÿm£þ»þ§?ü¦öÚõOøLî?èNñýü³ÿäŠ?á3¸ÿ¡;Ä÷òÏÿ’+Îö¸ÿé"í‡ø#ÿ$»Hÿ¶ÿú>JÃÑ>Ke dÜkV!SÃ–WÙš@ËO™_ÍuòÁt ïýî:Ÿ…šUþ‰à=7LÔàû=Ü>o™õlfWaÊ’:ÞºzöY™Ã/ƒ5·Ö—^¸ñƒjk}ÚìÓX@ÛKnSg¸åe-ÜÐŽ)ñø3Uµ{y¬uË5–ÇR»½²ó´öuU¹iZHäQ¿_•—f6Œƒ“]µÁÙ|:K]ÿO]X±¼ÓímCn8hfšV|nèÍ1Âÿ:šÖñ·„ÓÄ·º×ۚѴËÕž@"ßöˆA ОF2FIçîãñÓQ@ÎMøz–VúœÚÍ!½×mõHØÛãȆ„™-€ÝÈ\ãúqÍÍ3Á÷6—¶&« ¶Ú~±w©Ûƶ…_ý!nwFϼƒƒrH`£…Æ9È먠[þø£ì|=ý¡ÿš…µïäýï&ñ.vmÝÆvmÎxÎpzUDðe÷ü#:Ÿ…åÖ-Γp³ý”­™´’³—*áI#Fጞ¹í(¤càÛÃâ;jšµ¼÷ñß‹©½™Š&Uµ–ÝQAv þõ˜±'=05»á]'ûB·ÒþÑö$¹ó6mÎçfé“Óv:ö­J(¢Š(¢Š(¢Š(¢Š(¢Š(–½ÿ ;ÿúö“ÿA5ó'ÃCÿšànQþ—cÁÿÈ*ʾ›×¿äÿ^Òè&¾døhâÓ\ Ê?Òìx#ŸùYW¥•¼|™†#à>†ñ7ü?à/Ã}¬ÞÚ›‰ƒ-¥—Úà‚[“†VÙç:.z–9àä€|Ãþ;Bÿ þWôÏþH¯e±[™4ÛÔF#}ì`26r0ܼ}ìœúqSù?ô‹ÿÇÿW63øòõ*‡ðâxŸü4v…ÿ@/ü¯éŸü‘Gü4v…ÿ@/ü¯éŸü‘^Ùä\ÿÐR/üþ=G‘sÿAH¿ð\øõsž'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@'ÿ ¡Ð ÿ+úgÿ$Qÿ ¡Ð ÿ+úgÿ$W¶y?ô‹ÿÇÿQä\ÿÐR/üþ=@ûChWV7ߨ»<èš=ßÛÚaÆF3´WðÕ£ÿ…U}w6³y:¤.Ðʲ¦ôÓlÑÀu%NHàžE}Gä\ÿÐR/üþ=\ÆÀE|õ‘ò»ØÅ³'stl c¹ç5ée_ï&aˆøûMÏö=¦YOÊz w©ª5·höŸ2Ÿ”ôõ5sbÿ/R¨ÿ Q\Æ¡EPEPEPEPEPEPEPEPEPEPEPEPÛ»«˜äDŽâdQx äò ¢ºØh&upbƒ>k‹Ÿ–c‹‡³’à¤YÞ Ê_!†áoã<î©kâ/øD¼A¥i¶Þ$–êãûívrÙIäyO%Ã[˜r¡YÙš=»I,óÐ`è¶ÞÏÜÿ÷ðÑöÛÏùûŸþþò[aâGÄ6¶7þ(_I¨ –ââ!Ÿd¸iT³ eÌÿ6 ̪GgEyñ þ'Gq¨&©w ÛY>I„´BÁ@+‡;ó†çÑ&¥³.Çk©üNÑntë›hô–E-á›ÜAþî¥ðw‰¬üðsÁö:¾Ÿ­Ézt›(ÞÚËI¸¹’&ŽÝC‰h|²  ‚Np8_í­Wþçÿ¾¨þÚÕçþûêìh3¬Ë±ÞÿÂÕÐÿèãOü&oøÝðµt?úøÓÿ ›ßþ7\öÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?™‡Ö¥Øïájèôñ§þ7¿ünøZºý|iÿ„Íïÿ® ûkUÿŸùÿïª?¶µ_ùÿŸþú£ûÌÃëRìw¿ðµt?úøÓÿ ›ßþ7H~+hC®ƒã1ÿrÍçÿ®ûkUÿŸùÿïªC¬ê‡­üÿ÷ÕØÐþfY—c½ÿ…­ ÿÐ ÆøLÞñºóý/í&¾ñ=¾Ÿeyê¾ k»T½´’ÚFlíÁb²*2Œ3Е8§ÿljŸóý?ýõ^«ðîÊÕ45!ûeÊ·›1$³aôEJË×µ‹»z"£7[ÝgÿÙgwenhywfar-5.12.0/doc/dialog/images/gtk2-5.jpg0000644000175000017500000003122413142134462015667 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀë?"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷_x/LÓ4xžH –éãýä¡ó¼œnù°ÜŽ|’ž3Õ<;á…¶Š}4^êŒRÒÆÕ·K1O$Q݉WC¡ÈÜìî{ë_7üfÖõ]?ã.«4.#0ÚÁ»c;c(íú¹jú¼«<Çèó[w÷Up´# q²HõüE6ŸÛ5Ÿ‡ë ˆ’K;õ¹–!êÑár}¥±®ÏH¶ðö¯¦[êZlvV—)RS†ÐûE|°¶Ñ¿ÔÒ„’=£ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¸OÚWÔôO†w†“rÖWKcšÃ{¨•‡Ð© ýkøcãÿ=Ÿ‹¯|Uiµ™â½>}šê=’#U]Ñ(èçæ=ëäÝY§k¿¼ÙB6½]þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯Ô˜þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯¸ø¹ã 3Bð•‡ö™­kºÆ’ÚƒKlf’9]±¦D¬[æÀ žâµõ‹:害 5׆ Ò4MJÞÉæ»¼Ê#–vÃBZ%"6^.bGAÍ?m/æbök±ë?غgüùZßÊ?±tÏùò´ÿ¿•æ¿|KãÜø²?Ï£\G§k×–Pˆ‰bòä&€cî³|ǽz†éœ_÷ѪU&ÕîÄãЇûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}|óîþñZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿•qŸöæ°ÓôHïîP ð‘ç¦æ=°É­|ÿÓ8¿ï£YÞ•—CYAi¤g˜÷.IÎkåx§ˆêdÔ©´ß¼Þ½­ë§S¯ †fî¶*N¶V¢kZv !Ú³ù»âјcoÔŒ{֕Ι£[[Isqmc1©wv—@êjo²Ühwq]ÑŽwjóÔno¾i&` m©i’KÅ’*gþøJóò.0©¡^nïÙ«ëùi¡–gJ8:.ªW²gUo1¿í:WƒÖkCÊKqs䙪® ǦqVô)t-Râk6Ó#³¿€f[[†Úàx`á—Ü®+ukð ,ûTQŠæ¼K«\Ûø¯Ã—èC]è­ÏmñÈáXu$ÔeÜ_W‰…&Ûævûû[õ¹ò<úëÆŸ.îÛ#½ñ=Π­¼Ri‰w{tÅm­-Žé%#©êQ݉VUƧ%„?jÕ| ±Ù™ÖðO$cÔ¦@ï´“õ®/Ç:•õ¯Å RT`¼0Àq±” qÿ-Tÿá%ÖyÝxX ¨¯œU§UÁ7¡ûVYÁÐÅa!YÙó+õëÚß­ÏeÒìü=©éðêX\Z룑 éôê+Ë>-øNŠå5+6ò6>ÖÄŸ)$†äp1Ücƒ‚ÀÍðPžK¯i…TÚÁqñ‚p¤ß¸o”T߯t)>Hù¸^‡ë_M•Õ–"*roT~}åtcR¦¢M&Õÿ®§§è_ò€ìîŸâ÷5ÅüOð;xŽhµ]3ìQêG幡¹9ØøäI!‡Lž¹ãª¶¸û7†m®BC3í`@î=ˆ9ùGëUÿ¶ßþ|m?ò'ÿ\¯<.!Êž3HRç„]ú'ük,ÆÖÃÀšF);Mì·ë,iþÒ®Iý+Ö~x2øx؉îöâC5åÉãÍúÀt¯ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿU‹Îñ»{W{y•õ{lËzž§ê–†ÏSÓlom‹+˜n#!e!”ílŒ‚„ ‚ÇCÑl5;½NÇDÒíoï9º¹†Igÿ}ÀË~$ÔÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñUÇõ¿î‡°ó ¼9áù¯Zú_hò]<ërÓµ² ª»BØÎनn tªúWƒ¼%¤Ë4º_„ô ž³ÊÖÖQÆd‹û‡h_n•‘àÞxƒÃŸÚwZm„rëØ§™€‘]K'j.Osž+ûmÿçÆÓÿ"ñT}oû¡ìr•Ç|q¥C¤ÏàÏI§Á#I ©°‹ÊÛï2®Ü{‘Ö¤—Áž—P³Ôeð–€÷–(‘ÚNl£/§ÜT8Ê…ìNÕgûmÿçÆÓÿ"ñTm¿üøÚäOþ*—Ö×ò‡°}É,t=ÃS»ÔìtM.Öþ󛫘`D–÷Ü ·âMhÛ8ÿïªËþÛùñ´ÿÈŸüU`x“Æ·šwˆü1¦A¦Øõ[é ›ÌÊ¢ZÍ(Ûóõ܋Ϧ}rÖüƒêþggÿlãÿ¾¨ÿ¶qÿßU—ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú£þÙÇÿ}V_öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüU\ò«ùšŸöÎ?ûêûgýõYÛoÿ>6ŸùÿЬøÖóÄþÓºÓl#ß^À<ÌŠêX“øù;Qr{œôéG×<ƒêþggÿlãÿ¾¨ÿ¶qÿßU—ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú£þÙÇÿ}V_öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüU\ò«ùšŸöÎ?ûêûgýõMÒµg³¸‘#ŽÙÒHÔ4% ‡ÈÉ'ÐV.™â?jz=¾§cgbÑ]Û‰íÃëlÙVYZ<´q:r¾J3¨ó$Ú\F¦WõÏ ú¿™¹ÿlãÿ¾¨ÿ¶qÿßU>©ãæù6–/þ^ýZUÝ7fq ÆvÛç®<É1»Ë_4ŸTñ€ó|›KÆÿ/~­*îÇ›³8„ã;mó×d˜Ý寚}sÈ>¯æhÿÛ8ÿïª?íœ÷ÕgOªxÀy¾M¥‹ã—¿V•wcÍÙœBq¶ùë2Lnò×͵â8µh.`mî.!,7“ÊÊ NÁ˜v¯Ë?y‚î‘×q*žiõÏ ú¿™£ÿlãÿ¾¨ÿ¶qÿßUÀ|)ñ&£yá¸Ôvßܶ«©†žáäg _Ngw@ (€¥uÛoÿ>6ŸùÿŠ¥õÏ ú¿™©ÿlãÿ¾«æ=cIºšïF·‚ò ‰ylÚ@¤9êPž9êA57öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüUqcéañô½•x]S„©»ÅœÞ½/޼UÒâÒâðõ”œOs,Èï·¾ÅRr~¸^•ÑGáÝ6/ ÇáØ­Õ,â…bó.ÞŸïdg>´ïí·ÿŸOü‰ÿÅV&µâë»ox[F†ÂÉcÕ廬y>rÊ‘ÚÍ(Û–ÆKF¼œñŸ\Œ°L.›§Fž?À+BU¾6gÞAâ½,yÖºà^â…ˆ‘Ûr³~œT~ð–·}âhMNO„w±è³Å¤×šªÚÉ&6¬†úãi9uõèzUh¼]{¥Nš Yêí¬Ër©$z‰[¡ ˜ž@è`åÃym…$†'`ôÿ |-«¶›¬xrô,·ú›mwdØxÞövV«+3Áõ²žÓ“O}=<n¶ •ápØÎ‘·ïß­8-GÄþ"oÒ¯ÿâN%†ã2"y÷’ÂꌅðpGBjYx³Y¹ñDºtZGikz¶72$Rd7–¬Òîû¡AaòžJüÙí]ðlÍìÏ…c6ÒD¼'O4%‘ íÁU,Ä€“Ž´ƒÁVÃP‹PŒ^Bª±Î4ñ½Œ( ·#è(ËøÁï·´û}W¾¤²ÄâÍ t·Y$ ®v•Ü£œ–Ú‘Ž?ä|ðý….¿ô‚⺻ÿYßê)©_xB «ä æm4<ªåpÅr0I#Ó5ãëÓøÓÁhš”°Ûj7/<‰jì±)²Ab`2{;Ð7/5m+\}^òmKþè!‡-§M6シǕeÔ‚Ÿt’8\òs/ÞǢϓ^j«k$˜Ú²ë¤ä×Ô¡é^‡¤xTéÍm¥xu¬af.ÑÛÙ˜Ô±êH“À湯†>Õ‡€[MÖ<9z[ýGͶ»²lóþºÅü¤¯"Õõ;m8èÚåέ§ë é:~Í-õ©"¼Rå­¸Ie´›‡WrÛ1æ¸9¯bÒ-®-lnVæÞX匨‘ –>qž¸ÈüÅbi±øžÇI¶´m?H¼žÖßÊYŸRœy¬«( KÇ#Û`'s»2L³˜Á”Íõø†óIñ1¸—M PK§K,B[$8¯æœ€7nÁ—hÀ::ωµ} óÆ&-pOSµá?#)ùä]ÅSy¯“S“áV£‹òX]B1£žè@­K/k7>(—N‹Hó­-oVÆæDŠL†òÕš]ßt(,>SÉ_›=«°> €Ù½™ð¬fÚH’„éãcF„²!]¸*¥˜ÐqÖx*Øjj‘‹ÈUV9Æž7 Q…¶ä`p=8øƒU´ñêÿ¥&£ÙZ]N-î&6Y¶ 1“Åyÿ>“ÿß³@Wül?ñ)ŒnQó/sÔ×¥ýŠóþ}'ÿ¿f¼ÃãL𽄖É<-5¬ÉÄ@‚ñ9PáXuSµÑ°{0=¯K*ÿxù3 GÀzN’sáx¾eoz÷é)t“Ÿ Åó+|ëпI\ØÏãËÔt?†‚Š(®c`¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯×dwŸÇeäÿÂRÍÉÀ²µðb½î¼ Z?½ñàÜ£þ*®„sÿVµée_ï&aˆø~ÒN|/Ì­ó¯Aþý%.’sáx¾eoz÷é+›üyzއðÐQEÌlQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEàZÑýïåñUt#Ÿøòµ¯}¯Öï|x7(ÿŠ«¡ÿÇ•­zYWûÇɘb>ß´“Ÿ Åó+|ëпIK¤œø^/™[ç^ƒýúJæÆ^£¡ü4QEsQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@x´{ãÁ¹GüU]çþ<­kßkÀµ£ûß Ê?âªèG?ñåk^–Uþñòf€÷í$çÂñ|Êß:ôïÒRé'>‹æVù× ÿ~’¹±ŸÇ—¨è Q\ÆÁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP^­ÞøðnQÿWB9ÿ+Z÷Úð-hþ÷ǃrøªºÏüyZ×¥•¼|™†#à=îÂx¡ð”rÏ ™Žƒ]Ë©ÚÉ[³!2"–U‚åGð÷§Awâáß˺ùñREuˆÚO³Æ¢R#0e|¦"=¥0IoâÉΞ—Eyuñ£«ÚØÙ_x™<=&¬íÅ$W°ÊÎ¥¤@ëœ#Ãâ@=1¤ÿoé÷z¶¯¨Yø’ïS“ÃÐÇn©Ê'’).Ôî*…V@¦7Œ’ùPIÅ×ä–(Þ4’DF•¶Æ€.pN©À'è >¼§Â·>)›Q³Šá5;‹(5çògžÎe?g:l‡9™wì¡›¹Æp@­Ÿ†±x’ÞM/ûbëW¹ž·¸½7ÊqçÔ|£caŽSýqœ’XöŠñGUñ¼—ž m2ß^€Ë¥ê…!6ÓÉä\#¨¶(î 0ÜUcÈ ó»Ÿ@ðÄ–­¯X\\ê7vq˜d´šïæ$´¼ ؆qر£†Xç…&†D’)2:6UäGQO¯ ·ƒÆ²øzÚdº×¬nm4 à 0m_´³¸¹ …0Ì(e# ÁÀàÖ†³/ˆ,-ï´’uém\ò­¯±q$‰nlã—$¦IÎy xÚKéôW‰ßk~0‹Ã¶·úÜþ"±ÔN¦‹a £,M3ɶãÏÂìW9k‘€FÁ’k¡ð%Ç‹&ñ„ŸÛ7W‘0šín­¤·œÂÉæ$ÆÆ1€¡pUÉ`Nì·BÀzΡam’Ü_[CN#‘¤•T#RIàGãÖ¦2Ä&XLˆ%e.¨Xn*è2?1^o«húŽ«ã;Su¢--ü\eFÈþÇ80WÎù7ä®{UŸ‹ö¶§o¨XØ[]Í ÞÕ÷œ´û­¼¤ÜÞa¿ Ÿ˜ÁÇB¢¹Þ_Yx =WÃñk²YKÇÙÞ~Õs Ê<ØÊ:‡,c߀Fs¶¸q?ÄÛ}&úÒñõ)eÓ~É ×I féf˜Ë<‘lR[ËŒ¤y@X|ø€ g³Q^a¡EâËËý9SÕ%´ŠÒþxóЫʲÛýž)žTW`—Æå%°IµðŽO3¾·y~Ìl£7V÷vÓ©Kœü̬ñ¢à¤d¯ GBžX …æžDŠ$RÎîÀ*Ô’z $–(Þ4’DF•¶Æ€.pN©À'è xŸ‰®¼]©Áâ›H4ýq­ï4mZ6³kiä 2¶áÔ!fRûV<‚%° lB5ë¯éòi±ëWÚm¦¥æÛKª[HŽ“:ñdݽU„[Ú’1¹ÙAè`=^Šó¯„sø’yõ»Ëöceº·»¶J\çæegw#%xR8äãép_é:tV2?Š-솽¨Q¡·¸ym-ËÀc! 1¶Q™¢Ï%w“@»EpÆûİ|4Ñõ Ä¿:ŒwozܵÃ[ý¡<ÂÑ Îï+%•FGÍÚ¹ËÍ_IJ^®¢©â íÿ´n¾›öK«g–#"Ü:ÄGv]ªAÉ#‚Àzå0ËL¨9,>S€p}:μßÀ—,›ÆlÝ^DÂkµº¶’Þs '˜|“ÄJ…ÁW%;²Ý3üU¡øšâ/ˆYI2ZÜêöòGh4òït¢ÒÉYã|䌣/à£zÔ´tÿ?Èû}¯›»fÏ9wnÎ1ŒõÍJ.-Ú8äÄRRlaÉìzã¤ðÞž~+®¥ýjbþÊg7?c]¿hóÃgv>ÿSë^wá/ø’ÏÃ>‚îÂeÓ´©tÛ«k}ŒfŠi¼“pdLe<¦òz Èãm{Â:8ÜŒ¬2FAÏ àμZ?½ñàÜ£þ*®„sÿVµè>ÕâÒôSN½ÓµÈîmõM^é—ûè«Æ×שü½’FR¡I-Myö°Ù“ÇgrŒø«8#Ÿøòµ¯G*ÿxù3 GÀ{ö’sáx¾eoz÷é)t“Ÿ Åó+|ëпI\ØÏãËÔt?†‚Š(®c`¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(…^ê6ú•æ“cs{m"â[uy"Á$mb20I#µ~Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯Öï|x7(ÿŠ«¡ÿÇ•­{íx´{ãÁ¹GüU]çþ<­kÒÊ¿Þ>LÃðý¤œø^/™[ç^ƒýúJ]$çÂñ|Êß:ôïÒW63øòõá ¢Š+˜Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Àµ£ûß Ê?âªèG?ñåk^û^­ÞøðnQÿWB9ÿ+Zô²¯÷“0Ä|¿i'>‹æVù× ÿ~’—I9ð¼_2·Î½ûô•ÍŒþ<½GCøh(¢Šæ6 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ð-hþ÷ǃrøªºÏüyZ×¾×kG÷¾<”ÅUÐŽãÊÖ½,«ýãäÌ1ïÚIÏ…âù•¾uè?ߤ¥ÒN|/Ì­ó¯Aþý%sc?/QÐþ (¢¹‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼ Z?½ñàÜ£þ*®„sÿVµïµàZÑýïåñUt#Ÿøòµ¯K*ÿxù3 GÀ{©ã øW¶'Äž"Òô¯´ÉˆÌëI·ví œ7.Hé¸g¨¬ø[ß ÿè|Ð?ð1k¬±[™4ÛÔF#}ì`26r0ܼ}ìœúqSù?ô‹ÿÇÿW63øòõ*‡ðâqŸð·¾ÿÐù àbÑÿ {áýšþ-v~EÏý"ÿÁqÿãÔy?ô‹ÿÇÿW1©ÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>hø´ÂÞø_ÿCæÿ‹]Ÿ‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>hø´ÂÞø_ÿCæÿ‹]Ÿ‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>hø´ÂÞø_ÿCæÿ‹]Ÿ‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>hø´ÂÞø_ÿCæÿ‹]Ÿ‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>hø´ÂÞø_ÿCæÿ‹]Ÿ‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>hø´ÂÞø_ÿCæÿ‹]Ÿ‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>hø´ÂÞø_ÿCæÿ‹]Ÿ‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>hø´ÂÞø_ÿCæÿ‹]Ÿ‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>høµåí©éúÅ—5-*þÖöÊãÅណ>Çj2÷ÈúŠúȹÿ ¤_ø.?üz¸€&‹ùë#åw±‹fNæè2ØÇsÎkÒÊ¿Þ>LÃðö›Ÿì{L²Ÿ”ôïST:knÑí>e?)è=êjæÅÿ^¥Qþ (¢¹BŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ·wW1ȉÄÈ¢(ðÈäEu°ÐM:êàÅ|×?,xë¸çŒ{ÖOÅKMJÿÁzÍžæé´Ý¬o±Ü˜‡Ê­ÆÖ# ŒEy‹4èu+-Qüá»Ûtðµý¥ÔcJ–ÓÏ‘„g„FȦG]²ýÐvî#?>)ˆökP¿G½’;Û”u·«,¬!O#šÂø%,±|ð“E#ÆÇDÓFUˆ8û0ªZº¬¾Ö?·…Òêª&Jñ•NιèÑc–äîÃd _ÿäˆxKþÀºoþ“PRu ‘ ŒßJ‚Á|Ó’SŒûΘuwÏru6G»|¾Ê»I “œ AôÁ¯&ÖíüO'Ä7ñœ’Zi—°ØÄ|Çf%ÁH<³¼”¾C ÂÞ23ÆyÝR×Ä_ð‰xƒJÓm¼I-ÕÇöÿÚì岓ÈòžK†·0åB³³4{v’X;ç ÀÐm¼ÿŸ¹ÿïá£í·Ÿó÷?ýü5ä¶ÃÄ:ˆml,oüP¾“QA-ÅÄ2C>>ÉpÒ©g@˘-þl™TŽÎŠóâüN$ŽãPMR8ïA¶6³:0|“ h„!‚€Wwç Î=¢MJxÞ4’þDiljÓ\àœy8ý§ý¶óþ~çÿ¿†¼ÊûNMaü*še߉ZÖ-fW¸¹¸Žx§‰~Ã:ýéP2©fUÏ,@ ð9øo<~÷ÖPß]ê–†;xÒf´ÖWYd3,Q0,Ê©åFÓ¹qÉÛöÛÏùûŸþþùÿÄ3Í=Ï%žs#ÿÂRi fÀ±µ“Øá]Ï…£ñ4ZîŸy{u¬L—wº¤WPÜ!òb…'“ìÄ.ѳåUÚßÄ¿àõ£‰Û´ÛÈÔYK4K=«´r) sV~Ñoÿ=âÿ¾Åqž8Qmáý>òÜ®K³"Dà’Þh9õáTsé\kz°ñÿ7ç]ÁCz©µsk*^áî_h·ÿžñßb´[ÿÏx¿ï±^u½XÿËüÿ÷Õ'öÖ«ÿ?óÿßU§ö4?˜>³.Ǻý¢ßþ{Åÿ}Š>Ñoÿ=âÿ¾ÅxWöÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?›ð¬Ë±î¿h·ÿžñßb´[ÿÏx¿ï±^ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæüë2ì{¯Ú-ÿç¼_÷Ø£íÿóÞ/ûìW…mj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù¿úÌ»ëö‹ùïýö(ûE¿ü÷‹þûá_ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþoÀ>³.Ǻý¢ßþ{Åÿ}Š>Ñoÿ=âÿ¾ÅxWöÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?›ð¬Ë±î¿h·ÿžñßb´[ÿÏx¿ï±^ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæüë2ì{¯Ú-ÿç¼_÷Ø£íÿóÞ/ûìW…mj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù¿úÌ»ëö‹ùïýö(ûE¿ü÷‹þûá_ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþoÀ>³.Ǻý¢ßþ{Åÿ}Š>Ñoÿ=âÿ¾ÅxWöÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?›ð¬Ë±î¿h·ÿžñßb´[ÿÏx¿ï±^ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæüë2ì{¯Ú-ÿç¼_÷Ø£íÿóÞ/ûìW…mj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù¿úÌ»ëö‹ùïýö(ûE¿ü÷‹þûá_ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþoÀ>³.Ç¥ëß4+=Zk?ìŸÜ›}±4¶þ¼’&eP­µÄxapà õŒ£ÿ WCÿ ?ð™½ÿãuÁmj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù˜}f]Ž×Sø¢Üé×6Ñè>2,.Š[Ã7¸‚9ýÝKàïYø?àçƒìu}?[’ôé6Q½µ–“qs$Mº‡Ðùdœàp¿ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþfY—c½ÿ…«¡ÿÐÆŸøLÞÿñº?ájèôñ§þ7¿ün¸/í­Wþçÿ¾¨þÚÕçþûêìh3­K±ÞÿÂÕÐÿèãOü&oøÝðµt?úøÓÿ ›ßþ7\öÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?™‡Ö¥Øïájèôñ§þ7¿ünüVЇ]Æcþå›Ïþ7\öÖ«ÿ?óÿßT‡YÕ[ùÿïª?±¡üÌ>³.Ç{ÿ [Aÿ Œÿð™¼ÿãuçú_ÚÊòÕ|@×v©{i%´ÙÛ‚ÅdU eg¡*qOþØÕ?çúûê½WáÝ•ªh0jBöË•o6bIfÃ9è8 Š”#—¯kvôEFn·ºÏÿÙgwenhywfar-5.12.0/doc/dialog/images/qt4-3.jpg0000644000175000017500000011343313142134462015531 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀ£†"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ú/GÑíæµÎMÃåg =MdxÏTðï†Ú)ôÑ{¨^1KKVÝ,Äu<Gv$]…ÿ {s²?¹ýï­|ßñ›[ÕtÿŒº¬Ð¸ŒÃkíŒíŒ s·êå«êrŒñøÇAJÉ_Ëc‚N1‚m£?ˆ¦Óáûf³ðýa±2Ig~·2Ä=Z<.@ï´±ö5ÙéÞÕôË}KMŽÂêÒáÅ*JpÃúcȯ–|IüZ‹0ô(¸þUé?²®§w=¿‰4ÙZÚÞé&ˆ@F6åƒåõêçy \º‚ªçÖÚ7ú“ BNÉÑý‹¦Ï•§ýü£ûLÿŸ+Oûù\'í«êz'Ã;CI¹k+¥¿±ŒM ႽÔJÃèT~µÎü1ñÿ‹žÏÅ×¾*´‹Z‹Lñ ÞŸ ¾MuÉ„ª®è”tsóõòn¬ÓµßÞl¡^Ç®ÿbéŸóåiÿ(þÅÓ?çÊÓþþW€j:×âf¡ho5$´“Å:u­½±ŸÊò#“OiYH9†JñÏ~+Ã?|s‹8dþ˻ԯ¼/¨j6Z—Úškˆ¤µÉw mÉ\ìÊqœO·—v?f»LbéŸóåiÿ(þÅÓ?çÊÓþþW‡Ü|\ñ†™¡xJÃû LÖµÝcImA¥¶3Iˆˆ„.ØÓ"V-ó`OqZúÅr×YÐëÃi&¥odó]Þ åË;a¡-‘/1# æŸ¶—ó1{5ØõŸì]3þ|­?ïåغgüùZßÊó_>%ñ‡ˆn|Y‰çÑ®#ÓµëË(DD±yr@1÷Y¾cÞ½C?ôÎ/ûèÕ*“j÷bqŠèCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾>y÷x­Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ+Ÿñö‰¥_Å¥ÚèÉ©ê“&ôµ·¸7»„_¯'°5Ógþ™Åÿ}ð{Ý_Rµñ—ˆæI<¹Þýã-Œˆv í·ÃÆÔÃSRMê{Ü?“Ã4Ä:nÚ+úž…s¬[éaeñ„#±²$º·ºûJEîàÀ{€k«IÑ&¶Yâµ²’)rÓô–KÉîÖ]£¹P¤œþê+Ò|)áÛ? x^ Ì,‹³I+ŸšY–sîMtTVxuOðDßÄãÚu§{1ñpb+!²1ó·ñ{QV¾9ô»q¹~÷Ls÷Eõ”êsSŒ»£ÆjÍ£Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|Î'øÒõ;(ÿ Ug½E‘Ñmu¶1BÐØM*înT Až ò+BÍWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠô{‚½¾¡lìØÍò;WrÍ€NÑ’pxâ€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ§«kÐc£j7wMÊÃ%¬° £˜³'A8–^€ä ]ÙvÔÖ¢¹?øH¼OÿB{àLŸüføH¼OÿB{àLŸüf´öR#ÚDë(®Oþ/ÿÐžßø'ÿ£þ/ÿÐžßø'ÿ£ÙH=¤N²Šäÿá"ñ?ý íÿ2ñš?á"ñ?ý íÿ2ñš=”ƒÚDë(®Oþ/ÿÐžßø'ÿ£þ/ÿÐžßø'ÿ£ÙH=¤N²Šäÿá"ñ?ý íÿ2ñš?á"ñ?ý íÿ2ñš=”ƒÚDë(®V/k1H$Ôü1-¥šó4é+¹½ƒäüçÀ'ƒÐ}¸Ð?XÿÁUÏÿQ(¸îTd¥±jŠ«öáÿ@ýcÿW?üEnôÖ?ðUsÿÄRjŠ«öáÿ@ýcÿW?üEnôÖ?ðUsÿÄPª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿGÛ‡ýõü\ÿñjŠ«öáÿ@ýcÿW?üE'Ûâݱ­õ‚ËØL²8ÉU)–ÆFp23Š·EUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕP_ÄIAo¨WÅö ¼ÐpÛ6nÛÁ±Œ‚3š_·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TSa’9¢Ibu’7•”ä0=>”ê(¢Š(¢Šò/ŽGý.Ün_½ÓýÑEú]¸Ü¿{¦9û¢ŠúªÁ‡¢8%ñ3Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|æ'øÒõ:èÿ f[0O±U±[œÜĤÖa6ÛY ÿË·þ‰JÀЯâ¿Eáíµ9lvö»<É$šd…oeQóH¼– Õ[?»~óXӿበ¸žTÕ/mÖa^Ve Ȇ $;œº”!r¤8#/âF™q¯xatËd•ËêZ|²yS˜]bŽò$epT©ŒARŽ9Årþ8ðmãZ_Zè_ÞG?…õ«%7š¤—.nn¨Š0÷3ÞKw 0IÁ<ƒ=oøJ7¼›Å:vÉpmšfÔ"³ Œ¶ìƒ·¯"¡µñ׆®Ô÷hÄÆL›¿v¤îy8ä ôý[Ä:.Öëªë}ºm–âæå"ó[Ñw¸ò8;ceg{{â *ÚÖø)´žkÈÒ;€ÀcbpùŒõåvVº·†´½*ãXÐáÕeZé×pËyý–HŒåÌŽDÆUɸþíx9›¤øsÄ áÏ jV£Z’ð…Ž›5¶ö26T%÷‹Ä+±ƒ€v~AÜ`ÞÄÙ¨k²æÆ?úû¶ÿÑéY¾¶m/ÃV˜æ]Ö–PÀ|ÙD”@¿3€9 õÀéRëRæÎ>åæßÿG%7<ÚËñ'ˆmô;ky%·º»žîqokkj¥žR¬ûWq >Tv%ˆ)æ¥ó½ëÇvé£Gè®*N²"ºMÄ‘9+‡ï'óØ€kh¾"kènžÿGÔ´3j¡å‚ÆiÉÜ$Þ2Óœ6GÆEXÓѼj¸Õ[Iƒ_Ò¥ÔRCZ%äm0p¬ÅJ»vÕcŒg OcRÙø‹E½Õ.4«=cN¹Ô-†n-b¹Gš.qó 9_ÄWŽèIwe®ü8Ð.t8c›G¼ºŠMI.!\쳸ŽI#œ©}ápåG'š·ðûÂzö“«è6ú©×gMÍ‹‡—O[9 ÄèY|¸ÅËn,«‘Ï%˜¨È³ùµ&˜ûµ‚},eÿѰÖgïV´7Ý«HsÒÆOý 7wW ªøŸÆöÞ1ƒÃÖ¾ðìÿk·º»µžOMè`’%ÔY¶×?hŒí‡ óp3Ùî¬;Ý*æoé:úI¶³Òï¬äBNòóËhè@Æ0»ç‘Õx<àÁ?4Ë“6™¬êS¶¥ý½¨éèæÆA”½ž8!3*yAüµŒ-¹¸<“Δž?ðý‚ÛŪ=ÕÕÝÅüvÑÙiw2<Ÿe¸1J‹+³4dª±6ÔàgÿÂ#¨ÿÂýçYý£þíÛ›g“ý±öݹÛþWËŒcwÇÍIáoê:_‰,5;™¬Þ+oíâÁ‹§j1ÜÅŒ¨èˆÁ¹áˆpæÃÇ´Û ÒtJUÕ¹¦Ø;-œ ó/ Y¡óJ¼Ï)ß*p<‘»ãojz3趺>—i¨ßjÚ²‰.¯ZÚ$żó–gX¤= ½Xr+Ô|#âÒ£E²} ´Qâhu³s4Ò‹Ÿo[¹!òÂÈmá_ *•,:_ødø¢ãè÷Ck§jyr`½šÖbŸd¸ˆ䄇|ÉŸ™r¡†OB‡Ä+ງ_³žÃU³¼{9ìl¢—PfeŽ)KÆ!{Dzx‰bƒÀ Ò»ñ¿†­´‹ TßÉ=¾¢H´[[Y®&˜€Kb(Ѥùpw|¿.9Ås>&ðMüºuŸ„ ŠÂ9'–úÑõË»).å“fÙžê ó3.Ö1ù· Ÿ”V :F§ðóÃú¯«hóO¸Õ-å:–¡+ñ^Ñ[S–Îê÷÷ð[Çok³Ì’I¦HQFöU4‹É`Í2ÏÄh4iõ]v AÿÚ—êà|墕Ð)'°9ޙĸ‘¦\kÞ]2Ù%rú–Ÿ,žTæX£¼†I\*B#T†ãŽqYÞ"ðëÙiúKèÖ×úºiÚ²êÙÞjr\Ip<§ %̇K¬Š¥‚îNÄæ½¦»¤ÝÛYÜÚj–7_9KI"¸V[† ÌDd1ÚŽp3±ìj;ÿèzzJ÷úÖ›h°ÍäHgºD '—æì9<7—óàó·æéÍy´zN¿oäx†-Ä©âi5ìxî!¤/bö¤,"ó 9”øË0ÝšK\ÔüG««hÖñö¡‚Yâ”ÇégŽCµˆÜ& 02Aäd Ô»©|Uðõ׆üauámcJÔu/Ø\\ǹŽTŸË·YDŠ#}Íé qó^Ù®·Iñ‰«Ïq“¬éÚ„Ö­¶â;k¤•¢>Œ’§ƒÖ¼óÄZ^¹q¦|KÑíô‰æþßµžk ‘4")´øm„$®^2rWf:°4ð¼¿Ù«ÿ —º¤1Ïc ·I·à(ŒCƒé\¶­áÍWSñö©¨¦¹«hú|úE•®ë·áÒ[¶uc$në´J˜+³ïžIqþ?ðNJΛ®øÃ]ä:t–1Á¦%°Ž [¢(¸yÔÌd ›T¦0ªŸ2HõýcÅ>ÑîVÛW×ô­:w¥X®¯#‰Š(%˜ 힃¥¿ñ‹a¨Ûi·úÆk}vqmm5Ê$³s‘IËsé^;ñ}.ìt?ˆP6‡¨šÝšË ɸ…~Íþް¤nŒÁóæFÏÅl»‘ÁÉ«~7ðž½{â/˜Ž»sa®ˆp4étøÒ ‘*m‘®#iS ¥ÃD[‰ d€{?›T5Is}¥{]·þˆ–;Þ©j2æóMç¥Ëè™(¹æÖ‰|VúF¯a¤Úè:®³{{÷ ‹[®Èáh•ÙŒÒÆ:Ì€IëéZw½r>+ðé×¼o¢^\A4ûM6ú)&³Ôf´u–Im )h]Xä8å~Qžvйl÷:.­a©À±¤´¸I•[Е$í\ö«ñ ÛMÔ5x¦Ð5©4ýe‡PÔâXÞaŽbÅ|ß4ª¤¨I9ô£L°¸µøƒ­j‚Ýc²»Ó,"I¨ß4r]oÈä+ÃÉŒœa]êºï‹UÕõ[mTÔcìø ä"ÎÚ6.ÞY”Ѻ¹ Ó$»ÿ„—AþÛþÃþÜÓ?µqŸ°ý©<üc9òó»§=)—>)ðí¶«ý“q¯éPê9AöI/#Y²ìÂw|ÌÊ’ë^S¬èÞ5»×¢,oc´‡Ä_*ÛgÇbmÅÚ»IÊ›“1q~W$¾ µ ñ]ØtI´8nOZß&¦.!?ë/’p»7y¾jÄÛ1·Zçv8 b>"ÑW[Ö4᪕Þ,ÊyåqœùyÝŒsœV‡›^1„õè¼Q$W']¸²ÿk¤°K§¥ š»ËGö­Ê¿!PH`0TàzÇï@‚y⡳?ôé?þ‡ _ókiâyjsÿ.ÓèQUß;Þ€3õÏ.Ÿ«dÙhº¦µ~°-̰Xˆ‡“3*³4²"üÅ 'i⥃ÄÖî,åºò´È§‚Y-BaÊ2Ix‘†\¾ †À-7rÞ;±Z´_ð‰êÚ”‹–—ÚFª¶w1üÄ”beˆ”èGÌÜ“òŽùi~)_웽SM]fx4MRÎhg¸Œ†3ÜÚ˜!•Ž~ê2À ìcÉ goã/x{Â6°Ï®ê–¶žuÄ0"Iq9ó%X÷áØ|‹¸³ʬ{V{ü@Ñm¼Sug¨ëš%¦’t» Û¹nÑÃ\It×-µ×l1•Ûýârr1Ä[øGÄ:/‡îôß-õûŸ¶iš‚^ùʲÌ-®a‘­zü·–IÛóÄ6YúÍ?L{ÏjZþ£¤ ¼Ðlm\yo"0–éæ…¶³‘g©ìN(ªñ»k¡øoQ×î„’ÚiörÞJ!’4.vä€IŒ=ë/Lñ¤_Ëa¬i:‡ncµk°º“A±áFUwE+¦²dns\ÃèºËþχÂÏl[Zo g˜ «“qöO/füíûüg8ïœRx‹Âº”Zeæ£k©ßx“\G ³jijDQyñÉ ‰8âó?v¬¥ÁùÑ2p(»ÓËq,³E'Ù”F*e·pÃ-…må–£âígÇpYéM¢]Oc£ƒMI+C<ò2ÈẄ3&ÕÃoY P³hºî“­ÚÍT±Ô­ƒ3Z\,©¸u”‘Ÿj»æ×ü7Óu=KWÕ58õÔžõ-ã'T’Ä»y~g!m áÀÜı £=¯ï@‹ž9ÒØúÝÜÿèù+N²¼*s£çÖæçÿG½jÐEPEP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh+>þêÊÊq.µ¾Õi¤ÎÑ€N#ÆHÁÇ8ÍoUM7þ@úoýx[蔬 ïì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿÆ«Jk«h$×ÄÄdp?ûBÃþ­¿ïêÿQþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¯hXÏõ·ýý_ñ£ûBÃþ­¿ïêÿQþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¯hXÏõ·ýý_ñ£ûBÃþ­¿ïêÿak·ÖÕìü;¨¬/¾!t(¿¼»¡8>â¯ü 3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ¨nô Bâ%íšbâD|ù’Ÿºá±þ«Úµ?´,?çúÛþþ¯øÑý¡aÿ?Öß÷õÆ€(ÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5W¿´,?çúÛþþ¯øÑý¡aÿ?Öß÷õÆ€(ÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5W¿´,?çúÛþþ¯øÑý¡aÿ?Öß÷õÆ€(ÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5W¿´,?çúÛþþ¯øÑý¡aÿ?Öß÷õÆ€(ÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5W¿´,?çúÛþþ¯øÑý¡aÿ?Öß÷õÆ€(ÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5W¿´,?çúÛþþ¯øÑý¡aÿ?Öß÷õÆ€0­<oiª\j–¶~‚þäb{¨‘ÖYGûN!Ëtîjÿö>¡ÿ?:gýý—ÿUïí ùþ¶ÿ¿«þ4hXÏõ·ýý_ñ eì}Cþ~tÏûû/ÿ«:UÍä“O-¬Šöíù.ìA/s¹WŒ!éš—ûBÃþ­¿ïêÿÚóýmÿWühk&Œš«ý¡aÿ?Öß÷õÆí ùþ¶ÿ¿«þ4k&Œš«ý¡aÿ?Öß÷õÆí ùþ¶ÿ¿«þ4k&Œš«ý¡aÿ?Öß÷õÆí ùþ¶ÿ¿«þ4k&Œš«ý¡aÿ?Öß÷õÆí ùþ¶ÿ¿«þ4k&Œš«ý¡aÿ?Öß÷õÆí ùþ¶ÿ¿«þ4ÝrÚ[íòÎ&U’xY±8ŽõOûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐ÷ƒmïõ mBúÏ÷W–§6÷#¼œçäcWð«ÿØú‡üüéŸ÷ö_þ5W¿´,?çúÛþþ¯øÑý¡aÿ?Öß÷õÆ€(ÿcêóó¦ßÙøÕCq jËo'Û4ÁäÈ_d¼üŒ¸ÿUþ×éZŸÚóýmÿWühþаÿŸëoûú¿ã@±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ«ßÚóýmÿWühþаÿŸëoûú¿ã@±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ«ßÚóýmÿWühþаÿŸëoûú¿ã@±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ«ßÚóýmÿWühþаÿŸëoûú¿ã@±õùùÓ?ïì¿üj¨7ƒmÛY]i¬ü:u5M‹xQüð¸Æ7ù;±ŽÙ­ßí ùþ¶ÿ¿«þ4hXÏõ·ýý_ñ eì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐ#-ô A¯b¹ûf™û¸Ý6ù’ó¸©Ïú¯öZ›ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐ|ºä±›ÿ^ßú%+Aö6±pþ_÷ž´ü¸ÿ¸¿•féßò¸ÿ¯xÿô'®]lÅž2ñ%¾§«k¶Ú=Ķ–¶Œ¶`†·Šc;™YÉiJĨòºdšî¼¸ÿ¸¿•B“Y=ì¶I-»]EK$!tG,ŠõŠ8¡*ØèkÕõ?Ç®·†<5s¦yº^‘íÍÖ¯Ê×FF–4Aå²'ÈrÒråÂæ-¼a4ž ›Å–ÑÇý­¢øKO–òã¼Ôn£qÁ2¤ÍƒÓ dÅ=sËû‹ùQåÇýÅü«ñ׌µÝ'VÕôÝÛM–kXô/³}¤>KíB[Y•=¢•Àà’NáÅE§ñ*oê~ŽóÂi°²·¿§O¸ *ÎÓ"EäùùRÝó&óÁ_“­z—÷ò£Ëû‹ùWšh¾.ñŸ‹n­áo7†4Íl›ûyg2ìÜ~ëä‘ÜB>n£ž?+üI©|;ðo ›QÓ®®o4Kˆâ¶Ô&‰]ÞZ #‘‚L ;/έ€N1“HHòãþâþTyqÿq*uÄ7Ëû‹ùQåÇýÅü«+Æzµî…áMOXÓt;ÍvòÎÝ¥‡O´ KpÀ}ÕÏæp `ªÍ…>Gðæãã߇ükm7tû=GñEÆéaÓ&¼='–vBJÁeÈfwÄÈg¶ÜypÛÉ/”­± cp*y Ž9^=ªv±Û×_Qÿ}ÇýroäkâÆ¥{¥øfúãO¸û-Ä·–ö‚çh?gYîc…¦Áã(²3ó‘òóÅ7¼¸ÿ¸¿•C{5•”÷·²ÛÛZÛÆÒÍ4Ì#Eff<$“ÀË]éö~Ð5ŸÅâ A,4Ùîg¶¼Õ&ºYŒiæd Klo”“jüǃÆ9ˆÚωáð/‹t¶q%ÿ‚õMBÞ]6)#ùQ*Iïwßþ½ ¸Ûœ7Ê)Œõï.?î/åG—÷ò®^ñŽ¥aᯉZ”PÙ™¼-ç}…][l›4è.‡™ódþòV)_”ד•âøÖÄxïVÓ—@þÉð”›¼‰íæiï,`º‘w‰Æß½`kÀ*0Kzo—÷ò£Ëû‹ùWšx£ÅÞ2ð­®°uuÐn®ÃŽ·b-­åE†KAb—t„ʤΟ2ùdínEkØê+ÿ„¡^x¬ë½>ÏÀz³âx¯üA¨%†›=Ìöך¤×K1<Ì)mò‘òm_˜ðxÂÔÞÍece=íì¶öÖ¶ñ´³M3HÑFY™ $ðMåÇýÅü«È~#k>'‡À¾-Ðt Á¤#Ñü¸ÿ¸¿•\Ü_ÊE0åÇýÅü¨òãþâþTê(¾\Ü_Ê.?î/åN¢€åÇýÅü¨òãþâþTê(¾\Ü_Ê.?î/åN¢€åÇýÅü¨òãþâþTê(¾\Ü_Ê.?î/åN¢€åÇýÅü¨òãþâþTê(¾\Ü_Ê.?î/åN¢€åÇýÅü¨òãþâþTê(¾\Ü_Ê.?î/åN¢€åÇýÅü¨òãþâþTê(¾\Ü_Ê£¸òá·’_)[bÆ:àTÕ£ÿ ûúäßÈÐO+RÔ£;.¶ôôDªÚ‡ü„t¯úùoý%\—þC¯ý~ýjž¡ÿ!+þ¾[ÿDÉH *(¢˜EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJVƒì]bàŸù÷ÿBz§¯øOÃÚåúê°]Gx#4öwóÚI$`’ÚRê 8VÈ>¦§·´žû^°\Él]bß*&â Ú@ÈírN²®5ÏÙ_Kañ“ÃÝÛKäÜÀ÷¶qÉ©@èT¶UYF ²ç;àekÁ>Õâ´ŠóO‘VÒÛì‘}šîkr`ã÷.bu/äl¯µY¿ð¯†¯ã¼ŽëL‰’öÎÞÊdVd_&‘áU @B+Ë‚ ð1§¦øv{ë[ëO›ËKˆã–9íà‰£™Fw# ‚¬<ÂÈç]§~f¿lú #_øƒT—:}³ù:b-ws²mvÈXfEd$<Ã@)iþð•“\É…Ä’ÝIg-Ä×÷Ë+ÚLf·,ò;1(ç<žFå@»†Ÿ³s¬G/®­á¶š]ÇæŽ&‘£\gi@ÉÝÎp1f? j#g™âiÛwm´ŒgîgqœIޏܽvôõm!4=<ê:ïŽ!Ó¬¢Ûç\]G¹Ÿ™ø\âLg¦åë´ï.€¯áÿhZ—ý“göo+O¶ÓS÷®ø¶¶ó<”ù‰û¾kóÔîäœ gj~ð¾£ é:ðê1iºDqGe®­ulE°ÄXÅ"—(cB¬åŠ‘A$ÖÞ‹¢ÿkéöúŽ›ãTÔ¬¥­Å¤PÉ€l U—#´¾¸Ü½vù×’hzvµ‡©|OÒ­µW(>Å,¶ÑÎùÙ÷cc»œIŽßN»Nó@6,¢†ÎÊ HžfŽÖ43LÒ¹ 0 ;’Ìx嘒O$“Sy‹ëLÂZˆÙæxšvÆÝÛm#û™Ç\gc®7/]§y„µ³Ìñ4í»¶ÚF3÷3ޏÎ$Ç\n^»Nòè,?Ì_Z<Åõ¬ MŸTÔu‹¼E|%ѯ£²»-g¬Žmí® NO˲b9ä8!2úqøKQ<ÏNØÛ»m¤c?s8ëŒâLuÆåë´ï.‚Äzƒ©°¸ÿ–MüK®[Yß­í…ý¼W6³ïŠhePÉ"œ‚¤"’? j#g™âiÛwm´ŒgîgqœIޏܽvùºý—†¬¡¾ñ7Ä="ÕåXD÷¿g¶ä!IEg8ÜBL@äàŽ»ã@±OFð‡‡4™&’ÚÞêc4 nÂöþ{µX›£Q3°D8UÀ8•ZÏÀ´Óu->=6i-õ+&ÓîD÷ÓÌßf`TÂŒîZ4Õ Û «^Ÿ@ñ ïØ´/Š:N³t‘ dƒOšÖi6fÚ¥ˆ\–ä"uÚwëÝøröÆÆ[˯ßI¼^l«o§ $`¡ DVfc¶\*†9d1S¼ÐwÄÞð‰.ogÖ4éæ7ñ¯#Žúxb¹P»A’8ÝQØX``Œ j^x{B»°×ln,÷Ûëû¿´ÓÍqçî-Ûr¹Š4_—3Ô“K¡i³êšŽ±cˆ¯„º5ôvWe¬âU‘ͽµÁ)ÉùvLG<‚G&_N? j#g™âiÛwm´ŒgîgqœIޏܽvæ€eøƒÃÚ¿æÿkYý§ÍÓît×ýë¦m®|¿9>R>÷”œõx#'/Öt=WœÏ¼¿a¸Óäï'1™Ta‚LQüÃæx#'0Á”þ ÿ…‘§É¬¨M=ßí8 ~ï%‡NÇ—®Ó¾ö£¡¶“`Ú†±ãE²³„)žâx¡†5&Ifás‰1ž›Ó®Ó¼º#Â^ðÿ…J µx⎳Çoq¬Þ\Áq€±K+"ã d ®Ì_ZÊðÝ•—ˆmæ‡ñÓY¶FU’m<[Ì™ù7 ÊXq&:ãrõÚwéGá-Dlóâß±h_tfé"ÉŸ5¬Òl0͵K¹,3ÈDë´ï4­Ÿ€<i¦êZ|zlÒ[êVM§Ü‰ï§™¾ÌÀ©…Ü´i†?*·AIâox?Ä—7³ëtóø„W‘Ç}<1\¨] Én¨ìˆ,00F:+¿^ØØËyuâ;é"·‹Í•môá$Œ!`ˆŠÌÌvË…PÇ,€*wÒдÙõMGX±‹ÄWÂ]ú;+²Öq*ÈæÞÚà”äü»&#žA#‚.´/<=¡]Øk¶7{íõýßÚiæ¸ó÷@–íÈ9\Å/ËŽ™êI£Äеÿ7ûZÏí>nŸs¦¿ï]3msåùÉò‘÷¼¤ç¨ÛÁ9ÔÂZˆÙæxšvÆÝÛm#û™Ç\gc®7/]§~DéOâáßøY|šÊ€dÓÑ­þÓ€·îòXp$ìq¹zí;ÝÐu-HÔ¯VòúÕg™lç±™±äNc2¡àî1GÉx#'4ü=ámB½–ú·»’?(Ü^_Ow"ÇœìV™ØªäµH8­GCm&Áµ cÆ‹egS=ÄñC j>L’ÍÂçc=7§]§}o ÙYx†Ð^hm5›deY&Óżɟ“pÜ¥€'c®7/]§yt¯˜¾´y‹ëLÂZˆÙæxšvÆÝÛm#û™Ç\gc®7/]§~gˆ´Ùü?§[ßj"¾–)/¬¬ˆ‚Î-Åî. ·SÉáwÈÄõ 0áŠåÐXÖóÖ1}j¶ŸáÙï![x¼ÝÄ’´2<D˾7T•23†“)•$ÊÓGá-Dl󆛼_ lݱçfvü³ çcc®3”ëÇ;[Ÿñ?Äk^$¾ð®¡ã¿húN›1·Õ…Ö­ ÝÊ¿zÙUœ2Æ:HßÅ÷ñ‘ÐhÐÏ'‰Z[h¡–Kxв¸Q²¨çcË‘ƒ‚y#*Ýl’jƒ—gfØÝ·uÓ ýüg÷gÄyëÍ×hÞ˜Ñâÿuë‘âm9-5­2ÓèqO¤ÞÍ¢ÛMpÎù1Í2,ûcˆR¯“µºÞ£­]´0k:Úæ~¹˜D]`72kR ¥)]媫aT0ö©$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¾BþêÆ5ÊiDeXcyïŒjÎîÉd§Þw0¨œÈ@ÉQ½ ðøµß¿Å7‚ó\Ó´ýU|MäGgsâk¥–]7íSL[s‡ƒ %ÞpÇs:€Tz¯ÅOx[Á~‡^ñOÙLqݤv 7– Ý2°@! ·ÎJ…]Ä3] ’jƒ—gfØÝ·uÓ ýüg÷gÄyëÍ×hÞI&¨7ùvvmÛw]0Ï߯vqœGž¸ÜÝvà—Á‡Ò®´-SWÓuÍ VŸTÔÞòÿûí'´¶£|”d<•DŒ±8,ÅŸvâ-kIð¤ž"Óôxc\…ÍÍÇ„µM8Jòi%f’(˜8g Ä„- ® Û@5í’Iª þ]›cvÝ×L3÷ñŸÝœgç®77]£y$š ßåÙÙ¶7mÝtÃ?ýÙÆqzãsuÚ7€xG5è`ñoÄu_ëvþ)°Ô-×ÂúDz”©Ò>ÑÖ$·dÁåbH`¡·aK0|{ñ¬ú&³â‰´ýNkM[E¶[‹8î¼S=‘r°,¹·°ŠK¸³í)ûÞb–EPWÚô­&ëIÔuÛë;xd—X¾³ oÐën–ê|ªRÞs¸‚òrB¨m9$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¼‹ð®©a£øâÞ£?‘ ž.²µVØÍ™gÓ´Èb\('æ’D\ôÉÀ×Oqâ ßíÞuöß°jVÚ]ÏîœùwWG“ßiƒæQ¿’0Øž+û«‰®á³M2â[IL3"ßÑ>ÂꎌQ l@”ž@]óI&¨7ùvvmÛw]0Ï߯vqœGž¸ÜÝvà+›øã=À¾:ηwoI2Û[,Ó¤+4ÈUèIf < Ø’MPoòììÛ¶îºaŸ¿Œþìã8=q¹ºíÉ$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¼ÍtŸéWÞñ6£áOxoÅHžâ8´Ûø®|¶D>T1F¬H…dd#æfËrØ}câ m|ã‹­;Åv², Ô.&[_Ýê—p^¤`Ç1ómâûŒÉ˜Á^víA°šú.I5A¿Ë³³lnÛºé†~þ3û³Œâ<õÆæë´o$“Tü»;6Æí»®˜gïã?»8Î#Ï\nn»FðñÆ¡­iÒxÚM*U‚ÒOZǪÎÚ„–+ ¯ö-‘%®bŽG…L‚%.«ò£,;w·×¾¿{^ÃUµMJE°–ÏV›SDƒËŒì7rÇNC™>l6 X•5ÖÅuq5Ü6i¦\Ki)†d[âZ'Ø]QÀC±Š4 ƒÈ“È ¾i$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¼ÉuøÄž?ƒÁVZ߆4¸ôz+‹Ö–în®uæ¶öñœË2L|ÙhÆâÌS°øÃ’Ú&—}ªëðè'OÔÒêÒöæØOmÂ9yêp¾^×~Y“ °† ¶º©$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¼’MPoòììÛ¶îºaŸ¿Œþìã8=q¹ºíÀ<3ľ0š÷Á>%¼‡YÓ\[êZrx¯Â°¼"ê)5ÒH”î³Æ…²ȤN9e«ëâ;;xÖãÃÞ!ÖµÏ Z&Ÿökèµw’æIY.c[É<ƪy î ÃÈT©QQñN“u¯éÉcso Å õµìf;¬Ïmp."1)xa ßø9P[NI5A¿Ë³³lnÛºé†~þ3û³Œâ<õÆæë´oùßCñ Ƨ¹¤G¨[Þévzß„®­ZßÄ7ÔAæÖdÙul´cqf)ëRIª þ]›cvÝ×L3÷ñŸÝœgç®77]£y$š ßåÙÙ¶7mÝtÃ?ýÙÆqzãsuÚ7€r¿`Ò[DÒïµ]~éúš]Z^ÜÛ í£˜G"=NËÚïË2a¶Á¶×›x—Æ^ø'Ä·ë:k‹}KBŽOøV„]E&¡IÒxж@y‰ÀÇ,µîrIª þ]›cvÝ×L3÷ñŸÝœgç®77]£~gŠt›­NK›xV(o­¯c1Þf{kq9ˆáKÃnøwÁÊ‚À\¾#³°ð÷n<=âk\ð¥¢iÿf¾‹WyÙ.d•’æ5¼“Ìa §Îౌ<…J•æô?ÜjpkšDz…½î—g­øJêÕ­üCq­DmaVM—SÆŽÃ÷ òê§v$ªý$š ßåÙÙ¶7mÝtÃ?ýÙÆqzãsuÚ7è_ÝXÂf¹M2Œ« o=ñYÝÙ"L”ûÎæ“™*7€x–‚áøKã{oê—³øŽÏ^»Kûiõ«›‰¬­›VŸís+@ZÙžO1c,øÞDŒ+¬ø ¨]ß\ëÊšæ—©é(-šÖ;?Ük~D§Ì†ºš$<…Œùyb§q;C(¯G’MPoòììÛ¶îºaŸ¿Œþìã8=q¹ºíÉ$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¼É~?êºGö>³áý7Wðõ¾«yÝGG’ÌOW"Z¸`D›œ˔)ÛÊl5ìÕNI5A¿Ë³³lnÛºé†~þ3û³Œâ<õÆæë´o$“Tü»;6Æí»®˜gïã?»8Î#Ï\nn»Fð ”U9$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¼’MPoòììÛ¶îºaŸ¿Œþìã8=q¹ºíÀ.QTä“Tü»;6Æí»®˜gïã?»8Î#Ï\nn»FòI5A¿Ë³³lnÛºé†~þ3û³Œâ<õÆæë´o¹ES’MPoòììÛ¶îºaŸ¿Œþìã8=q¹ºíÉ$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¼åNI5A¿Ë³³lnÛºé†~þ3û³Œâ<õÆæë´o$“Tü»;6Æí»®˜gïã?»8Î#Ï\nn»Fð ”U9$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¼’MPoòììÛ¶îºaŸ¿Œþìã8=q¹ºíÀ.QTä“Tü»;6Æí»®˜gïã?»8Î#Ï\nn»FòI5A¿Ë³³lnÛºé†~þ3û³Œâ<õÆæë´o¹ES’MPoòììÛ¶îºaŸ¿Œþìã8=q¹ºíÉ$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¼åNI5A¿Ë³³lnÛºé†~þ3û³Œâ<õÆæë´o$“Tü»;6Æí»®˜gïã?»8Î#Ï\nn»Fð ”U9$Õÿ.Îͱ»në¦ûøÏîÎ3ˆó×›®Ñ¼’MPoòììÛ¶îºaŸ¿Œþìã8=q¹ºíÀ.QTä“Tü»;6Æí»®˜gïã?»8Î#Ï\nn»FòI5A¿Ë³³lnÛºé†~þ3û³Œâ<õÆæë´oàôwóy7ù›íû·f$ç;ß?]ÍþñêWPÿŽ•ÿ_-ÿ¢d©­a{{»è$“ÍxçÏó|ÄF€Ÿ™™¿2O©=jCþB:Wý|·þ‰’¨“JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+COÂò2]ÿלúW;âÿ iú—ˆgÑtKÅ ­]q{qŠ5%ƒL‰É;üµœ cÈŽ ã8¤WEá?ù.ÿëÎ?ý ª>øUµûøåñ-¬ú…ËÝ]}“Å•ºI+um‘Ü*ŽRÆŽsÆþ3Õü-®Úø3ÃÂæWÓôhn¤»»Ñ5eî4‘G5°,Œ|‡-,„“B±ÝŒÏø‚mmÜèQisʾ Ô$Y )yO­6mæcƒˆÌ|)k<ŸÞãÑuøwUŠÅo"Ô|Ûqm Ô:­Ô7&.>I'I’ƒ€NölžNI&¤“Áž‘ƒ6–£iñ²º€–3´ö Ø$foö³†È✠¯Äÿ^øÍí¬´‹‹.=y´w¶ÃšƒÉµ'6ïuöà¿f ®Êc„S— òרëze¶±¥Í§]É{3mÜÖw³ZÊ0Á†Ùaeuä á†FAÈ$VD¾ðÌž :á²¹K¶¸[—Hï§Ky&\•íÕÄNà¨;™ ÈÈÝñþÆHôÓ§WgX×Ю>ÝçXîû~¥mª\þõÇ™uoäy2pxÛöh>Q…;9-’ãÂÚÇÛ¼ëßoÔ­µKŸÞ¸ó.­ü&N~ÍÊ0§g å²³X~8´Ñnt &ñ¡a§ÙŸ´I=¦©qbË€G/£ó—$Ž ·+ÆѼY§Aa­Çxð[Ü¥Ô_e¿žÑÖTÎÆß £pN@Î2êN‹hþмCñðø•lít©ç¶Ñ¯µ«»¶F¦Rò,ò8Yß`à}Áòõ-X_|Kqàß¶³ ÛêVöþ¾ÔÔÜø_Q±³Y#›I¾Ö¸W Õ îT|ªðkÓ4?èš<óËo>»v' –-K^½¿…‘ˆÈòî&tÏÎ3‚FpH5-¾ø> ;QÓ……ä¶š…ŒºtðÏ©ÜÌ‹m ÃÃy’„Ä{zA@N­âÛ¯ jÞ5{ v–óTñ­µ„ö ïD$è–r´† pe“ |«ŽHÉ$w ¼C«xD¼›Y°žÚâÒõí–wÒîtõ¼@ˆë2Ar<Ä_Ÿi°Ü‚G5{Qð‡u58®ôíãS¼Kë¦YäG7 q$¨êÁ£`ÆB¿w=I&߆ô7ÃÖ/g¦%ÀI%2Ê÷rÜË#ç’Vgc…Q’OÔÌÜÛµ—Ç])à¾Ôü­OÃú”×VÒjÉl^´äÒslIQTìNI5wâ—ˆo´;Hü?ö¹/Qõ k;Ñissm±ÁŽ)Ž66ógråU†åÎjkÿø~ûÅðx²áµ¯ík|ž=rö8‘s(!YD[Åd۵ʂÁiø“@ÒüEb–z´Ir‰¢h®$‚Xœ$‘²º6†Tƒ‚Gzòöñ%dž<5¬¯‡­õû}ví&¤ø¶ýîÖ»½[u•fÈJ8i9¸/º0CnKãèÑx—Mñ߇ޣ¤AeuüvóÃjñ]I$J !¤Ê­ €ŠÇÌ&0 îâo|0ѯ<#s¡iv¡¾ß©é·:„º…ì÷ÜÃoy Î4Œò7îÑÕA8¿‡$ÖÍ¿Ãÿ áê9Ó§žÛQ‘%»{›é縕ЩŒîæ\¡U*C|¤ ¸ 4¾ñ¦£â=*ûDÕvÍq¦kþ¹K•Ñ/4¡,sêñ(gºËäç ÊÀŒ`‚ÿ ø«ÅÞøOâëú§ˆ'‹_½²±Ž :á]$:¼Ö£v%™äŒ3&ÈÑC"(A¼à×o¦ü8ð}ƒÝIs,×’ÙMs5Σsq,Ïg1žÙšI$f%$9äò0§*«ø+ÃqA¬Û $µÖ¤io­fº–HÙ™™’&b‘gfcRÍ‚r@ áoŠuÍ~çV²Ölç"ÈBðj@½Ò¢¸oÌb¿Ÿrä«0!ӡȬ¯ŠÖD_íÑ|AâãDì[;mJD·¶*¤H Só;J¬NíªrÈµÚøcÃG‡>ÐtĽi.v‰e¼Ô'»•‚çjï™Ý‚Í…'Žk#UømámKÄ·¾#”k¶Ú¥òF—3Xø†þÌH±®Ôa™T3ÀI=I$°¢ÀÅQEQEQEQEQE‡ã‹Mç@’ojö}™ûD“Új—,¸rð:11ùrA8à+‹Ñmˆ~"Þ­®•<öÚ5öµwvÂÔÊ^EžG ;ì¸>^¥«¶ñ‡…ôoiÐXkqÞ<÷)uÙoç´u•3±·ÂèÜ3Œ€z€EmÁz&<òÛϮ݉àh%‹Rׯoádb2<»‰3Æ3Œà‘œ™Ý|Eñ-ǃ|^Ú΃o©[ÛøRûSSsá}FÆÍdŽ>m&ûXá\7T+¹Qò«Á«z·‹n¼%«xÕì-Ú[ÍSƶÖ?Ø'½“¢YÊÒ-Á–L$Mò®9#$ ‘Û[|7ð|v£§ Ém5 téáŸS¹™ÚA‡† ò%ˆöô‚´5øwPƒSŠïNÞ5;ľºežDsp‘GJެ6 `+÷sÔ’@(ü.ñ­â=òmfÂ{k‹K×¶YßK¹ÓÖñ#¬ÉÈó~}¤Ãr6 Õ+›v²øë¥<ÚŸ•©øRšêÚMBy-‹Ã6œ‘º@Îc‚É Ê*“½‰É&ºo è:o‡¬^ÏLK€’Je•î.å¹–G Ï$¬ÎÇ £$ž«2ÿÀ¾¾ñ|,¸mkûZß'\½Ž$\ÆJVQÆ1FY6ír °c@üQ²ñ ö‡i‡þ×"¥ê>¡mgz-.nm¶81Å1ÆÆÞclî\ª°Ü¹Íq âK xkY_[ëöúì7ÚLIñmûݬ wz¶ë*Ì%”pÒr%p _t`†õh_ˆ¬RÏV‚I#ŽQ4MÄK€@d’6WFÃ0ÊpHï\Š>hמ¹Ð´»PßoÔôÛB]Bö{‰na·¼†gGšFy÷hê œßÃ’h|aâ/é¾ »ðñÔtˆ,®¢¿ŽÞxm^+©$‰A„4’U¡pXù„Æ]ÜrwÞ4Ô|G¥_hš®Ù®4ÍÃ)rº%æ”%Ž}^%ì÷Y|ƒüá™XŒ@ô»‡þ‡CÔ4s§O=¶£"Kv÷7ÓÏq+¡SÝ̹BªT†ùHqQi¿<`÷RC§\Ë5ä¶S\Ís¨ÜÜK3ÙÌg¶f’I‰Iy<Œ)Ê€(ˆðߊ¼]á„þ ñ.¿¨Úx‚xµûÛ+àÓ®ÒC«Íj7bYžHÃ2l2"„Î u |S®k÷:µ–³g9BƒP:î•À“~cÝüû§%YElC௠ųl,$’×Z‘¥¾µšêY gfffH™ŠDY™ŒaK6 É‹ðÆ‘áÏ´1/ZK¢Yo5 îå`¹Ú»æw`£saAÀÉãšà~9Á¢é·Þ'Ó§ñs]ˆZHï-u_/NÑ‚*6{a"ùÑýçaåLÄ+”m¯W®g[ð†5­RMGS³ºådià…Â[\)–Ý\E!T|êxv®š€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Iä1ªÿ×áÿЩêòÒ¿ëå¿ôL•r_ù j¿õøôªz‡ü„t¯úùoý%2M*(¢˜EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV†Ÿ„ÿäd»ÿ¯8ÿô6®¶¹/ ÿÈÉwÿ^qÿèm]mK (¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@$¿òÕëðÿè Tõùé_õòßú&J¹/ü†5_úü?úÕ=CþB:Wý|·þ‰’™&•QL"øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+COÂò2]ÿלúW[\—„ÿäd»ÿ¯8ÿô6®¶¥Q@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( _ù j¿õøôªz‡ü„t¯úùoý%\—þC¯ý~ýjž¡ÿ!+þ¾[ÿDÉL“JŠ(¦‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh*¦›ÿ }7þ¼-¿ôJUº©¦ÿÈMÿ¯ oý•¡§á?ù.ÿëÎ?ý «­®KÂò2]ÿלúW[RÆ‚Š( aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP /ü†5_úü?úÕ=CþB:Wý|·þ‰’®Kÿ!Wþ¿þ€µOPÿŽ•ÿ_-ÿ¢d¦I¥ESȾ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4SMÿ>›ÿ^ßú%*ÝTÓä¦ÿ×…·þ‰JÀÐÓðŸüŒ—õçþ†ÕÖ×%á?ù.ÿëÎ?ý «­©cAEP0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(„—þC¯ý~ýjž¡ÿ!+þ¾[ÿDÉW%ÿÆ«ÿ_‡ÿ@Z§¨ÈGJÿ¯–ÿÑ2S$Ò¢Š)ä_ú]¸Ü¿{¦9û¢Š>9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ ©¦ÿÈMÿ¯ oý•nªi¿òÓëÂÛÿD¥`hiøOþFK¿úóÿCjëk’ðŸüŒ—õçþ†ÕÖÔ± ¢Š(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÂKÿ!Wþ¿þ€µOPÿŽ•ÿ_-ÿ¢d«’ÿÈcUÿ¯Ãÿ -SÔ?ä#¥×Ëè™)’iQEÀò/ŽGý.Ün_½ÓýÑEú]¸Ü¿{¦9û¢ŠúªÁ‡¢8%ñ3Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|æ'øÒõ:èÿ TÓä¦ÿ×…·þ‰J·U4ßùé¿õámÿ¢R°44ü'ÿ#%ßýyÇÿ¡µuµÉxOþFK¿úóÿCjëjXÐQE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šá%ÿÆ«ÿ_‡ÿ@Z§¨ÈGJÿ¯–ÿÑ2UÉä1ªÿ×áÿЩêòÒ¿ëå¿ôL”É4¨¢Š`yÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚ªi¿òÓëÂÛÿD¥[ªšoüôßúð¶ÿÑ)X~ÿ‘’ïþ¼ãÿÐÚºÚä¼'ÿ#%ßýyÇÿ¡µuµ,h(¢ŠQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEp’ÿÈcUÿ¯Ãÿ -SÔ?ä#¥×Ëè™*ä¿òÕëðÿè Tõùé_õòßú&JdšTQE0<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÕM7þ@úoýx[蔬 ? ÿÈÉwÿ^qÿèm]mr^ÿ‘’ïþ¼ãÿÐÚºÚ–4QE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€8Iä1ªÿ×áÿЩêòÒ¿ëå¿ôL•r_ù j¿õøôªz‡ü„t¯úùoý%2M*(¢˜EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV†Ÿ„ÿäd»ÿ¯8ÿô6®¶¹/ ÿÈÉwÿ^qÿèm]mK (¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@$¿òÕëðÿè Tõùé_õòßú&J¹/ü†5_úü?úÕ=CþB:Wý|·þ‰’™&•QL"øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+COÂò2]ÿלúW[\•2ܵŽíÅ´ŒÊ*2$uÔÔ›õ/ú ê÷Òñ4¬3»¢¸Mú—ýõûé?øš7ê_ôÔ?ï¤ÿâh°\îè®~¥ÿA½CþúOþ&ú—ýõûé?øš,;º+„ß©ÐoPÿ¾“ÿ‰£~¥ÿA½CþúOþ&‹ÎîŠá7ê_ôÔ?ï¤ÿâhß©ÐoPÿ¾“ÿ‰¢Ás»¢¸Mú—ýõûé?øš7ê_ôÔ?ï¤ÿâh°\îè®~¥ÿA½CþúOþ&ú—ýõûé?øš,;º+„ß©ÐoPÿ¾“ÿ‰£~¥ÿA½CþúOþ&‹ÎîŠá7ê_ôÔ?ï¤ÿâhß©ÐoPÿ¾“ÿ‰¢Ás»¢¸Mú—ýõûé?øš7ê_ôÔ?ï¤ÿâh°\îè®~¥ÿA½CþúOþ&ú—ýõûé?øš,;º+„ß©ÐoPÿ¾“ÿ‰£~¥ÿA½CþúOþ&‹ÎîŠá7ê_ôÔ?ï¤ÿâhß©ÐoPÿ¾“ÿ‰¢Ás»¢¸Mú—ýõûé?øš7ê_ôÔ?ï¤ÿâh°\îè®~¥ÿA½CþúOþ&ú—ýõûé?øš,;º+„ß©ÐoPÿ¾“ÿ‰£~¥ÿA½CþúOþ&‹ÎîŠá7ê_ôÔ?ï¤ÿâhß©ÐoPÿ¾“ÿ‰¢Ás»¢¸Mú—ýõûé?øš7ê_ôÔ?ï¤ÿâh°\îè®~¥ÿA½CþúOþ&ú—ýõûé?øš,;º+„ß©ÐoPÿ¾“ÿ‰£~¥ÿA½CþúOþ&‹ÎîŠá7ê_ôÔ?ï¤ÿâhß©ÐoPÿ¾“ÿ‰¢Ás»¢¸Mú—ýõûé?øš7ê_ôÔ?ï¤ÿâh°\îè®~¥ÿA½CþúOþ&ú—ýõûé?øš,;º+„ß©ÐoPÿ¾“ÿ‰£~¥ÿA½CþúOþ&‹ÎîŠá7ê_ôÔ?ï¤ÿâhß©ÐoPÿ¾“ÿ‰¢Ás»¢¸Mú—ýõûé?øš7ê_ôÔ?ï¤ÿâh°\îè®~¥ÿA½CþúOþ&ú—ýõûé?øš,;º+„ß©ÐoPÿ¾“ÿ‰£~¥ÿA½CþúOþ&‹ÎîŠá7ê_ôÔ?ï¤ÿâhß©ÐoPÿ¾“ÿ‰¢Ás»¢¸Mú—ýõûé?øš7ê_ôÔ?ï¤ÿâh°\îè®~¥ÿA½CþúOþ&ú—ýõûé?øš,;º+„ß©ÐoPÿ¾“ÿ‰£~¥ÿA½CþúOþ&‹ÎîŠá7ê_ôÔ?ï¤ÿâhß©ÐoPÿ¾“ÿ‰¢Ás»¢¸Mú—ýõûé?øš7ê_ôÔ?ï¤ÿâh°\îè®~¥ÿA½CþúOþ&ú—ýõûé?øš,;º+„ß©ÐoPÿ¾“ÿ‰£~¥ÿA½CþúOþ&‹Â_ù j¿õøôªz‡ü„t¯úùoý%Y‚Jï4“I+ïw“'vÐUmCþB:Wý|·þ‰’˜*(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÕM7þ@úoýx[蔬 ·½´>$²ÐY%77–wq°`H^`Ns’gLqÙ¹eºçˆt À5½sLÒÍÁÛ¼»H|Ã軈Éçµ`x¸k^<Ðõí?Ú†·m—i:ÙMlË-›¡"yc ÇsX/ƒÆZƦ—–>Ö4ÛkÍ8[ÉÙFèH$”¹y¼Õòv²²ˆ·‘½ò3Å!-ç4Ý3Çú&·ªé:mœzuŬ—W M,òÝ#(,À7&äõÈÆÞµ¯hz"ÀÚÖ³§i«pû!7wI‘½q>¼³@Ð|S¢½Œ÷Þ:ì’x'LÑç&îÛ1ÜÇ癣}î3Þ›™wg €Üáú¯‚±­¢Ê¬-ü˨U3ŸŸ`x"ùs¹é“Uü7áÍb_ ü7Òu_Éxbö(ïEİ::Ã¦Ï ÜGµÛ*exö‚ƒÉPhÑ4OMÕì#¿Òu MBÎLìžÖe–6ÁÁÃ) ÕoøH¼?ý»ýƒý»¥ÿkã?`û\hÆ3Ÿ/;ºsÒ¨x?JºÓ5ŸK5²Ám¬­Õ¦Ö\:+TfÀ\gŠêûE‚ÐÜÀ~×<ª¾Z¡G*#M„)r§÷§…æž—¤kú±qso¤kZn¡5«m¸ŽÖé%hO£…$©àõ­*åßB{ˆZ&¥aau®‰{e+Eµ3MhЦޤmŽl``sÓ#=E1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#¥×Ëè™*õQÔ?ä#¥×Ëè™(JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫u•o=ýµ­½«i7xcƒ|RÆUÂ(PÃs2pGÇ=kCFŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtzŠ£öËßúÞÿßÈøº>Ù{ÿ@[ßûùÿ@¨ª?l½ÿ -ïýü‡ÿ‹£í—¿ô½ÿ¿ÿñtz¨êòÒ¿ëå¿ôL”}²÷þ€·¿÷òþ.˜¢îòþÑÞÆ[Xíݤf•Ж%@IþörqÓ¾xÕ¢Š(Ⱦ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4ŸŸÿϦ…ÿƒ)ÿù´(¬ üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÕ%±Ö|åû]¾’ó¸Á{,Ž8ã Ð(<ÿ´?¥\¢€ (¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAEVEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPECÄŽñøwR’6du´”«)Á!Á€#—Ä: R¼RëZzHŒU•®GPy¦ÿÂKáßúi¿øŸã]”e `‚4Š(ÀDDPTp ï=½h‹ÿ„—ÿôÓð%?ÆøI|;ÿAÍ7ÿSük´óÛÖ=½h‹ÿ„—ÿôÓð%?ÆøI|;ÿAÍ7ÿSük{þÏÿoÂ?ÿ “ý±Œýƒí‘ý£¦ÕçwNzTšF¿oªjÍ•ºL²i«gp\ÚÞÁ\‘¶tàä7Á ïü$¾ÿ æ›ÿ)þ4ÂKáßúi¿øŸã]§žÞ´yíë@_ü$¾ÿ æ›ÿ)þ5=†±¤ßÌ`²Ôìîe ¸¤S+zàë|öõ¬?¾í*݈ÒþØ£w\̪p{eY‡Ð‘Þ€!žh …çžDŠ(Ô³»œ©&³á%ðïý4ßü Oñ«—[XÑ‘Ô2Æ%Xd°JËdz*‘è@=«SÕlô» µ NöÚÊÎß5ÅÄ«q¯«3÷4ÊÂKáßúi¿øŸãGü$¾ÿ æ›ÿ)þ5¿¨ø’ÎÊëC€—ŸûnìÚÚIÖMÂÞkÄçî”°Fy+Ø’«ëöú^¡£Y\$Í&¯zÖvå!]m朖É`qÆNJñŒÎÿÂKáßúi¿øŸãGü$¾ÿ æ›ÿ)þ5ÚyíëGžÞ´ÅÿÂKáßúi¿øŸãGü$¾ÿ æ›ÿ)þ5ÚyíëY¾×íõÝ>[ÛD™#ŠöêÍ„ ¾ÞâHðO¢b;àŒ€xïü$¾ÿ æ›ÿ)þ4ÂKáßúi¿øŸã]§žÞ´yíë@Å…ý–¡KcwÔjÛY¢0ÓŠ±QkŸÙ0°œ9ŶH¶ç×››©©h¢Š(Ⱦ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4QE`hQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEâùµOúó›ÿ@5£Tìʹ½j}¥háàÓ4 xSÅ÷Í¡ø«ìòÍc&#±“N½kr³íGù-&*Còã56µ©ØM¦xzKßjcÂðxâH´ící²y¯gý—q¸ý§;ÌbVš?7vB îãu{ÚV´­+äV—ZÄz—câ]nOÜxÊk[øu D×–+¥ÜJÉçç|‰ç¬Š$ŠCd¬ÏˆZ§ˆ4¿jºl:å¶”Ö1[GáÇÔ¼SylÒ¨… ³¬2ý½Œ¾b°vg;q…$3{‡ÚV´­08õ+ø§kâOê:mäW–© XE}$ÝÀÑFY„JvÏ™LÈûƒlUäûÕÏi63i~>)³Öu˜ï'¶ ù¯‘6¾öòF`Ë9Y·,äëÿiZ>Ò´â±kž$‰ Þµaa©¯ˆü˜í.êQ7Š­vóåØÍ¿úH¶çÓ;[¸>•¡@‚Š( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«iþǵË)ùOAŽõf¾süizt¾QE`hQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERmGwg}MvbK3ZFI'©$Ži?±t_úéøÿW¨  ?غ/ýt¿üÿ‰£ûEÿ .—ÿ€qÿñ5zŠ£ý‹¢ÿÐKÿÀ8ÿøš?±t_úéøÿW¨  ?غ/ýt¿üÿ‰£ûEÿ .—ÿ€qÿñ5zŠ£ý‹¢ÿÐKÿÀ8ÿøš–ÛNÓ­eómtë+y1ðÛ¢zdVh ÍsDÑMIŒ28ÈaèAªغ/ýt¿üÿ‰«ÔPì]þ€º_þÇÿÄÑý‹¢ÿÐKÿÀ8ÿøš½EQþÅÑè ¥ÿàüMغ/ýt¿üÿ‰«ÔPì]þ€º_þÇÿÄÑý‹¢ÿÐKÿÀ8ÿøš½EQþÅÑè ¥ÿàüMغ/ýt¿üÿ‰«ÔP6–––ˆÉikol¬rV•>¸¦¢Š(¢Šò/ŽGý.Ün_½ÓýÑEÎ.í¾eyê?ÙWÕa×îaèŽ |LõM!·hö¿2Ÿ”ôõf°¼¯éZ¿‡,n쯡– aYar Æåm¬Fkcí6ßóñýö+ç±0—µ–‡U).DKEEö›oùø‹þû}¦Ûþ~"ÿ¾ÅaÉ.Æ—D´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEEö›oùø‹þû}¦Ûþ~"ÿ¾Å’ìD´T_i¶ÿŸˆ¿ï±GÚm¿çâ/ûìQÉ.ÁtKEBníG[˜ï±GÚí?çêûø(örìÈòŽgý*ØnO¾x#ý‘Ed~Ð^'ÐtÛˆfÔµHm­–Q˜Dò‚ì™ ò+á[ò¢¾’–&*p„¥gdqºr“m#À¿e¿këª_øxjsfZéòÝAùr¢RU±¸ 3|¹Û–'$׺6·«ÿó~tQXå²nޝ¨WIOA§[Õü¿Ïÿ}Rmj¿óÿ?ýõEè™YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõEmj¿óÿ?ýõGöÖ«ÿ?óÿßTQ@YöÖ«ÿ?óÿßTmj¿óÿ?ýõE‡XÕü¿Oÿ}Qý¯©ž ôø?íQE i#äß‹Úî­¬xçT¶Ô¯^xtûë‹{XÈcA+ `“€c’p2xQE|}FÜÛg¤¶?ÿÙgwenhywfar-5.12.0/doc/dialog/images/qt4-4.jpg0000644000175000017500000010106013142134462015523 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀ£†"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ú/GÑíæµÎMÃåg =MdxÏTðï†Ú)ôÑ{¨^1KKVÝ,Äu<Gv$]…ÿ {s²?¹ýï­|ßñ›[ÕtÿŒº¬Ð¸ŒÃkíŒíŒ s·êå«êrŒñøÇAJÉ_Ëc‚N1‚m£?ˆ¦Óáûf³ðýa±2Ig~·2Ä=Z<.@ï´±ö5ÙéÞÕôË}KMŽÂêÒáÅ*JpÃúcȯ–|IüZ‹0ô(¸þUé?²®§w=¿‰4ÙZÚÞé&ˆ@F6åƒåõêçy \º‚ªçÖÚ7ú“ BNÉÑý‹¦Ï•§ýü£ûLÿŸ+Oûù\'í«êz'Ã;CI¹k+¥¿±ŒM ႽÔJÃèT~µÎü1ñÿ‹žÏÅ×¾*´‹Z‹Lñ ÞŸ ¾MuÉ„ª®è”tsóõòn¬ÓµßÞl¡^Ç®ÿbéŸóåiÿ(þÅÓ?çÊÓþþW€j:×âf¡ho5$´“Å:u­½±ŸÊò#“OiYH9†JñÏ~+Ã?|s‹8dþ˻ԯ¼/¨j6Z—Úškˆ¤µÉw mÉ\ìÊqœO·—v?f»LbéŸóåiÿ(þÅÓ?çÊÓþþW‡Ü|\ñ†™¡xJÃû LÖµÝcImA¥¶3Iˆˆ„.ØÓ"V-ó`OqZúÅr×YÐëÃi&¥odó]Þ åË;a¡-‘/1# æŸ¶—ó1{5ØõŸì]3þ|­?ïåغgüùZßÊó_>%ñ‡ˆn|Y‰çÑ®#ÓµëË(DD±yr@1÷Y¾cÞ½C?ôÎ/ûèÕ*“j÷bqŠèCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾>y÷x­Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ+Ÿñö‰¥_Å¥ÚèÉ©ê“&ôµ·¸7»„_¯'°5Ógþ™Åÿ}ð{Ý_Rµñ—ˆæI<¹Þýã-Œˆv í·ÃÆÔÃSRMê{Ü?“Ã4Ä:nÚ+úž…s¬[éaeñ„#±²$º·ºûJEîàÀ{€k«IÑ&¶Yâµ²’)rÓô–KÉîÖ]£¹P¤œþê+Ò|)áÛ? x^ Ì,‹³I+ŸšY–sîMtTVxuOðDßÄãÚu§{1ñpb+!²1ó·ñ{QV¾9ô»q¹~÷Ls÷Eõ”êsSŒ»£ÆjÍ£Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|Î'øÒõ;(ÿ Ug½E‘Ñmu¶1BÐØM*înT Až ò+BÍWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠô{‚½¾¡lìØÍò;WrÍ€NÑ’pxâ€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠAd%¾¡#)Úè–3ÆpBer# dŠ·EUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠÂºñ¹ç±°ð´÷§˜¦’WC"öm¢6À=G=ÎÆ.[ ÉGs§¢¹?øH¼OÿB{àLŸüføH¼OÿB{àLŸüf¯ÙHŸi¬¢¹?øH¼OÿB{àLŸüføH¼OÿB{àLŸüfe ö‘:Ê+“ÿ„‹Äÿô'·þÉÿÆhÿ„‹Äÿô'·þÉÿÆhöRi¬¢¹?øH¼OÿB{àLŸüføH¼OÿB{àLŸüfe ö‘:Ê+“ÿ„‹Äÿô'·þÉÿÆhÿ„‹Äÿô'·þÉÿÆhöRi¬¢¹?øH¼OÿB{àLŸüf­é~!¿’è[êÚ Ý‹K‘…dŸÌ`2W0ÙÀ'€FÉe:rJìjqnÈèhª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEAEª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿGÛ‡ýõü\ÿñjŠ«öáÿ@ýcÿW?üEnôÖ?ðUsÿÄPª* ¿ˆ’‚ßP2® ‹ìy á¶lÝ·‚7cg4¿nôÖ?ðUsÿÄPª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿGÛ‡ýõü\ÿñjŠ«öáÿ@ýcÿW?üEnôÖ?ðUsÿÄPª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨¦Ã$sD’Äë$n+)È`z})ÔQEQEä_ú]¸Ü¿{¦9û¢Š>9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ ̶aŸbªb·8¹‰I­:Â2m¶²ÿ—oý•¡_Å~ ‹ÃÚ+jrÙÝ^þþ xíívy’I4É (ÞÊ£æ‘y,ª¶~)výæ±§Â=Aq<©ª^Û¬Â8¼¬Ê'‘ @Hw9u(BåHpF_Ä2ã^ðÂé–É+—Ô´ùdò§0ºÅä2HÊà©R‚¤7sŠåüqàÛÆ´¾µÐ"¿¼Ž ëVJo5I.\ÜÜ Qaî$f¼–î`“‚yzÞ5ð”6oy7Št8í’àÛ4ͨDfmØo^ECk㯠\xÊo E«ÙZ;hn´Ç™D‚F ‹»s2¤{Øc…tn\×´›ø”\èf§ö> ¶“J–ÕÝ'Èc¸ýÛFv.ˆmš_ [kºoŠíîoô”d½Ð,,îg²hÖÞÒ{srλƒl&e ±[§8ÐMâ_¶«XiVÚ«¬Þ^ÛÏr±Ø˜dp´JìÆicfL“×Ò™oãÏ ¶‘g©^ëVZTwŽñÇ£:[Éæ#”’2®GÌ®¥HäV'Šô]WVñ¾‹c«jMµ®›} ×vg/¾Im FDÈã "s¹#8<î¿áÍsLºNðí®£&›%‰ŠK›Cb×ÎòÊò}©îщŒ™7~íIÜòqÈéú·ˆt]!­×UÖ4ûtÛ-ÅÍÊEæ·¢î#qäp*+ßxvÆÊÎö÷ÄUµ­ðSi<ב¤w€ ÆÄáò#ê+Êì­uo izUƱ¡ÃªÊþµÓ®á–òû,+Ë™‰Œª“qýÚðr+7IðçˆÞÔ­Fµ$á 6km;ìdl¨KïˆWcì üƒ!¸À½‰²2 P×eÍŒõ÷mÿ£Ò³|-lÚ_†4­1Ì»­,¡€ù²‰(~gñ6­á?i‘WN³¸6§ÙêzŠ]Ü«E/™021™BȪˆÚ@âF)øg[½Ñ¼A4ÖÚÄ—·­`ÞN³5ˆûRÛMæ4[m"«¯îË1$‚/ ÏO‡Å>›E“[‡^ÒäÒ£$=ê]Æ`\ÈÑϽx£ÃÑéPj²kÚZi÷ˆ.šî1 ¤+1ÚùÁ£žE'±®/\‹UÕl4ÍV/ Io.Ÿ¬-ìº\³ÁæÝ¢Àñ%\ǽK«(/ÿ,—‘ÐgØøsRºÔ´ÝF÷EŽÚ ¬‘fÎÛI¿·–MÃå’Y¬ÙÉÈŠC06óÔdþñΙª´–ú¶‘±ý£mŠÜ*ÌñÁw4(Â2ʼn)$Ž3’08æñv‡agök\Ðôõ2Ü*³ê)°¬Sylw6ß™I@ëüÛrp âcðÍì~kdÓ"]A¼_ý¨Ød bþ×ó¼ÝÙëönÙÝ—âájÞ*Òµ COO*ÍüC ‘Æ×ZŒrÀF 9hƒž: ƒ‚q@ΛÆ^6Óôv†ÂÏTÒ¤ÖP°·{'S0Š{¸avòÃá$$™Á9V‡ŠüL4Ó•t­CU¹ÔnþÉmmdbÎ"’RI–DPDÿÅéÅy®©¡ëß.……æÒµ-jóÃ?Ù··VcÕšâ{»o$Éc¹p«)ËH‹¬pÄñŒ€ K?è ¥OªÝÇ  k£is­4p43VØNâ„•e`Uˆ!´õèz~—«­i¶š|Û|»©î‘"}Ã+‡'#§<×xƒÃÚÎ-”¾:®¡$ÒÜM©jý‰µ'•Ö%R­r¢%Œ¬aX*Ž< føwK×ü;¦øbûRÒP¹±›VìEÕ°˜}¢ä˨IŽ"DQBìÂÈØQ‚´ê—>(ðõ¶5{{K‡M2…Ü—q¬;Ã+¼¹ ¬ÏPGjÑ·¼†æÞ;‹y£šT"¹Ñô'Ô|go§éOöQi÷S_ù»°(òÚBw ŠÀÎO Cñ@ÿ„§Ã#Fh­&…õ î"º]ÑK 7pÍ*‚rFÀ0IàdÖv±àË[?Lÿ„'IÐô©´½SûJ+D€[[\Ha’å)ÚLr>Ö ªð@¤3wMñ~¨C§Ëk~XjenˆÿhHä‘ãte ŠBC…éêF`Ö|sá!åKýAÒHµÓÖYÝ5¸¹X•QIbb!†2 ;~÷ËŸ øR=uGm|x„ëohg‘m9²6^H—aõD6ÿ/–Ï˃K£øKÄâµ­jM!f>)mfH­e‘•!þÉ6J€² Î$Tàü´³ñ=uüB}×VÓµi÷RZ\]iW)d³Žes窎\›,UCà«Waáïx_¿’ÃL»î/<$ÖsAæÅœy‘™D‰’äÈäsÈ®cÄñí—ÄM&Ûû/ì~)´™­®$¹‘d†áìaµñˆÈòÿu»xbFq°õ®’óI¸—ÇšN½¶¶Z]휈IÞ^imÆÐ-ß<Ž«€yÀ{Å#‡Å—ºá½?S[ 6ÞþâKU­¼é.R5º±gc–u0÷4–Ÿ<%=ŽŸx×—QÅ{ooq¿ìS(hz†eÖ<7ªi·fÖmtû¥k„“ÊŽMAmZRþUdÞñ±8#kc“gáÍN×ÅÜEm+XÃâ…½Ye¹óÛ ì‚Ffbì|ß”î˼r9¨%Ñ5{¿ _øjëC‘‘|Oø’Iahní¤ÕþÔåFòß,DîWUÉáwP3ÒtMG×-žçEÕ¬58ö4–— 2«z¤€}«žÕ~![iº†¯Úµ&Ÿ£L°êœK[ÀL1ÌX¯›æ•T• "2>”i–¿u­P[¬vWze„I"•æŽK­ùœ…xy#‘€3ƒŒ#àë½W]ñcjº¾«m£êšŒoýŸÀ!¼„YÛFÅÛË2€Z7B¡×!z`ä€wð’è?ÛØÛšgö®3öµ'ŸŒg>^wtç¥2çÅ>¶Õ²n5ý*G(>É%äk6]‚ ØNï™™@ã’@kÊuÆ·zôQ¥ìvø’ å[oìøìM¸»Wi9Srf1î/Êä—Á`v´#K»‰6‡ ÃIãk[äÔÅÄ'ýeòNfï7ÍX›f6ãË\îÇìGÄZ*ëcC:Æœ5R»Å‘¹O<®3Ÿ/;±ŽsŠÐókÆ!𞽊$Šäë·Oâít– tô´ÏóWyhþÕ¹Wä* *œXó½èO/üT6gþ'ÿÐá«þmaÍ/üO-NåÚoý *»ç{Ð~¹âÅÓõoì›-TÖ¯Ö¹– òbfeVf–D_˜£€$íd«ü;‘wcÙUjψ-·Šn¬õsD´ÒN—a{cw-Ú ¸k‰.Ú嶺í†2»¼NNF8‹ø‡Eðýޛ徿söÍ3PKß9VY…µÌ25¯ï_€¢6òÉ;~c¸†Ë?Y§éyã­K_Ôtš ¢ -äFÝ<жÖaÀ’,à•=‰Åu^"×mt? ê:ýÐ’[M>Î[ÉD 3²F…ÎÜ q’½eéž4‚kùl5'QðíÌv­vRh6<(Ê®âH¥t–L‚ÀÃŽk˜}YÙðøYí‹kMáOìó•rn>Éåìß¿ŒçóŠOxWR‹L¼Ômu;ïk‚(á¶mM-HŠ/>9$"Ç^gîÕ”¸?:&Nwzg‰4=OM—SÓu­6öÆÞmͽÒIm9u$ NM3KñG‡µ[y®4½{K¾†ijImw‹À3$”~O+zò(ôÏoâËÝRÓ Ì:\ñ.±=’½ÇÙn%–h¤û2ˆÐ2L¶îe°0­¼²Ô|]¬øî =)´K©ìtpbi i%hgžFY ù‘dÚ¸mãk!aƒŠöm]Òu»Cy£j–:•°b†kK…•7£r’3íW|Úó¿†ún£g©jú¦§º“Þ¥¼dê’X—o/Ìä-¢„8˜– €gµó½èsÃ':[[»Ÿý%iÖW…Nt|úÜÜÿè÷­Z(¢Š(¢Šò/ŽGý.Ün_½ÓýÑEú]¸Ü¿{¦9û¢ŠúªÁ‡¢8%ñ3Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|æ'øÒõ:èÿ `çßÝYYN%Ó£V³·Ú­4™Ú"P ÄxÉ8ç­ê©¦ÿÈMÿ¯ oý•¡ý¨ÏΙÿeÿãTcêóó¦ßÙøÕiMum„šâ˜Œ€îÇãQÿhXÏõ·ýý_ñ  ?Øú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿUïí ùþ¶ÿ¿«þ4hXÏõ·ýý_ñ  ?Øú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿUïí ùþ¶ÿ¿«þ4hXÏõ·ýý_ñ  -cÁÖúº½Ÿ‡u…÷Ä.‘å·÷—t'ÜUñ£ßs¦ßÙøÕ^þаÿŸëoûú¿ãGö…‡üÿ[ßÕÿ£ý¨ÏΙÿeÿãU Þ¨\D±ý³L\HŸ2S÷\6?Õ{V§ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿƪ÷ö…‡üÿ[ßÕÿ?´,?çúÛþþ¯øÐ§ƒmí5KRÖÏð_ÜŒOu:Ë(ÿiÄ9nÍ_þÇÔ?ççLÿ¿²ÿñª½ý¡aÿ?Öß÷õÆí ùþ¶ÿ¿«þ4 £ý¨ÏΙÿeÿãU h‚ÞËsöÍ3÷‘¢mó%ãicŸõ_í~•©ý¡aÿ?Öß÷õÆí ùþ¶ÿ¿«þ4£ý¨ÏΙÿeÿãTcêóó¦ßÙøÕ^þаÿŸëoûú¿ãGö…‡üÿ[ßÕÿ£ý¨ÏΙÿeÿãTcêóó¦ßÙøÕ^þаÿŸëoûú¿ãGö…‡üÿ[ßÕÿ£ý¨ÏΙÿeÿãTcêóó¦ßÙøÕ^þаÿŸëoûú¿ãGö…‡üÿ[ßÕÿ£ý¨ÏΙÿeÿãUSWðškfËVƒ@Ô-I aº*:­­Ÿí ùþ¶ÿ¿«þ4hXÏõ·ýý_ñ fu¾ƒuop[ɤC j#G•UTp,OþÇÔ?ççLÿ¿²ÿñª½ý¡aÿ?Öß÷õÆí ùþ¶ÿ¿«þ4£ý¨ÏΙÿeÿãU«l¦+;XN7CoMŽ„ª*œ{dTÚóýmÿWühþаÿŸëoûú¿ã@²hɪ¿ÚóýmÿWühþаÿŸëoûú¿ã@²hɪ¿ÚóýmÿWühþаÿŸëoûú¿ã@²hɪ¿ÚóýmÿWühþаÿŸëoûú¿ã@²hɪ¿ÚóýmÿWühþаÿŸëoûú¿ã@²hɪ¿ÚóýmÿWühþаÿŸëoûú¿ã@²k7\Óî/å²6ò@† ™ØÌÌ 2ÿ “ßÒ¬hXÏõ·ýý_ñ£ûBÃþ­¿ïêÿQþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¯hXÏõ·ýý_ñ£ûBÃþ­¿ïêÿQþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¯hXÏõ·ýý_ñ£ûBÃþ­¿ïêÿQþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¯hXÏõ·ýý_ñ£ûBÃþ­¿ïêÿQþÇÔ?ççLÿ¿²ÿñª Þ ·meu¦³ðéÔÕ6-áGóÂãßäîÆ;f·´,?çúÛþþ¯øÑý¡aÿ?Öß÷õÆ”±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ«ßÚóýmÿWühþаÿŸëoûú¿ã@Œ·Ð5½ŠçíšgîãtÛæKÎâ§?ê¿Ùýjoì}Cþ~tÏûû/ÿ«ßÚóýmÿWühþаÿŸëoûú¿ã@±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ«ßÚóýmÿWühþаÿŸëoûú¿ã@±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ«ßÚóýmÿWühþаÿŸëoûú¿ã@±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ«ßÚóýmÿWühþаÿŸëoûú¿ã@òèw’ÄñK6•$n¥YZIH`z‚<®ETÑü#hm4{oéÖå‹ùVªñ&ãÔíX@ϽmÿhXÏõ·ýý_ñ£ûBÃþ­¿ïêÿQþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¯hXÏõ·ýý_ñ£ûBÃþ­¿ïêÿE¤Ùê:}¶¥K‰$}ßi™~û³cIé»…Zÿ‰—÷t¯ü ›ÿŒÔ_ÚóýmÿWühþаÿŸëoûú¿ã@ÿÄËûºWþÍÿÆj9.®à»µ†â+"·ÃCpìT„fä4kÇËŽµ,3C:†T•AÁ(ÀŒþWPÿŽ•ÿ_-ÿ¢d  *(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÕM7þ@úoýx[蔬 ƒþB³ÿ×ÿô'«˜‚©ÛÿÈVãþ¸Gÿ¡=\ ÐQè(¢€ AF ¢Š0=‚Š(Àô`z ( ÐQè(¢€ AF ¢Š0=‚Š(Àô`z ( ÐQè(¢€ AF ¢Š0=‚Š(Àô`z ( ÐQè(¢€ AF ¢Š0=‚Š(Àô`z ( ÐQè(¢€ AF ¢Š0=‚Š(Àô`z ( ÐQè(¢€ AF ¢Š0=‚Š(Àô`z ( ÐQè(¢€ AF ¢Š0=‚Š(Àô`z ( ÐQè(¢€ AF ¢Š0=‚Š(Àô`z ( ÐQè(¢€ AF ¢ŠGÒíµYµ9¯žé…½ÊÛÅWRBª¾TnOîÙI$Èz“ÀÇ9ôíæÚGÓ®'pH|èuIäòäF(ã™ îWVpT‚8"³îî4«ľ»ñ]LJn/.€6wÅuxhÙÕ‚“†]ØÈä©8¿„¾ð7Âá{†üw©]ØÞ|ÒY_êò@$j…J¾ÒAÁÈ;Wgmᛉ.ôñu6 “,R>L1“üê}CþB:Wý|·þ‰’©ø7þ@p×(?ôDusPÿŽ•ÿ_-ÿ¢d¦#JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+A-ÿä+qÿ\#ÿО®U;ù Ü×ÿô'«”QEiøgJÓ.t…šãN³šVžmÏ$ Ìzã’E!™”UïiÚ}¢ØIiaknæëih¡U$yRq=…q.½Õfñá'P:[ßÁsw=êÄ’IP”¬aÁMìÓ§,­Æp@SEy·!×ô{¯ªÝÉâkáâI>Ìn¼«Vem2ôbFá~f,¨8 HæmSâbhÚÔúæŸa¦ê–úÂèï ú¢¥˜ […crè¸Ê`Ù)œü¡IÆ@=Šóíâ\ZÆÆ“cc¨ê’êçGŠ =Mf´’àCç–[•^c‚å¶n+·Iã¸Þ¤î;vå³ò°„±ÜÜé LÖ7RÂTËlÊæ+È]J±SÈܸ8^ÔÄY¢¹Ÿ†7šï…]õMBmFæßTÔlÍÌÉ<‰ôð¡aªgdkœ(Ï\WM@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@xUŠkø˜‡þà«7w©;f}Õ_ uÖ¿ì ?ôš šó© cÁ¿òƒþ¹Aÿ¢#«š‡ü„t¯úùoý%Sðoü€àÿ®Pèˆêæ¡ÿ!+þ¾[ÿDÉ@TQEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚ªi¿òÓëÂÛÿD¥[ªšoüôßúð¶ÿÑ)X oÿ![úáþ„õr©ÛÿÈVãþ¸Gÿ¡=\ ¬iz¥îŸgöT±·™VI9¹*Hgfé°ã¯­W¢ÉuMBïR6É-œ$3y…–à¹?#.1°{×µax›ÃÖÚൔÝÞi÷¶n^ÖöÍÕf„°Ã¹YYHꬬÆ@#bŠç­¼+¾—5ö³«jw:n ú„sÝIç‘­ä·ÚB"¨@’± Š¿0×1ßø3M»}Fqwou{©&¨—0È¢K[„·ŽÜ4YR1åÇ‚0;ÜKE1ÍǃãºÑ£²½×õ»«ÈnÅì›Ë¹‚`»C XÄJ6–]»6Íri—¾Òu%´ÝÍþ®ÖÖW6eî¤]Ò‰å†V”UÚêÐ!B›Bö u4Pwðõ'Ô?´WÅÞ'‚ñôشˉâž×Fò¸ß˜ˆÞLÍó®``‚X›:Ÿ4éþÍý—©êº‘`šiþÍ•͵L쉼Ä|mËa—k ͆æºÊ(•¸ð‡."1M­vQYY.ü}‚(ö•òFܨ۲[(¼áT†Ki›Kk5Ô.c˜Àbб™U¶ãÌ©MÙç•+ŸáÇfŠç¼ávðµ­Õ¨ñ­«Cqq%È[å·T’Ë$²²˜bŒüï# phâº( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ø[®µÿaÿ¤ÐT×MCánº×ý„þ“AS^u4Ìx7þ@p×(?ôDusPÿŽ•ÿ_-ÿ¢dª~ ÿõÊý\Ô?ä#¥×Ëè™(JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+A-ÿä+qÿ\#ÿО®U;ù Ü×ÿô'«”Ti)ŠÞòU Wtv²2ä¸<ƒRVÿ„äŸõÞýô†s†]®‹$Q;TËm"pN2À€þU%lxÇýNŸÿ_ûJJóÁc¨xÃÃ:6½±ô+¸îÌL؆æí|¯&'7 ä€ààPY©YXÝXZÝMåͨ\kUÚO™ ŠIJä ’)NËŽ¤n¼ÇÅš&›eyàí#Á×Ú (9²Duµì»Âác9Db˜ÂíÀ,©ÉÍ-kÅ*Ò4Ûí/ouK¸åïZ V7{g¾"V6†ï˜ Só.w¸ž#×¼Cö-Þ!Ç…­u¹qOæK6ýêþr¶"‹Ë]Áv·ïÌ(ê4W’j~?ñµŽ‡uÀ?·4‹[Ëß6"WÃæMŠg“或l+wFÇ;ô?ã ÜGâk¤}.8U®æ¸F®ªAË•Ú0HäÉÁÅ1Wð»FŠÊmWVÓt hº‡’,t¥‹Ê>ëƒâ&“rü˜lh[ XÞ€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ánº×ý„þ“AS^u5…ºë_öúMMyÔÐ1àßùÁÿ\ ÿÑÕÍCþB:Wý|·þ‰’©ø7þ@p×(?ôDusPÿŽ•ÿ_-ÿ¢d  *(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÕM7þ@úoýx[蔬 ·ÿ­ÇýpÿBz¹Tíÿä+qÿ\#ÿО®PE´—Ö±­µ+ˆ¢ÜÌ$dÌXòPž¤ÑE$ïyrÑ«ùçXŸz«$`nÚW?*ƒÑWÕtí?U±’ÇT°µ¿´“ýd0¬‘¿ÕXjͧè:mkk§èÚuœr™­b‚Õ`r¬……b®Ë‘ÎŽ„Ô—:F•uo{os¦YO û¼ŽH–Ⴊ #v¢.NxU…]¢€2áð燡ÐßB‡AÒãÒ\Ö)i·lœœÆÓϵOe£é6)l–Z]²ÚBööÂuA NT²&ʤ¢ªú »Ea\x3Á÷ \xSB•mÕú|L#T,È+ÀRî@ 7©«šÖ¡k~GöÖ‹¦êfmð}®Õ&ò›Õw´ð9£EWû Žë–û¾ë°Éò—3»@~>o—Ž{qPê6¨hÇE¿Ò¬.ô¨†Î{tx ©FÂ6à qéW¨  ŸxcÃ^3Ÿx{IÑþÑ·Îû ”py›s·vÀ3Œœg¦O­kQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?ÂÝu¯ûý&‚¦¼êj uÖ¿ì ?ôš šó© cÁ¿òƒþ¹Aÿ¢#«š‡ü„t¯úùoý%Sðoü€àÿ®Pèˆêæ¡ÿ!+þ¾[ÿDÉ@TQEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚ªi¿òÓëÂÛÿD¥[ªšoüôßúð¶ÿÑ)X oÿ![úáþ„õr©ÛÿÈVãþ¸Gÿ¡=\ ¤°²Ôï­þÑo Ÿ”]Ñ|ˆ ò±^@CéëQÖÿ„äŸõÞýô†a^Úê&w¨I¤òÁŠfbÖn…÷OzËñ»¥h‘Üê—&%–A(‘<²Ìäµ#@]Ûœ('žÕÕxÇýNŸÿ_ûJJó‹?ź‰ŽŸyaeowks¤ 4°™Œ%f¨,ày,„(-ûÞ˜ÍX_é÷7iÑO:jš£éÒyñIm%³­¤×hä@ùÄ@m!xp{`ôõçž-‚×Ç2øDK¡j’iqøÚæ;Û ÝÓîðïËvDùÂî'Ã<׈ü3ªÚhºÞ¢iŸfÐm|U¿b:l—6ï`l!gXí‘ã2Åö—,QWl ÑY7ZÏ‘ã ;ÃßfÝöÝ>î÷ÏßžD–É·n9ÝöŒç#:ñå¶%Ì^·ŠæÊ÷Qðúø‹íšm¾…=ŠýˆÛ‘åÅfîò˜…ÁI ¿8 ·›Åº§}wá–ðF•¨éš\N¦³Z^ÎG®¬˜Û#°Í³È¨åÚB©g%™k¬ùþ0Ô|=öm¿bÓí/|ýùßçÉr›vã¿gÎrs¿ Ç:Õâ¶•áY<[-Õ÷ÃÝnëF ØÁ¦C‰1ó,÷„ǰ/8ÙœîÁkš¾‘"ÿeÂÃðö§â]žµ·‡ì¶r^yZ’ïûK|€ùr>aÛ)ÀæÁžÇU5NÇGÓeÔuü›hq½ö–9$(TI$$’¯&Ôô_Ég¦‹xoþÑm£Ú'ŠÌrlm]¦ø b9”(“2) vyÔç½¶Ó<>—¶ú}ÛÚÅ{-­­ÍXÎ,ùAÉP7`9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ ©¦ÿÈMÿ¯ oý•nªi¿òÓëÂÛÿD¥`h%¿ü…n?ë„úÕʧoÿ![úáþ„õr€ ·¢èãP°RꑳK*íŒG´‘”c(O@;ÕJ¿áýbÆËL×-p’¬Ó¬Œ0db9 AàŠC Ö´Ïìß²IõÔÂYü¶YDxÇ–íü*UÌø§^¹Ó.ì4½/Mž­¨y?“Ç_2I$ÚÅTA±%Ôc©Oˆ5K=@YEjgvKíºÞD|·Ë(H®GÅzF«>¯¦xƒA{3©iñÏ‘xÌ‘\A7–] ¨b‡tQ0m­÷HÇ9¾%ñn±¢ \kö±èÉs®=äV²Õ¸‹ì72 ŒˆÄ‡2¤`ŠÄ®0Açr?xiô5±"ÚGqöWG´™gäb/ ¯›æŒ&ÝÄqŠ©6“âMZ÷Ãz†±‘m.—¬I{,³É*ˆM•Ä ¡Ù{A·=Ç8¾'ð¡ªÉ«ÝEuÍ'ˆ¢Öl£Žú{]êº|VË$Œ²Swðä• ›þ? ÿÂ>uÃ~âÌOöb¦ÚQ?œy^Fß7ÌÏðmÝíYw>0µ(Ñî¤-t ´MNò鮢0mx'³@Ïæ(t+æÊ œry–Ö,´{k«(4û}f×[þ×X'Õn¶+-ÌàÈO–Ç  U>S‚Kü]àm_Åúžªê·º]¥ÙO³3MWO=¬® M¬ p\’ …8*Wø¥YxÚöBúõ4©4+ûH†—;:ošíf•Õcó6ÇKáWŽ™9èõïxoCû?Ûõ?h€Ü§Ù­¥¹Ä#•¼¥m‘ò>vÂû×;q¤|AÅ> ³¶ð³O¢Zé÷0Íw0X¦Š[—2!ɉÇÈv–än] ±„‘&–l¯–Þ8ä—{ÉÛÃqŒ6ŒRuÊs´‚2k¨®OÀÕ<;ªxšëRñÞ°º®¡Ì p°‡U[Xb,Â(£ÉŒŒ ®ÔŒðÅÉë(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(þë­Ø@é45çSPø[®µÿaÿ¤ÐT×Ms ÿõÊý\Ô?ä#¥×Ëè™*ŸƒäýrƒÿDGW5ùé_õòßú&JÒ¢Š(Ⱦ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4SMÿ>›ÿ^ßú%*ÝTÓä¦ÿ×…·þ‰JÀÐKù Ü×ÿô'«•NßþB·õÂ?ý êåQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE?ÂÝu¯ûý&‚¦¼êj uÖ¿ì ?ôš šó© cÁ¿òƒþ¹Aÿ¢#«š‡ü„t¯úùoý%Sðoü€àÿ®Pèˆêæ¡ÿ!+þ¾[ÿDÉ@TQEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚ªi¿òÓëÂÛÿD¥[ªšoüôßúð¶ÿÑ)X oÿ![úáþ„õr©ÛÿÈVãþ¸Gÿ¡=\ ´ü3¥i—:BÍq§YÍ+O6ç’f?½qÉ"³*Æ—ª^éöeKy•d‘ƒ›’¤†vn›:úÒ7‰´í>Ñl$´°µ·su´´Pª’<©8ȸ^ê³xGðÆ“¨-ï๻žõbI$Ž( JV0à¦öiÓ– Vã8#®Õ5 ½HÛ$¶p@Íæ[‚äüŒ¸ÆÁýï^Õ…âo[k‚ÖSwy§ÞÙ¹{[Û7Ušà åee#ª²°8€;Æëú=ׂUnäñ5ðñ$Ÿf7^U«2¶™z1#Fp¿3T$s6©ñ14m ê}sO°ÓuK}atw†}QRÌNÐ-±¹t\Gå0l”Î~P¤ã=·…bWÒæ¾ÖumNçMÔPŽ{©#Üò5¼–ûHDUV!QWæúæ;ÿi·o¨Î.ïíî¯u$ÕæIkp–ñÛ†‹*F<¸ðC{ƒÁÀÃÑþ%ŬhÜi66:Ž©.®tx ³ÔÖkI.>ye¹Uæ1.[fá‚»sÅQñW‰ßCñï„ïõÝ5¡Ô®tmVÖ >ÒQ;Op×:xHãrÁwe‚àd¶Üu7ŽëFŽÊ÷_Öî¯!»°jo,Bæ ‚í c(ÚYvìÚC6Aɦ^øIÔ–Ðkw7ú»[Y\Ù—º‘wJ'–ZBQWk«@… m Øp0æ«âÛo‰Ú´¶~³¼½ é’ÝÁý«±!+qû´(ùŽrq•UùNXq™ï%Wä}Ò7—&íQ·–뿇©>¡ý¢¾.ñ<¦Å¦\Oð¸‚7•ÆüÄFòfopÃÄÙÔü §Oöoì½OUÐ<‹ÓOöl¨¾mªgdMæ#ãn[ »Xnl74 ¥uñ'O·ƒKœé×RG¯ZCq ù3_´Š§ÉKˆµƒ5®õ±xEÏí#pE¼¯7ip8à†ãÀ¸ˆÅ4´qÙEed»ñö£ÚWÈ er£nÉl¢ó…P7/ôç»ÑŽžu;ø$Øƒíº¤á”ƒ¿…Û’G#nÓ’1ƒŠa|;Ô¥¸ŽûKÔ/Óî^õ µcw¶{â%`S`ˆnù‚?2á‡{‰â={Ä?bÝâáxZ×[—Dþd³oÞ¯ç+b(¼µÜk~ð|»Kx>á K hR­º¢BO‰„j…™åx ]È¡fõ5sZÐ4-oÈþÚÑtÝOì;µÚ¤ÞSz®àvž"žk©øÿÄVÖ:ÔkþÜÒ-o/|؉_™6)žLš"Y°¬AÝì S«ø­&§iðÞé4ëÆûS½¥³ÝK'•ˆ¤¸Š9¤g@6~휖P6òF1]GØlw\·Øí÷]€.O”¹˜Úñó|¼sÛŠrÚZ­ˆ±ЋA” ,&1·oM¸ã1Láeœ/ˆû6ß±iö—¾~üïóä¹M»qÆß³ç99ßÐcj(¢ªk…¾•§KuÜÅËki-̧$ˆâVväó€p2Oš·EbxgÅZ?ˆ®/m´Ó¨,ö^_Ú"¼Ó.lÝ7‚W‰£BrôÏê+n€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9Åÿ¾­ÿ_Kÿ¢"©êÿ¾­ÿ_Kÿ¢"©é€ßÿÈúåþˆŽ®jòÒ¿ëå¿ôL•OÁ¿òƒþ¹Aÿ¢#«š‡ü„t¯úùoý% 4¨¢Šò/ŽGý.Ün_½ÓýÑEú]¸Ü¿{¦9û¢ŠúªÁ‡¢8%ñ3Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|æ'øÒõ:èÿ TÓä¦ÿ×…·þ‰J·U4ßùé¿õámÿ¢R°4ßþB·õÂ?ý êåS·ÿ­ÇýpÿBz¹@oøGþ@Iÿ]çÿÑÏX]ìl˽»3’b“ùRÐxÇýNŸÿ_ûJJó‹?ź‰ŽŸyaeowks¤ 4°™Œ%f¨,ày,„(-ûÞ˜Íu1YÚE ’+XÇFXÀ"¦ <ñl¾9—Â"] T“KÄ×1ÞØÉ膟w‡xØX˲'Îq8 †æ¼GáVÓEÖô}Lû6ƒk⨥ûÓd¹·{a :Çl–/´¹bˆØÊ¸Ã`©öŠ(Åì4K˜¼oÍ•î£áõñÚ/4Û} {û·#ËŠÍÝå1 ‚’=~pn37‹t=NúïÃ-à+QÓ4¸4Mf´½œ]Y1¶Ga›g‘QÊ´…RÎJ{ñ [Jð¬ž-–êûáî·u£?…ì`Ó!‹D˜‹y–{ÂcØ÷SÈCœlÎw àµÍ_H‘²¿áaø{Sñ.Ï ÚÛÃö[9/<­Iwý¥¾@|¹0í”à óþÇEÓ¯,ô&¾ÕcòõmVf¿¿SÉŽG,YôŽ0‘]™ï]PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP8¿òÕ¿ëéôDU=@¿òÕ¿ëéôDU=0àßùÁÿ\ ÿÑÕÍCþB:Wý|·þ‰’©ø7þ@p×(?ôDusPÿŽ•ÿ_-ÿ¢d¤•Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV‚[ÿÈVãþ¸Gÿ¡=\ªvÿò¸ÿ®ÿèOW(¢Š·¢èãP°RꑳK*íŒG´‘”c(O@;ÒRб­iŸÙ¿d’;ë©„³ùl²ˆñ-ÛøTª+™ñN½s¦]Øiz^š5=[Pó&5Ž0¾d’IµŠ¨.ƒ…bK¨ÇR7¨® ľ-Ö4Cá‹~Ö=.udz¼ŠÖCz·}†æD‘æTŒX•Æ<îGão >ƒ&¶/ä[Hî>Êèö“,â|ŒEäó|ф۸‚1@ކŠçÿá3ðßü#ç\7î,Äÿf*m¥ùÙÇ•ämó|ÌÿÝÞÕ—sã QâàjB×@›DÔï.šê#ׂ{4 þb‡B¾l ©Ç'‘0ÚQ^xÿô«/^è_^¦•&…ciÒçgMó]¬Òº¬~b&ØáÉ|*ñÓ'=½ãO ègû~ çí”û5´·8„c2·”­²>GÎØ_ztVDž&Ðb[¶—T·lí’îfrBˆXedRxt8#räd׊Å~!Cð¬šêÚKr3 Å Ÿ$––D7—»P\,>P #ŒS·Es~ñþ©«jš6¯¥[XjrA,Ÿd½ûT’ïÛ‡(„0òÛ*T`<†ÒPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP '@‹S»Ö.ŸQ¿¶+z±ìƒÊÚqo ÏÎŒsϯj}LJ „ÿÈ[Xoø¿ÿ¦¦“ x“Bñ?†¼Gmi{c{tŤíñ˜!ÚÃA „« ÉA^8Ÿ„?|ð’ÓQ¸Ó'kÛë§Ë©^ó#¶ ¹!`*€±ÞÃqÀ ¨†tÞ ÿõÊý\Ô?ä#¥×Ëè™*§ƒÕ“E‰YJ°ŠA ùÕ½CþB:Wý|·þ‰’˜*(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÖU¼÷öÖ¶ö­¤ÜHmᎠñKW¡C ÌÈÁgõ¬ 2Û3\£¹šd vÁ’:ƒêi>Ï?ýn¿(ÿøš‹í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€%û<ÿôºü£ÿâjHEì1ùpê×Ñ $íR€dœŸáõ$Õo¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº±2^LMªÞÈî]ûÈÊúùÕgÓUï#¼{™æ(Þ(æ1D]Ê–PÛ2(„ŽûWÐRý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐ\i©q-¼·M%´žl ñDÆ'ÚɹIO”ív\ŽpÄt&¢þôûA¹ù|óqö£'ÙáÝçy~W™™ßåü›ºíã§7Û/è {ÿ!ÿâèûeïýoïä?ü]Bt;Cqöƒ·ÎûGڼϳûÎòü¿3;3¿Ëù7uÛÇN)š—‡ôýN{yõ(㽚ۘ$¸¶†F‹æVùK!+ó";¢žÂ¬ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅвãûd·¾sý¦X–&ò¢Þñ©b¨[fJ‚î@è7SQZhvv{~ɶßmºZ*ÞÄ)‘pŸqw6 ÉÇZŸí—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€(Ëá}"U±Ymm¤]=U,ƒYÀE²©R¢?Ýü€B1Œm_AW¯4Õ½´šÎòæK›iÇ,2ŤŠF ²”Áv4}²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐ=ÃZ_‡íÏA·ƒJ¶w246V@…ˆ±T@3€9ö­³ÏÿA¯Ê?þ&¢ûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ~Ï?ýn¿(ÿøš>Ï?ýn¿(ÿøš‹í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€%û<ÿôºü£ÿâhû<ÿôºü£ÿâj/¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº—ìóÿÐFëòÿ‰£ìóÿÐFëòÿ‰¨¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâè_³ÏÿA¯Ê?þ&³ÏÿA¯Ê?þ&¢ûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ~Ï?ýn¿(ÿøš>Ï?ýn¿(ÿøš‹í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€%û<ÿôºü£ÿâhû<ÿôºü£ÿâj/¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº—ìóÿÐFëòÿ‰£ìóÿÐFëòÿ‰¨¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâè_³ÏÿA¯Ê?þ&³ÏÿA¯Ê?þ&¢ûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ~Ï?ýn¿(ÿøš>Ï?ýn¿(ÿøš‹í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€%û<ÿôºü£ÿâhû<ÿôºü£ÿâj/¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº—ìóÿÐFëòÿ‰£ìóÿÐFëòÿ‰¨¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâè_³ÏÿA¯Ê?þ&³ÏÿA¯Ê?þ&¢ûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ~Ï?ýn¿(ÿøš>Ï?ýn¿(ÿøš‹í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€%û<ÿôºü£ÿâhû<ÿôºü£ÿâj/¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº—ìóÿÐFëòÿ‰£ìóÿÐFëòÿ‰¨¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâè_³ÏÿA¯Ê?þ&³ÏÿA¯Ê?þ&¢ûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ~Ï?ýn¿(ÿøš>Ï?ýn¿(ÿøš‹í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€%û<ÿôºü£ÿâhû<ÿôºü£ÿâj/¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº—ìóÿÐFëòÿ‰£ìóÿÐFëòÿ‰¨¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâè_³ÏÿA¯Ê?þ&³ÏÿA¯Ê?þ&¢ûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ~Ï?ýn¿(ÿøš>Ï?ýn¿(ÿøš‹í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€%û<ÿôºü£ÿâhû<ÿôºü£ÿâj/¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº—ìóÿÐFëòÿ‰£ìóÿÐFëòÿ‰¨¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâè_³ÏÿA¯Ê?þ&³ÏÿA¯Ê?þ&¢ûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ~Ï?ýn¿(ÿøš>Ï?ýn¿(ÿøš‹í—¿ô½ÿ¿ÿñt}²÷þ€·¿÷òþ.€%û<ÿôºü£ÿâhû<ÿôºü£ÿâj/¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº—ìóÿÐFëòÿ‰£ìóÿÐFëòÿ‰¨¾Ù{ÿ@[ßûùÿGÛ/è {ÿ!ÿâè;ÍÞõ•¯í,£ f‚ {e*ðæ˜Œ`X‚- û÷VþÙ{ÿ@[ßûùÿGÛ/è {ÿ!ÿâèÅ´O˜L¯+HûÙŸÎìèWÔ?ä#¥×Ëè™(ûeïýoïä?ü]1EÝåý£½Œ¶±Û»HÍ+¡,J2€“ýìäã§|ð«EP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh+?>!ÿŸM ÿSÿò5hQXùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘ªKc¬ùËö»}%!çq‚öYqÆ PyÿhJ¹EQEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚Š(¬ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š*‡‰ãðî¥$lÈëi)VS‚C‚ G/ˆt¥x¥Ö´ô‘«+\( Ž óMÿ„—ÿôÓð%?Æ»(ÊAÁiQ€ˆˆ *¨à@)Þ{zÐÿ /‡è9¦ÿàJð’øwþƒšoþ§ø×iç·­{zÐÿ /‡è9¦ÿàJð’øwþƒšoþ§øÖ÷ü%žþÞÿ„þ'ûcûÛ#ûGLÿ«Îîœô©4~ßTÔ5›+t™dÒ/VÎà¸3µ¼3‚¸'#lè9ÁÈn1‚@9ßøI|;ÿAÍ7ÿSühÿ„—ÿôÓð%?Æ»O=½hóÛÖ€8¿øI|;ÿAÍ7ÿSüj{ cI¿˜Áe©ÙÜÊqH¦V8õÀ5ÖùíëX~5}ÚU»7¥ý±Fî¹™Tàöʳ¡#½C<ÑA Ï<‰Q©gw8 RMfÿÂKáßúi¿øŸãW.¶±£#¨d7ŒJ°È%`•—fU#Ѐ{Vþ§ªÙévjíµ•œ ¾k‹‰V8ã_Vf îh”ÿ„—ÿôÓð%?ÆøI|;ÿAÍ7ÿSükQñ%•Ö‡/?öÝÙµ´’¬›…¼×‰ÏÝ)`ŒòW±$?W×íô½CF²¸IšM^õ¬íÊBºÛÍ9-’06À㌜•ã ÿ„—ÿôÓð%?ÆøI|;ÿAÍ7ÿSük´óÛÖ=½h‹ÿ„—ÿôÓð%?ÆøI|;ÿAÍ7ÿSük´óÛÖ³|9¯Ûëº|·¶‰2GíÕ› @}½Ä9àž DÄwÁð9ßøI|;ÿAÍ7ÿSühÿ„—ÿôÓð%?Æ»O=½hóÛÖ€9‹ û-B&–Æî ¨Õ¶³E `§b¢×>-²`/a8r?‹l‘mÏ®76=7SRÐEP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh(¢ŠÀÐ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+;Åò-jŸõç7þ€kF¨x‘OêQƬîÖ’…U$”8PK#þñ¾¦›¾©}¶{ ¬‘¿Ìާ!èAî(ûJÐÝôoª_iZ>Ò´â¿Ú:ü)øB·Aÿ ÷“³ìÓµóŸµíûÛ|ïÞùßwo9Å\’þúÛ⧉âÕ/®t¿ Iâ(<û»9Z7k¿ìÝ?ËŠy -Ç+÷› ÅAÃú÷ÚV´­.ï£}RûJÑö• EÝõâöΕÿ§ë_ý•oí+Y^'d²¶ˆrï}mµ{œJ¬qô OÐ@\œk:)ÿ§¹?ôšjæþ)KªëZö‹áMOÓõ‹«êv÷·o C%Ö)Zm®ÒÁÅt:‹¬ZŽ“3¨—m¹n‚U^}Ù”rzÔûJÐ3Â5;Á¦hþð§‹ï›B>ñWÙåšÆþLGc&zÖågÚŽ!òZL!T‡åÆjmkS°›Lðô—¾&ÔÇ…àñÄ‘iÚÇÛdó^Ïû.ãqûNw˜Ä­4~nì„ÝÆê÷´­iZVÈ­..µˆô.Çĺܞ¸ñ”Ö¶7ðꉯ,WK¸•“ÏÎùÏY>I!†È YŸµOi~.ÕtØuËm)¬b¶Ã©x¦òÙ¥Q ÿgXeû{|Å`ìÎvã Hf÷´­iZ`p3êV ñNþ×Äž%ÔtÛȯ-S@°ŠúH#»¢Œ³”íŸ2™‘÷تÉ÷«žÒlfÒü8|Sg¬ë1ÞOl ò _"m}íäŒÀ–r²;n*X1È +×þÒ´}¥hÅb×Nï,¨Ž RÊ@Á=gí+GÚV€3õcŸØ×ÇþŒ†¬Ö}Ô¢oZíç˱›~?‡t‘mϦv¶=p}+BQ@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÒ3ýk–SòžƒêÍ|æ'øÒõ:é|(¢ŠÀÐ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¤Ú>ŽîÎú>šìÄ–f´Œ’ORIÒbè¿ôÒÿð?þ&¯Q@±t_úéøÿGö.‹ÿ@]/ÿãÿâjõGûEÿ .—ÿ€qÿñ4bè¿ôÒÿð?þ&¯Q@±t_úéøÿGö.‹ÿ@]/ÿãÿâjõGûEÿ .—ÿ€qÿñ5-¶§ZËæÚéÖVòcá·D8ôȬÑ@ š(扢š4’7dqÃЃTÿ±t_úéøÿW¨  ?غ/ýt¿üÿ‰£ûEÿ .—ÿ€qÿñ5zŠ£ý‹¢ÿÐKÿÀ8ÿøš?±t_úéøÿW¨  ?غ/ýt¿üÿ‰£ûEÿ .—ÿ€qÿñ5zŠ£ý‹¢ÿÐKÿÀ8ÿøš?±t_úéøÿW¨ m---’ÒÖÞÙXä¬1*}pMEQEä_ú]¸Ü¿{¦9û¢Š>9œ]Û|ÊóÔ²(¯ªÃ¯ÜÃÑø™êšCnÑí~e?)è=êÍax7_ÒµXÝÙ_C,²Âä/ÊÛX2<ŒÖÇÚm¿çâ/ûìWÏba/k-ªR\ˆ–Š‹í6ßóñýö(ûM·üüEÿ}ŠÃ’].‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š‹í6ßóñýö(ûM·üüEÿ}Š9%Ø.‰h¨¾Ómÿ?ßb´ÛÏÄ_÷Ø£’]‚è–Š„ÝÚŽ·0ÿßbµÚÏÔ÷ðQìåØ9‘åÏúU°ÜŸ|ðGû"ŠÈý ¼O é·Í©jÛ[,¢10‰åÙ2äV9·åE}%,M:Tá JÎÈãtå&ÚG~Ë~(××T¿ððÔæþ̵Ó庂òä3D¤«cpfùs·,N2I¯tmoVþ?æü袱ËdÝ_P®’žƒN·«ùŸþú¤þÚÕçþûêŠ+Ñ2²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( þÚÕçþûêí­Wþçÿ¾¨¢€²í­Wþçÿ¾¨þÚÕçþûêŠ( !±ªù~Ÿþú£û_S<éðÚ¢ŠÒGÉ¿µÝ[XñΩm©^¼ðé÷×ö±Æ‚VÀ'Ç$àdð(¢Šøú¹¶ÏIlÿÙgwenhywfar-5.12.0/doc/dialog/images/cocoa-2.png0000644000175000017500000011750513142134462016114 00000000000000‰PNG  IHDRÐ0¯\ xiCCPICC ProfilexÕ–gTɆ«{r"Ì C†!g$ 9Ar•a† ã0dDEdqLˆˆ`X0(¸*AÖ€ˆb`0ÇdP®‹(·¬çÜ»ÿîŸ[çtÕÓo}õuuWç¼;9A ,@*?CèáÌ ˆdâ€H"‡›.pò÷÷ÿØ>ÞxòŽ‘8×?†ý÷ i^l:È™Žá¥sS>‹ð W Ì>…pv†aTÂt!²A„+Ä?ÏõbŽ™çós1Á.HL?x2‡#Œ€ôÑ™YÜx$ia>/‘Ùa{n‡‡°x©kÄ\…°nÌyâ`'f1'‡¿ÈóD욘.HáäÎÝü/»Ô”Lä{Í5*Ò“ù)ËÅgCG®1ÇÕ{)sg6§ÇòC‚t~Ìr¿Žº.° Ãùö^Ðó\–/plºÛbž$Ž—øÌæò 3C8=+Èmó‚Ø뺨Ç%º³ôÄ öâ³’×x/î\À\à 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ùãb ™l>רifbj"žþ¿iâZ›ßì{Æ\ AŒ›k91Ø%#5àù·@³.òákڊкiÛÊÍfÍçC‹ "Lò@h]`Ì€%°ŽÀ x? "À*ä '€T Ù lÅ ì»A58zpœmà<¸ ®[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ì d¹A>P ECñÊ„ò¡MP)TUCµPô+tº Ý€ GÐ4½ƒ¾Â(˜ ÓaeX^³`'؆WÂñpœÁÛà*¸>·Â—á[ð=X¿†§PEB1Pj(# å‚òCE¢âPBÔzT ªU‡jBu zPwP"Ôê ‹¦¡™h#´-Ú‚æ¢ÓÐëÑeèjt=ºݾƒBO¢¿c(%ŒÆÃÆ„câ1Ù˜bL%æ(¦ss3‚ùˆÅbX¬ÖM®Ŗa÷c›±Øì0v ‡ÃÉã pv8?—+ÆíÅÀ] âFpŸñ$¼*Þ ïŽÄóñ…øJüqüEü ~?M"hl~!—°p˜ÐA¸M!L¥‰:D;b01‰¸‘XEl"^%>%¾'‘Hê$kR)‘T@ª""]' ‘¾©d}² 9ŠœIÞF>Fî$?"¿§P(ÚGJ$%ƒ²Ò@¹ByNù,A“0–`Kð$6HÔH´J J¼‘$HjI:I®’Ì“¬”<#y[rBŠ ¥-å"Å‘Z/U#uNêÔ”4MÚTÚO:UºLú¸ô é1*ŽªMu£ò¨EÔCÔ+ÔaЦAs¡qi›h‡iWi#t,]‡Î¦'ÑKé'é}ôIªÌR™P™™™ 2"Š¡Í`3RÛ§÷_e•edce·È6ÉÊ~’S”s”‹•+‘k–»'÷Už)ï&Ÿ,¿S¾Mþ™ZA_!@![á€ÂU… Eº¢­"W±Dñ´âc%XI_)Pi­Ò!¥^¥)eeeò^å+Ê* G•$• •‹*ãª4U{ÕDÕ ÕKª¯˜2L'f ³ŠÙÍœTSRóTËT«UëS›V×QQ/ToV¦AÔ`iÄiThtiLjªjújæk6j>Ö"h±´´öhõh}ÒÖÑÓެݦ=¦#§ÃÖÉÓiÔyªKÑuÐMÓ­Ó½«‡Õcé%ëí×ëׇõ-ôôkôoÀ–‰û  1†Ö†|Ã:ÃFd#'£,£F£!c†±q¡q›ñ›%šK"—ì\ҳ仉…IŠÉa“'¦TS/ÓBÓÓwfúf\³³»æswó æíæo—,]z`éC š…¯Åf‹.‹o–V–BË&Ëq+M«h«}VXt–?«ŒuÝcíl½Áú¼õK› ›Ó6ÙÙ&Û·[¦³,vÙáeÃvêv»Z;‘=Ó>Úþ{‘ƒšÇ¡Îá…£†#Ïñ¨ã¨“žS’Ó §7Î&ÎBççO.6.ë\:]Q®®%®}nT··j·çîêîñîî“k=:=1žÞž;=°•Ù\v{ÒËÊkW·7Ù;È»Úû…¾Ð§ÃöõòÝåût¹Örþò6?àÇöÛå÷Ì_Ç?Íÿ·l€@MÀË@ÓÀüÀž ZÐê ãAƒƒ·? Ñ É é • mýæV& _¾.üV„BDbD{$.24òhäÔ ·»WŒDYDGÝ_©³2gåU «RV]X-¹š³úL4&:,úxô ÇSÇ™ŠaÇì‹™äºp÷p_óy¼ñX»ØòØÑ8»¸ò¸±x»ø]ñã  • ‰.‰Õ‰o“<“&}JöK>–<›–ÒœŠON=ǧò“ùÝkTÖ䬊¢4›´Ýi“BoáÑt(}ez{15½™º™?eeÙgÕd}ÎÍ>“#ÃÏéÍÕÏÝ’;šçžwd-z-wmW¾ZþÆü¡uNëj×CëcÖwmÐØP´a¤À£ ~#qcòÆß M Ë ?l ÛÔQ¤\TP4ü“ÇOÅÅÂâ›m7üýsâÏ}[Ì·ìÝò½„Wr³Ô¤´²t¦Œ[vs«éÖª­³Ûâ¶õm·Ü~`vÇý;ëË¥Ëóʇwùîj­`V”T|ؽz÷Ê¥•÷÷dîUùTµïÕÜ»cïLuBõ½çšæ}Jû¶ìû´Ÿ·ð€ã¦ƒÊK~ý%ñ—‡µµ­uÚu•‡°‡²½<z¸çëHÃQ…£¥G¿ãÕÖw7X54W:¾½nÌl?u¢ÿ¤ëÉö&£¦ÚfFsé)p*óÔ«_£½Úût×Ö™¦³Zg÷µÐZJZ¡ÖÜÖɶ„6Q{DûÀ9¯s]¶-¿ÿvì¼Úùš 2¶_$^,º8{)ïÒT§ sârüåá®Õ]O®„_¹ÛÐÝwÕûêõkî×®ô8õ\ºnwýü ›çn²n¶Ý²¼ÕÚkÑÛò»Åï-}–}­·­n·÷[÷w ,¸8è0xùŽëkwÙwoÝ[~oà~Èý‡¢ˆòŽ=JyôöqÖãé'O1OKžI=«|®ô¼î½?šE–¢ C®C½/‚^<æ¿þ3ýÏ™‘¢—”—•£ª£ cfcçÇÝÇû_­x5òZðzz¢ø_ÒÿÚ÷F÷ÍÙ¿ÿê Ÿy+|;û®ì½üûc–~èšòŸzþ1õãô§’ÏòŸë¿°¾ô| û::=ƒ›©ú¦÷­ã»÷÷§³©³³Ž3çPHÇÅðî”Ä+ ¾˜Ø9ï…ç" yÿްØÇÏyùÿäy¿<o À‘NB ðDÆdÔFFª#bKì`sóÅ QÄ-=ÎÜl ²±&Ÿggß+€ëà›pvvzÿìì·Ãˆg@gÚ¼Gû€¥º¹›YõÌöÍ-ÿ±û7…èªÍöì pHYs  šœ IDATxì€dE¹¶¿Ù ›» ,ËÂ.9-9#ˆ€ ½Hò'_$ ¢"ÁЏ¨(WQ²ˆ€( \‘ Ir” Kfs`óîÌüõÖÌל=ÛÝÓ§§gv¦û)8[é«:UOÕœ~OuÓu­­­†ƒ @€J#Ч43¬ @€ @@3 @€ :,L!@€ €€f@€ @ tX˜B€ @Í€ @€@ l{i]p½®Ñ4€ Tðªäª}Wr]o뢸 þ¢è @Hèmb»Ç h„rbV„ @5H § ë% ;)šÙ®QƒXt€ ^E ìm=IL/wQ4wF$w¦l¯š™4€ ,'e äÐÞ’Ë.o1½\tÑ\Šè-Åf9Í!N @€ ‡@)b¹[bº[t‰Â¹˜ .–—gl,«}¾:Hƒ @ÈN $œ¨¶˜}±¼XEw énÐ%çBB·Pz‚uÉ"¹”º’õ† @ÈF C¡Û^])v…l ¥Çª»CHw¹€î@<çµùÒ|è²ä³õúð!@€ºŽ@Zì¦ãÉ3gÍ+hßÕ"ºËt…„s!œLO†“ƒ —b“´' @€ P‚Â6Q]Ò&N˜ä}¨0Ÿm¾´XOW é.ÐÅs>q›Nó¸ûI¸.–'›Žò½|@€ ò³íÕË÷<÷½é¸ÒÓi鸗풇 +. ‹ˆç´€MÇÕÑdš‡ÝÏHÙyz>;åJ÷rø€ @•%PHÐæK/––ÌK†½µé´t<ÚUz%º¢ºâ9)r=ì¾*Oç*ÓQºçãC€ ”F ¯h EKIOÛŠ'Ó“aµ°£xìE%EtÅt‰â9-t“q»¯Î–NÛ¥ãÉ:”WÌe±-Vy€ @ Ú¤…j±þ%m“a•)Oæå çKóvË‹6•ÑÐÏIñš/œ/M0<Ý}‡˜Ìë(-™O€ @ ¤xõ’ÅÒ’yùÂùÒT¯Ò åy¾|¹¤][ŠƒËEÊ tZ@wR @€@6iAšŽ«6OsßÏàñŽüdN—I×évžžó;+¢;%  ˆç´8MÆÓát\SZÖô<å•—¬/iëáŽòÝ€ Ô:®…8¤óÏ—¦òÉô¤]Öô|u)Í]²¾˜ÖÝàµv‘Ÿ¦é°Ç‹ùÊk ÇÀp j/'²½¬Òä<î~¡´hœ°÷8> @€@i–¥¡˜§¹¯š<ì¾×®¸J[ŽyᘎÅá𼤮 ÉÑ)ÏÓ–S<_8fVòŸ²W KX}öN©½.æ'ó<ÜÊ?ÿüó7ÿÔ§>µÇÊ+¯¼[SSÓ8Uˆƒ @¨ .|sòäÉ÷÷·sÏ=÷©Ð«iá –s!/ìiùüdZ:¬xÙû¡+) ]ôª=…Â}”ÙîÜF~:ìña\pÁvûî»ï×·\¼x±µ´´xy|@€ * ЧO ZÏ–,Yòøm·Ýöà ¢ÝšÙÞ5оºìqe{šÂI‘˜L/.[@—µ…£Àê³.çâ·”°‹g/ãÛÓo¿ýö{„=*[Ο??VÎ?€ @ÕE@ ¤A<[}}ý–Ûn»ígBïžÇìp¸ø•6L äyJOÚtV¹œ“¦-g/tY:wÖ.€?NY:ä‚X©nëiißm”Þ4tèÐÝ´òŒƒ @¨nÒÇß5ôògápÍèÖB« dOS\vî+=m£4wnëñ²üJèdçò…•æéIßÓÓ¾:"@Jïî V‡Òò:åù]Ëœ9slâĉ6kÖ¬h«¼pcaA„Û¸qãlРAÖÐÐ`úš@é…\ºÎ7ß|ÓfÏž–ùÛJ¨ì!Clüøñ™êÔUØãcÓgO±G_¹ÛÞœô’-\2O_X߯¶ÆŠëÛÖëîj+ e}ûöm-ÖÎBí'€ ôVA­Ú.-è‚9½òœîšš„ûÊ÷°|9ÏO‡cfÖ2 è è +ÏÏî6ò“aYxZ)~‰Îb®¹¹Ù´BýÞ{®DòÈ‘#mÀ€Q˜Î›7Ï$¬Ÿxâ‰(xÇŒ÷Ø„¯ Vëu¾û:W1ÂôïZ_gócsíñÇu®ºêªÖ©6jÊ3o|Ä{ã>Ûk³Ãl“5¶³þá|Ú„ƒ @µB ýy7_LU·]HCÌ®=“iËJÛÑîB» ]2#³€Nao ’=œô“a·QZG‡CëÓQeóºE‹Ùûï¿ôŠ+®h~ 6, è™3gÚ”)S,<ÙmTÉ*«¬WxóVUç|ë]i¥•b£ViªS Ÿ9s–MuN uêÜZÑ=ztÑ:µòüôkÛ_¿ÊV3ÈV¿²m»Îî¶ýº{ØüEsí¾n³'‡Üg¼3Õn{ô*k ÷Z›¯³ƒöj&é€ @ Z H ºpîhÚ$³kÐtš eå{ØË—ìgÐEVŸ½‘ÅN,›RϲíP@Ï;צOŸ¬Vžµj«Eò Ķ(,á«-Ê“­¶t[ÙUÝÅ^gŸº>QXÇ„𰡡Φ¾Ö¯_ÿh«-Åêœ>kŠÝùÄïmØè¶Òø6pp½ÍižloN{>lã˜oóë¦Ùa}Ã[¯Z]NÙŽ[iPÿØbLɃ @ÕHÀõ ú¦p]Œ‡¤Ü2ÂY7Ë*t&]¬5íyj”\Ô™mÁ\ØÓòù#ç°Ü¯×vŠbnÆŒQ k¥Xû›µ¯í¾¯- K@ËFNe\°ÚiÓ¦Ù +¬í]/YÒl æ/Œe|[I¿~ýruªL±:ù_ÖØToã7 ÛKöµ ½mVë;öÚìEa GØÝ0Í k°†þâÐiúTS™½G\°d@€ *% ¯à¥%v%ž–/YŠ˜V9ÙÊyxáÜ–ýßÎho”û~vÅ=-íËÆó ù亮£-Ë»ÏÚî g^Na¥» –ÈÕ*´ç«Ai§:µòœ|à0]§¶m¨N٨ΩS§­sÊü·lµõFÙÈ•´Þd õVß§Å÷ åê[­hcSóø —…—ØØõêlÊÔ·ŠÖ™n7q@€ P%¤]@«K.¢] §»éâXåÜÆ}Ùz¾Âi¥er% è u²bÎóÝw[Ë9…óIñ¬p}1¡+ ÍÒê²­¿]CMõæJä&Ù*¯X½Ê×겄wR”'ëTØE¹l;ª³¹ï|3f˜ <ÄšÃJs}k[AêC»5¦KZt„w †£oßŶâ³wfÏ.ÚNõ@€ª€¯@»pV}åÙµ¥w[âX‚Jù.š3 æ åJÞÆQ²€ö¶ûÞp÷SÙ1šO +ÃËx¾:¬°üd8¦u´…CÂU‡ ]‰h…“Nu¸ØuûbõºOú*§¸œÄ·êsßíŠÕ9 ïëöKì7Àš‚xn +Ð}û4†°† Õ6/±áXÚÚTßh³û-±þAH«36† @€@õHj´ˆVž‹é¤`v™¤‘ÒÉtÙ&Ë&ó: —+ Ó{ƒÓ~ÒNy~$¡(ÍãɰÒ:|ˆP[($d]DKÌJ@'Å®á«Ð²õ2JÏçT^ûœ]+î¢\çQ].l–­òUw!7jèhk^8×ú54YßÐæþ á!Ö7ÅÑ[°d¡5„cAŸÅÆk^Pg£†.Zg¡s‘@€z9¨C\<Ëw˜L“]R€¥³Ê$…²ÇCrù®$D£NVŠKÚ)œÏv!íÐ:Ðz³†Þõ¬·`$ų èxÒÐ|ðO¶*SLìêÁA½³Yoïpí¾êSYäòe«2Åê\u…uíÕ©[ؼDtx#HÒú1ݤ*­O]اÝ>/šÃ/Ξ²ÀÖ¹YÑ:cAþ @ÕGÀµ zæ‚Ùű4¤\Úw¡Ü–Ûöo²Œ‡“ùK…¥yƒ¶ëЮ$½TÍËFÒ÷xÒRižžô=]¾‹çd¸¯ô&+K†õƒ)úåA½¶®©©)®DKï»æ×ʰꖄ´^cç‚:Y—‡•¯÷GKl»ˆöúd£°êß>ú(þº ìеuܰìýž²Éo}dk¯;Ðû„ ÃÑP§èÖn±¦>áGaÂùpâTëßÔ߯ Ÿ`‹æó3æ>.ø€ Ô ×…ò]Ð*ì+Ñ!ͨ¼¤¯t·WX.™Ÿ´oË-ãßr´!ç~[lé•—<”›Œ'ÃI@JOÆ;ÐZõ8p`¼ZÖ/&´¯ k•XB[ùú¡”b7*£e/Q®2²OŠhÅ%°%´e›|už:›v çµÚ&«ìmÿ™òW›:(låÛךû„ííß:„#´æ%­6å½96kê<Û|Ì>¶pÞ"V Ó ‰C€ P ¤]0'} `»ž…å\ ·ÅÚþM jÏS·/dã¶Kùåè¥*HD¼á‰¤Ì×9·u_ ääëPz ºÁ&®úJÀj[†ÞŬU`­JkŸ³¯„­„®Ä°ìä´ú¬äBNuÈVB[¯§SéªSNå]<«‰l­n«Su é?Ê6\qo{í½»mѼ%áõ{Clà€Ð¦ ÆçÎ_Ú?Û&OŸk­¼ ®e³Ï.Zg¡ö“@€z9ׄ¶.Úôã Ëw )?)‚==Ÿ vÛP¤s®\íó³'ã {<é{ºûàá´ïyî–ÀÖê²´¶^Ì™3'n«HŠ] ií‘–È•­œ¯LÇHêŸdÇzo´~|Ea9_ÁÖ¶ …K­S"~È‘¶Ã¸cìµIOØ;o¿Dù,ég[²¸É7®m;­±…Í™57 ~«X;•ƒ @UH §Cß|Û†ô¢œû²ñ¼dz1A­²IqŽ«ž]‡:ˆOod¾ÊÒyɸÂ~¨¬çyšûI@é´HEKðêç·.\…´ÞõìoÍÐj²Ò%^}ß³ºÔÑÊv²NmáÈW§ö?g©SbXíÐêõØ¡ÂÖír?ÿ­j‰ÿÉL‰+Þ²õ}Öê#€ Ô¤&tAì‚Ù}·‘ï6î •§§ÃùâJ‹NÚ7èÀ¤Èö¬œß¡€ÎY¶Ô´óƧӓq·)ÅO êW “'Ñj°„¨œë~ï¿ütZ²l¡p¥ë” —8ž÷°SIÆ.ä<ÏýBv¹ô,:W(O Ð ¥{ž/ßo“|Ïw{|@€ ê' ˜Ö„®ÕûŽ4b¡üB陈zÃ2*`ì rßÍ÷4»/›t8™VÉö©^ @€@Ï'à ©I ©V§u£Ç“vö^zÜ}O/ÛïJªF&š{¾§'ãÉpÙ£  @€@¯$Ԃɰ:“Œ+ì.NÆÝ¦"~¹Úä~©‘}¾2žžÏ/µnì @€ªƒ@>MèiéJOÛ%ã*#ç~[¬Ä»ú5vÞŒ|ó4o¸û*“Îózð!@€ªŸ@>-èZ1_žˆxz’Ž—I¦u:\t:õ#*…NÖQÃÒùOúé°â~:/é€ @ÕIÀu`ÒWO=î᤯°œlйŽò­# \T@;sž¼d‡<;Ý@»/;Ë÷#™®0€ @ ¶”¢“6I:žîiIéieû•Ð5Â;â¾ì=œîT2½£zɇ @¨.ù´`R/z¾zía÷»œDW hï„ûÉÎ(ÍdºÂžî~:Ÿ8 @€@upè~º·ž.?í<Íýt~§ãYt© IÛ¥ãɆ+/ß‘´! @€ P{òiÄŽte’R1Ûrìb™Î¼…#Ù d8Ù˜dX6nç~2?NÚ§ó2Ç-Zdÿú׿ì•W^±Ù³gksxæ:(ð1{î]Íêú„û¯Öö´4NÒÛÀ”Á¡µµÅ>µóÛÃ&T3gδaÆU¤.*Yšl—æQ‰L+AqÙ:àº,“Φ´¶¶ÚàÁƒmÝu×µwÜÑššš:[¥—/UºÉbŸütö°Ÿ·$¿3º¤t`”ì´›:Ïóô²}‰çk¯½ÖVZi%;âˆ#lĈV__¿L}9QFé-!½Yàðü›SmµUV\†! 'ðöû“m£5F~|sâU2ÛH”Éáõ×_·5×\®eòËÝ,癯¿Ûˆ¥‚l™¯í­‚LU#\;ÇUb9éoii±iÓ¦Ù?ÿùO»úê«íÈ#ì í3A§÷°ûÉ&u[¸T¥‘Yl“U¹tÙtZ5•ÓHÖî+Ò©ÉmeHz°vSç6ÛðE-mxâ¿hdš„ª ÒÛ •ÎAlseÚCmó°3ZÃEž¿c¬ü<‚mÛ̬$[˜Vž©þþáÚ9®ú„×G½;I'骑£FÚç?ÿyûÝõ×›4×î»ïî&ñuº¤S<–Ì/ÎRN¶Énæ­·T·p‰ÉÆ&Ã*–ŽwPUùÙº3zî¹çì裎•(.W›;ÄMù'ó›m΂6¡—ĘXÒÛÀeå ¶ÍÍ.¢óÀ'©,KZ×ö¿ÿ²* PA°-ˆ¦ì ˜–®hA¸Å“93¹"­ðΟü¤]yå•¶Ûn»}¼`™¹ÖÌ’ÒC…“q…“Ù+/T +´Î™ìDº Ê+–Ÿ¶/+.!¢íÇ¢ÄW 5й-eÕ\Û…æ-jµù‹»dN.W°.\ómñ鮆‰mò¢T‰ó.Y²$^Ì|þW¢NÕ±xñbkhhèK­-•çZ)ŽÅê骱+vάyÝÅö­·Þ²•W^Ùúöí»Lµ8¢Có±\w1-••þÖK5ï±v=k¥@-¯ë„VÉסçL4OôYZéÏ›<¬\G#Ê/”—§ºlIÝ}¥É'˜€ZžÎOdzõ.XÏŸ??WFƒ« ¬ gø¶ÓÆíg«küå/±)S¦úmü•¾å–[ÚÚk¯m¿ÿýïí€Ï'‹Ûû‰’öž&?KúóÏ?o>öh,>pÀ@7nœm½õÖ±íYêÉzÞRí,iµEIõþøƒwÛ¿ï¿ËF®8Ú6Øt+Ûl›b{Ê?ß:íh4x¨}õ‚Ÿ/·&‰mKx°Ôyuã7Úœ¹s Ú|ÐÁ¦íKŸøÄ'ìœsÎÉ;ÿö·¿ÙJ+¯d›nºiÁzòµG7¦·Ýv›}êSŸÊñòùùÂó/Øc=Ó `«[=Îá>uK¿üÇíóկ•J+WµK×€©S¦æú¦€®Mبbíê¨ûì³O»³Ï9;¶£#{olwqU{*Év­µ×²~ƒ}ö³ŸÍ=ôùïGÿm'xRǃ ²»ï¾;v3ÙÇË/¿Ü~ýë_Ûã?žwŽ«@Ò^רôüÜfëmrŸiûxÂö’õtUz9Lu½çŸ÷Ø]wÝe£GŽsuÇv´ ,Ã4Kô98~üøø™´Áú$»¼SϘ3gŽÝxÓ1ÚØÐŸ?Ú~ûíMc—弪 Òö•äªöõ”¿Ç½÷ÙÛvüÄŽñ¯v¹«4¿0 ˸(ž•Ñž§¸´Wn¸ÒÐãòu¤[ãùË´±+*- ó5>–Ž{¿<]¾‡=¯l_wAýû÷xÌò]D·Uì£î±¶ø~ô#›7o^¼yVYe•xaRÞ;ì`C‡ #˜Ã¥ëñ²îKýç?ÿ±ÕV[->¹êéÉzt¼è¢‹l¿ýö³—^zÉž}öYû¯ÿú/Ó‡„»¤½§ÉïŽô…Aä-n^ºßŠå8OÿÆ Ù¬ÓlçÏ|ÖÞxùyûÏsOÚF[î˜lz »}:£;ÒÃ"e¯K÷­;Λä&¶q•¤ÄyõôÓOÛŒ3".‰‡É“'Û^{í•÷ÿ~ûÇ•Í{}x¸KÎÝJn²ñ&ÙçOª^¯¿”9ì¶ò“íéŠtõ= WµáÇ?úqÞkÀ†nØ%íýè£L«¬m´Q®~[<49ƒëjNåÔ_I¶~~}2dHìó5W_÷T~ï{ß‹ñY³få89çThŽÇ‚íÿ¨Yæg9L’çóp–zÊazÈÁ‡Ä‡¹8à{á…ì‰'žˆ7_sçÌ]†i±6½÷Þ{qQŸQrbÛ×ÇÄ5¤-ѳÚmBT”ú¥SãuháÂ…ñ¦Fßêé¦E"Z. ‹JÚW’k%Û•…Gz|ÔŽ4ŽS)ãíÛÿÉrÞd¹dØç‡ô–ÂÒ\þmnÒ®á¤.L~\&«TúÇ“°°ÀNÚ$ËgWZ@gn@wèׯ_LÿJA_+ø€wt~íã¹à‚ –1Ó¾j¹RëIV Õ€í¶Û.®¢H´r#GŽ´Ë.»,fÿö·¿µ¯ýëvá…Æ" •é®ôEáÃ\ÚŸ½téì<ÒéïN|ͽÿïvý½¯ØˆQ+‡f¶ý ¸OÛª§;Ò¥S–´‹ogwœWc'bëç+e<Ï?ÿüœÙÙgŸmÿþ÷¿íÒK/Í¥%…ê½âŠ+¢Y¡üdé°Ê*דæp±v¦û”Œç»êo²\9a­x÷»ß7Øéò]uÎôyʉW’­ÎŸ¾¾>òÈ#vüñÇçæY>NÎÇýRúÑ“ægº½Y™êíÿûßã‚‹¶¹¸S=ú¦(ÍÔóóù_þò—ãk¾ÿýïÇlgZj›Üþk_ûšm¶Ùf6iÒ$Û`ƒ ìüc|V¾svWZ©}ðöãê6Ýí§Ç'y~gŸLëÊpT£aŽÅ“v_š«ÜÒߥVi5˜z•´¾â*v4‡|²ÑDÔ¤P8™>uêTÛ|óÍã;¥•>­=þüÃöØcøu¹Òzè!ÛÿýãJ³.|ðA¬gÿ°ª,§Wê© êdý:ŸOFO×ë·´íµ×^‹ï±>餓lÛm¶‰ÛIôÁ¢¯Ì¼¼ÿ¾rÈ!¶úê«ÇÕ]wÞyç\¿>üðCû¾Û%ï=÷,ÃÄÏ«:“‡§Ïût,n û [l^xǼ°Ÿcþb-yÓ[ê›"Ïï¹3¯ý‡“&Û7O9Ì>»Íªvô^›Ù£Þ›«çÃÉSí¢oœ`‡ì¼¶í¿Õh;ñs;äÎûÔãØ©‡îʱ£÷ÜÔnºú—6waslÏ”iScÚ3O>jßüÒaö_Û¯nœyŒÍœýQ®=|¿·ÿ¶ö¹mÇÚwN?ÜfÍšÅs©ý*ÔßΤ‹­e’½§i ¥ûêƒçûxù\þÁ~?È>n  BÛíŽ;î¸x³æöŠK„ŸvÚiqžÌ˜>Ý–„ù§8½ëS+°—\rIÛßHž¿+ÕãsØÏásøõ0‡=Í}?¯Çݯdúb]B»txýîJ¶í×·•/ûG~8>(³êª«Æ¿ã_þò—‘‘òôwª¿m}àöGu”ýæ7¿É[ŒŸÞÎXï©?ï¼óLŸ*«I•MŽÝ†á:¢±ÓMRº=YúU¨¿å¦W’­_OõÎ~õQOöKÄh¶¥9©Ý>÷õ€O†™Äê2IÈKÞÇôü\+Ï5v›<×XÕ¥×uiD×X]Ç¿øÅ/Æ…å©þI©kì=áëçM¶Åí•—NÏÊT{¿5Wî |Òu¥™~éK_²£Â|Ôߴέã]vÙÅômÖGåõ IDATøC»ÿþûíºë®‹¼u³¢ú䦆­úì?~¼{ì±ñ³(_|õ±%\T¿öÅ®°Â QÜëwŠ}~ÝS€­3RÛ´Dw†oeÅ:Ý_Ùº}2Oi•äªú µúø³Ÿýl©¶qÆñ[dµ©X?tmÐõä¢p½Ö<ÖM¼ÿÍ¿N¨ŒôF²L1…8JOòT8ÖƹEiÑÂEV+º¦V %T³lj×öý F|ðÁxñФÐÄ”XÕ]_·Î û|>j뢮;î7Þ8¦Ÿ{î¹¶ï¾ûÆwP¿ûî»ñ½ˆ²¿ô¿ˆ_—KÌÈVÂXGÒ)®?ˆX8ÄÌŠ+®/\Ú[$áû•¯|%ög×]w{5÷Þ{ïXÅÑÇ·¨Ü~ûíq‹ˆV®ßxãX— tá;v¬iUçOú“}ý¬³Lâ?‹{{ÚB«ï¿ÈZÊi]û"òêâ7(áßeÒGÚNf—~û{ðlc¿m†ŽÈÙ_yöÑ6|¥Õìô+Ÿ´gî¹Ù.ýþ×ì”_Þë¹êGڌ߶½Oþ‰­¹éN6ýƒ‰öÌû‹ì£)Ø%Çíg;|î$ûÜÙ×ÙÄþm×ýÏ©6uQÛüÓ‡ÚœYóíý·_·‹¾~œ}òÐ3lóÏžaWŸóy»ñ–[m“?gsfL±‹O:Ð>yÈvÄþÇÛ»¯|óÙ«LW:ý-éÈâÄí½<×Ý ö芞8ôÑGMŽz¸í ƒŠýÕ5B× })÷ÖÛoÛZa%Îûžf,Apê©§FN·ÜrK¼^È69vW·Ýʼn±ËÒŸ®²­$[¿žjΨÿê«æíÿûÿ/²Õ6¤9éüšoº^KhëZ,þßüæ7ã8ù¶dÿÓóóç%^cu-Pœp vòÉ'Û‹/¾Ã >¶Ç¤®±g•qÍÊTõ”SN±Sà ٿÂ5V ”&—fª›3-ö\IJXjîjÛnruC ›9Ýœyæ™qË…æ±Ü)AxË^ü°Ã³[o½Õ´]$íôY+· lßй¯¯6Óͤ¶=ŠQ¡Ï/±=¸[ñÐßn¨t-Ñ Ìé§Ÿn¿Ûå—ê*ÉUç,4ÖºÙÓ"ƒnT´etzX„øÝï~_ñ¦ÏãbýеA7‚š÷é¿ù|㓾Nø5¾;¯QÀÍÒܼ¤ftÕ¯@ë«#¿ÒûQêÛÃa•I[8tüêW¿*ZL,ÝõIèÊiE@+Ú¯$Áê¿Î㿆6tèТÛ1tÁу4&L°7ß|3Š}ë,ýñé<újN¢^+r²S›µ*­U}Eù¹Ï}.æéí¯| \\%ºµÒ¥¯×´Ò£seqúÂæ [‚Rnn?ÚÂ…Ów9ê<;ä¼kìÕ'þi¿8eç x eûؔ޲7ž¾ßÖÚêÓ6sʇ¶Ê:[Øä·_¶™Ó'ÛÔ÷Ûò¶Þ÷¿m­-w·º†~6bµõâyŸúçMñ´ã¡gZÓ lm÷´µ¶ØÕý땱MjÜnÇ|Ë6Þõ[qü[yÍ öÞ+ÏÄó>uÏï)ÖÛöžfõ}Úê>ac7Ø&ÞdéWVÙÇ_xÌ2%ÚêGÛ=´‚¬ûgžy¦hÉ=÷Ü3 „5ÖX#Þ¨é⯕½vÚ)ŠBͱ¥Ÿ%X¶ºBsxYËž›’ï «¾ëƒ[Ïz穤ÔW—d¬ëƒ„žêÕ=I(ºË:v^®§ûùئÛ,¾Zøq)ÆIyzND+Çz~DBîå—_NW™‹šŸÅ®±Ú† k»D¨ì¶Øb‹(½ÒJ]c½¾,¾„ºnr%¾4'ý!Ét£FŠß8Ià}ûÛߎ×-øÈ 802Öç¦x'ßx¢-búìÑ7PÜ]CTç&›l??u3£kGgØŠ½Ú.¡¯±Ó¼Vr»ÚâZl¬õ𯾭ÖB•ÜÍ7ßlÛn»m\9/¥…þæ‹O¡2]ÍGº*ˆ«¶#\¿4w¤½ªÝUõ ´P«ºðê¬#~àkµ0ü'בÐݵþð“ÎW±½NëáËþç?ÿy¼ƒ×]·Vªt7¯‰å6^>Y·‡Õ.}€je@+ƒ.b”¯¯I´‚¨¯Ö$¢_}õÕ(²UŸž––ÓE+y¥)®;|9í­ö|}èBÜ7ŠüÓ¿©õkj›>"©õÖ´Ë—¾é'÷³u7ßÉþðƒãíšsþËÎûãk6F[›¾åÒ0m÷t«­¿•ÍòvèkÛÊü:›ïhýú.=]?šú®^s#8àãýV«­·™½ùô}ÑvI{ûV¿nl«ÚÓÔÔ×êBÛC]M~ÛVQùþa{I{ãëëëÂkÛú–¯ý2ëêt±õ±ioVÉžÏç|åõ¡ãé~Séñد0ç’qýrg2®9¢ºdZ¾rÞØbsØmºÓW»Óm/åüù®úFI"ÂoŠUþæ´r§s$ÇÁÏ©4W™4c/›´‘]Gc'›åéÔÞt›KiO>¶^O²Î4;å¥Y*®W‰>9~Éz’m’}9×X 7-Z$Ç>Ù¾J]c µ;Ù‡|aÝ”IHi•øÐC{ŸU—\²NÙh!EÛŠô-Š„™»d¼œ|½ÊëRÿeçq/+_érº^HäjþzýÅ>¿Ja«o&ôM¯;ÝÌäkƒç§ý$ƒt^±x>®ÅÆZ7qZAÖ[’¤´ /!®ó«\Gý(ö7Ÿow±2nÓY?ŠåöJb8 uÔSš í‹”ú|‘öÒŸ®qÕê–V$UÖK­üJ`ú~,M\Ÿxêªÿ‘§ÃŽÁmÓïö?VùÊKǽ¼¾»é¦›âаo›8&l¯ðúT¿‡½ŒûªSwêZ)L;‰_ÝÍêÎ[7ºHz]úÚH“W«Êzcˆœ¾:’Ó¹ü©j]€vÞyç˜^Î?ýêm@ßú‹ºm»nMÐw„rfXùø|ØþÒ£¶òØ5£ýÞÇžcëoµk[Ùöz¦¼÷FŒOzõI[{ÃÍÛÔk{í#VZÅž»ÿVëßƵO[iï¼lÃF¶MõÖ„¨\¿ïm­váP|ÌëÙ‹ßaýÕööýl á·÷ôöû­ö3/Cc¡ öb[h^|Ü€ü!ÍŸ I ¥ù|Uºâr~ž|ùI{Ù®³Î:ñÛ/£4]@ÓvJ—Sz¡9ÜfѽÿæãÒQ T&_9Ý,ëV}T¾œþæt*>IF ë¤7G$Y©\2®:Ódù´Ÿ/i£²ËÓ©MYÛ£2ùʉ\šMÒ6'¥%m¼=ézœ“Ò ÍÏb×Xí¿Õ7~>Õ§·àèE³Rרd_¼Í¥úº‰Ð^Y-ŽèÍ<Ú*(—d¡Ï'Ÿ|2~Æü"l+üô§?{í˜Î´U8]>m Úÿqö‘º±LºÎ°Õ7¹ªÛ·8%ë-5\I®ZØ’+ôyªÏæÃ?^_ÚW}rétŵ²®ý’ªç©§žŠÛ6ô`†ò4iõ5™¾ª××DºˆjuAýWþøñãmÇwŒ7hMizUßܹsóžKùù­àöoj â´1úýû†pˆ+-_úÌ÷^··ŸØÂu@ùŸ +u¡M«­¹ž­Vˆ×ÛòSöÏëÿÇæM?ÖÓ§y‘Õ-^`cÇ­kënñI{ðÖߨ¤7ž‹eg}8ÑšBÙm?ýy[0w–=¶bôkl°éï¾j/=z·m½ûAA·µM ÕFogŸ žµÂ¬6l¾Ó^aËÈûöÌÝ7Y}kxGõß®³—û§5„ùàöé~ÍŸ1ɦ¼ùB[ý¡Žk±w^xÄêñïἓCþüÆx¡zŠ¥‹m>楤©¿riÛ¶Ô¥Ó“véüt\õi{’žòמO}5©oT’u”rΤæ¿ö4zšÂÉ¿ =ø«¯?õ,·éŒ_èï¼X…ú§íú›Ó¹œ¶ h»–VTUŸ¾5ÒuGâE7°Úêáo~¾X0üãqùúûÔÖ*}“äéùì”æùiß¹É÷¼|¬õVÏï¬_I¶jKºéx%8Å“„òõ½Ø5v—°¨¡k¦Vxõ|Àÿ÷ÛÛa{¥¯±Y™ê›Hm‰Ñs꓾ Q›´*™fªù¥ýÒÚK¬wgë!B½ýÅYˆoz~¤Ç ¿ôù¼^ùa«W¹j¿¯Ú-_õiÕ:YGáJr§bŸ§z÷¾¾ÑÃØÚ3®÷"«}õ#Û$ÿBã“´Ñy’ñR®¯ºNhu¼CñKúLMr•6‘öò6ĆTá?U- õž>Ääk “ƒ® K±C¶>ù’v^‡òö¼t\éúÐ\ýõãWXÚ‹|ä‘GF{}å¤?(½ÓT{J½ù^¿Ÿßó<]q­bë¨Aý0†îpõ5‘>Ì•¯}múŠQ{á$àO<ñÄ¥n"þ÷ÿ7ÆõÕš~œE‡þp’ýÉw^O“…¥Dt8´•£8ô BUñ<éÓ?xÝ~öåýíŒÝGÛ¹ŸßÈîÿÓoì„ ®¶±k¬íO¾ðZë×€}ãsëÛ¹n`gÿÃ7ƒ`uüýkmȰ‘ö½£¶·Ó?=Úþç”=ƒ€nµñënd'}ïZ»áâ3ìkû®aç¾µmù©ýlß#ψíQåú†Õhog}³ÆÐ~µQçþôÁ'Ùo¿}Œ¶ÛJööKOØ„í?ÖåìÓýzêŸ7Ûu’ëï¦ÚNø´-œ35ÇáúžbOÞ}s^…ø$ÓÕngwO“_(Ý/XI[…ý‚èé*Ÿü›ð°ç§í•®}å½óÎ;ǯ$õõ¯—Ë×¥ÉÉ÷zÝWšøŸÿüç\žHòce'‘®·ØÈÏW¿l²¤'ÛQj9ç¶×ßµž‰ÐžP­°ITéÝÛz¨Lí'=…¯¸ö=ê›!íu^²I†½~Ùj%Ð÷2*=iç}.Æ5ÉMö:ÄÚ¯Š‹»³Ö9ÜÎ}oÇÝ/–^ŠMò\…تïŸÛ'(M+›IN*#9oG¾z’yù앯ú>úèÜ5Vûxõà–®±Z”Оìn¸!ÎK= m z®@[¼~Í }ö$¯±z/³×ïýrû|éI…“q/—L×ó/ZñT[4®¾úê¸UOZör²—“xÖÛ44oõ5»Y´_ߪÈVŸ)\zFF+ÕÉò «?ÅýH¶GçQÜí=\ìóËÙêóMoI³Õê¾ÒõÞzm¡Rû$F“çõ¶¤ÏëéÞŽBùéôޏkÕuðÁǹ¢9ämè¨Éù®2鹚o|’eÔÇôøèo^×ï¿nšt}•ïüÒ×dO÷v§}¯+}n h×^šÕêêÒËñÉŽ(mW¤p“ÞžžôNúëÔ¡t'}ý+î¾¶(._i~xúúap?þå`ÅéŽ\+²zÚZ+¾É½RÞ5÷³Ô›ÅVûœäôšvºƒÖáOJ§ó;ŠëƒRÂ\NºjB§^‰£U0]ü“NOVk%ÅzLæu¾òñ…¶úØ•â@ûî„dM€tºVà§¼û¦5õ`ÃÃ/&ÛÏŸ;ÇΟkÃF¶í›òtÙ~4szìßÀ!Ö:¯æðôIïÙVŒûÓçUÙd=Š»SúÜ9aõ>ü×ÐÇcTÌ>kýYí'¾3ÉŽÞrÙŸ*ö6/o_+Hšwº˜ö&§/Òe%æžVlô`SrO¬ŸC«Ôú Éú‹\ú{– ÓQop]Á¶”~w5§R®±ú†D"Uoÿ°IºÎ\cËaªk¬žUМËòLK²ÍɰDtzŸ~2¿3áβÕuH[}ou©mé*®åŽu¹ýP»r|JáéúÑ}-ØéP»¤·¤/´o¾\¶"ʾŽ–pè]Šúýc?÷tùJOú '}{\á|GHÎI—øÑú}e¤]UïöÎj{‚œ>ð%0“¢9vûJúº£.äôǯ£\—Ü[”ÁZÖ‹ÞÞqß}÷ÙwÜWLÒ‚G{öt”ㆠô Ÿ9i«BÓLÊ3íré}lÈúk~œ›Kÿ8iÐÀÀ£5yê4 ¼’)OºÞu7xÍU?®ÄCyêY©ô‡´•H¥{5ñÏ)ïyƒE¤‹­VÁ{ªó½õ=µ}…Ú¥ zúo m–tß󚯌njËqÉ¿çrÊww™®bÛQ?ºšS¡k¬Vµ¿X×÷?üáqñB+éùÕ™kl9LuþµÖZ«#l%çk«`W¹Î²-÷:ÔU\Ëërû¡qéÊñ)eÜ“ÚÒÃÐÒ\åj‹RÎÛSlª^@kGJè+×äŽ g÷{Ê€T¢úzSï®–xÖ*ÄÝwßm›nºi%ªÎÕ1tè’°Ç)D“:OÔém$Êà0thØfötã*K@ÿYW‚+Û‚ê­­–Øj•Wƒ½ôÒKñ HŸùÌgâ¶:ÿÙñJr-1ufÝÁ¶¹:ßJú.˜“¾(5†ú ymiÓ t5»ªÿ”Ö‹QDhC¿Ø<ßv‡jl=쥣+ݰáK¶”®$Èu(ÝÃI¿¾=Ýý†ö¸|¥ùáéë‡7S|üÞ·`Åé cÆŒ1=È·<œîž{îi'N´™3gZÿþýãªrº-ÚºQèAÁY³fÅ2.ºÓe‰C€ žD@o${ï½÷luÖ)»Y#FŒ8.~1-áX޿ġ¸§ËW^ÒW8yh¿¬ÇÎw„䘞óƒFþxŸ­RNBµjÝÇúùwqذaQH<«ÀСC –#€ ôD=Iƒu­㺈Àª«®j¿úÕ¯º¨vª… @XÐ]H}ðàÁ¶Ç{tᨀ @ »  »›8çƒ @èÕªzt%Ffqs«- [Ó?ZÐýÅK´@€ª‡@cCk ï\ܯÍo¬÷÷GTO+ÙtšÏs¶Ú´¹Í6u^[x1ú¹1² @èû´ØÀ¾u6r@‹XÂfˆèÂ#‰€.Ì&®8K8¿>­Å&Ín¶¹‹ ¾Í¤H-dA€ žO``SÍRo­u}¬±¡.èžßæåÕBtòÚ¶¡Õg‰ç·Þz+|µÑj -ó‹” € ô>Kúô·©ÍaÛÆê«Û°þu6¨Él ötàò@@çÅÒ–¨½ÏÚ¡•çáCØš+¶U†°'¨2² @è…ÞŸ¾qÿð£¨y¤}¤p…   ³1=0è{žWÔh›¬¹¢MX6)‚Œ,@€z!çÞše3æ,°Ya·ª´OÛKX.4”èBdRéú9ðÆÆÆ¼?Å2% @€ziiø£Ù½ªå˧±¼zùp笀 @½”º—͆ @X>Ðˇ;g… @è¥нtàh6 @€Àò!€€^>Ü9+ @€@/%€€î¥G³!@€–ªЭ­üôöò™Vœ€ Z&Pí¬ªt]¿X˼ô€ åC Ú5XU èå3e8+ @€@5@@WóèÒ7@€ Š@@W)B€ T3t5.}ƒ @¨8tÅ‘R! @€@5@@WóèÒ7@€ Š@@W)B€ T3t†Ñ­ö—‚g@) @UD“m0ÐxUûKÁ3 À€ *"€ÆÉ6˜èl¼°† @¨qèŸt€ @ t6^XC€ Ô8tOº@€ :/¬!@€jœºÆ'݇ @ÈFÖ€ @5N ª4/¯ñÙM÷!@X.ª]ƒUµ€æ¥àËåo†“B€ Pãª]ƒUµ€®ñ¹K÷!@€º€º  R% @€@õ@@WïØÒ3@€ . €€î¨T @€ P½ÐÕ;¶ô € @    »*UB€ T/t†±­öwf@) @UD“m0ÐxUû; 3 À€ *"€ÆÉ6˜èl¼°† @¨qèŸt€ @ t6^XC€ Ô8tOº@€ :/¬!@€jœºÆ'݇ @ÈFÖ€ @5N]ã€îC€ d#PÕš_ÕÉ6°† @• Pí¬ª4¿ªS‰?ê€ @ÙT»«jm¨±† @€@ÇÐ3€ @9ïKµ IDATè € @蘺cFX@€ @ GCA€ @@@wÌ(gQí¯dÉu” @5E“m¸ÐxUû+Y2 À€ *"€ÆÉ6˜èl¼°† @¨qèŸt€ @ t6^XC€ Ô8tOº@€ :/¬!@€jœºÆ'݇ @ÈFÖ€ @5N]ã€îC€ d#€€ÎÆ k@€ 'PÕšŸ¥¬ñÙM÷!@X.ª]ƒUµ€æg)—Ëß '… @ Æ T»«j]ãs—îC€ tt@¥J@€ ê%€€®Þ±¥g€ @]@ÝP©€ @ z  3Œmµ?Q𦀠T4N¶ÁD@gàUíO”f@) @UD“m0ÐÙxa @€ PãÐ5>è> @€@6èl¼°† @¨qèŸt€ @ t6^XC€ Ô8tOº@€ :/¬!@€jœºÆ'݇ @ÈFÖ€ @5N]ã€îC€ d#PÕšßuÏ6°† @• Pí¬ª4¿ë^‰?ê€ @ÙT»«jm¨±† @€@ÇÐ3€ @9è € @蘺cF9‹jߟë(@€jŠ'Ûp# 3ðªö ñP` @€@@ãdLt6^XC€ Ô8tOº@€ :/¬!@€jœºÆ'݇ @ÈFÖ€ @5N]ã€îC€ d#€€ÎÆ k@€ '€€®ñ @÷!@€²@@gã…5 @€@@@×ø û€ @Ù  ³ñ€ @ Æ Tµ€nmm­ñá¥û€ @ û T»«j]WW×ý3†3B€ 'Pí¬ªtÏ]º@€ ÐÐ]•*!@€ª—:ÃØVû~ž (0… @ Š q² &:¯jßÏ“¦€ T4N¶ÁD@gã…5 @€@@@×ø û€ @Ù  ³ñ€ @ Æ  k|Ð}@€ lÐÙxa @€ PãÐ5>è> @€@6èl¼°† @¨qèŸt€ @ t6^XC€ Ô8tOº@€ :/¬!@€jœºÆ'݇ @ÈF ªtkkk6XC€ tš@µk°ªÐuuužT@€ @µk°ªÐÙ†k@€ tLÝ1£œEµ‘ë(@€jŠ'Ûp# 3ðªö¯#2 À€ *"€ÆÉ6˜èl¼°† @¨qèŸt€ @ t6^XC€ Ô8tOº@€ :/¬!@€jœºÆ'݇ @ÈFÖ€ @5N]ã€îC€ d#€€ÎÆ k@€ '€€®ñ @÷!@€²@@gã…5 @€@@@×ø û€ @Ù  ³ñ€ @ Æ Tµ€nmm­ñá¥û€ @ û T»«j]WW×ý3†3B€ 'Pí¬ªt¥çnµßMUšõA€ Ð; q²:¯j¿›Ê€S@€ªˆ'Û`" ³ñ€ @ Æ  k|Ð}@€ lÐÙxa @€ PãÐ5>è> @€@6èl¼°† @¨qèŸt€ @ t6^XC€ Ô8tOº@€ :/¬!@€jœºÆ'݇ @ÈFÖ€ @5N]ã€îC€ d#€€ÎÆ k@€ '€€®ñ @÷!@€²¨jÝÚÚšÖ€ @&Pí¬ªt]]]§'@²‚jŸ ɾ† @ vTZãTZƒõ´‘¨j]iØÕ>*Í‹ú @èÐ8ÙÆ Ö€ @5N]ã€îC€ d#€€ÎÆ k@€ '€€®ñ @÷!@€²@@gã…5 @€@@@×ø û€ @Ù  ³ñ€ @ Æ  k|Ð}@€ lÐÙxa @€ PãÐ5>è> @€@6èl¼°† @¨qèŸt€ @ t6^XC€ Ô8tOº@€ :/¬!@€jœ@U èÖÖÖŠo¥ë«h㨠€ ”I Ò§Òõ•Ù­.+VÕº®®®¢à*]_EGe€ @ L•Ö8•®¯ÌnuY±ªÐ]FŠ!@€j–ºf‡žŽC€ ”C]5Ê@€ Ô,tÍ=‡ @(‡ºj” @¨Yèšz:@€ Pt9Ô(@€ P³Ð5;ôt€ @ èr¨Q€ @ f  kvèé8 @€@9ÐåP£  @€@Í@@×ìÐÓq@€ r  Ë¡F@€ š%€€®Ù¡§ã€ @å@@—C2€ @5Kaè[[[3Xc @€z4N¶qªj]éÉPWW—.Ö€ @ ¨´Æ©´ëi«Z@Wz2ô´Á£=€ @ '¨v VÕº'N(Ú@€ л  {÷øÑz@€ n&€€îfàœ€ @ w@@÷îñ£õ€ @ÝLÝÍÀ9 @€@ï&€€îÝãGë!@€º™º›s:@€ ÞMÝ»ÇÖC€ t3t7çt€ @½›ºw­‡ @èfènÎé @€z7tï?Z@€ ÐÍÐÝ œÓA€ ônèÞ=~´€ @ › 4tóùzÕéúXcŸ–Øæ¹‹ûØ[ÓYCÃG½ª4€ tD@GZÇê,hŸp „+L]˜5Õ› ì[g›êlΜV{õýY6eæ«« ³«‹]kkk<ç*4 Ëgç%aè$Ê÷aX>;/ C'Q¾ÃòÙyÉjg8s^³-XÜjƒÝ´4®0ªÐ>Ù w¿xÎà~}lÄ@³•†H̲™ ZÃѶ"]¼$¹€ @ 7¨ âyPÐ<õAûÔ›4Pg\g5XgÎÝe«Z@wvõVw_#ÔY݈>6¬Í]Øj‹ÑÏÝ1/9 @ÝH@Û6´ò,Ý3"]î¬ëÆ®—uªªÐeIj¬××ÚÔü[Ôl¶x :ˆ  @U@@{ž%šµò,_W˜º0›˜£ Ô&ÒÀÜ­Xˆà @€j–@ç6¸Ô,¶Ò:þûßÿÞöØcÛwß}í½÷Þ+­V€ @=š+Ð‡çƒæØþÛ^u†5hÃP·dñ\{éÅßZß¾‹ìôÓ³1cư$€ @ 7@@g­ ò¸mþ©µì[?ÞÐô­·†>uÖ'zo¢Å7ϵZsØ&}ÙÏ~bMýGÛâÖaöìË«=Kss³½óÎ;áÓ ¶Ê*«„úÚ„ù/ùKÛm·ÝluÖ)Z¾ÔÌ{ï½×fΜipÀ2EŠå-c\¡„E‹ÙÂ… mðàÁª‘j @€@×(¼„ÚõçîugÐ}äå™¶öækØ¤Ù‹í½™‹ìýY‹íý™‹íÃp|Âïÿ_ÿ~Úîºëï¶(éCNýª=õú\SÙ´›7ož}ûÛß¶Í7ßܾúÕ¯Úi§Ãßýîw£é 7Ü`o¾ùfºXÙñG}Ôþñä-_,/oN$Þu×]vàÚ†nhwÞyg'j¢( @è~¬@g`.ÜÚ¯¿M›×b­õ­Ör}ðµø¬×µÔ…%èÅ‹›íÚ+.³àÙ6»íoõÃÇY]ÿW£€®¯_úÄóÎ;Ï^{í5»çž{l…Vˆ-iii±©S§fhUï3]o½õì׿þµ}á _è}§Å€ Ô<V 3L è–¦F{/¬4¿ðÜóvþ—°ïžz¸=òà¿lÖü›9¿Õî»ûÿìí·&ÚÀá+Ú„ÿ˦Ïo¶æ¾Ë¬@ë¡B­0Ÿ{î¹9ñ¬¦hûÆŠ+®˜kÕüùóí¤“N²7ÞØ¾ùÍoæÒøóŸÿlÛm·m²É&QzæâÅ‹í /´­¶ÚÊÖ]w];ꨣ<+çOŸ>Ýöß{úé§si üä'?‰õí²Ë.öì³ÏæòÞ}÷];ì°Ãlýõ×·vÚÉn»í¶˜§¥Ÿx≱œßxãvöÙg{tìØ±Kõy @€@&€€Î88MšÂrsë?z]7a;›={–ýõ÷¿²ÉÓfØä©Óíïº.ìnµí8Þæ¶4ZŸ`Û40”I¹×_=¦HüsßûÞ÷¢H¾æškìÚk¯µW^y%šÏ˜1ÃÎ9çûíok7Ýt“]rÉ%áçÆçļK/½Ô~÷»ßEÁýÌ3ÏD‘ž<‡n$z%„7ÝtÓ\Öý÷ßÃ×]w7ξÿýïǸDò1Ç÷g?ðÀq»É—¿üe{î¹çâʻ—]v™=òÈ#6eÊûÁ~`Ç|®^€ @ š°…#ãh6 èk“æ,±!KÌÖÚé0{ù¹'múŒÉvÛ ¿ «Ç öÑܹ¶ÖfŸ²¾c&ØŒ°*=;üôwÓ€~ËœeÚ´i6`ÀkjZV\'=öX;üðÃcÒšk®iÏ?ÿ||¨PÛ>&L˜`ýúµÕ½Æk˜ö1kåX+Àûì³O|}ž ®µÖZÉ*íüóÏç>ãŒ3–JßvÛmí+_ùJL;ýôÓãÆ ,°W_}Õ^xá…(ÖGŒë½êª«âyÔ=ä(1ê©§Æ}ÍG}tàKUN€ T V 3dß°šÜö2÷kj°!CÛn‡žfú±ž·ž}ÀÞ|ú^8h¨í°ßQá— ¬ox«Fc}ëDwÚémzˆpöìÙ鬥âãÇÏÅsa­¿ôÒKvÊ)§ÄC{§'Mšóßÿ}Ûzë­s¶É€ö\_~ùåq[Húg6“b^¢[oÈxûí·ã;¬õ¦ m½p§“ï¶>òÈ#mÉ’%öä“OÚ 'œàfø€ @ ê  3ißþ}ÃÏ\ÖÛÐáh²u'lnÛíñykBYÇîŸ`£W^1äõµ¡mH¿†°…cY½öÚk‡wD÷µ¿üå/[Ðf®‡µê|ÇwäŽC=4f®´ÒJq¥:_ÅÆÚr¡}Õ“'OÎgÓ´ÅdøðáqõzäÈ‘öÑG™VÍݽñÆ6jÔ(Ú•W^iûÚîáû£s™ @€@@@g̃ûÙ° ˆ‡ `Ç´CÙ>‡o£Ç®aëoº­í°ëÞ¶Âà6lp>¨°m²AC–ÝÂ!¬‡û´_ø±Ç˵B«ÈڞёÓ€*wß}÷ES W‰\9½çùöÛoÏ=˜\)Vþ™gžW¨u~=¤èNû«õp¡V³o½õVûÄ'>jÔ6 ­˜ß|óÍQ kûñÇ·Ýwß=Uü¿ø…iïõÅ_ ÔÊ5€ T#ö@gÕ•Gô·AZ¡¿õº8ìæ°ú>ýíØ¯~Ý b#FÖ‡7nX8êmÁ¦×ÇÆŒêŸ÷,guV(_otiÕX[(ú÷ïŸÛóœ·P{¢Dí~ô#ûâ¿WŠõ£$zôG~ùðô¸õb¯½öŠoôÐJqú}˺|°}éK_Š[:T­VœµŠ­m%zÐðꫯŽgÓJ¹~ÔE«ÖW\qE|Íž¶iìºë®qÛ†ö>ë•|£GއÞñ¬­%úÓŸbÿÚ›œó~þóŸÇz$ÖUNJþýï_jE;gL€ ô0uZ¹,äÂÙ°»7º|¾ÒÒ‡V´u(ÝÃI?È͘î¾¼òå+ÍO_?l¸<¤—åôð›VNÓï_.«²PHÔýâÖl“Oî’k²¾áù¿µX½Æv_Á°Ø-°°Ox‘=sÿ]vü>ëçø ÙK9íž8q¢i«Ä°aÖÊë(¢ñÓV ‰dÿC/ã+Ò¥üÒŸ¯DKÀëMÉí^Ÿ|K«çúÕD @HÐ"œžÇÒvÕr]xiÁq¡ì‹á?KgAUYXžÌŠ{º|å%}…“‡¤™ÇÎw„ä¶ß”v?h,Ùåu¨ ¼Xò'J4¶¼s¯Mzy»]øï€/ ÍáõpðÃvè±Ä>|ña[ôÖ=ApNÈ_iHU½é7e4NeèG«×ù\)ÂÙËI8»+$ž•Ÿ|GµÛãC€ Z"PÕºÈCYc¬•ìýöÝ'î~þoW•TÇ AƒâÏVWj¼¤“b@€–#Jk°åØ•¼§®jýñ”¼}Ïœ¨úôÎcíùÕ6=lWÌiK…Vs%¢+Ý–bç%€ ,OÕ®{ªZ@wÅÄÑ„ÐÖˆ,Û#º¢Ô @€ °|h§.€ @(‘ºDP˜A€ @@ÐÌ@€ d €€Î S@€ ðaÆ90sæL»÷Þ{-üÀK‡oÖÐ+\‹ÀmçwÎü)›…9 @€@7@@g}ÿý÷ÛÖ[oc›o¾Ù2¿ü—®J¯¹{òÉ'í¾ûî³ý÷ß?‹ë{Þyçøƒ*úåDÿEAý|ön»í_—3îD@Â_7pÀ2µË[Ƹ ú•Dýú!?ÌR˜T@€@·@@gÀ-¡«•ç 7Ü ÷è|ï9ô—‡Ë~ƒ 6°;ï¼ÓNÿ˜Ê¼yóì‡?ü¡ýéOŠ"Y‚ûõ×_·Ï}îsöÍo~Ón¸á[sÍ5+& }ôQ{ûí·ó èbyuh*~‡vXüYsõW¿Âø“ŸüÄÖXcËb@€zt†Q8p`Ï û©HDëpá¬ßöÖ§+ßËäÐçwž½öÚkvÏ=÷Ø +¬[¢2S§NÍЪÞeª•¹þúëãÖµüßø†ýìg?³K.¹¤wu„ÖB€ P³xˆ0Ãлh^¼h±-Y²Äšu´4G‘ãATËf‰Ž§cñâÅ9!<Õ{ï½W˜Ï=÷ÜœxV¾¶o$·5h›ÃI'do¼q\•NÖñç?ÿÙ¶Ûn;Ûd“Mì׿þu.Kç¼ð m«­¶²u×]׎:ê¨\ž¦OŸ·•<ýôÓž}­«¾]vÙÅž}öÙ\Þ»ï¾WŽ×_}Ûi§ì¶Ûn‹yºi8ñÄã*²ßxãvöÙg{t)¿oß¾9ñ¬ŒÑ£G›Xà @€@o!€€Î8R€-­-m:¬·4·­2K8ûá+ÏÐrýúõ[æ,Úª!'±ZÌ}ï{ß‹"ùšk®±k¯½Ö^yå•h>cÆ ;çœsì·¿ý­ÝtÓMqwΜ91ïÒK/µßýîwQp?óÌ3&‘žtj§D¯„ð¦›nšËÒþn¹ë®»ÎÆgßÿþ÷c\"ù˜cŽ1íÏ~àì«_ýª}ùË_¶çž{.®¼+|Ùe—Ù#<âü?øüñ±l±tspË-·Ø^{íUÌŒ<@€ У°…#ãpôïßß´wYû™µZœo´ª”èÔê´v>­½À °¦¦¦¢-8öØcíðÃ6ÚýüóÏÇ=ÑÚö1a„\ÝÚC¬}ÌZ9Ö ð>ûìcûî»o,·ÖZk-uŽóÏ??žûŒ3ÎX*}Ûm·µ¯|å+1íôÓO{¥,X`¯¾úª½ð Q¬ë­"ª÷ª«®ŠçQÖYg(æO=õÔ°?|C;ú裣_ªòTD7_ûÚ×l³Í6‹ö©l¢€ @ Ç@@g­@K4K@ûÞ礈ö}Э-atXß—¯2i§Õ\ ñÙ³gÛ!CÒÙ¹øøñãsáÆÆÆ\X+Á/½ô’rÊ)¹´I“&Åðûï¿Þ²u.=Оk=´¨íÉvË&)æ%º.\:Ô‹ÁƒÛرcsUI(k[‡»#<Ò~þóŸÇ·Ž$·“x~Ú׉s½i@€z¶pd-­&K<ëíœ:$lýÈÅ›ÚÒd›ozíµ×ŽÂú/ùKÆ´™ë¡C­:ßqǹãÐC™+­´R\©ÎW±„±¶\h_õäÉ“ó™Ä4m1>|¸É~äÈ‘¦×ÎiÕÜÝo¼a£Fò¨]yå•&±¯ßËL´ÝãÅ_4m5Iޤ̈B€ IqX$†“bY«ËJóCq?Ü.Ÿ€–>*<ܧýÂ=öX®ZEÖöŒŽœÞ+­rzÇ´œ„«D®œÞó|ûí·çL?¤wæ™gÆj_ûÝiµ.ÔöŠ[o½Õ>ñ‰OÄm*Ú¦¡ó›o¾9žG«Ø?þ¸í¾ûî±¨â¿øÅ/¢ ¾øâ‹ã„z]^>§¶üèG?²“O>9®pk~îܹùLIƒ @=’[82‹ö@k•Y¢X«Ðém^D¨çk¯s>wÖYgÅÕìƒ:È´j¬zU¿ïyÎWÆÓ$j%D¿øÅ/Æ•âE‹Ùi§fGq„iÿ²¬ÎÓ=´R¬wQ'„îÁl_úÒ—ìòË/YZqÖ*¶D­4¼úê«cºn´ÕB«ÖW\qE|ÍÞ 'œ`»îºk|˜R{ŸõJ>½QCÇ·–h«ˆVà“î‰'žˆÂYû¤ÝéM!ÿüç?=Š@€z4:ß³›¯•AÖµ§çó•–>´¢­CéNúRSŠ»/¯¸|¥ùáéë‡mmê.dfuZQ3fÌ2".k=n¯=»=ôí¹çžñÕsãq‹¥}±ÕŠîÿýßÿÙöÛoŸw+‡Jèm'NŒ[%† ¶t%ÄtmÅHö_0ô"¾"­ýË9_‰–€Ÿ2eÊRÛ3’eu.­žëæ@€Ò´§oœõ’r]xiÁq¡ì‹áh ‡^kÖœ8÷tùÊKú 'øóíi ç;BrLÏùAcÉ.¯«jÔ‘ÀÍK¤H¢D£VPõc*[l±E‡"RÂXöú9:jÉu IDATo½2®S½é7e²M§«Z½ÎçJÎ^NÂÙ]ro³§¹Ÿ|Gµ§áC€ $Jk°dÝ=!\ÕºÒ€µa¿ýö‹{õ‹Rœ~yO[Ò[J)‹  @€@Ï#€€Î0&º›Ò×Úó«mÚç\ÌiK…Vs%¢«ýN¬ò @€@5@@gM amȲ="ã)0‡ @èÁô€ @(‘ºDP˜A€ @@ÐÌ@€ d €€Î S@€   ™€ @È@¦€ @@@3 @€ ïΫTSý„÷‹/¾hÏ?ÿ¼Mœ8ÑæÌ™t%ùÃ+þóêÉXñ´äyȯËáè ||<ä×Õ×Yc}c|'øØ±cmà 7´õ×_¿ÃŸxÏuˆ @½’º‚Ã&÷ŸÿüÇþú׿Æ_ÜyçíÈ#´ZSSSÏDU=…Àâŋ㠒n–î½÷^»ãŽ;lï½÷ŽbÚÅvOi+í€ @ 2ЕáhÍÍÍvçwÚ³Ï>k§Ÿ~º?žŸï®Ûž\M}}½õíÛ×>ùÉOÚŽ;îho¿ý¶ýøÇ?¶·ÞzË>ó™Ï˜òq€ TtÆS[3þþ÷¿Û«¯¾jgu–92 êð-¿…EiÓ*åc=­ñ(tÊ>}úØê«¯ncÆŒ)dBzO#Æ7Œjl•Æwå•W¶¯~õ«v饗šÆs=öˆ~Ok6í @ |èòÙÅ’Múú^{ž<ðÀ¸uC‚Zéî>úè#»ì²Ë¬±±q©tÏw¿¡¡ÁöÛo¿(Â< ßìâ‹/¶=÷Ü3î/î <´5#9¾j“â~ <Ä>ø`ûãÿo†&L˜À·=aàh @ Bx G'AΟ??î}Ýa‡âʳijméð°„•¾æ×Ã…~ÌŸ¿ÐtxÜ}‰3•-v¬µÖZQ˜iµSûmµu¤˜ýòÈ[o½õì–[nɵëÛßþ¶7.W›ÖXc¸ÕAó¶Ûn[*/Ùæ+¯¼2®î'Ó …µú{ÐA¬«P¹RÓ5¦K–|<¶^Néç6¿%>X¸ýöÛÛƒ>Æy~'gÅ!@èIªZ@KÐt¥“XÒʳ¶l¬¶ÚjñT‹-ŠâMyÉ#ÙŽææ–°¢:! '¯bóe¯UÙ×_Ý$>O>ùäxÎbe”§m‡zhn¥Tût‡njsGe³æk?ðý÷ߟ«÷ᇶ?ü0 fÕ¥‡- oî¾ûnÛm·Ý¢m¾6©¿¥ž_¶r¥ÚgµsìcëåoniÖÚ²£¡UW]ÕFe/½ôRœ m-ã_@€@õÐçc5»ªÐ]ý„… Úk¯½Ås¿~ýâ´]f•UV±Í6ÛÌnºñÆ\]?ûÙÏ"Ýph%]«üo{•óo |å9é/Z¸È´]GsÀ.ÔëíÞx㘖k†j%ÐÕlysct'F@ÂPby¥•VŠïþ•hr,¡¥ÉS×§.ÈyqEÔO¥ôÿøo1šž`‹/²yÁ~)§›¸_‡l-­-öü ÏÛo¾a·ßv»}ç;ß±¹¡ÌÌY3£Xóò³fÏŠBQ¢x­uÖ¶Ã?Üžyæ»ä§—Ä-ýð"ÛkϽì†n°AƒÅó^rÉ%öüîºê*khl°3¾|†]pÁö³¿aªO«©_ÿú×cü©'Ÿ²óÏ??ŠödûÔv‰r­2¿ûî»öÎ;ïØºë¯g£Wm=üí¹×žQ@qäñœzWö´éÓb8צ?„6…õEú›ßú–zÚ©vÌ±ÇØgø¬|ÈÁ¶Î:ë´aJðw‰Z•{ùå—í _ø‚xâ‰vÓÍ7ÙŒ3b¿çΛk‡v˜m¼ÉÆöÀƒØC>d'ž|’bzÂÆlÒ¤I‘‰þ•W]ißúæ·ìªk®Ž7mÏ †qÕØÖiß³ÅñPz\7@Êûÿí{ŒdU¹öWÏÀƒÌ…áâá€ET 1$À÷¢hÄs¸(õQ”ˆ2~Þ"‰—ϘèÞðxøPà ‰âà#^‚"(àŒ"1¢ÃE‡a.ß~VÍSóöê]ÕÕÕ»º««~+Ùý®÷]ïZ{­ßnÂÓkVíÒï‚δkúÎ;ïÌDì¶Ûn­ùò€ M`¤w ýd´SºÇ{¤åË—gÁ¤a 'Ùö5!ÄúЙvu6ºuVöá‡ÿ•tIt9¾uë¶*s"-ªúLº4^ˆ)çÆÞ˜þó‹ÿ™ß1½µ+«vÅUœÛö«þ»î²k¤:‹½ï>û¦¥»-M«ö\•óõÀŠå+r¿«®¼*R»Ô‡<çôš×¼&}µÚõ˜ê Úc_tlþ`ŸÞ<"Áêv[í¼êƒvŵc}ôóŽNGydúÅÍ¿Hoz<Ç4†òUܯ=§jŽž“Úßð†7¤³þã¬tä¿™wÆï¸ýŽvŸÌz;Ÿ–°m1¼æ¿¯ÉGTÞóž÷¤•+V¦Vy©ïwÜ‘ÞvÁÛÒÞ{íN=õÔôoGT»ÐW_ÇÔzÊ'?ùÉtè!‡¦c=6ù~z¾‹W¬3êŠpUÑÜÛ÷Íí­ß hý~èý®P @ ì@÷ù%|µÛ¹lÙ²üv ‰¥(ž-¨ZÃOT"ܩک~BÌõ·œ¨DÖ–Ü$A8]‘ ”ðÓ1Û¸í¶ÛÚ¯KsÙ,ð¶ç9¹]¾Š|Çî»ï¾|®ÚþsŸûÜtÿý÷g‘¬|­sÿJ°«HŒ«Ä{äÀöú`¥Î>ÿõ¯M¯ýëón¬Ž„Üxãùbçâ1êæ¤'ñœô¥4ÎwÛØÿÏþs>r¢ç‹Ö(a+‘ì¢ã(Ú-×=4†Ö¨µªhåý|÷¯öŸóIú½Ð¿B¸]o^‘€ÖïŠÚßÑ @ zOÌbIgc%¼tI¬E±eÁ´ß~«Òš5ÿ«ºÛÔóЭ)ì\ Ëuéž{¶æ1¦›–ïuî¹ç¦K/½4¿íA¢Ps²`Ôy\ûš‹.ûѺ®Dþ¾:Ra_çwW¬X‘tÆÛ±:ëXœ·vn%ðõUæŸþô§“Ž0,]º4ï`üñíñÌKcxœXí¿ôã=Õ¦KýŸô¤'¥k¯½¶=¦óôö±Ñ‘­WEëÔŽ¹úÅ1ÔVúŠ©DA¬º/åKDëI8;7Wø@€À‚'0ýVç‚_âà ôðÃçÞI4É·°•Õ¦ý^gÇñxþÆü¾…›Î¯^½:ýíoËgx%/¾øâ|[÷׎«Îãúú`vWu CÂQy'tRZ»vm½¾úž¿QOí*žGôÝ?¶éM:‡,‘*q¯ã¸é¦›Ò 'œÐ'Žçä±b{¼§Ûe}³QìôÓOOúÓŸÒ—¾ô% ‘E³Î¬qÄùí:²¡|}T_t£wM«Ÿb*?Ž©ûøòóõýw?Y“—PW@€Àhàÿê}>G‰*‰O ¤r: )Õ%žZšL¸;_‹ª*×ý£qMùüóÏÏ_¸¢o@üÈG>’w[%_õªW¥£Ž:*Ÿ]ÖÛ*T< aí«]Ç(t„ÂGA>üáç¼5kÖdá¯7SèÒÚô!BÝ_—Çó˜öãü󙼯ãŽ;.ó”€öXϾæàºÚ|ID+^wi.Ú–h÷1¼~@€ °  LèŸ;•J´¶âªÅÞž­êåeu¨¸ëÑJ É·Õù²Šùrüà 6|®Š÷U´³ª×”IÜ ¢è€¾(CG9ä´jÕª|Z÷³Ó}xàÁê(Ã¥ÕŽð©•×éÇNÕ.èÝÕyãeé´Óþ÷¬¦ûÐCå9uDgšµ+,¨¢|Ñð«øÓκÖÏ)+>W¥nNýÞ["V;ó:ºQ½›Z,|Þ¹lŸ‰ï#:¾¡{jçY¯þo×.<€ 0êôr}ÞèÀì{©•¦:¯ê¼®º$œtRó%ßqYÅ£U=^»öU¯»ªpë][¶Õÿ×;ŠdÎ@ WŸE»¹ú6½ë¯¿>é½É>÷êÝH»çž+«£gTôs¤Þî²ËAÕû“Ÿ6k1çs½õwIùŠØV—¯?æ³ÔÍ©ßùHk'¼®tŠ×åNÓgúpÑ›7ôÖ‰'ž˜wþÇB€ °°  gñü$”ufWG'®»îº|l¶óùX ¯·Fè‹G(£M@âÙ—ŽöèëÉõ •úÔ¿‚Œ6QV@N­Ãι ý¬tÄAÿ,¯³µ:+¬/$Ù¸qc>úàãC¿&ØŸ‹Ö7^qÅùÛõ»¡ß‘§¡»A€ 0Oгï]hí0K<ë[o¹å–,¨µÙåøÌ,ïL÷a!à£:óuë­·¦ÿS}k¢>8¨ß }I »ÏÃò¤˜ @ áh€£Žhè‡ÎºêmŸýìgóòôj¹cŽ9&·é- ”Ñ# Ýf}U¹Î:ëUxú#J_Êòüç??¿E¿@€F‹ºç©ž—@ÖÒôÏõÏ~ö³Óúõëónä 7Üw£Ù‰nô¡g¯oÔ›Xôm‰tPþ=Ð×»7ñf!\2S‚ Œ=tƒ¿L{î¹gþêf}xìÑGÍ_Þ!«ÞGD7{†’xÖñ ½WZ8ÉêòWÁ™ @ €€nªw£µ#­]I gÄsÇh8‹h iÕ)€ Œ>ôŸ±•v¥ù§üBfh@€ 0ÇFú-™˜ãß&n@€*£®ÁFZ@óOêü7 @€æžÀ¨k°‘ÐsÿëÂ!@€FzÔŸ0ëƒ @h”ºQœ @€ 0êУþ„Y @€@£Ðâd0@€ Q'€€õ'Ìú @€%€€n'ƒA€ Œ:ô¨?aÖ@€ Ð(t£8 € @`Ô  Gý ³>@€ F  ÅÉ`€ @£N=êO˜õA€ 4JÝ(Nƒ @uèQ¬€ @ QèFq2 @€À¨@@úf}€ @@@7Š“Á @€FÀH 艉‰´mÛ¶Q†¬€  i/i°Q.#- wß}÷ôøãòócm€ @`¨H{IƒrÙi”·råÊôÈ#¤M›6¥wÞ™ÝèQ~ج € y% ]g‰çÍ›7'i°Q.#- —.]š-Z”6nܘ/ŽsŒò¯2kƒ @`> H@/^¼8-_¾<íºë®iëÖ­ó9Þ{¤´Ü’%Kò5PŠ @€ Ð&0ÊâY‹é3Ðí§H€ @ @@7’a @€ƃz<ž3«„ @hˆº! @€ 0ÐãñœY% @€@CÐ d@€ ñ €€çÌ*!@€"€€n$Ã@€ Œôxt– @€ Ð?tÿìè @€ 0†ÐcøÐY2 @€@ÿÐý³£' @€À@@áCgÉ€ @ý@@÷ÏŽž€ @cH=†%C€ ôOÝ?;zB€ Œ!ô>t– @€ Ð?tÿìè @€ 0†vÃ5³d@€æ‰ÀæÍ›ÓwÜ‘~õ«_¥»ï¾;=òÈ#iëÖ­ùò”¶mÛ–«%ÇÚªÒ©ÝqÙ‰ÅiçÅ;§eË–¥ý÷ß?vØaéCI;í47h.Ök&^·ü™ðR¾û3ÍgØËD`Oº‚èßÜ:«XyiG[—â®G»x{ÜV¿½j—UÌ—ãoذásUœ@€À& ½qûí·§k¯½6í¾ûîé¸ãŽKGqD®/Y²d +{üñÇÓ?þñ|ÿn¸!=ôÐCé´ÓNËbz‡Ôiv ó¹Þ&V2Ìâ¼W­Zu^寫®­Õµ¹º¶„K¾ã²j‹Võxé/2ûª×]U8ÇÛ¶z†­¿ä) º‚ @€@³¶lÙ’¾ño¤›o¾9]pÁiõêÕíÏfïÔy4k!ívÿáHûØÇÒÑGN>ùä´x±öïš+ðÞ&V3—ÌÊù»€ž›¿(©àC€ 0$X×®]›~ýë_§w½ë]i¯½öJ˜ú7îÎû{ £©ö·mß\”(|⟘ÞùÎw¦O}êSiÑ¢E餓Nʶ‰»Åz›XÈ2kbºs=†ŽOP @€@ã$VuÖY×Ë_þòô„'Ÿ“~ÉK^’ÞúÖ·¦<0½ýíoÏg™- ¿øÅ/¦ßþö·SD¥Æ”@÷ØÎ—/‘Û²[+½G:æ˜cÒ~ðƒ¤¹Î¶Ìf½žãë^÷ºôä'?9ýë_ÿš´®ýèGùŒóš¶óÅl¶Ìç«?z¾Ès_@€À Ó±=÷Ü3í·ß~y¥›6mÊ¢Pmu×¶m¸[³HÖ±ŠSN9%Ÿ›þÚ×¾–n¹å–¼Û|ÑEeìcÙòÒØÇ÷p»ü-Ûw£õ!9}€ð©O}jªÎÛæ]nµ÷[Ô·ßõz~ÚmÿÖ·¾•é̸㶚›ë³µ/{ÙËÒ•W^ÙOóŸkfý²†~èax Ì€ 0b{ì±ô›ßü&‹ç]wÝ5¯N±þóŸ) éêuvSwQ7W;Ç›Óe—]–_3÷¦7½)Ièn®.±fÍš¤]ç{ï½7Ç%"•¯v N} ðïÿ{+V;þ–´é±MùÕyš‹><¸Ë.»¤§=íiy'[±~ËlÖ«5ê’ =á„Òé§Ÿž.¿üòs›®®~ðƒùC˜úäÏ~ö³vŽÞnrÔQGåÝë“«?>ÄÞ}O=õÔôÕ¯~5Ÿõ>묳Ò>ðôóŸÿ<½ûÝïN‡~xÞíÎç˜Y¿¬‡¡"†§À @#F@GôŽg 4½sYbUP¢NbM»¿‹&Ò¢üiB½ýÖô«ÎMßö«ü®æmT°õrÜÊø¬•–ÛW¬\‘wO%\o»ãöô–·¼%ý×åÿ•?,(‘®NùÚ¡®ÞaVíHk¬¼s[ÍCm𓿶÷Þ{g­9ï¶Ûnù3ý1›õj‰*šÿEï¼(im§zZº÷÷湩Mܾ÷½ïe±ùÿ»<}âŸHï}ï{Ó•W]™î¼óÎtî¹ç¦üãùØËÇÿïÇÓ¯>#}ÿûßÏküýïŸÞ÷¾÷¥5ï]“Ž~ÞÑi·¥»%íêÿûü{՛ߔÿ¨™kfZ×B-ì@/Ô'Ǽ!@CL@ÂV\¾|yqzÛ…«lûš ©Ä³ô³ŒDu{ð³]TÕs®luí²d—èÁ‡²¯åK,Ÿ{ιé’K.IG~DŽë>‹/ªÆRFKH«küJ´çöÖ\$ uZ咽ít¿ëÕÜÖ¯[ŸîÿËýéøãOÏ;êyiõêÕé®ùŸ¼Ïý…/|a~{ÈáÏ=<½í‚·¥›nº)ï¨_óßפƒ>8½ò•¯ÌgÍ/|û…éî»îN¿¸ùmNú㔓OIûî»oZV}€rçwNË—-Oûî³ï¼1ÓÓY¨…è…úä˜7 @`H øh…¾ýOBÍ;Ðβ¦¯#×_ý”WËI,ëƒzj×X*Ÿÿüçó:ô–Ç<®î3¹´v£5?톻]s”øÕθÚŸÜ·³7Ûõjd߯}èCùF:²¢c¾*š“Ž›xÏzÖ³²àÿãÿ˜î»ï¾t衇¶ÛöÙgŸ,”w¾^Ýçzpû˜u1··ì`˜M¾ÇÂóØ^xÏŒC€†ž€D¥.=HÓåèh[»ÅÚ1Þqé|¯…aŒëmÚ)~Îsž“ó%*ßüæ7ç*^xá…“Æp?ßWþ¢E;vÀ[~k^>R¢ùö[f³^¿æškòÙg}¨Q—ÎAë³^±§¹j­º¼.ËX¹re:è ƒ’³|·éŒûï¿?‹h÷‹ã¹¯lÌ$³~YC?ô0<æ@1bú@ŸÄœ„šD™…™¬v¥í[´ÙÅ+^‘…¡¾-PEíÚMÕî¬óŠ+r_µiçX»·?þñ“Þ í1ÔG—ïSÆåûÒùe}½·òû-êÛïzõæ ‰f½aDëÓ®³^Ý÷â¿8¯MóC½ÚOóT]|éK_š×§Oê-%: ­6í\ëÍ"úCD}U¼VYÍU»øÊw\1_sŬ_ÖÃÐ#Ãð˜ @`„HÄ-Y²$1¨ÛV»®NE¢Nñ¼óÎË»Í{wÝuWzãߘ¿ÍPBÏE¹zoòÕW_N<ñÄôÌg>3qÆnÎV÷òî²wŠ=íþjZ"Zsî6¯IƒG}f³Þ+®¸"yæ™Sük_ûÚtñŧK/½4 ]‰bíL?üðÃù &W]uUî£we¿ãïHzƒ‡v£µ½ÉDçÏ],œíŸ}öÙéüóÏÏ4ÔÎ~Yͬ¼ßBó'ü U7ñ ž»ë¬bå¥?st)îz´ú—o+/_V1_޼aÆÏUq  @ ˆ€vcøÃæb¹øÓYc‰_É‹£û¢´ãú—¿ü%=ãÏÈ»­Ý³§oµ€Öh Í|0ïìêÌÚñÕ9ä~JSëíto |½%D<ôaÀ²è•J7å¯*/Ûê|åkÞz6ÝÊ ˜u»g5§óªöuÕ¥—so®®-á’︬ڢU=^:›c_õº« çxÛVëîx¦‡ha¢@€ Ð(¥K—fÑ{Ýu×e+Áê]иƒl!ÝI«ìµ×^ùÍMMN÷Ñ\\ôNêŸüä'ùunšs¿¥©õvº¿Þâò”§<ÅÕIVG/t¤×¢ü^^Û7(f½ÎsóÐÃøT˜ @`HÖ›8à€´víÚ|¬Bo–PÜglçc‰Ͼ´«ûõ¯=¿2NsÂ~¦sÖõÎtuùæ%Û$³º{-”˜ŽOP @€@£´³¬]S};žÎëƒm7nÌG7´=_E÷Ö¥w>å+_Éo Ñ5Wï†÷3·a]o?k)û ŠYyŸ…äÏßoðB¢Ä\!@˜1íÊê¬îqÇ—…ª¾†úÖ[oÍuífv:¶1ãõÐÁÇ$æùË_¦÷¿ÿýYÐkn³Ý}ö»´§pCIDATí‡i½žÓlì\0›Íüæ³/"œOúÜ€ 0â$ÂtÎX¯¡ûéOšn»í¶ü… GydÒ7ë=ýéOÏþ 1h·Yï•Ö«în¾ùæ¼û|Øa‡¥¼àù ú‚’¦Ê0¬·‰µÌ%³ºùû‡ÐuO @Ð/ôF ÙuëÖå/þÐ0ô&‰ÎA¯Ð@ôÅ#ûï¿þÚk½Oï“ÖyìA”ù\oë™fqÞÃ. ó[ P‡ @`ì H¨êui:k,«/XÑ+ÔôõÜ:V1(-!¨£úC½¢NoËÐÕï;Ÿ{}óµÞ^ç×-o¾˜u›Ó°µ! ‡í‰0@€Àˆ0Óq ]ÚýÕùèAŠgc´ ”V}®Ê|­·‰õͳ&æ>c  ç‚2÷€ @` 4íÒêŤ› 3nëäoá(^‡ @5èQ{¢¬€ @` ÐÅËà€ @£F=jO”õ@€  ”z x€ @`Ô  G퉲@€ @@/ƒC€ Œô¨=QÖ@€ 0Pèâep@€ ^ ÜsÏ=½¦ÎkÞ0 èm]@€ 1! ñ¼víÚrµC© ›þ*ï:á[ÆJß êuÊu, @€À'ð»ßý.]ýõéì³ÏöJJ X§»åºÍ¶Ïñ¾ì\ï@ÇÉ„m_   @€ÀÂ%ÅóÒ¥K§[ˆu£­óåÏY´€öbl½°Òw @€ 0&îºë®öγÄsg KMißv $! =aÛ^'®üاô{‡<@€ !'pçw¦o~ó›ù؆Ås8]êÀÒïeuÖ•¶½ôé)§é3Ð=Ý4$yA¶jR=ú!* @€ÀB' ñüío;sÎ9Iâùî»ïn‹ébm¥.´F´-ÒçÆíuº©IzÛn«TN/yÝÆ  € @`ˆÔ‰g€0œîUZ+ÚÎv¥=Ó«€®›L¼A¬wÊ픣xÝU71@€ J`ýúõSvž%žãNt±´:8¦,†˜äƾ±>)i:g6ºÛØqB±û(^׿¸mìC€ @`Ð1ï~÷»“Är)žåo/Ö¶ŽÛvŠ«]m.±îجíLôL&QæÚ—u-"ÆìG«:€ @`x®ËqçÙíÛ—WjE…£^Œí±é8cê3ÉMÛ¶uΟ¨J¸‹ë²®K€».+ß1ù‹··;.ë˜>Àh_1Õ“UìÙ6løRe)€ @cB`ÕªUgUKýMum©®ÍÕµ5XÅt9&1k_1]ŽÉêŠñÊmÇ\WŽë­J‘Üô[8|óÖZ“sÝV9×Ε-ëŽm«žSµKL[d[ŒÇ˜ÆsÜV1]ÊS±oëX´ªS @€:ˆºMYmݶ½®˜­ã¯¶Š«…°Ûsßh«.í1]Vu÷iy­ŸŠ5VšКDi·R7érq1Çm¿­µ ¶µ¶Õ½Ý&+_mž“còãU¹íâÜv€  @€@-¨Ù”`Ý­±ŠbÓɲŠËª-Ú2Gy.e=úu9Ž•¶®_™ÓÕoB@—7ð¤JQª¸¯ØÇ±:+ˆGm*1Gm*ÈŽ+&ßýÔ7Öåûªªm‘­:€ @`zQ—)Û:¬›•‹íòËX«l‹}U%¶Å¸ên+ã³ò» èêèǶâ´o¦ÉXØÊÖOØíò]Üf«¸ëuVíi±¬ºï¯|ù*n÷ÊQ¬SQžŠçØòø @€ Љ€õ“Û­»¢µVŽãŠ9c±ó¶®]1幸ýÒ:×vR»4ð¤@átÐEn¿®¯ÆòÄÊv· °û¨nq캬‹Ú¢¯¸E±âªûŠmαU€ @ 3¨á”}ëºh¥Å|)}ç;ãUÚ”{t‹©ï@KSÚ•UÝ‚4ÖãBVu]g±lßã©MuÛ²â.ÊÓå±ì˺¨¿JŒµ"ü„ @¨#`ýä6ë1[Å¥Éì«nß6¶©®¸ŠënW¬ìã¼hUEý]\cº­/Û”€öÍ51‹Ñ²'­ºŠc¥(ï*k<µÇ˜Ûªp.¾gŒ+æ¾®G»½ë¤þ1F€ @`*ë8·”:®ô-€e;Õ5–Û¬û¢-Ç”¯­sZ-;ÚbžÛfeûКœ„h·sʺ|Ù²îXPÝS6ŠäÊÍ%ÎÇuY]Ê×xöm«P»(F @˜ž€uš3£~s['1츬/õ‰q§ñ]¶[Üm²*ê7]é%gÒ3Ð< Mß,Æ4x§<Ç£U]À4†êñRÜbYíö•£â¾ª;OuÏGÖãºÛÊ\ù@€ î¢SfôU/¯RËw,æ:VÚ˜£ºÛUWéd[­;Úí»û9^úŽO±3ÐS:w hQ¼ÚWÕ}•¾ããþŠÉłقX9Š©8æºâŽÉúr»,€ @`f¤¿T¬ß¢o‘«v×ecÝý·u\Öù1¦ºJŒµ"­˜Û¢u{#¶ ­ÉK”z1«Ž{¢^¤|×ÝǾ y¬²îql-˜•gA­6÷—-ëŽ)OE¾ŠmËã' @€@'Q¿9ÇZ®›µ¶U®êåå1Ê<Ç»YÏGVy.î#?ÆÝ>#Û„€®»¡&fñªöèG±ãªë,÷U]% äV¤õSyjÓ·ØÈª¿¬â¾OéÇ6çTé@€ îR±†‹uk8·Y ;}Õ})?Öí{YÛ–·ÃŸ.Ïù³²M hMÖbÔu[MЋ‰uÇ:YÁ‹EB¸Œéžêï¶è«¯çäºü2¦6  @€ÀÌHƒ¹D=§˜4›Û]wNôU÷¥v×mÝg&¶&õQ±-ë¹±ŸMhM*ŠÒrn·U»ê¾HýKkQ\5µ‹c꫱벾W¬—ùö£U@€ Й€u˜­2U·ïz'+Íç6"pÝ¢ÙVñ²î˜ûȺ¸nëxi§k/ó§ø3к¡D©Kï6Y·{¢²a!ì±b»ú)GÅy-¯õS1ç«¿}Yù1V¹í˜ïeë¶hU§@€ t&`f«L×e}yé:Ç\Vyòã¥|ûî[Ú8FlÓxÑw]qÅb)ýØ6¥>­€ÖwOT¥è©›ÄXé;Ý“‰¹js¾­X,[+¦â¸êq<µk\ÅÜG¾ëUuŠxŽ1Õ]Êù9Ž… @˜LÀzÌQù1fß1Y‹Ý²î\ïD;OÖõØG1ÅTl[^ë§ÇŒ1×ËüÒOÒ¾Nîd§Ð:ÖÄu³NBÔÑ¢%pUÓåXô=Ž!YD;.«˜¬.õ-ëU(Ç|?ûΓO @˜k8Yi8û²öcnŒÇvÕK?ö‹mŽÇ˜çPZå6Rúкy­u)'¨|—Øßy²Z¸ŠÅ²…oŒ«]¾ïE´…±Ç÷=¯¾Îq›b@€ þ H{ùÒ(uuÇ¢•F‹¾êŠÅ¸ëeÜýªô¶PW]Åm¶­èÔŸjW±my=üìG@—Ãꦤñæömc›úÛ¯³¤¢6 d jù/Šfǯšs»¬b*²uõܸý‡ÛcŒ: @€ÀTÖo±E1Ç˺ò¬ï,ˆc[Æå;fëÜ^¬î©<•˜o?7ôû£ í‰Dª‰Ê6ÎQ ,Œ£õBc»úi,_ÓBZí#ÞSq÷Q]E~,ömcu@€ ©¬×l}ÕíËZ+Wu•w¾­óm;ÅËvå©”¶Ý·ß—íI@wø aÝ 5Ù(F=yçÖµiáÀÊSŽ}YIŠâñò½s½ª¶)®¢1TìÇzŒå$~@€ ôDÀ:ÏV\—¾S©óëv¹¯Åq'ë±ójÆt\¶Ìmíz/ TrOº=ꎊ&Q'\cÌ9î%_,h—u\Ö¢ÖcYL+O1ù²1Ͼlyß8fÕÜîWÖåS @€z# ÍåRÖë|Å⥾ö¥×ÜGÖ~·ºûÆ颸Ji;Årr/?úÐÝÆö$-fkÁëvÇmÊâÚ¢W¾v Õ×mÑ÷=<¶¬¯ª:©n_¶,î_Æñ!@€&è¤åb\uû®G_#Ê·P®óÝæþ¥ï¸ÇõŽG_õÆJϺæ‡&'ái«Iź|Å{)Q8»Å­ÚT$¤ÕÛ-šm•§â¾l+kGž}, @€@=k0·Úïd•§¶òr\Ö:/æ8&ãÓÕ5^YÔÇÅuÛïõø†’{оc« X¤*ÅRÌmŽ©}º"Pêk«º/ï@Û×XÛ1Y•Ò¶¢;~º}G„ @€@/¬¿Ê\Ç£UݾòíÛÖÅÜ6ëqlÕ7–Òm=×g$ kv¡ën¤‰I˜z‚®ÛÖõqL}|TÃã¨_¼”k¿[]m*1×~nØÞæ:€ @ wÖzêQÖ£ïvÇd»ÕÝs¼Ûʺïcû+Ö±Ìd÷YƒÌH@×ÜU“@U©«{âÊq»c¹Søáö¸ë¬fÇ£îVWÏÉõè+V–éÚË||@€ 0®:i9óP{Ìq=Únõ²M¾/ÝÃõh·U›ëÛ«µsrÛŒìD¥¸gÔAÉU b=7×´)ÇyÑ:nëþu9umÝbjSñX-oª_—ã\, @€ÀduⱌEßõhc]£Ë±:?æ¹=ö‰í®Ëª8¯å¦»Ï`¶;ÐÃ*…ªÚ\”ãv×ÝO9Ž9ÇýêÚÜO¹ºÜ×}·/Çõ˜C€ @ ?ÖgêëöcÌuY×cžcÑ:·Œ¹Ÿ¬ŠÛ[ÞÔŸÓµOíQiB@—Ãjb©ÓÕ½å»^ŽgßcylÅÝÇ1cß}ec,Öcu@€ ™°S¯X÷(Ž•6æ«­l~ÙÛÊûÄq˺sgeû:¡;Ç8<‰(LëêŽõb•ã¼|Ëí7q¬“-çâ<ÇãX1F€ @`æ,fcOÇlÝf:«|åø²?s˺üÔÏñ õë[@çΓÏB+¤k·z]›bŽOg;ÝËýÔ®Rú­è䟽äLî@€Æ“€Åo·Õ—9ömÕ·®îX-cÃqû²*â­Æ~>˜{6szûPµF·8-ëêP¶Å…z@÷+­Ú‹õr ßÃ㕾ûº @€ 03¥þ*}cuuÇlcÇlÝVúŠ«Äx+ÒàÏYí@k=åÈiÅœ-bKsÝc±Þ©=æ¨îóÃB€ 4G N¸–±è»n«™ÔÕ»Åb[Ù¿Îïûè†Sć5®k'?.Øù1¦±:ç©_¬+_¾Ç“¯âœ–7ùg™;¹€ @Àºi*çØÆÜNuåvj‹qçÅX¬»]Ö¥lw|VvÖ;оû,w¢ÛÃT•RÌÎÔ×Xe?][Ì£@€ ÐnBµ®­Œõâ÷’g[æÏzçÙƒjÚã{â´½øÊQ~ÙÇc–Öùe¼“ï9tj'@€ ÐR{•¾îTs¼l›©ßÜJ¶ÔØ´gÖa'ZÍÄN­‹•9ÑõncĶº{”íø€ @Í(En9z§öuõŸÎ¯ËÉ÷í÷uu¹sÍAï@Ç[zÑQ+Vúû(Væº_Ìq_, @€ÀüèUŸÅ¼X÷Ìëbj+ã¥ïþ±ï@{–]v¢•bñëôN1·×åwjë–ë>X@€ ¹#P ÜÒ3™i[Çü¦wž=É hÝ`S<‘Âö"‚{Éévâ–¸€ @ è(j‹ñ{Éë”Ó)žo1(ñ¬Á*  ¨!çâüÛ«Xvי滀 @ Y]…nÍ­ºåwkËC R8{®s" Û7«”´ëÓØ^òzÉ™æ64C€ Ì#iq5·^r{E]/,æT@{B=îH;]v6by6}ã¨C€ ôF 'ÑÛa¨õ‹çržó" ã$úÓ±»êä’> @n3ÉåRæC4Ç9Ì»€Ž“Q½A]‰@€ °€ Ì·`.Ñ €.'(Q]G… @=Ã&–ë/]7ñºB»Ž 1@€ 0ÿ‚0î•ÒH è^M @€ú%°¨ßŽôƒ @€À8@@ãSgÍ€ @}@@÷ŽŽ€ @ãH=ŽO5C€ ôMÝ7::B€ Œ#ô8>uÖ @€ Ð7ÿ."«Ñö[IEND®B`‚gwenhywfar-5.12.0/doc/dialog/images/fox16-1.jpg0000644000175000017500000011403713142134462015763 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀüˆ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?õ€ÿ¼9à_Ù¯Ø,¦Ö¤·ÿM¿½æv dQ! ÞVåWaA ±$ú/ö&Ÿÿ>v¿÷ðÒh_ò·;#ûŸÞúÕ’}#‹þú¯NNP“Œ]’8ôi6ŠŸØºgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷ѯŸô¯‹>4Ñ<'ã kÄ6Ú>®ú‰æÒ,á…ÙZóÖ5V ™0¨<1Û¡ëšN¬Öí‚„_CÞ¿±tÏùò´ÿ¿”béŸóåiÿ+È'ø«ãUð§Û‡€ö_Aª=Ó4S², ˜.¾q —©àŠ«£üIñN£ñBÐ[Üè7>ŸÂ0ë&Þ&pdÌŒ$x‹F$2eJ„l  f—¶—ó1ò.Ç´ÿbéŸóåiÿ(þÅÓ?çÊÓþþWÍWß|Y«ÊšÌÒZiöW> Ôuhlô½E™”©YrËòʸ# ’xâº{?W¶þ#ðþ’šuž£§]ßXi7¦Cq<(ß4Œ¡l½¹È<íåüÌ~Ív=»ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¾~ð÷ÅÙÜêš$iÚ…ðÕu»•¹ÕîÚ(£µµ”… ‚K`ñØžjÞ¹ñ÷R]&]WIðæ“ ½¯‡mµ™âÔ¯ž9e3¶ÕŽç zž38£ÛËù˜½šì{·ö.™ÿ>VŸ÷òì]3þ|­?ïå7M¹7zuµÓC ™¡I xÈc?ôÎ/ûèÖœóîþòmÄ?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷ò›ý‹¤ÿÏ…§ýõÿ׫ÿ¦qßF¢?õÎ/Κ•GöŸÞcÅi?†¾ñ6w4V6°êpÈ.·mh™wðO—–9\É ‚ ë~' èzŸÉ(;ûŠ+ÒŽ•x©Or#QÁ´ŽëBÿ$dtÿ¹©Î?¹ýõY0èö?2·Êݽ6¼ð麰º>ÑÆœ‚;~ËûUŒã(=—ê(úç÷CêÏùŠV¾ð]¡œÛx7Û„’9ÊXD<ēվ^U°24ÿøBüý¦šŸü">ûtm%ÏØbóÇ,†ÛWtÀÇJµE\_ÊWÌUÔ<á BÛì×þðýÔh{Ÿ.[(Ù|ç9y0GÞnç©ï\ÿÄ?…zî­›RžkkXmÖØÛZÃlF«#DÒÆv‘¨ bºª)»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõQ`r/ûê¨ÑBÇwñÕ¼ÎOâXÿ‰ |¸þï÷½è©>&œxZãæQò÷âŠú<%okB3µŽZ‘å›GUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾_üyzøáD‚âî#ùŒØÎØâg z ã¿_CéQÿhÛÿÏ;¿ü—ÿ‰ªwºŒFŸ¯j×+#Áe¾âEŒÅRb$ àzŠË²ñuÝÞ’uðÅþ• y º­å¬1J²È«ÃG,„6 08\äÖ-Eœ™ÐhÛÿÏ;¿ü—ÿ‰£ûFßþyÝÿà$¿üMR—Å>Š[ˆ¥ñ–Êïp{1*6Æ,3ò€ß)ÏCÇZÎÕ¾ øCM´Òïe×ôélµ;³iÔW‘4!‚333îhÛ‚FpYF9¥îöþ¾à÷»ÿ_y½ý£oÿ<îÿð_þ&íùçwÿ€’ÿñ5GÅ"²Ð<1/ˆ$ŠkëTl[BŒÒùލ›K2©ÉqÉ`1T´i·rjj–×^¸Ò’)o"Õ$òã“vÉ7£´eIF Á8£ÝíøÿÀ{¿õ÷›Ú6ÿóÎïÿ%ÿâhþÑ·ÿžwø /ÿPÙëºîúÅž³§\鱆/wÊ<*ïàíïÍ3Oñ‡õI®ôýwK»¶‚1,ÒÁw¤hs†f|­Éþéô£Ýíý}Áïwþ¾òÏö°å…ÊìöÒ*rJàsVëêúNµá»ëÍS²Ô­¼™δeMÁNFå$gÚ¡_ì 7Öú޲úu­ºÁ’æõ‘Td®ý=>€UrÅÇ›úý æ—7)¿EdiðŒëK{¤dj¬HZùrÆHê7.E\þËÓ?èiÿ~Wü*mÿ‡ü¯.ß×Ü[¢ªeéŸô´ÿ¿+þeéŸô´ÿ¿+þZ=ÿø#¼»_qnŠ©ý—¦Ð:Óþü¯øU=xW°[í:ÖÒ{vy#ö`¿2;#  ¬? -ÿ‡ü^]¿¯¸×¢¹½Wð&µxöz6§á½Jæ0KÃi<2ºÁ%T’+gû/Lÿ u§ýù_ð¢ÑïøÁ Ë·õ÷誟Ùzgý­?ïÊÿ…Ùzgý­?ïÊÿ…Ãþï.ß×Ü[¢¹}:æ×~°uym×NÓ]˜‚«‚嘓À/S÷@8ÀÍCa↚…ì6V"ðÝÔî(`½·y$cÐ*ƒ’}…Té¨>VÈ…G5tŽºŠÈÑG‡õ&×UÓmm'³ºŒK Ÿf ¹OC†ÄSôÈ4MF ëK v‚t{O-ˆ>ªÊ}6Ãþ W—oëî5(¬‹Ááû;û›[D¸¿wŽÙ>̘ʅØd *“Î:U}zûÁ¾X[^¼Ð4•œ‘½–„c!w‘œdtõ¢ÑïøÁ Ë·õ÷ôVu¥¦‰ykÕ¥¶qo*‡ŽX£FGSЂ8"¦þËÓ?èiÿ~Wü(´{þðBòíý}ź*§ö^™ÿ@ëOûò¿áY* ¤ØÅu¦Å ¬ÞpRñÆ •*Ü9ÈUBšœ”SÕ“:Žrh訬 ~ÿÁÞH_Äú˜'$Fú„ñDe#ÃHAcÈÏSÏ5sNƒ@Ô¬b¾Ó¡Ó/-&]ÑO¤‘ȾªÃ‚>•6Ãþ W—oëî4誟Ùzgý­?ïÊÿ…Ùzgý­?ïÊÿ…Ãþï.ß×Ü[¢°¤¹ðªE¦ÌN–-Ra”²$ÎQœÊÆÔcžœuéZ_Ùzgý­?ïÊÿ…Ãþ¯.ß×Ü[¢¹¸5\kO¢A©øn]QÆÖI<-:°ê¦0w;ŒVÏö^™ÿ@ëOûò¿áE£ßðÿ‚—oëî-ÑU?²ôÏúZß•ÿ ?²ôÏúZß•ÿ -ÿ‡üÞ]¿¯¸·Es¶˜“Ä÷šS¢ã%¾Ñ°6·§$ã¦yëÍDšß€ZþÄM_à ª‰L?b0üÁÕ<¼îÝÇLfªtÔ-wæDj9^Èéè®Rm{ÁpýÍŽûe»]!m6Aå½e—äýÊí&ÑïZR7‡#Ôì´Ö·²ûUôRMl‚Ü"G³{bu<çŒóSh÷ü?à•yvþ¾ãfŠ©ý—¦Ð:Óþü¯øV6«øZ¼{=SðÞ¥s%á´ž]@à’ªIZ=ÿø!yvþ¾ã¤¢ªeéŸô´ÿ¿+þeéŸô´ÿ¿+þZ=ÿø#¼»_qnŠ©ý—¦Ð:Óþü¯øVF…‹ÛíJÒí{{IŠÁ¨*€³vöÀÐp0*£MJ.IìC¨ÓI­ÎŠŠç¬u/ßê²i67þºÔb$Ii мɎ¹@r1ô«ºd&£aõ¥…»A:Œ½§–ÄUe >„ ›G¿áÿ«Ë·õ÷”V-ô¾²³Ô®îNiq´·Û"Wh'˜w*‚AÙ†Æ2AëW!°Òf…&ŽÂÑ‘Ô2Ÿ!FAäv¢ÑïøÁ Ë·õ÷¨®s[Õ| ¡ÝÅg­j^Ó.f]ñÃw<0»®q¬A# Ž=+]4Ý-Ô:XY2°È" Ê‹G¿áÿ/.ß×Ü\¢ªeéŸô´ÿ¿+þeéŸô´ÿ¿+þZ=ÿø#¼»_qnŠÇ#²×tØlâŽÞ;(•c@¡ð ŒãÐÿ3ë[N<¶}Å^ë°QE…Q@Q@Q@Q@Q@Q@Q@Q@¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžmâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢sž)²¹Ô¼+âÍ:Ê/6êêÚxaMÁw;[*¨ÉÀ$rk½ðMͯøôÍ7ûRêþGÓZhnõIn<›ˆöy²@c…ÆpÙ³=ª^KkäÉó 2ÀeB~VhëÓ(©¸ìr4›ÿü>ºÓlm&ûUËÛ7“ç,n€O¸Þ… Èn£‚xªÚ¿…äÐü?¨IàûYæÕ¯&·73Ý]«™cIí¯rÄT.P1Øñ®ÖŠ. xžKOwiu0¹Õ´ÝB5)íKå£2Fþ@+7–gƒ…É늗ÚN©âí_ljc¦6—tÓhò½³Ë’S´„y‘*ï\ÝÁ {5õ¥¥ýœ¶wÖ°][L»e†h㯡SÁZ‡GÒ´½ÌYimžj°†Ö‰2zªÍ w…´›»X|K«êúü7Wö±Ç'ö«ÙþZI‚«h6ޱÉGQã¸4‡ð·‡/uOÛhX\EsgwtŠöâa ®$W!HÚÍÔ©k¶Ô!k>âÝ ,LŠOLE-”?f³‚ßvÿ*5MØÆp1šÓ™r[ÌŽWÏ#Æu/뺇†â•&Ó—KO›[ýfÂâ]>ÖòÜ[—YDÊ$xPÊR6u,2¸ȱ§†´ó∛ÃSkïÖ£¦ëÝk?³–HÞðª><ü)“¨VP[©¯d¢³¹v<¯\Ôtï<=¾-¼·ð\¶·Ž5(õ¹BÍt²F#ïï )˜¨/†+ŽpWðüš¾¹qàk=_UÖc†æËU’_.æKY.âŽh–Ùä(U·Ù_#,{®QEÂÇ隬·Vþ·ñOˆ¯ì4@º¤Ox5µ3ÜAv"%Y[>PvÁa¼©'8ÅuŸ›à 9ÄÒͺâðù’®×ô©¾f'©ÜQCacÈ>xkR¿ðçƒ|C©jvoi£C<Ö6¶¶ “"¼dI)‘· 1ùUW'éT¼ âk«¯hÇJ¹vƒU°º’k9üA6¡"Hª®‚hÝvÛHADlrÃ.G¶QEÂLjxGZóµ¯ ?ê·úåÜw ®ØO#¢Ü‹Gb’ÄNØ6ɨŒ àíMð§TÖ¯µÝ ïñ5‰d™6Jy¬åÞÀäqŠöŠÍ×´ËN(Ò×]Ô´†Bs%„—t"XÜ~ ïEÂÇŠÛkÚÌžð›êZÌÿØÓHÜßjÔúa–dº+ ËqO“y ò·ùBžâÖKù~éO©jvºœÿhp.­§3$‘†F|«¼„Ú m žõÚø{H³Ð´[]#OWÖɵK¹fcœ–bz±$’{’iÚÆ›©l¶÷"ª¸pP€s‚;ƒëZѨ¡QIìeZtÜQÅüCV—âGƒEº±¶»ò5=å³OݰämWCŸ}Õã}@Úø‚ö×ÅÞ'»ÑÒ 4§Óîe³Žêì™|æEV&WaÛ áº6I¯Y¢²¹­+__éw­7‹5Ón.üi*A$…¯”ÎgX“¼ ´C 7—ÐS< ׈uÍ"SYÖšÝ|¦]4PêSÂ$Ú]Ò±ƒ!pryïœ z½\,x/…ì´›Ÿ|?Ò¬µ‹¿¶&µ:”qêrI5¤‹it<3“8# ´Ž£^™ðÑî#"Òå¼»»‡LÖ¤¶µ{©ÚiV# 229,Ø20‰8ÇîÖ}~i¦hó"ö%Lp¦T20`q³®ìWµQEÂLj\kGûBÁ®|OªÃâ‡ñr[^i‰ D´ûYXÔÁ«ˆF|Ì å°Xî"¤jÚýÇŒ‚^kÖÚëïÙÝx‚dw³•¥‡•å°hpV@I$†,9Qéw~KÝr GPÖõk»{k‘uo§ÈÑ xå…o–1#mÉ 38àc¢¢ác°ÿ‘óPÿ¯qü£®kád:ùÕ”ß húÒø§Tñ.¼¶\ÝÚ[ÙCme3̉-+îgdBYšfãn“ɪ^2Òü]{ã=TÑôýk-&IdÍÖ§,2Jd‰£#jÀàcvAÜsÓ€:]w[Ñ´D¼×5}?K¶yK5åÊBŒä3 À'Ʊád|;ÿ¡÷¿ø7·ÿâ몢ÎWþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨ WþGÿú|+ÿƒ{þ.øYÿè}ð¯þ íÿøºê¨  ºN¥§jú|ZŽ“k¨YKŸ.âÖe–7Á*pÊH8 ¨5j¹_…¿ò,ÝÿØ{XÿÓ•ÍuTËüM8ðµÇÌ£åî=Å|M8ðµÇÌ£åî=Åõyoû¬>™æ×þ#:¨t{™[ånƒÞ›N€çG±ù•¾Vè=éµóØßãËÔìÃÿ '+ñKþE›Oûhÿúr¶®ª¹_Š_ò,ÚØ{GÿÓ•µ3ÄwwQ|Lð•¤W3Gm=¾ f‰d!$*±m,½2qž™5Ìju´Wœø/Æ&¿‹ÂºÊiÛÄ‘ÈVHnë J­½ƒ)Tn6‚ œd·Áþ3ñ-æŸàýWZ]­|K!·ÙÃ"Éo'“$ªÛ™Ø:‘ 6‚¥‡'%‚ç¤Q\‡ã _SÑ| qåØEsâKw{ƒå;$N-^PQwƒÊ2 ÂÝøcÿCƉÿ"ø[¿ èxÑ?ð$WÐtQȃ˜ùóþïÃú4Oü ÂÝøcÿCƉÿ"¾ƒ¢ŽDÇÏŸð·~ÿÐñ¢àH£þïÃú4Oü ôr æ>|ÿ…»ðÇþ‡ÿEð·~ÿÐñ¢àH¯ è£‘1óçü-߆?ôÂÝøcÿCƉÿ"ø[¿ èxÑ?ð$WÐtQȃ˜ùóþïÃú4Oü ÂÝøcÿCƉÿ"¾ƒ¢ŽDÇÏŸð·~ÿÐñ¢àH£þïÃú4Oü ôr æ>|ÿ…»ðÇþ‡ÿEð·~ÿÐñ¢àH¯ è£‘1óçü-߆?ôÂÝøcÿCƉÿ"ø[¿ èxÑ?ð$WÐtQȃ˜ùóþïÃú4Oü ÂÝøcÿCƉÿ"¾ƒ¢ŽDÇÏŸð·~ÿÐñ¢àH£þïÃú4Oü ôr æ>|ÿ…»ðÇþ‡ÿEð·~ÿÐñ¢àH¯ è£‘1óçü-߆?ôÂÝøcÿCƉÿ"ø[¿ èxÑ?ð$WÐtQȃ˜ùóþïÃú4Oü ÂÝøcÿCƉÿ"¾ƒ¢ŽDÇÏŸð·~ÿÐñ¢àH£þïÃú4Oü ôr æ>|ÿ…»ðÇþ‡ÿEð·~ÿÐñ¢àH¯ è£‘1óçü-߆?ôd+3¥¢¹¯øI?é§þJÿöÊ?á$ÿ¦Ÿù+ÿÛ(æAft´W5ÿ 'ý4ÿÉ_þÙGü$ŸôÓÿ%ûeÈ,Î–Šæ¿á$ÿ¦Ÿù+ÿÛ(ÿ„“þšä¯ÿl£™™ÒÑ\×ü$ŸôÓÿ%ûeð’ÓOü•ÿí”s ³:Z+šÿ„“þšä¯ÿl£þOúiÿ’¿ý²ŽdgKEs_ð’ÓOü•ÿí”ÂIÿM?òWÿ¶QÌ‚Ìéh®kþOúiÿ’¿ý²øI?é§þJÿöÊ9Y-ÍÂIÿM?òWÿ¶Qÿ 'ý4ÿÉ_þÙG2 3¥¢¹¯øI?é§þJÿöÊ?á$ÿ¦Ÿù+ÿÛ(æAft´W5ÿ 'ý4ÿÉ_þÙGü$ŸôÓÿ%ûeÈ,Î–Šæ¿á$ÿ¦Ÿù+ÿÛ(ÿ„“þšä¯ÿl£™™ÒÑ\×ü$ŸôÓÿ%ûeð’ÓOü•ÿí”s ³:Z+šÿ„“þšä¯ÿl£þOúiÿ’¿ý²ŽdgKEs_ð’ÓOü•ÿí”ÂIÿM?òWÿ¶QÌ‚Ìéh®kþOúiÿ’¿ý²øI?é§þJÿöÊ9Y-ÍÂIÿM?òWÿ¶Qÿ 'ý4ÿÉ_þÙG2 3¥¢¹¯øI?é§þJÿöÊ?á$ÿ¦Ÿù+ÿÛ(æAft´W5ÿ 'ý4ÿÉ_þÙGü$ŸôÓÿ%ûeÈ,Î–Šæ¿á$ÿ¦Ÿù+ÿÛ(ÿ„“þšä¯ÿl£™™ÒÑ\×ü$ŸôÓÿ%ûeð’ÓOü•ÿí”s ³:Z+šÿ„“þšä¯ÿl£þOúiÿ’¿ý²ŽdgKEs_ð’ÓOü•ÿí”ÂIÿM?òWÿ¶QÌ‚Ìéh®kþOúiÿ’¿ý²øI?é§þJÿöÊ9Y-ÍÂIÿM?òWÿ¶Qÿ 'ý4ÿÉ_þÙG2 3¥¢¹¯øI?é§þJÿöÊ?á$ÿ¦Ÿù+ÿÛ(æAft´W5ÿ 'ý4ÿÉ_þÙGü$ŸôÓÿ%ûeÈ,Î–Šæ¿á$ÿ¦Ÿù+ÿÛ(ÿ„“þšä¯ÿl£™™ÒÑ\×ü$ŸôÓÿ%ûeð’ÓOü•ÿí”s ³:Z+šÿ„“þšä¯ÿl£þOúiÿ’¿ý²ŽdgKEs_ð’ÓOü•ÿí”ÂIÿM?òWÿ¶QÌ‚Ìéh®kþOúiÿ’¿ý²øI?é§þJÿöÊ9Y-s^0þ?ûcÿµhÿ„“þšä¯ÿl¬ícRŽú#ó3HY?å–ÀïÿhóóR”“CHà>ÿȳwÿaícÿNW5ÕW+ð·þE›¿ûkúr¹®ª²e#—øšqák™GËÜ{Š(øšqák™GËÜ{Š+êòß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þNWâ—ü‹6ŸöÑÿôåmZ:¦»ö/èºÙ|Ïí8®dó¼Ìy^HC¸ç;ýF1Þ³¾)ȳiÿaíÿNVÕkYÑ.¯‹â WÂ^žøéé:B èd‚G7ÐI#!P¨LÙ!›qQÂäÑd= hSØiWÐ^<°jñ´¶-äfDfS… ¸ŠNôñU¾ø®ßÆ>´Öa²»²i¢Gx§·•K áÑDƒý¥È®sÃñ6?ƒ¬®ŸHþÍðÈ–1,SÈÓ\¡â¶ÀB]ÍÔàñƒÐ|6Òu}Âöº©ŽÍ>5‚Ú{k‡s: áYËnœÃÞ¯¨x§ZÒüAckªørtÍCPû­Ô:‡™1r£<>XX!<;žG\uÕÁYhþ3ˆkšÎŸ ^ÚE3E§:ê“+XÛ ,&Ü«LÃï1“§ÊÏ{CŒð„uê¾1»»ñï‹4¨ôß=…µ¶5²Ä±‹kyå¤.ÙÝ+wÆ01Åu_ð¦ŸþŠŸÄü±ÿäZ?gõŸ¿ìo—ÿHlëÕ+T•ˆ<¯þÓÿÑSøƒÿ?ü‹Gü)§ÿ¢§ñÿ,ù½RŠvB¹åð¦ŸþŠŸÄü±ÿäZ?áM?ý?ˆ?øcÿȵê”Qd<¯þÓÿÑSøƒÿ?ü‹Gü)§ÿ¢§ñÿ,ù½RŠ,‚ç•ÿšú*ð"Çÿ‘hÿ…4ÿôTþ ÿàEÿ"תQE\ò¿øSOÿEOâþXÿò-ð¦ŸþŠŸÄü±ÿäZõJ(² žWÿ iÿè©üAÿÀ‹þE£þÓÿÑSøƒÿ?ü‹^©EAsÊÿáM?ý?ˆ?øcÿÈ´šú*ð"Çÿ‘kÕ(¢È.y_ü)§ÿ¢§ñÿ,ùøSOÿEOâþXÿò-z¥YÏ+ÿ…4ÿôTþ ÿàEÿ"Ñÿ iÿè©üAÿÀ‹þE¯T¢‹ ¹åð¦ŸþŠŸÄü±ÿäZ?áM?ý?ˆ?øcÿȵê”Qd<¯þÓÿÑSøƒÿ?ü‹Gü)§ÿ¢§ñÿ,ù½RŠ,‚ç•ÿšú*ð"Çÿ‘hÿ…4ÿôTþ ÿàEÿ"תQE\ò¿øSOÿEOâþXÿò-ð¦ŸþŠŸÄü±ÿäZõJ(² žWÿ iÿè©üAÿÀ‹þE£þÓÿÑSøƒÿ?ü‹^©EAsÊÿáM?ý?ˆ?øcÿÈ´šú*ð"Çÿ‘kÕ(¢È.y_ü)§ÿ¢§ñÿ,ùøSOÿEOâþXÿò-z¥YÏ+ÿ…4ÿôTþ ÿàEÿ"Ñÿ iÿè©üAÿÀ‹þE¯T¢‹ ¹åð¦ŸþŠŸÄü±ÿäZ?áM?ý?ˆ?øcÿȵê”Qd<¯þÓÿÑSøƒÿ?ü‹Gü)§ÿ¢§ñÿ,ù½RŠ,‚ç•ÿšú*ð"Çÿ‘hÿ…4ÿôTþ ÿàEÿ"תQE\ò¿øSOÿEOâþXÿò-ð¦ŸþŠŸÄü±ÿäZõJ(² žWÿ iÿè©üAÿÀ‹þE£þÓÿÑSøƒÿ?ü‹^©EAsÊÿáM?ý?ˆ?øcÿÈ´šú*ð"Çÿ‘kÕ(¢È.y_ü)§ÿ¢§ñÿ,ùøSOÿEOâþXÿò-z¥YÏ+ÿ…4ÿôTþ ÿàEÿ"Ñÿ iÿè©üAÿÀ‹þE¯T¢‹ ¹åð¦ŸþŠŸÄü±ÿäZ?áM?ý?ˆ?øcÿȵê”Qd<¯þÓÿÑSøƒÿ?ü‹Gü)§ÿ¢§ñÿ,ù½RŠ,‚ç•ÿšú*ð"Çÿ‘hÿ…4ÿôTþ ÿàEÿ"תQE\ò¿øSOÿEOâþXÿò-ð¦ŸþŠŸÄü±ÿäZõJ(² žWÿ iÿè©üAÿÀ‹þE£þÓÿÑSøƒÿ?ü‹^©EAsÊÿáM?ý?ˆ?øcÿÈ´šú*ð"Çÿ‘kÕ(¢È.y_ü)§ÿ¢§ñÿ,ùøSOÿEOâþXÿò-z¥YÏ+ÿ…4ÿôTþ ÿàEÿ"ÕËO /…tû‹V×µrI%ŠO´ê’Dò "A±|¸ÑBü¹é’O$€ôŠæ¼aüöÇÿjÔÉ+ _ð·þE›¿ûkúr¹®ª¹_…¿ò,ÝÿØ{XÿÓ•ÍuU“-¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžuâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢r¿¿äY´ÿ°öÿ§+jê«•ø¥ÿ"ͧý‡´ý9[WU\Ý ‚Š(¤EPEPðRÂÿE1—S±º·MOÄr^ÙŸ%›Í€ÚÛFm´npN3Ђ} íÐÿrçÿ¤ÿâkÏh«ç'”ô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰£íÐÿrçÿ¤ÿâkÏh£œ9OBût?ܹÿÀi?øš>Ý÷.ðOþ&¼öŠ9Ôô/·CýËŸü“ÿ‰¬?›J©(BÑ(/&HósÔQ\å9Ülr¿ äY»ÿ°ö±ÿ§+šê«•ø[ÿ"Íßý‡µý9\×UPÆŽ_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯«ËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ9_Š_ò,ÚØ{GÿÓ•µuUÊüRÿ‘fÓþÃÚ?þœ­«ª®n†ÁER¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(•ø[ÿ"Íßý‡µý9\×U\¯Âßùnÿì=¬éÊæºª‘ËüM8ðµÇÌ£åî=Å|M8ðµÇÌ£åî=Åõyoû¬>™çWþ#:¨t{™[ånƒÞ›N€çG±ù•¾Vè=éµóØßãËÔìÃÿ '+ñKþE›Oûhÿúr¶®ª¹_Š_ò,ÚØ{GÿÓ•µuUÍÐØ(¢Š@QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEr¿ äY»ÿ°ö±ÿ§+šê«•ø[ÿ"Íßý‡µý9\×UC9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<êÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áDå~)ȳiÿaíÿNVÕÕW+ñKþE›Oûhÿúr¶®ª¹ºQHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Wáoü‹7öÖ?ôås]Ur¿ äY»ÿ°ö±ÿ§+šê¨bG/ñ4ãÂ×2—¸÷Qñ4ãÂ×2—¸÷WÕå¿î°ùþg_øŒê 9Ñì~eo•ºzm:ÇæVù[ ÷¦×Ïc/S³ü(œ¯Å/ùm?ì=£ÿéÊÚºªå~)ȳiÿaíÿNVÕÕW7C`¢Š)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÊü-ÿ‘fïþÃÚÇþœ®kª®Wáoü‹7öÖ?ôås]U Håþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?Ìó«ÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…•ø¥ÿ"ͧý‡´ý9[WU\¯Å/ùm?ì=£ÿéÊÚºªæèlQE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9_…¿ò,ÝÿØ{XÿÓ•ÍuUÊü-ÿ‘fïþÃÚÇþœ®kª¡‰¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžuâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢r¿¿äY´ÿ°öÿ§+jê«•ø¥ÿ"ͧý‡´ý9[WU\Ý ‚Š(¤EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+ð·þE›¿ûkúr¹®ª¹_…¿ò,ÝÿØ{XÿÓ•ÍuT1#—øšqák™GËÜ{Š(øšqák™GËÜ{Š+êòß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þNWâ—ü‹6ŸöÑÿôåm]Ur¿¿äY´ÿ°öÿ§+jê«›¡°QE€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šå~ÿȳwÿaícÿNW5ÕW+ð·þE›¿ûkúr¹®ª†$rÿN<-qó(ù{qEN<-qó(ù{qE}^[þëŸæyÕÿˆÎªÇæVù[ ÷¦Ó 9Ñì~eo•ºzm|ö7øòõ;0ÿ‰ÊüRÿ‘fÓþÃÚ?þœ­«ª¬ÿhú~½¥>™©Ç,–Ï$rþêy!uxäY•ãee!ÑH Ž•‹ÿ‡ÿ?Þ*ÿ§RÿãõÌluTW+ÿ‡ÿ?Þ*ÿ§Rÿãô¡ÿÏ÷Š¿ð©Ô¿øý :ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€:ª+•ÿ„ CÿŸïáS©ñú?áÐÿçûÅ_øTê_ü~€…¿ò,ÝÿØ{XÿÓ•ÍuUŸáýOÐt¤Ó4ÈåŽÙ$’_ÞÏ$ÎÏ$#³<ŒÌÄ»±$“Ö´(—øšqák™GËÜ{Š(øšqák™GËÜ{Š+êòß÷X|ÿ3ͯüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þLÿk~ƒ¥>§©É,vÉ$q~ê &vy$XÑU#Vf%Ý@µGVñNŸ§ø"ÿů è²³µ–壞ÖKy˜FWË•U”’¸9¡ÍSø¥ÿ"ͧý‡´ý9[VÙëz%ö¨ÇæÙß[½¼è GR§±Áë\Ƨ+a­x’×WÓ-üI®x:ÎmCi ¼w@ÑÈÒŸ4ƒÇ¨<ô©OÄ-8[êWGHÖ¥…ìš{OåG‰î–a†%ß½Ùœ§nÞy ‚+àÝzæm&kÅPjUÜWPcMòî¥hó°K/˜Uºó¶5ϵX›Á '†¯t‘ªe/qî(£âiÇ…®>e/qî(¯«ËÝaóüÏ6¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ9_Š_ò,ÚØ{GÿÓ•µuUÊüRÿ‘fÓþÃÚ?þœ­ª·Š?䫸/þ½µ/ýæ5;:+Ë| ®xšKoj®½.¢½©Xøu/¼7áÙ£‡VÔ ÷—2“r»C–D‹J…‹:w kž!Ó~.xF|A1Ñõ‰n ŸLû4>Xòí^@Þfß3;”Ø£‘3/ÿÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð£þ‹ÿùímÿ}7øW_Eˆ9™ÈÂ1ÿ=­¿ï¦ÿ ?á¿ÿžÖß÷Ó…uôQȃ™œ‡ü#ÿóÚÛþúoð¨5 îÆÍ‰Œ…bO$Ozíª†¿ÿ ·ÿ®‘ÿèÅ«§N2’L™I¥s‹û ßüñ?÷ÒÿE4rBû%]¬Fqxü+Ÿ½ø™¦hóÝXøšÒëKÔ-ԺªfŽårÛL22– ‚pzjØßÞêvé{{¦¾œdÅ’n—ËÏÊdÂ1•ÉÇsœÛ[ÓrKcWr’G;ð·þE›¿ûkúr¹®ª¹_…¿ò,ÝÿØ{XÿÓ•ÍuUå3­¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžuâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢r¿¿äY´ÿ°öÿ§+jé%´µ–î¹m¡’æÂZ0^0ØÜºŒàgp+›ø¥ÿ"ͧý‡´ý9[WI-ݬWpÚKs w3†0ÄÒòÆâ«Ôã#8é‘\Ý ˆ`ÒôÈ#³Ž:Î$±ÏÙ P-ò¥vù>RGà‘X¾ð^áM*Æ,ì%Ô­íÖmI,Ò)§U|Ì2ØàpIé]5€Ë´ð燬õ¨ÚhZ]½é‘¤7ZF²`AmÀg$3}Ï­M¥èúF”÷2izU‹ÝIæ\5µºFfï>Ð7O&¯T6WV·Ö‘]Ù\Ãsm2‡Žh\::ž„0àŠ¡ká¯Zkk6º•§)c%ävq¬î[©.ãžüÖ­U¹Ôtûkû]>âúÖËÍÿe·’UY'Ø76Å'-ÉÇAV¨k]ðrø¼;«ÁâgCÔ4«yÞ}8[’Vd@á„ñH§î `Ö¯XxM"Õtm[P×5][QÒmî­ã¹º+L· 6õŠ$\¯”v…ã9Éæ ´ðןk ÿmÛæ"¾<¬ã#8ëRÿÂ)ÿOÿùÿ²­“}Œìˆ-¼ñe—ˆµëz´º{Ìú}½Ù·ZT«m1ÄŽß)*7³`{óT,þiöš žˆ5åK¹4Áàéd+¦Ø˜Eó©IH”Ipk[þOúÿÈ?ý•ðŠÓÿþAÿ쨻ìBÂñéÚºö±ªÜiZŸö”7&w“Ê’ ¬#‰fÙáUNps×=5s_ðŠÓÿþAÿì¨ÿ„SþŸÿòÿeEß`² ¶ð‡ûOù·Ï§Ù¬fÞs([ˆ¤ŽA$r«¨:¸VãFi.|ú‡‡o´=kÅÞ#ÕmïŠ-ÃÌÖÑ;B§-òa@ÆUˆˆ$cþOúÿÈ?ý•ðŠÓÿþAÿ쨻ìFdÿ ´U¶’ßKÔuM%ÕU²K#M>ä##´ñ²…pîY2嘀 5¿âOÛxƒÃ‹¢jWwo–ÚV ,®ðÊ’©?.ÞZ1œ(àœcŒSÿ„SþŸÿòÿeGü"Ÿôÿÿû*.û‘ü z?öWöwÚo¼¯íÿíìïMßhûWÚvýßõ{øÇ]½óÍhøÇÃ:wŠtجõ¹…íîêÒêÚ_.{iÓ;d» ‚$A"ªÂ)ÿOÿùÿ²£þOúÿÈ?ý•}‚ȧ7€a¾ÑotÝsÄþ"Öšåà’;›©áŽ[Y!2)!ÆˆŽ®nÚIÚd TKðÛK—OÔ Ôu}cS½Ôî¬înõ—ˆO'ÙeI!ŒcT:* ïcÔæ´áÿ§ÿüƒÿÙQÿ§ý?ÿäþÊ‹¾ÁdG®xIÕáñdW7ÈûËu8ÄRG˜ò§ ‰–Ü2¹ZÏÂÍ'TÔuˉ5ïAk¯˜†­a ñ {¸ã…"œÆ]Tªa¶2³n œ` ŸøE?éÿÿ ÿöTÂ)ÿOÿùÿ²¢ï°YšçÃ=VÔu ›SÕí4íVX¦Õt«ic[KçQApPºåcEa ` 6y©¼[àI^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžuâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢r¿¿äY´ÿ°öÿ§+j­âù*þ ÿ¯mKÿ@†¬üRÿ‘fÓþÃÚ?þœ­«ª®cSÈ~˨[Ù|8ÔdÖµ{Ën9cÔ>×}$É(û,’©ØÄª²´j7(ŒäœšÏø]®›¸| ýŸâMSUÖî÷vÚæúI¶[y2HØ‘$„ppÝ[q5íÕ›á×ÃÞ°Ð줚Kkšb •Q€I ý¢ácÌ|#â6ÔmþèSk·SêmðkP­ÛùÂD´2ÎAÜ®dn år:f·gõÒ¡øyakc¨=Åí¼Ũ[ɨI;ZÌ ;$ð~P§Jô:(¸Xñ=F}kþç†5mcºº^Í­\Ánþe³D–«ip¨±‘6z3Lä€y gjƒí”QCw'â´÷mâo‡úlvÞ)¿´¹³¾iìt Y¬f˜¤plfežBäð_¿CZŸÚ¾$ÓµøOÃv¤®©i¨\\Ë.¥wmä¼ErÂä™2f<N\·iÛÖ¼9áO[è÷ÍÅÂ]éвÛMg¬Oe,^b¨qº ˆ;W “Ò®éš'…tùôÛ˜n¤žãLŠxm'¼Õfº•vV–FgÉDÆâpŠÙ=9Ÿ x¿Ä÷ž1¹ÐµÛ7Eº–[¸´û ô;Ó,e¼¹RèËäÏ”F°‚F3\§…E^ *´^ ðz3èèX›…¹†/íyÏÙ$\á­Ï™›|noõE:š.#œ_øÒm#H†-2Ò×S¼ñ?ö)º¿Ò®­ažm$âæ;yYe\m µ˜‚Èà7!‡«h ®è–¶íõ÷Y%›I¾¹ÓwÈ‚A†PáIØ]‡Lä€j§‡ü#moaž÷Ù÷ßo¶’ïUšâUŸËh÷™$‘™¾Ga†$sÓ[ÿÚóýmÿWüh¸!à}^_üÒ|t.uýk]ÕÚÏþ&:µõüfYîV%$»ô, ®æÆÑÉ®ŸLñ§Œ§ðÿŠ%{;3s¢Áå¶¡}£^i6—‘í,[.[tn¢6MÌ£ÌF#ª×WàȼžXl[CH„Ki%Áp6áó3ÈlÙÈ rTO x+û"ãJ¸žâúÎæX¥ž;ýræèÈcmȬÒÊĦz¦vž„EÀóÙ|mâïéžñ'‡õNÕ7V–Œ«{§G"O y,Íy #î_˜àœã—j~ð6¢oZuHÞöò;ùžÛR–Ý…Ê&Å™9Æûx,›K½šÔÕlü;ªè©£ê3Ãsf „’ñ‹‰ÖHÉ}Û‰ ŠrIÎ9ÎM„´ñß‹÷ÿk]¦†tqâù<=öhí¥ ÚÍ´sy¦M¡ƒmÊì €H+œ ¯‹—úŠ]xOÃÖZ•Æ•¿­}ŠòúÝ‚ËKo4ÞZ7ð4 aÈ qƒ‚5¿°|ö±m¶û?ö¯ö¾Ïµ·ü}ùþ™ÙÿYómû½±Ž*߈ìü3â=*M/Zû í£²¹G”¬§*ÊÀ‚¬0 ƒÐÑp9Ÿ#|9ðì×ZÞ«©\êWÖZ}¤Ω=Ü0Ï<뼬ÒÌ€²†ÁØÚNk]ñ÷‹ô?ÄúmÌ:¡¯hÓi_g¸Š `µ¸ŠúàBFdv×lŸÆÃî6:­tÖþ ð$ZV£¦H>Ûo©*-ѿէ»•Äd´`I4Œëµ‰eÚFÓÈÁ§ÚxGÀ¶ÚMÖ˜¨“Cyu ÝÔ—:œ³Ï<°ºßDÒQ ÇÉp"y…¤+òjö½âoø“âljôS£>›£Ëm¨ÝÛ]Å#Mt‰¦Àîˆêê!;á™dœ`“ézž‡á J=z;Õ¶•|Ah,µAö¶_>Žxa·åv\zô¬ÍSÀ¿5=ZïT½·ŽK‹ç‰ï@ÔæH®¼¤Tf‰d "¨Eº•êq’I.?â?ˆž%··ñg‰4¸4áÿ \G Ý¥Ì2ËÑäÃ<¬’  0 ¥qSÊ‚*OŠ–RYEá­Ä#Æ7÷0Kii§/Øí­£tK5¾|¯'hl–RÌí…9#±áêúãë7ðÁ-Ô¯“ªê$-<¶šqÅp0]XŒAPjð5ï‰ï·¬Re„Â'åFb~v«z2nùÞÇò¨Ý‹¾qÐW­‰pTefŽJJ\èå~ÿȳwÿaícÿNW5ÕW+ð·þE›¿ûkúr¹®ª¾yž‚9‰§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾¯-ÿu‡Ïó<êÿÄgUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾{üyz˜áDå~)ȳiÿaíÿNVÕÕW+ñKþE›Oûhÿúr¶®ª¹ºQHŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Wáoü‹7öÖ?ôås]Ur¿ äY»ÿ°ö±ÿ§+šê¨bG/ñ4ãÂ×2—¸÷Qñ4ãÂ×2—¸÷WÕå¿î°ùþg_øŒê 9Ñì~eo•ºzm:ÇæVù[ ÷¦×Ïc/S³ü(œ¯Å/ùm?ì=£ÿéÊÚºªå~)ȳiÿaíÿNVÕÕW7C`¢Š)QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÊü-ÿ‘fïþÃÚÇþœ®kª®Wáoü‹7öÖ?ôås]U Håþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?Ìó«ÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…•ø¥ÿ"ͧý‡´ý9[WU\¯Å/ùm?ì=£ÿéÊÚºªæèlQE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9_…¿ò,ÝÿØ{XÿÓ•ÍuUÊü-ÿ‘fïþÃÚÇþœ®kª¡‰¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžuâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢r¿¿äY´ÿ°öÿ§+jê«•ø¥ÿ"ͧý‡´ý9[WU\Ý ‚Š(¤EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP+ð·þE›¿ûkúr¹®ª¹_…¿ò,ÝÿØ{XÿÓ•ÍuT1#—øšqák™GËÜ{Š(øšqák™GËÜ{Š+êòß÷X|ÿ3ίüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þNWâ—ü‹6ŸöÑÿôåm]Ur¿¿äY´ÿ°öÿ§+jê«›¡°QE€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šå~ÿȳwÿaícÿNW5ÕW+ð·þE›¿ûkúr¹®ª†$rÿN<-qó(ù{qEN<-qó(ù{qE}^[þëŸæyÕÿˆÎªÇæVù[ ÷¦Ó 9Ñì~eo•ºzm|ö7øòõ;0ÿ‰ÊüRÿ‘fÓþÃÚ?þœ­«ª®Wâ—ü‹6ŸöÑÿôåm]Ust6 (¢Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¯Âßùnÿì=¬éÊæºªå~ÿȳwÿaícÿNW5ÕPÄŽ_âiÇ…®>e/qî(£âiÇ…®>e/qî(¯«ËÝaóüÏ:¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ9_Š_ò,ÚØ{GÿÓ•µuUÊüRÿ‘fÓþÃÚ?þœ­«ª®n†ÁER¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(•ø[ÿ"Íßý‡µý9\×U\¯Âßùnÿì=¬éÊæºª‘ËüM8ðµÇÌ£åî=Å|M8ðµÇÌ£åî=Åõyoû¬>™çWþ#:¨t{™[ånƒÞ›N€çG±ù•¾Vè=éµóØßãËÔìÃÿ &ô½GWðà¶ÒVÕïb¿²¼.¦h£"ê)Ê—Ur¹‘§’8ªŸnø‰ÿB·…ð£¸ÿä*ꨮSc•ûwÄOú¼+ÿ…Çÿ!Qöô+xWÿ ;þB®ªŠå~Ýñþ…o ÿáGqÿÈT}»â'ý ÞÿÂŽãÿ«ª¢€9_·|Dÿ¡[¿øQÜònø‰ÿB·…ð£¸ÿä*ꨠWíß?èVð¯þwü…GÛ¾"Эá_ü(î?ù ºª(•ûwÄOú¼+ÿ…Çÿ!Qöô+xWÿ ;þB®ªŠå~Ýñþ…o ÿáGqÿÈT}»â'ý ÞÿÂŽãÿ«ª¢€9_·|Dÿ¡[¿øQÜònø‰ÿB·…ð£¸ÿä*ꨠWíß?èVð¯þwü…GÛ¾"Эá_ü(î?ù ºª(•ûwÄOú¼+ÿ…Çÿ!Qöô+xWÿ ;þB®ªŠå~Ýñþ…o ÿáGqÿÈT}»â'ý ÞÿÂŽãÿ«ª¢€9_·|Dÿ¡[¿øQÜònø‰ÿB·…ð£¸ÿä*ꨠWíß?èVð¯þwü…GÛ¾"Эá_ü(î?ù ºª(•ûwÄOú¼+ÿ…Çÿ!Qöô+xWÿ ;þB®ªŠå~Ýñþ…o ÿáGqÿÈT}»â'ý ÞÿÂŽãÿ«ª¢€9_·|Dÿ¡[¿øQÜònø‰ÿB·…ð£¸ÿä*ꨠWíß?èVð¯þwü…GÛ¾"Эá_ü(î?ù ºª(•ûwÄOú¼+ÿ…Çÿ!Qöô+xWÿ ;þB®ªŠå~Ýñþ…o ÿáGqÿÈT}»â'ý ÞÿÂŽãÿ«ª¢€9_·|Dÿ¡[¿øQÜònø‰ÿB·…ð£¸ÿä*ꨠWíß?èVð¯þwü…GÛ¾"Эá_ü(î?ù ºª(•ûwÄOú¼+ÿ…Çÿ!Qöô+xWÿ ;þB®ªŠå~Ýñþ…o ÿáGqÿÈT}»â'ý ÞÿÂŽãÿ«ª¢€9_·|Dÿ¡[¿øQÜònø‰ÿB·…ð£¸ÿä*ꨠWíß?èVð¯þwü…GÛ¾"Эá_ü(î?ù ºª(•ûwÄOú¼+ÿ…Çÿ!Qöô+xWÿ ;þB®ªŠå~Ýñþ…o ÿáGqÿÈT}»â'ý ÞÿÂŽãÿ«ª¢€9_·|Dÿ¡[¿øQÜònø‰ÿB·…ð£¸ÿä*ꨠWíß?èVð¯þwü…GÛ¾"Эá_ü(î?ù ºª(•ûwÄOú¼+ÿ…Çÿ!Qöô+xWÿ ;þB®ªŠå~Ýñþ…o ÿáGqÿÈT}»â'ý ÞÿÂŽãÿ«ª¢€9_·|Dÿ¡[¿øQÜònø‰ÿB·…ð£¸ÿä*ꨠWíß?èVð¯þwü…GÛ¾"Эá_ü(î?ù ºª(•ûwÄOú¼+ÿ…Çÿ!Qöô+xWÿ ;þB®ªŠå~Ýñþ…o ÿáGqÿÈT}»â'ý ÞÿÂŽãÿ«ª¢€9_·|Dÿ¡[¿øQÜònø‰ÿB·…ð£¸ÿä*ꨠWíß?èVð¯þwü…GÛ¾"Эá_ü(î?ù ºª(•ûwÄOú¼+ÿ…Çÿ!Qöô+xWÿ ;þB®ªŠÀð—¨é6Ú²Ú¥ì·÷·’%¬Í,içÝK8Pì¨[@3´r¿EËüM8ðµÇÌ£åî=Å|M8ðµÇÌ£åî=Åõyoû¬>™æ×þ#:¨t{™[ånƒÞ˜B°*ಞ W#ê#ê4øt{™[ånƒÞ›_=þ<½NÌ?ð¢Eö=?þ}%ÿÁ…×ÿ£ìzüúKÿƒ ¯þ;RÑ\×5±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE }OÿŸIðauÿÇhûŸÿ>’ÿàÂëÿŽÔ´Qp±Øôÿùô—ÿ_üv±éÿóé/þ .¿øíKE §} LSâuWÕnAú©Ÿhðçüõƒÿ×üzº«M{HðÏ€ôíKW¼ŽÎ×ìг»ešIdà–wgcÀ’xüJð̺¹ªÛÏy!Ñ,ÞòöÎ[9m®Ò5Fp|™Õæ ÛI:õ­œ"ŒÓ“W9Øåðü’,q¼Nì@U]Vä’O@V^×MDg{YTÄê7@:“ûÚî'»ŠÿCy6n†âضÇåYzÓ¡®ÃÏuáï<´›Ø;î$îeÜë†PßP ‰ìÍnUûG‡?ç¬ø6¸ÿãÔ}£ÃŸóÖü\ñêíu¿è.¹£è𦥶¡¬Èñéð²±32Xd¨b2H’K‰m$ñmφV9Å彄WÎä,Ç$’"€sÙ‰³Æ0G>…£ýüp¿hðçüõƒÿ×üz´xsþzÁÿƒkþ=]Ô^%´“Å·>Xç–ö_;<³’HŠÎwf&ÏÁúj}£Þ‹Gúÿ†xó´xsþzÁÿƒkþ=GÚ<9ÿ=`ÿÁµÇÿ¯NûG½Pñ&½o øwS×oY-´ëInæX€.É`  À8ÉZ-ëþ=ã€ûG‡?ç¬ø6¸ÿãÔ}£ÃŸóÖü\ñêô«Kô¹´†æ0Á%Eu Ô3ÍIöz-ëþ=ãÌ~ÑáÏùëþ ®?øõhTUJ¨àŰ>¤’~¤“]÷Ú=ëÍôÎ-GÝIæE•DŒ€Õ3еÐâÝì̉§¸ù”|½Ç¸¢‰§¸ù”|½Ç¸¢¾›-ÿu‡Ïó8kÿT:=Ì­ò·AïM§Åÿ ‹|ÐûÓ+çqŸÇ—©ÙCøq (¢¹‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ?[ßdø\µ°ŸSƒB¹·¼»³wÈñµœùˆ¿ÆÈÒ«í2p=ãoí^ø“^Ò4]^(<¨éq›« m翸Ÿk"$2(„òÏ%FL¸\ó]ݶ£qik£X\MöxR$E¸U dzç¨æ¤þØŸþW¿÷Ô_ü]o-dÚüÌ¢ÒŠLæþÚ_é³êPxšÆêoIn¤êí.-åœQœb 'œåòû‹VÏ…Ž$ðñôBòVJ´uk‡WLºð ¼aGÔ†'@~†«ZE%Œv- óšÉpó–ÑœsÁÃ;dHê»oýhÅ%}¿­<ñöãŸø“Åz¦• Zi½Ž…s{%¬°Ëm"Ü´ñÇä°uy¶.w(aìsRx…´½wÆéâ/ø]¿Óï|%h#·:L× £4ìb(”™C`9g÷—pϤÿlOÿ@«ßûê/þ.í‰ÿè{ÿ}EÿÅÔÙÿMuý#É×Hòµ2O‰ÕüDÑø&ÆÒi"°–ù~Ú²L]r€þûž%ãnIÜ»†w|ámNçĺe׋ôÑ{ªXø7M„]^EçD—É,å›qZT;Náó Ù{žïûbú^ÿßQñtlOÿ@«ßûê/þ.‹?é ºþ‘å_ ô^ÏXÐåºi4ßZÛ̺´ƒÃQ=ô­ ûEóJÐÜ7lŠÀ•gFÓ4äøM®é©á N?…îíõK¹t™L×—&H>Õ³mÁy9P¬ÜccéŸÛÿÐ*÷þú‹ÿ‹£ûbú^ÿßQñtYÿM×ô™çº·…uM"[ËéÒéwš‚â1‰oÕ¡´’ øypìwu$ñÆF›¡H¾ñiÑ­'µ3øNòÒM.ÓÂWzh¹¸dýÛ;K#‰ç:‚›‹o9c^³ý±?ý¯憎øº?¶'ÿ UïýõÿEŸôÐ]Iœ÷„´(¼=ñ Km'Hk  Hº„‘BU%¹I`òÌ­š]­/-ó»®+WLÿQ/ý|Ïÿ£^®lOÿ@«ßûê/þ.«ÙÄÐÂUÈ,Ò<Ž€³ zã8Ïô¥¤uÖZïÄÓ \|Ê>^ãÜQKñ/þEk¯•OÈzŸqE}NX¯…Ïó8+ÿ{i XÏe=½Ä,…’X$ާ0`pA ޵=|wû5|HñUõå燯ï…ä6v/uÄûž|‰"P…‰ù”ob2  à=¤ø¯Xýl÷ÅyÿÙß[ýôekùÁ4wIr5±ëtW‘ë'þ[Gÿ| ?á+ÖçºßŸö¿Ÿðÿ‚?®tõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È¿á+ÖçºßøJõŸùîŸ÷À£û _ÏøÁ®ÿtõÚ+È[Å:Áë:ß›ÿ >±ÿ=Óþøa¿çü?àëŸÝ;/Š×6öÞ˜ÜË HU³$®T I'É=¨¯–¿iox‚;ؼ;ÂGk{b³O"%`^DhÁΫO#8$“ÅË•kn¿ˆ{5Qó¾§ÿÙgwenhywfar-5.12.0/doc/dialog/images/cocoa-5.png0000644000175000017500000010567113142134462016120 00000000000000‰PNG  IHDRÐ0¯\ xiCCPICC ProfilexÕ–gTɆ«{r"Ì C†!g$ 9Ar•a† ã0dDEdqLˆˆ`X0(¸*AÖ€ˆb`0ÇdP®‹(·¬çÜ»ÿîŸ[çtÕÓo}õuuWç¼;9A ,@*?CèáÌ ˆdâ€H"‡›.pò÷÷ÿØ>ÞxòŽ‘8×?†ý÷ i^l:È™Žá¥sS>‹ð W Ì>…pv†aTÂt!²A„+Ä?ÏõbŽ™çós1Á.HL?x2‡#Œ€ôÑ™YÜx$ia>/‘Ùa{n‡‡°x©kÄ\…°nÌyâ`'f1'‡¿ÈóD욘.HáäÎÝü/»Ô”Lä{Í5*Ò“ù)ËÅgCG®1ÇÕ{)sg6§ÇòC‚t~Ìr¿Žº.° Ãùö^Ðó\–/plºÛbž$Ž—øÌæò 3C8=+Èmó‚Ø뺨Ç%º³ôÄ öâ³’×x/î\À\à 8 d€X ̈ÍÉ@Ö—5‚\ab|BÓ ùãb ™l>רifbj"žþ¿iâZ›ßì{Æ\ AŒ›k91Ø%#5àù·@³.òákڊкiÛÊÍfÍçC‹ "Lò@h]`Ì€%°ŽÀ x? "À*ä '€T Ù lÅ ì»A58zpœmà<¸ ®[ ÜO€Œ€×`|Óá Dƒä!UH 2€Ì d¹A>P ECñÊ„ò¡MP)TUCµPô+tº Ý€ GÐ4½ƒ¾Â(˜ ÓaeX^³`'؆WÂñpœÁÛà*¸>·Â—á[ð=X¿†§PEB1Pj(# å‚òCE¢âPBÔzT ªU‡jBu zPwP"Ôê ‹¦¡™h#´-Ú‚æ¢ÓÐëÑeèjt=ºݾƒBO¢¿c(%ŒÆÃÆ„câ1Ù˜bL%æ(¦ss3‚ùˆÅbX¬ÖM®Ŗa÷c›±Øì0v ‡ÃÉã pv8?—+ÆíÅÀ] âFpŸñ$¼*Þ ïŽÄóñ…øJüqüEü ~?M"hl~!—°p˜ÐA¸M!L¥‰:D;b01‰¸‘XEl"^%>%¾'‘Hê$kR)‘T@ª""]' ‘¾©d}² 9ŠœIÞF>Fî$?"¿§P(ÚGJ$%ƒ²Ò@¹ByNù,A“0–`Kð$6HÔH´J J¼‘$HjI:I®’Ì“¬”<#y[rBŠ ¥-å"Å‘Z/U#uNêÔ”4MÚTÚO:UºLú¸ô é1*ŽªMu£ò¨EÔCÔ+ÔaЦAs¡qi›h‡iWi#t,]‡Î¦'ÑKé'é}ôIªÌR™P™™™ 2"Š¡Í`3RÛ§÷_e•edce·È6ÉÊ~’S”s”‹•+‘k–»'÷Už)ï&Ÿ,¿S¾Mþ™ZA_!@![á€ÂU… Eº¢­"W±Dñ´âc%XI_)Pi­Ò!¥^¥)eeeò^å+Ê* G•$• •‹*ãª4U{ÕDÕ ÕKª¯˜2L'f ³ŠÙÍœTSRóTËT«UëS›V×QQ/ToV¦AÔ`iÄiThtiLjªjújæk6j>Ö"h±´´öhõh}ÒÖÑÓެݦ=¦#§ÃÖÉÓiÔyªKÑuÐMÓ­Ó½«‡Õcé%ëí×ëׇõ-ôôkôoÀ–‰û  1†Ö†|Ã:ÃFd#'£,£F£!c†±q¡q›ñ›%šK"—ì\ҳ仉…IŠÉa“'¦TS/ÓBÓÓwfúf\³³»æswó æíæo—,]z`éC š…¯Åf‹.‹o–V–BË&Ëq+M«h«}VXt–?«ŒuÝcíl½Áú¼õK› ›Ó6ÙÙ&Û·[¦³,vÙáeÃvêv»Z;‘=Ó>Úþ{‘ƒšÇ¡Îá…£†#Ïñ¨ã¨“žS’Ó §7Î&ÎBççO.6.ë\:]Q®®%®}nT··j·çîêîñîî“k=:=1žÞž;=°•Ù\v{ÒËÊkW·7Ù;È»Úû…¾Ð§ÃöõòÝåût¹Örþò6?àÇöÛå÷Ì_Ç?Íÿ·l€@MÀË@ÓÀüÀž ZÐê ãAƒƒ·? Ñ É é • mýæV& _¾.üV„BDbD{$.24òhäÔ ·»WŒDYDGÝ_©³2gåU «RV]X-¹š³úL4&:,úxô ÇSÇ™ŠaÇì‹™äºp÷p_óy¼ñX»ØòØÑ8»¸ò¸±x»ø]ñã  • ‰.‰Õ‰o“<“&}JöK>–<›–ÒœŠON=ǧò“ùÝkTÖ䬊¢4›´Ýi“BoáÑt(}ez{15½™º™?eeÙgÕd}ÎÍ>“#ÃÏéÍÕÏÝ’;šçžwd-z-wmW¾ZþÆü¡uNëj×CëcÖwmÐØP´a¤À£ ~#qcòÆß M Ë ?l ÛÔQ¤\TP4ü“ÇOÅÅÂâ›m7üýsâÏ}[Ì·ìÝò½„Wr³Ô¤´²t¦Œ[vs«éÖª­³Ûâ¶õm·Ü~`vÇý;ëË¥Ëóʇwùîj­`V”T|ؽz÷Ê¥•÷÷dîUùTµïÕÜ»cïLuBõ½çšæ}Jû¶ìû´Ÿ·ð€ã¦ƒÊK~ý%ñ—‡µµ­uÚu•‡°‡²½<z¸çëHÃQ…£¥G¿ãÕÖw7X54W:¾½nÌl?u¢ÿ¤ëÉö&£¦ÚfFsé)p*óÔ«_£½Úût×Ö™¦³Zg÷µÐZJZ¡ÖÜÖɶ„6Q{DûÀ9¯s]¶-¿ÿvì¼Úùš 2¶_$^,º8{)ïÒT§ sârüåá®Õ]O®„_¹ÛÐÝwÕûêõkî×®ô8õ\ºnwýü ›çn²n¶Ý²¼ÕÚkÑÛò»Åï-}–}­·­n·÷[÷w ,¸8è0xùŽëkwÙwoÝ[~oà~Èý‡¢ˆòŽ=JyôöqÖãé'O1OKžI=«|®ô¼î½?šE–¢ C®C½/‚^<æ¿þ3ýÏ™‘¢—”—•£ª£ cfcçÇÝÇû_­x5òZðzz¢ø_ÒÿÚ÷F÷ÍÙ¿ÿê Ÿy+|;û®ì½üûc–~èšòŸzþ1õãô§’ÏòŸë¿°¾ô| û::=ƒ›©ú¦÷­ã»÷÷§³©³³Ž3çPHÇÅðî”Ä+ ¾˜Ø9ï…ç" yÿްØÇÏyùÿäy¿<o À‘NB ðDÆdÔFFª#bKì`sóÅ QÄ-=ÎÜl ²±&Ÿggß+€ëà›pvvzÿìì·Ãˆg@gÚ¼Gû€¥º¹›YõÌöÍ-ÿ±û7…èªÍöì pHYs  šœ IDATxìÝ€$Eù÷ñš½Û½œàŽ#s‡ä ( dA@P‚$AEPDÄ€¨ˆüQxA3‚E@ Š ˆŠ$EI"Qâ¸;ŽËq÷öí_í>Cm_OOžéù6ÌuwuuuÕ§{zž©©™Íõöö:&@@(M £´läB@@ @s € € P†tXdE@@€šk@@2 ËÀ"+ € €Ð\ € €”!0´Œ¼-—5M-Wi*Œ €d@ ú©äÌþVr®ÕÚFPœgM@@V ¶›6€&P®*@@6hÖÀº©è*ƒf†k´á‹&#€ €@K T<¬£™‚éA Ë š« ’«Ù·¥®L*‹ € ’@ÅrTß’÷ì`zPè2‚æR‚ÞRò Ò5Äa@@J –KÉã#˜nh]bàœ§mK87®ÜüIe† € P¾@IpPlZþ´m¾ˆFÒ  Kœ º…Òë’ƒäRÊ Ëe@@ <¢nq¥ä+”§Pº/ºtÝè"ÁsRP›”f§®œmiy­<æ € €õˆ»ñõðÈån+˜¿ÞAtÝèÎ…‚à0=\OB¸\Jž0?Ë € €•  lƒâÂ<ár%ñK…Iy“Ò|9õ ¤ë@—<'·ñ4[·yˆkËiÛ”§Øv+‡9 € €@eƒÙþâÒ¶Û6›[ âëJ§Å×mߺ|ɰætJð`ãëjh˜fË6ÏCÄòYzR>m+”nû1G@¨­@¡€6)=--Ü.[mãiñuŸ¯Ö=Ñ5  «žÃ ×–mn@iëñm…ö)–nÛ™#€ €”&´F»–’ÏSh=L—UÃbë¾µ ¢k@—<ÇÝpÝ–m®Æ–²Ï_Ëж´©œ¼iå° @Èš@iëᶤå¤4«GÚ6Ÿ§VAtMèÏaðš´œ”& K·¹!†ÛŠ¥…ÛYF@(O ^mÏ´´p[ÒrRšÊUz¡m¶]sMa¾¾%FS~¥Â…ªè*ƒg½aà›´li…æÖôøvK×ܶYZ|ÝÒ™#€ €”'Hãë*ÍÒlnG°õbó° [Žï/ÓòYz~^m]U] xާáz|9¾®†)­Üô{‡÷¾÷½'wvvn»|ùr·bÅ ÛŸ9 € €@:::\ë¹îîî{o¸á†oFAôÝQ³æô7Íhë]¶um¶4-‡Ab˜^h¹âº¢!zŸUqMü–²lÁ³íc¶¥ÙqÇ÷ŽÆ¨l»xñb_8ÿ € €dK@¤Qðì† ²íöÛoÿî¨uGyÑÂ_ņa€­úmJó[Ö~ùI1m%c¡+  óG}cÁà7R.Y@¬TËkiñ¹åQz׸qãöTÏ3 € €@¶HO˜0a¨•ß3Z£ÕÑj²¥i]ùl®ôx¥Ùdym½¢y-è°qIËJ³ôpnéñ¹" ¥wDï Ö‹JKœ´ÍÞµ,X°À=÷Üsnîܹ>¯¶Eo,\„»)S¦¸Ñ£G»¡C‡:}L ôBS¼ÌgŸ}ÖÍ›77êæïÛCûŽ;ÖM:µ¬2õÎ*ããfÏ›éîùß_ݳ¯>î–v/ÒÇnXçH·þj›º·m¼‡[eì$7lØ0_×´zª?é € €@« DqÑzQÝ ZÀïyŽ7Mš;›k»-k®É¶Ç—ýÆrÿ);€ŽºÂ‘çG·<š‡ËÊai¥Ì;t¦M===N=Ô/½ô’S « yâĉnäÈ‘>0]´h‘S`}ß}÷ù€w­µÖòcl¢ ke¾øâ‹ù2WYuU7rĈ¨ö9·Ø—¹ÐÝ{セ̵×^»h™ª£†¡ü登ݸÒ;ÊMZs’[uÂ׳¢Ç½öú+îÑWþéþýÌnŸ·á¶Z7":žÆ1!€ €í"Ðÿ}7ëLU³-N#f‹=ô‚û*¶‚v ´ æ 7”@‡;GËVA%Ûr8—-ÒŠ= ­£Qû&NË–-sÓ§O÷ôj«­æì1~üx@Ï™3ÇÍœ9ÓEßìôyTÈšk®é{x ŒUæË/¿ìË|„Ï«!ieΞ;Óýé¾_¹ñkŒt“§Žt£Æ q zf¸g_{8ƱØ-Î½æÆŽýêõ(—‹N§òN™¼QTþ:i¦lC@²(`ñ Ú¦år‚è4…r+ΊqËé….+€N«Mÿ6UJ“3ûóË––4Œ&òù §H›^ýu «§Xã›Õ¯áÖ¯! ZV­<š´Ï˜1c ûÚk¯¹UVYÅç· ¸»»Ç-Y¼ÔïcÃJ†ž/Sû¤•yïs]CÜÔ-¢á%£†¹(övs{_pOÍ[ áˆÆF}Í?Ô 1ÞúÏžå´Ï¾+XO6 € €ÐGðŠì*xÖ²æŠ#K ¦µŸòj²å•ç¾Íåÿ[Mm•²¹]ë–Ÿ+m/4йbC8,+ØUð¬áêqÖÃöÓ²Ò- V«^hÛ® Å'•©žçð ‡ñ25lCe*Êœ5kVj™3Osën2ÉMœ¬Þð.×9tˆÒ±Â-ïˆöÒëFDuìêëÂeé¨n·Î&97sÖ´Ô2ãõf@Ȉ€âD  Õ$ ¢-Ž7Ó‚cígyl®¼¶]Ëñ”WÛÒÊÕvõ.+ðƒò°L-[P®¼ÅÊì¶Ø­µÖx7nÌX×Õõ4épC£¡ C¢zëœv¯Ð#ú Äè1lØr·ÚZν0o^j=Õ~&@@ ƒÖm³šh=Ï[Z³+ Òv šË˜£X®äa%ÐVÃþ¹UÜæ±Í~5)@ÖÛǶ«ÁZÖ<\öiņp(pÕÃ]ÑZ'•aÁ®åO+ׂñp®ý´®IÁ·Ê³¹åK+sä°‘nD4^zÔð‘®+ ž»¢èaѲNA¯[ÚÓí–DåQ]»†tºyû݈(N+ÓW†@@ì „1a<ˆÖ6 ¦Ã€ÙbÌP# ¤Ãtå ÷ ·]®4€ŽlŽÏÃ|ÚfEi¶.+­è—5„B¬Ñ f@‡Á®*a½ÐÊkû(=iÒþçl±Ö-(×qT–¶ZV^mWÙ…¦IãÖp=KºáC»Ü°¨Î#†vFèKˆCºüÙ[Ò½Ô K:–GÝ®gIÎM¿Fj™…ŽE: € Ðâ>ŒÚ`Á³æ'†iÊ`ñ€Yû„²­GÉ•O%ÐQШƒ•2…ù´>´¸ž´l´¡  õËú­gý F<[íUß¾ø§¼Ú'-ØÕõ›Íúõ ¢m®ò´¯äš+¯öI+síU6vOκÛEƒ7¢ :úE(9tDLw©Hב‹Æi÷_=Ñ^œ7s‰Ûhâ[RËô;ò € =‹Õ2 ˜-8V ©)>·@¹okß¿á>¶n°¬˜7ŠíŠæ+)€PòÊ+ñÊÛz˜Si–Î-]s žÃåëé —õSô—õ³u]]]¾'Zñ¾ÅüêV €•G´~ÆÎê°,[Övý~´‚m ¢­<åѲʓïüùóý_T¾´ºN¿…›>ÿ7cÚ|·áÆ£\gGôEÂè14§èÞhy…ëêˆþ(Lt¼òÜ,7¢k„›2aK·l1ÆÜÎ s@h‹ 5·€VËÖ-ÅŒÚΕnùµ¬)ÜæïÛZÁ¿•Ъ„&›÷­ üWÛ‡¶†ëár¤ôp½h­^ßQ£Fù€W½ÀúK„am½Âê%V ­íúC)io.´¾¨ü ʵò‡A´Ö`+ÐVÞð§óÔØø´tQ¯ÛjÍ}Ý£3ÿàfކr¬3ÌõtDÃ?ú?uˆþ¡ëéîu3_ZàæÎZäÞºÖ~né¢eô@Ç!YG@vP«¹Ð¤2”W¶~žNe(HW™š´¿Ï*GA¶z·ÓÊTcGLr›¯¶¯{꥿ºe‹º£ŸßëFŒêã /‰ê?Ï͘½Ðm±ú~nLn’›·|^j™…êO: € Ðâ*°µ MDËš[ ©y[zR@ly£]ª›*  ­rvôp]˶Î-Ýæ°åøÜ¶­[½Ë  5ôbÁ‚~XEì*Öi¹Ê«Éz¦ýJ쟰LÇúÝhýñ-k²l ÛÐr©e*ˆ;v¢ÛiÊ1î©Wïs/­’I…Å·…ëZ¶‡öµm–fó(žVô©¨`¼úóÛK—.õ´~ëÙ~5C½ÉJWðjãžÕ¤b=Ûa™‘T¦Æ?—S¦‚aÕC½×ëŒÛ2²CþÏ«‡ZÁÿŒ—gúoåµqÖj# € ÐFaLh±Ì6·<š[›‹ÊÒãËIëJó“bß( ƒlÛ”Ÿ  ó9ûT‘ød•§‡ë–§”yPí¢Þ`¢š,î·ökO ÷-´\ë2Ð+8ž1c†×z›­®¶æa@hŃ(knqZ,)mO ~µ]S<ç×-VæR&ËoópŸ¤´p{¡eÛÏæa¾¤´p{Ò²í£`ºÐdy m'@ȰÀJ1aÔV ¢Õì0¾´u е-Ì«í¶MËUOµ  “biá\Ë¥<<ÜÕW_]u#)@@ ¥+¦õ<«1a²çñe­Ç põPº-Û·`[éL € €í% Pñ &ÁñXÑÖµÝâEK³uÁá²òÖd²ŠUR˜U²Ø¾Vqå³eÛ7iݶ)5õÓþL € €­'`1 Å…á\­IZ·Vj[±Éö/–/q»U.qc,Ñ*cóØf¿jÛ╲õp®ÂõBËIÇ! @@ »…âÂ0]­×mÙTÂu-šl›Í å˧—@çwJX(tÀBéV„m×ÜV'Ím»ågŽ € }Å€ñ˜ÐbEµ¾XŒXh{¡ô²D­beíT ³UÈæ–Më–fË6Wžør˜VËú©\&@@æ°ŽÔ0†T­ãq£­‡ùlÙZië6·ôŠçõ PUɰ¢ñeÛnéáz¸\qãØ@@ %ÂX0\VcÂu-Û_×-OMæ•ÐV!›—ZåOÚÇғ楖M>@@l$Å„–oa¡ôx¾p]ûh²yßZ‰ÿÖûgì¬I ³4«¸ÍµO|›•Ã@@ ûI± ÅŠIÛ$b顎í¦U½œÚû#*…V¬bñí¶ÎãËZ·G¡ã’Ž € M‹ùZjë¶ε¬IyÒ¦bÛ]±85€N;r¶°A¶9^A[·¹òÙ²æöӵ̄ € Ð^¥ÄˆažPÇÒ--Œ1-­ây-èb•°†Ø\ùm9Þ¨0½X¹lG@È–@R,Æ‹¶]­¶e›×]¢ž´5Âæac”f0]Ë–nóøvÖ@@²-`q Íã­µtÍã“¥Ù<¾½êõrèR+Ï_+®mI0Ë € €í'#‹+C¥´¼•äóûTó+a…Âå°2á²òX>›‡ÛãËaþø¶²×—-[æþö·¿¹ÿýïnÞ¼y^vìð†Àœ9sÜøñãßH`©fØÖŒr@A¸à¨éÊm·¯ërQLo±ñÛ+é}0e8ô®Xávßíùšž' sŽû@í¯‚ÞÞ^7fÌ·ñÆ»]vÙÅuuuÕê ¥ÆvÇ)'øl´å²ê]M]Ö dmY À¶YzÅsÏ—_~¹›¢â2Íçí_ê›Õþž3 ø:ÜÓš©|îv6*»ŽôŒÖSÛ&…NŠ«&Nšè9äwÅ•W:Å\ïz×»,K5s.œ´O ·§-—³Ÿò†ÍL,·Ô:qç"‰aeÃeí_/RTå›õÎè¿ÿý¯;úè£}!Z×ä{›‹òø¬ü“ н¢Çõô[&l&© l«ÀKÙל*7½¾¸Ç-XÒð…·ÕðFOzr©2íé± ºÊÄîyîyŠš,„=ÒZÞíïp—\r‰ÛsÏ=ß谬ɑR o5Ê®k9|Ú¥TÎÆzЪG؈x½´-m{<Eëºi¸Æ„ üÍÈz u¢óC6**¹½wê]Ñu@×åšTX{ÁJâÓ¨ŠÕö»»ÛßÌìú¯U[–/_î†ÚÏ¥z¸ÖÊ1­œz»´c–»mѲ^·xyýïÓ_œõt­îº† [©ŠêÑC×c&™6Ó=VÏõÎÎΖ§mÕû@1øÁºOØ5ª¹ún”®½–Öúõ&ÁÀâÈB7m/´-¡¸ò’}§I ˜ @5o¯—׺(÷âÅ‹óûèäêk³ø¾ÃFÆýGËõ/üþ÷¿w3gÎŒôûü•¾í¶Ûº 7ÜÐýêW¿rx€¿X,¿(Ìoiš—“þðû{þ}ß}ÔÈQnÊ”)îmo{›¯{9å”{ÜRóû«ÞÈÒÐ|MÓÛ¨'øm·Þæþò—¿¸5ÖXÃ[î²ë.~ÏrÊÑõÊÿ‘£?âÆç~ðƒô·¨oÖHórm¯¹æ·`á‚‚&‡z˜Óð¥wÞÙ}å+_I¼o¾ùf7yõÉnë­·.XN’¹Þ˜Þpà n÷ÝwÏ{™Õ#?âþýïûô‘#Gºõ¦¬ç¯áŽ\ÿ0ªþ=,RùÊR«ôr]U/ÝfÍœÕ_Ó¾™î[l¹EÍêU¬}ûí·Ÿ?w§~åT_bù­²rU}–t÷ºeev–þí–ß»×_›aÕõóͶÚέ3uC÷§ë¯t»¿ç 7flß•yàwî—?u† u#Gv]së€ý´ò›_^ì~{ÅÝå¼o¥mI O?ñ°{äÁ¾{숣ÜëLq›oÝwMÊßè4™®¨Ñ=vÉ’%îª_]å<ðÀü—¿Ë¹>ô:8uêTÿš´Ù¦›  H*gÁ‚îšk¯ñù:‡vúïí¸ãŽnôèщ÷eL*§é•ÜZáµkßýöu»ì¼‹¿Ç{øþjí¨•&êÖ]w]ÿÍÕ¤ü 2¿ño¸÷½ï}îñÇw=ô{ÿûßï~úÓŸZöèʉ_;}›‘®›'_F?ìpÿEƒ8À=òÈ#î¾ûîój݈:çá‚…•Ž‘êúPû’¦•ò÷gªez¹¶>ø {ýõ×}Mî½÷^7cÆ ·Ï>ûä«¿ÿûö÷mŠ·+¬³Þ*0ÜêÍ[•. x•r ç+-„õ©Gz¹®ªÃùçŸxØ|óÍëRßùóç»iÓ¦¹-¶Ø"_¾Î›DŸúhª·S%å/‚½å=ïGZKº‘[úe~Ó-Y²ØmúæmúÛåܪ“×v&­é.»è<·å¶»¸á£ÆEíuîÆk/uoÛuowü—ÎñyçÎ禿ôœÛ`ã-ýºþYá\ÈG÷÷|ê v\K¹ûŽ[ÜežëvÙë}nÚS»§( Úv§žw±ÏÏoû5*]¦µºÇ.\°ÐÙkÖØ±c­)ýíT‹N/½ô’ïAÔk”&]} ‘s ÷F}¡ì3ŸþŒ¿-]ºÔ龤OõÔ1¤ ZS%×™ß1öO¹åTrh¶×®øùñ$Ñ)ŠßãCªr åË´e»>oiY1—}škyªœ‡qaÒÓ[Å+=¼˜ãëIy”VñTëºâŠÔsÇáÇû“i)èc;áÅŽ«qùg?û™ûÒ—¾äÎ=÷\ÿ…ÈxÞF¯«Ýå´]¿€ðç?ÿÙ¿X}õÕóÕ-§ŒüN XÌz•k{ÖYgåEN=õT÷¯ýË]pÁù´p¡P»~þóŸûl…¶‡eÄ—ÓêÛL×pZ=ãm דî•8…eZV÷×¾ö5ÿ;ž§^ÇŒ§’õeQp¯Ú¾‹m¡³Õ9)]¯tÛî¼§ûøÿ_´Ô÷šhù/ÿË#¾Ýýïcÿ{ÿ?ÝûŽø¸ëîqç_~ï.ùÞ™î—}ÜçSù=º'Ek=Ñ>VNÒqµƒÒp›0Ñ}ᜟøü¿¿úbwѹ'»ãN97JŸäË-¥Ÿ1Vÿ´ã–š_¦vü¾}ÒÿM»Çê“¢r^³>÷¹Ïù_Y:眾7,VÍm9­6–çä“OvoyË[Ü«¯¾ê6Ûl3wÝu×ù_ÂJÛ·ÞÛJmƒÕ#ÍÕò4z??áñÍ>L«ç²X£ë¿1éŸ+æj‡iàg©m±N¦~ÊN´>ŠI{ôDÛõP]ˆº(´¦Ïš5˽õ­oõ¿)­ô×ú×o¹å·÷Þ{ûË•þüÃí¿ÿþ¾§Y7—_~Ù—³Ô«¬I?©§rP‡åëxv1Zº~2NcОzê)ÿ;ÖŸüä'Ýöo»NòñÜé#3«çËÓ§»Ã?Ü­·Þz¾‡W7ÁÝvÛ-ß®W^yÅy䑾^êu¼ý¶ÛV2±ãªÌðaéËåmÓ#Ünuˆ§k\¢<ÿ HÊÿj¬N·Eu²òÕ£ªön²É&n­µÖòm²òï¾ûnÿe…µ×^Û[^tá…ÞIǰóô¯þÓ·wêÔ©î£ý¨÷³zÞyÇþÍŒ¬t>Ô“«oi[ùa]­>aš•SËüåÚ†uÐu£Éêhu¶kùë_ÿº!Û+zcxOh[¾c=Ö¿Y³üZWþÙÏ~Ö_'¯Ïžíº£ëOoàô[Ÿêýîw¿Û÷Ix^©»†ív ?]Öfs;®­Û¼–镸ÊM׃ÕÇæª×?c×ޅѵ'#mÓóTÏm]»ÚGiVX4 IDATGä#îâ‹/Η%ãFÆ'öëwêO?ýt§ç§öÕ‹¤ö ÏÝæÑ}DçNo’¬.V¾Ž¦52}q4^wÉòÑ8ènQôk‹¢ñ‹—ë±¢`ºbaÄñü³¢Þ˼gk÷ôSOúrNýÄûÝKÓžr—_pŽOÿûmr?9ÿ+îµ™¯¸££|ßýêçüq–ù!½îžÜî>yÈ®îÈ=6u×^záJå[=ÕSÞ|='¯³¡?Ï>óŒ{}î|÷ÍS?áŽ}ßÛÜa»¾Éû¥cÝœù‹òíú×]·¹°½;hûuÝWOü°ßþ³ï•oï+¯Îpg|êwàÛ×vGïówÏ]·t°úÄdjç°”óšvµ×(ý•õéOÚ}$ºízUñ;ßùN§O³¾ùÍoº;ï¼Óýò—¿ôסÞÔiM³¢¡zíHº—†×Ÿõ>®ˆî J׸ØUVYÅw èï0¤½~Ýýš:˜ìž|ÜqÇùN,+_uÓpÝóŽ>•ÕkG)>Ê£2ʽ¤¹ª¼B¯]jã÷¿ÿýu;餓ü§ÈªKZ;toÐýäÑýZÏy½‰·ç|¡óc÷ í£x#ÜGõ4¿Ðª’ôp3Õù^¡ˆæË–.sí@·U´Õrµ+˜£wÝu—¿yè¢Ð…©`UïJõqë¢hœÏüþu½øé÷›ßüfŸ~Úi§¹÷¾÷½þ7¨_|ñEÿ»ˆÊÁè{žÌ(¯c=ÂIëzBøò£ã(˜YmµÕüKc‹ø~þóŸ÷íÙc=üXÍ}÷Ý×qô1Çø!*7Þx£"¢žëg¢•¥IAä:ë¬ãþ–¿ýíoÝ—N9Å)ø/gRYV^)ûéæù©O}Ê}& þö÷¿û@Ai6«Ó)Aô */¼ð‚“—~¤ý¹çžóÇÖéÓ Vßú½çž{œnPú‚Ñ¡‡š?OÇ}âî3ŸùŒÑ8âˆ#Üï~÷;§a$×wH”OAâÇ>ö1÷Àøe Ó)§mÖ†ZÍ˵ «š®Ûpì¿¶+í¿ø…Ó5rÙe—¹óÏ?ß}ëÛßö¶ËWoN¬ÝZ×5![]GÑǯ—Dûë“ï}ï{n»í¶ó×µö]½™ŠOév k›ž+v O‰ÞÈ$å×>õœ*q•ÛK ÷]{$\{Ãú¯=µW÷Ý+ôq¦¦iÏ?ï6ˆzâ¬íqcºNåô›ßüÆß/”7uቾV >2µk¥”óvµ×(]—*SoÎÔÙó(XÖ5§û¦† éM®:ôfNì¾ð?äB×±¦OEwÒ½4^?½ÖjZ ßб¯Œ~ÚLo&5ìQÇ/ôú¥×ÛâΟOD÷ìN8Á=öØc~YÁ½ž¿zÞé§ÒôQ}â‰'ºŸDÃ5/u*÷>æªczíÒ›`u2芆ŒÎŽ:!®¸â ÿoz=Nk‡î ú)8ݯãÏù¤ó¿OØ=¾‘÷ ÀG1KOOwÛЙïÖGGönH'Ø¥>ÙÔé!züøÇ?NÝM´Þõ)ÐÕ¤w®êIÕx%¬ö×yì/ø7.u8†n8 ·ÜrK÷ì³Ïú`G/ÆúB–ž|:Ž>šSP¯žMʧ:«Wzj¨è#ôƒ:ÈoÓ?_ù÷(€UЭž.}¼¦^ «Þ“‚b`º1è7"í fiu²mº ©Î2Üh£|UdèÆ¤›§LU¦¾Ì¦›G8iXƒ¼Ôkª‰ÿüç?~³Þð?./­NêQÕ¤à6~<õê+(¶7&ʧv«÷$¬Ÿ~5ÅöU^Ùjýù¨GPûë†m“¶ÙvKkô<¬{¹ÇVÝ5Y{Ãýõ¢céö¦ÒÖ•/ÞnýåÎp»®½¡ Ó’ö³cª¼B×°åiä\õŽ×½”ã'ÝŠ]{áy°c*­˜±òÆó¨ŽÅÎ])í¨gž]Q0ÛÕ÷<Ò½Œ®4ÅÓÕέßyˆÛ︳äïîì+gx×7|X™QWOçÐh=:†Êéìâl»Öm5nU·ÊľñËCs#}†EyÃ|>1ú§shTçQcÝ^GâÆ¯¶¶[u­¾ç‡Ê×=ö–ËÎuÝq½»êênF„¯³áÖ¾œEs^ukDõ¨}ã<•È\ôˆÊ‹ê»øõ¾{ìÝ¿¹ ªc_Õº›nçÎ|ÞMZ}-_ÿR|dj׎չ”yÒ=ÖÊÑÜ–uVà§aEúO™MñkÕö)t/µýl®ý5é~¡ Wׯ•Ÿöú¥ XBá==¬‹^+Ô‹®OzmÒýÛêgiióÐ -_|[’kÚk×Û£!–êAÖ¯$)P/¼q¿”v¤=çC“°žiû„ùªYöÁr~9:Õ>žŠÎyG'¥^_{©ƒO¯#YÞˆ2ØBõü*ÀÔV“.\»ð´nOòø²Ö5YÞøoÛ“Usm‹¯÷ííüG`×^{­ï¶aÇDÃ+¬<•o˶ÍU¦Þ«§0>)øÕ»Y½óÖ›¢V–>6ÒÅ«^e EФŽ4éXö­jÝ€vÛm7Ÿ^É?v¼JöU¯†Æq)p×·³õæ@SR4\C“zØõká¤7,z!+ÕG“Ú­7…΋òÙySOöŸþô§•ÎA5m ëWér5Ç7‹øu¶[õÒº&Ë—´Ýœ|Æèyé9eû(]7Ðx>˯ôB×°åiä¼Wí“´_±k/4Ò²îAsçÎ`7—…ÌdîϧuMaŸ0ˆÿ ‚בƼQ‹ûªš˜ÞÑ‘sQà9Bûù{¢ÀQÓ°Îèú‰‚hMjs×Ð\þ]Qð«áá1;£íQ>¿OtÜå¹¾}‡EåY9>zõ%öÐÆt[í°gt€þÄþÙ-W|ß=ð—«Ü—/¿Ç 9Æ]ô…ƒ¢7Ú}eoòÖ]܃·^ëàÚ¹X2o¶=f¼¯Ïêk¯çKÙ÷£_q›n·G_‰±òÃö8rà ÓJÏqü«¡‚šÂçª^?î¿ÿ~ÿóÃhXá^{í•ÿÙ±ø5§ýâûÇóø ýÿX½DªS#œÒ^¿ÔQ¢Owt<³Õ÷Rôi­ÊÔ'¹šÛ§°ÜR—U®Õ¯Ô},_Ü5íµKûèµùCú2¨ç¿‚ðRÚ·5 «w|»ŽO‹ï£<µ˜ÂZåi=ú_K~YC΃èޯ׋,Ð}Ï µ=ƒ“. ýd>ž×…§'eø° Ξ¬Z" ×Ãåø¶øºòjп^8õN_ãÉta)]—‚[ý¤OXf¸¬ò4…i¶¬žu—T9·«aúb†¶ë¢ÕGìú¨^)PUï‚Ú¯íS§Nõãˆõåõ¢)M?Õ·páÂÄci{Ò£YR^¥©—\…«GYëê%VôŽ9­NÚ¦wï¿«ŸòÓ¾?¦'­~âOíÖÍTÓO<á‡Ì¨ÇÐê¡t[ÖÜ&-k¸ÆÔé͈Æì©‡àöhx‰¦pŸpYùÃó¦/§ê#:ýT“åÓvõ0Øz¹órmÃò}å꟔®4Û7¾=¾®|òÒ/©h\¢>šÔ'*š¬Œø<©Œ0œäii¥ØZÞJ數j_±kOŸé¾£7ˆz«aFö|³º'ùL®w ­Ò'Iiù ÕKûØ5©¹•‘d­_e°íÕÎÕó:¢«Ó ïìôóâåh]i…ÒìîÉ>O,¿ÚçËêO× •ïî/í©¹¹³^vËçÏΗ¯íêð «r†E=”Iõéì¿'†ù­þ‹æÌp«®ýÌèè1î•'t¯EÃ;–/šïËÙzçw»e‹º_û ÷ð7¸KÿïÃnö+ÏûàSmYwêÆn“mww·^ù·höt_ŸŽžè\,_R–LË9/i÷X•£ÉÊÓõ¥ï¤h,ñO~òÿó¢úõÛ®ë0~}„û[yñ4Ûß¶‡ë¶œöú¥#½éJ}÷BßMÑ'…öú¥ŸrÕx_Õ[s•©^k+»”y¹÷4W9é{9…^OõÛûC­ïÙèû7ú]dÕ±X;äª)lO¸^èü„y´o¸^Êýµ”×.ùÅúô%tUl¢ØËêà+’Á2@kì–^Ä4׉ Oºži嵋/Ìgeh›–m[|]ézÑÜtÓMýGX‹|ÔQGùüúÈIO¨ÿ÷ÿþŸSjehnåÛñm›¥k]½ØºªGPCïpõ1‘Im׸6} ¦ñÆ à?þøo"~ô£ùu}´¦?΢‡ž8a{’Žkiš‡yúÅóX>ùz7®ñ·v饗úa$  µÆ—ë\…uÒoEk›ê«›zHÔfÝ|ôfD¿Ê¡m—§^Ý|õûÇúö³7ÍZǰ|6·úØºÍ ¥ûUAtôÐ0‹Ñcäð(ˆÖztõ@Õ0ŠXþaѺ& ½°rd ÙÊßb›ÝV;ïãN;tKwýE§ùtľ:8n¼œ°>C£ý¨ØÄz¾ë°ãÝü×g¸÷\Ý]ý/¸Ýú˜»û¦_ºûo¹Æ þÂ7ºsfºÜø ·ã»sk¿i37* ¶­üÎ½Ü 1Ò}ù MÝioæNæ¯<ûß|ý­]–ßڦ˴˜{x>ŠÝce¡üš<ë×4tÏÔÇìêdÑwGô‰žŽ©×\úŽŒzª•¦IûkYs=¬Ž–nyâù-=íõKße¹êª«üë›~DC@ôš¡á*_Ÿ *]¿[¯áwªŸ^T¶•_¨>–æ+e¿b®i¯]:æa‡æïaúòŸÕ¡X;âÏy­k²ý“ÎO¸Ú¥u=lŸZ¾vY™f?¶h‹½|Å3úO.Þ¶3Bé;kÑ¡þôp®åøCÏN=”nËá\ÏB­Û\wJ­k®4{Xú¦Q`òÆ_‰2”3é£zdõkêñ ÇJYÓl^N¹åäÕx-MzAOz­‡‚ÃJ&½P*0פN7B]ÐñI?‰£^0õH‡“¾Y­wûö¥Çp[±eý!éåL z5ŽVO¬Bã­Óê¤òÔ>}œNº†Õã«/—„cçÂÕ0}ô¨¾„‡¨iù}_HTù£ìXQùg¨Ûxë·¹ÑÑŸ¿õ·W¸1ãWqï9ô7¬ï óÕ=*º¿÷F dª/'–3•r-§< ¬×TèõK=µú~Œ^;¯¾újß1¤^ÜøëM¥÷¡J¦½v¥VÚ•YÏó“VgÛÆ–¶¬Z1W¥±…•Ý óÌÐêÁÑGóúÈ5|âXàlóV8Y¥ÖQ_ÜÐoW+xVO¯þâaü x¥–U(Ÿ,ËíU+Té°èQ«5\k%¹r9ãÆuGc£ô0ÞS kS†ÒWDêp×}Þãž{â1÷Êó¹£åý:ÖDÏ5hï¸qÑ=6ó/Ñv…ø¹zzõE»ÇÜoæÝï~·²ÿóãv*s…û@™`²[ÀÎÕA©sxß}÷ùá”êÎò”ùg§ž,:‰úB„ôëÛ ×r'}ÙKzN*QÉp‰zÖ)+ec[Ÿ3‰k}\Uêø ÝÑ0µú•ß\%w¸tÝ«4>ú`¬ï±ú^J='îµÓU,eñ”JÕ²¾8­˜K±WÖ§Ì·P½èËNú’„~ÅA¿Ë8eÊ”¶8¹õ¼xÕ³ŸÕ7 õt+¥llKQ*?®å›•¼GÔÛÜ=ð©–¼+ D¦Üc ØT‘Ì}  ¼»ê×µô“³øÃü§úëÁñ!7vméäLÐz7¤!c¤/ ègqÎŽþ¢`ü]SKŸA* I+2Ù*•5ÅYzè÷ñk)æj‡8+Ó´oÖ»xýó'>ñ ÿ›‘sæÌñãt²vÓ@@ ‘бô¥O}ùYC7{éË„ƒ5².Ëoó×^{Íýä'?±Õ†Ï¯ºê*÷ì³Ï&÷¿ÿý¯»ñÆ· vâc=æ¦L™2¨Õøæ7¿é>õ©O j <îó—¿üÅýô§?uùÈGÜæ›o¾ÒnÍÜ–•*›’v=ös-¥ÚUmúÚ×¾æ>úÑ(CÏݵÖZË-^¼¸è}óðy;î¸ehe¯½örÛn»m>}»í¶«y'E¾p@ a•Ä` «\ 4´edªˆßÿþ÷ùöì¹çžîCú;ꨣòi Ò¦ßýîwnÔ¨QiYØ6ˆ/¾ø¢Ûe—]|xgggjM6Úh#wß}÷¥æ©÷FÏ===õ>LEåÇ}î¸ã·ãŽ;º­·Þ:±¼°-圇ÄÂ2–ØêÅî›  GŒá;.\˜¿G>ñÄþÍõøñã3vFid] Ó=Ðõ}ºïµQoÜÛÞö6ßScù ÍgΜéN8á·ýöÛ»w¼ãîÚk¯])ë·¾õ-·ÕV[¹w¾óÊoî¹çÜà6Ùd÷±}Ìé…ªØtôÑG»¿ýío>Û’%KÜî»ïžïA_±b…ïYZ´h‘oãGá6ÝtS§^ön¸!_ô·¿ým÷Ýï~7¿þ£ýÈ{î¹ùõpAóéK_ò=ûïyÏ{Üã?n^iY½šz#³Áx“iÓ¦ù<2/TŸ‹/¾ØuÖY.é©mÙ²eÞî+_ùŠ/KCc>ð¸-·ÜÒŸOn"ÏC9$_§´ró™úÒÎã‘Géþüç?»O~ò“îÍo~³;ãŒ3â»çׯ¼òʶÚWŸpèüêÓ Íѱ;ì0÷–·¼Åýìg?Ëï«ó²÷Þ{û€ö _ø‚ ?N»îºëü'+º†¿ÿýïû7óçÏ÷ûÊçË_þ²/·Ývpå Bs mRï¬Þ ¼úê«aV¿¶%é<„;”z]¦ÕUVºNe#kMªs)Ï‘BׄÕqîܹþ͵žÿøÇ >×J=^’GÚ5nõ°y±ç ®}²¦küü£íæÏÙ;ìàï'õþ”jÍ5×tS§Nu7ß|sþøºßõ®wå×Y@ZE€º‚3¥€ó?ÿù»ôÒK}ïàÕW_/å…^È¿˜þâ¿p«¯¾º@®¹æ×ÕÕ•Ï—¶  GãI'äâ=ÞwÞy§ßõ—¿ü¥^Žm>õÔS‚Ò»ï¾Û)èýÃþv¿MÁÞzë­~ùŸÿü§ï Rð I½¯ª³zŽŽ9æ§À¿ÿýïî‹_ü¢ûÜç>çô®¦Y³fù‡_‰þÑÇØ ê’&½!xðÁý ·>î·`5)¯z§t\½QP]œ­¶Új>L«ÏìٳݯýëÄsdž:g ä5©}jÆc¯²Ê*îW¿ú•OWpöÌ3Ïøeý“Vn>S°Pè<êQð®Àå²Ë.s—_~yA3 Fµï™gžé<ð@§€þ‡?ü¡“vüñÇ;}Ì~þùç;½IѤ`EAÑ_ÿúW´Üÿý>]e* >å”Sœ®'½QR;5פ FoT´MA¨ÊLšB}R£7_ª—ÆAOš4i¥]¶$‡p‡R®Ë‘#G¦ÖUVz#§O¾úÕ¯úâK}Žº&¬Ž]t‘·ùñ쯳ßþö·¶iÀ¼ÔãÅ=ôf'íph%í9¨ç©>Óó\çT´¦×_Ý_‡zÓ¥ç¥Þ/X°ÀoKúG½žö(w¨šÊÔ9û‰Ú¨{Ô>ûì“t8Ò@¦ €®àôhlôw¾ó·Ùf›¹vÚÉ=üðÉ¥tttøÀO/äK;dÈÄ|a¢÷½ï}n̘1¾'O½Ø HmRÏôç?ÿyß“¤/k©·[=ÇzáS¨Þ?½0n³Í6>¶ý Í•_A±¦Ûn»Í÷ªýãÿðë âÕ;¤ö=òÈ#ý¬[uÕUÝ{ßû^ß«©7åNzW¥åµ×^Û·µP ‚õÑ®zCÇç Ø”RŸBçh„ þpr;v¬_V@¡O†îça¯~¼n…Êç+vÕ㨠SÃÞô¦7¼†âåjýÓŸþ´Ûwß}}¼‚H­«§Xo4æÍ›çôE6MrV}uÎÔSjoxPk]Û婞üpRï¸Ê›3gŽ›ú¯ý«è0 [’Ÿê£¶ëÚO›’ÎC˜¿”ëRù‹ÕU=Ï ÐT§rž#Å® ½áz÷»ßí?ÑóÕ>Å ÛPÎñâ¥\ãá±Ò–5Q¶žç:ŽÞ$jÒó]=Ò:oC‡u믿~þÓ³¤òt=èM˜=4¾ÜI÷ÝôfJו®}†o”«H~TVY IDAThÆ@WpÖ]wÝ|€Ö«¬¡Ï?ÿ¼‘ýÌg>ã@/TiÓÒ¥KÝ\àƒëI ?z§ Tùu õuwwûžE+_A{±IcVÕ ¬ ]cXÕ¥ÀX/¸  ÕËùä“Oú€~uÖɧa):f¹“^Äã[¡2ôæA_.Šᥗ^*ZŸRÏ‘Ž­ök¸‡Ž§‡‚õBS©å;ê¶©ØXlËgsÄ6)PµõxЪá ú¸^ŸF(رž>.I_ò³2uŽô¥Oë)TóòË/û7<–§ÞóR®KÕ¡X]õ‰…Mz³Yês¤Ø51lØ0+Ö¿Lúbq9ÇËÖ¿PÊ5ߧк†úœ~úé~‹†ìh¸‡}š¤!Tá—TÃO;â婜óÎ;/Ÿ¬7dápŒü†”]K;ÓM7ùOæ4œ† hEôh®[ÔDuV/²~òJã9õq¬zýÔs˜6©g[C0ô1¸Æ¤¦:O?ý´ïQR ­ IÁA )uRÕ ªáZVOzßDëËkzÁS¶ê¢ Û‚5}ä¯Ùm ƒ|õ‚š&NœèƒÔBÛÃtµ#kmÛTF±úXÞRæ:7ê þú׿î44¦ÐÇñ¥”eyÊ9¶O-ç nô …z›¬k¬¾Mº¦B×øùR¥†=躬©”ëRu+§®Ê[ês¤œkBÏC¦ñ©œãÅ÷­äO{ê—Q4|BÁ²¾ !(ªŸzu¯iä¤^h½Q×ðÿû¿ÿsú‚! Ðj音¶Zkš¬¾êõÓ8Q½¸ê…J½’ŦW^yÅm¼ñƾ×ÕÆ"‡ãÕ3¦?5^UãwÞygß®Þ!Ccbõ³RšôE§R&}\®^o Ф޿üàþ祴®yÕc¥!z‘~ꩧܽ÷Þ›ÿòzeÕV'z1V¾B“Ž¥àMAù£>ê4N¼Ð´ÿþûû`[c„Ì«=²(VŸBå)]‰zå¨IåjȃÞܨ|µ+ôö™*ø§Øy¬ È²vQ›Ô“¾Æk8%W°b_*Õð -úò Þ,hœ®&ëÁÖн‘P/¨&]OºŽk9ÅÏCRÙÅ®KíSN]K}Ž”rM¨_Ï=õɾXŸJ=žö‹{”{§=uUOC_ÈÕ/Mz~iØ—ê¯Ií±/’ú„:ý£@^Ï3}ºTÎ/éÓ}š hè:žõò¼õ­ou X4ÞV=/Ŧ~ðƒ~\§~A=Ñ "4Ä&aÔ/FhìµQKÖ¤¡!ú˜¾¨c*°?šµý“æ:†z!÷Øc¿Yekݾ¯€S=éΡ1ØúrœÆðZ~µK›~ýC_,Ron¡IÛ4$D¿¡q¤?Zh’¾væ™gúüª—†«O¡ò”®1ºê]Õ/3è‹[—®/à©= .¸èjo5S±óXM٥쫀NCn䬞h#ýR†z¦Õ#-W ÑÑb /Ò¤±°štMÉAÞúb ®Wí3ÔàŸøyH*²Øu©}Ê©k©Ï‘R® ¤ú•éÍ¥=Âv”z<í÷(÷O{ê ¸ª§Þ ë˳v¾uŽ5$C¿Í¬/´* ­Å§/¡AÒ²Þèë=ÿ Mºfõé—=ô†ECbt 3!€Í ?ö‹W({šëOKš+-þP@®‡Òm9œë[tZ·¹†h]s¥ÙÃÒ7† ü4J¯hR ¦·R¾¼WÑJØI½=ˬ¤KÔ¦!ÚGËêUo¢õ,ë‹_ú• ·Hšô⮩‡_É]wÝ5`“®7]‡¥ž§;—¸?%î¶R¶rëZÊs¤Ð5¡ë\=§:¿êÕ7ß•*$”rã.Ü¿Wcš¨±·¿sQAáê«¯î¾øÅ/º .¸Àutt¸}öÙÇÏkqÔ¦ho-Ò@³ZT·Ñehø € Ps«ë¬ÇèFíÇ:+€îîîñ´–Ó³gÏv=ö˜[²dÉJùÎ;ïùä“}l=ÆšÇ*[åØ1l»Ö{ú{£õ%9}píµ×vÑx[ßË­í•NÚ·ÒöZýÔÛþç?ÿÙi̸¥Û\u³åjç{íµ—»êª«òå©þ6«Ôºö#€n†³@@ȘÀÒ¥KÝO<áƒçáÇûÖ)máÂ…ÎÒÑÏÙ­Ü‹Úõw»ŸÿüçþgæŽ?þx§@·;z¨ŒÓO?Ý©×yÚ´i>]A¤òk»N}!pÞ¼y}i‰å÷¸eK—ùŸÎS]ôåÁaƹuÖYÇ÷d+­Ò©šöªz( }ç;ßéÞÿþ÷»Ë/¿Ü§Ù6¸zœuÖYþK˜úä¿ÿýï|ýºÉ6Ûlã{¯÷Þ|ÈÞöÝÿýÝ5×\ãÇzuÔQîk_ûš»÷Þ{Ý©§žê¶Új+ßÛílV©u3ìÇ—›á,P@2& !úghúÍe« Ô)XSïo®#ç:ü· õë·öE¿hÜôò¿Õ¼dé%öý8n4Ûp£ •Ío?a¼ï=UàúßGv'œp‚»ìòËü—¤k'Œœz¨£ß0‹z¤U–ï¹ê¡mª“ê6iÒ$@«Î#FŒðÇ(÷ŸjÚ«&jRýOþâÉNm;`ÿÜ´ç§ùºi›Ün½õVì_þËËÝw¾ówÆg¸«®¾ÊýïÿsÇsŒûÖ·¾å‡½|ëÛßr‡v¨»í¶Û|Ÿ{î9wæ™gºÓÏ8Ým·ívnÄÈN½úúð‡|P½lù2ÿ¦¦ÑfjW«Nô@·ê™£Þ €4±€[}ipܸq>ˆÓ¯](`Õ<ÿÈ) ‰‚gÅÏš)¨ŽÒ^Ÿýºd;¢eŸWóè1¬k˜OŸóú¿®æ+X>æècÜi§æ¶ÞjkŸ®ã Ò•¥}´öï+? Úýö¾º(€ÖXhý6uµ=Е¶Wu{ü±ÇÝŒWg¸ÝwßÝm»Í¶nêÔ©î7×ýÆ·Çê¾Ã;ø_ÙêÍ[¹Ïø9wÏ=÷øõë~}ÛtÓMÝÁìÇšþ¤Ï»§ŸzÚÝßýy'½ÁØoßýÜäÉ“ÝØè ”nÜØqnòj“ÍLg§U'z [õÌQo@šTÀ†Vè¯ÿ)P³h œ--T} ©¸ùæ›Wúi9Ëú¢ž¶«,M_|±ÿ…ýʇ¥Y¹:ÎÀ©¯7ZõSo¸mWüªg\Û,}྅תm¯JÖð y}öÙþ@²¢a |5©NnbmÜh£|Àÿ /¸éÓ§»-¶Ø"¿mµÕVó²Ò-¿~ºÏ–}ýe&¥Ùö¾y}Ì£õÖèn½sF@hz•zhè‚4=¬:œ÷õ«Çø‡Æ÷Z`¦ë×2ÔS¼Ùf›ùü *?ùÉOú/*~þóŸP†ígÇÕzGÇ=à}ë}õ²!%ªo¥S5íÕXðë®»Î}Ö—õÐ8hcÖOì©®j«Ö. ˘0a‚Ûd“Mœf­Û6½É˜1c†¢mßÐÁÒÂòl_Íüõ4«Ôºö#€n†³@@Ș€1}¡OÁœ5e˜i®^i[· ÍÖ:è ê¯jÒvõ¦ªwVóøñãý¾Ú¦žcõÞþãÿpú]h+Cûèalj§kÝ¿¬?ï­ü•NÚ·Òöê—74ëFÔ>õ:ë§ûvÙeß6ÕS†úi?ÕSËúÒà;Þñß>}yR¿R¢±ÐÚ¦žký²ˆÞˆh_MÖVÍUWõâ+¿¥+Í2«ÔºöcG3œê€ €@†Äuuuù!I=ÐÚ®G¡IAÄc=Ö÷6+Ø{ê©§ÜqÇçÿš¡=›”W¿›|íµ×º½÷ÞÛm°ÁîÐCµÍ~®cYï²õ[Ôû«hѪsZ½¬hŸjÚ{ÅW¸#Àã_÷”M®_ùoN®äñ«Í¿øÄØøÄ±Éq‘ÿ÷ß~ûí¿†¼C€$ ;D Oc?ÿüóñ q^¹ˆøË»Æ¿‘Ï%ÆòMå‰ë¯¿þzöÚk¯O[—»÷WÐy:Bó÷ߟìæ;˜óÄ7ï!3¶ºß¹½#ð3ò-!á‘_ì#ÿYtÓø§Ê{m*NΟÍÒ8³¥=‡3ýçPÿn¸òåÜÿ®–+1ùØÔª_¯¼›CêÒcþÜ÷=ûNO ƒÉ! H@À¦?~<ŠÞ>úh´¬<­OÒsZåÅ_¿Yb«ÃeŸœ…‘ï¤þâ‹/ƯsË™[ÝïÜþù¦ÆK/½„{ÁæÕ‹¼ ²v¤Í×öŠÙÚsÞÆ>ômü©x& H@À'‘œo~xõÕWÏž>}:¾V‘o–Hžwloâ#ž¹òT÷Ã?¿2.g­ÂþгÝÖû=ô>¦úá»%³©½îJ.¯O8$  H@À¦òd9OMó×ñòžq~±íÏ?ÿ_ÝÈ“è›Ù;W¾óùý÷ß¿%$gÌYy~ÌÙnëýs/}Ω˜õ}îR|sÿ‚ï%Ï* H@ÀÁòT6ïê¾ù曣PÍŸ¡þúë¯G?O3ç^Û8x£x !bþ›o¾9{÷ÝwGAŸ³]õé3ÛߦûåLW±×Áì*ç»É¹þáMÒwo H@À='–÷Œó5t_~ùåÙ·ß~;þA×_ý,Yïå—_ãSbÈÓæ|¯t¾ê¾Ÿ>ÿío;{ã7ÆoðÈ(Ùj܆ûÝâ^®“ÙÔyoû/* §~jæ$  H@Ø”@¾ñ"ߨ!ûÝwßø#߀‘o‚ˆè<åÈëùüá‘W^yeü³×ùj¼|ŸtÞÇ>ŸÉûÝâ~n‚Y=÷mЧùWS èK@€$ðà D¨æëÒò®qDlþÀJ¾B-ž;¯UœJDGæÕŠüÃ|E]¾-#×±ßù¼öyS÷»ö|K}7ÅléL·­¦€¾m?Ï# H@¸§"ÌòºD®<ýÍûѧÏ`DFHÇ¿®qS÷»Åýݳ-Î~k( ¯ƒ²{H@€$p@ZžÒžêŠ ›Ý‚à¡Ýï-@~Ò#ø-'Åëâ€$  H@÷€ú¾ýD½ H@€$ “P@Ÿ¯‹K@€$  Ü7 èûöõ~$  H@€NJ@}R¼.. H@€$pß( ïÛOÔû‘€$  H@8)ôIñº¸$  H@À}# €¾o?QïG€$  Hà¤Ð'Åëâ€$  H@k üòË/k[o´ï6 è¿"¹€$  H@„@ÄóÓ§OûÝÞJ]¸õŸòž¾=×c@MšëeŽV€$  HàŽøùçŸÏ>þøã³'Ožp']NéÄ¥^jؾù£ìu?®‡ö¨p’$  H@ÀÝ%PÅóãÇ÷ݺKâk§ÐÜ –ë1y­$  H@À!ðã?ž?yŽx>âè®)‰±'!y ͱkžþ:§Çk×±O€$  Hà–øá‡Î>ùä“ñµ ÄsyºëÀ¯¹;t%vÍœU=[¿½jÓÒÄ aSŠ_ãÒ®+ H@€$p× D<úé§go½õÖYÄóO?ýt.¦Û½u]ˆFĶöë ×>Þꬃ]ºËô¬é[ZÚ$  H@À-"0%žùÂòôZˆVÄ^õNW­³V@O¦nPý¹Þ¹žä§®©uÌI@€$  ÜQßÿý¥'ÏÏõIt»µ)¸OS¶%.„unõ/4í ®" —Ö®ª~“üT<¶ÎÑ—€$  H@¸ƒòšÆgŸ}vA,wñœøÙ@bÉcçò©§Æ¨>¹+ÛCô!‡è½Ä±ÕÏMÔqµñ€$  H@w@Äó”X®Ož©?»½®“®z±Ö«_鯹9ÿÞ³Gý5ßÿheüXüpüØÄäÿë³:ùXrùFâäâ“‹Mîß~ûí·ÿ¬C€$  Hàxá…þc¸Õÿ®×?†ëÿŠM.¹ˆYâär‘‹ÍUóCxžÃOþÎYÉ[ ›ïް;>6=×ôÆvŸÜ_À·†zÄ4"1^sY<6¹\éË Æ’«6¾C€$  H`ž@Õmé:×mÏüä"hÉ#^±ÉǯB˜9æV;L9_¿ÚøÌÙE»Ïä6[è(¢tiLºß\í¡ö¿Ã¢b,B›½©Å&N3‘K\¯!<ôž't$  H@€& TÍ–t[µÄÉ!¦ɱÉǦVmïI£û5žê!×íÔ¼Þ³o! ûª‹Òä¹êrS6³Njµ'µŒdòÉ%f^æV?1×àž‹ìø H@€$ ýª.K7:lÉFÕzâž«kõZ¿ŽZ«ùøÔzþJñ¢€^ýø«½Íf9 Â6vjp`ê‰Ô°ÉãOÙÔ±ŸýÓŸ8ƒ:k¤'¹¹‘¾ θ‹ü”€$  H@˜#€~¢ŽîªœòÉ‘¯¹ê×~òÕNÕ“ËHƒ9ÄÝÒ‹½P¾hÁ¢€n½Ç†Ü@¼Y‹ƒõ:µfN|Ä1~,#µ'(N>>W­ÑƒMÍ! H@€$0O j¸tÕ]Wm´Wòø±Äô“«ù¡íÒK¹Ì=éØJ@sÐÑøÒê×!_mü\‡X&f½ÔâcûœäéËÅZıŒÌϨ¹]ÆO H@€$ )è'jè1lòÑdÄñ‰±µ?ù |êÉõ9ôU¿ŽÌgà×5©e·Ðlžƒ!F»_?ƒ\·ÅS嬗zÍQÒã`ÏšO޹øÕ>›za~ÍéK@€$  \&€Ž£Òu\À±s~Ö¢†î«¶¯™8£Zzv•çµÚGíJöÃEˆ.ÚÓýıÝ'×óš=c«HÂqÔóàÇæJÖ#Æ©ó‘œC€$  H`?tU¿Q›Ãäc¹2§æY/ëãW»”§›‘yûÆšž k" ³xšlVsY|®|µñ,kįWòˆåÔ‰Ó“ÁÜøôÅç<±¬‹_k½7±C€$  H`™@Õbé¬qü~uqœ˜\í%×mí‰O=~ÆœÝUŸ×‰™Ã<ò=&É" /M^HäU¼gJ|®“æ'—¸3‚8=ÉeÃOž\,õX‡$  H@Àa¢¿2Ðo5F䦎[}æ‘Ç’¥¿æâgÔÜ.³ËQ«–ú&v ÃG”r3ˆUò”›LŒÏâ@b­î³Áœ>ujÌí>¹ôe$ÎÀî"?%  H@€æTýFZnÉ"†±éß/Öè}ä—,ç‰Mƒ9‰kžúAv =µa†xM½ÆU¬Ö|ü\ÅÜøU ï2»Ïô¥–¿b›ù±É³Okž¡Ý! H@€$pè® 4\õÑpÔÃäkŸ+ýÕ'fØ ì.zïë£ÿJv+Ã"Fñ±9 7S}rs6ðêˆî¹ì™ùÔjœ¹œ ?qÏ¥æ€$  H@8Œ@4£ê¹ä¢Ù¨ãÓSãø\©ãc™sˆ–Gæd`»?ùØB@çPU”ösPǦŸ+€2¿[DñP:ä27£ büXöª~ï'®6¾C€$  H`ž: ›ÎøÄøs6šZÞ"ÀG4c“ï>9æÄ2ð±ä»ÝWïý—âCt6Œ(eLÅÔb©sÐØ€@³V­g^z2èÛE»ÏäèÏ|âØÄ57„ç9öÂR«6¾C€$  H`ž: ›NüX.Vˆ®#‡_mú×+ýÄÌí¶®QkY¯ÆøÉ3’«£ÇµvÉß+ ó·À £ÍÌ&5×cÚ9LíM~l –ÄÉe_×K=ë&ÇœÄøƒ{I<×\|F?y­$  H@ÀEè1²‰kŽ˜\,b·ûôò$š¾Xü:'¹Œä2°»h÷Éš5‡ßû{|íKóœÝ+ ç&Nä³Ùœå ¹éÜŒär‘«1ë M>6¹Ø\™Ûý!5æØ˜¾Ä H@€$ «@ÃÅ2¢áˆc‰koÍ×zü×yµF¾æ8C·éÝd# ³y­SéL?£Î§/67žXFøÖ|ê‰Ù¿Šh„1ë³'ý™Kµä€$  H@LjöâÊ*S>¹j£Ñj?¹šÇïyæ íçB=~5ì.{ù3õ ì.ZñyŒ€îËfÓÒº91¶Ö2ŸxÊPFjÈêÄY¯Šfrä‡òXM.#vÊ‹Ï>¨×œ¾$  H@Àeè·ZIŽ|÷Ó‡¾CÓƒíùÄä°ô®±Ù3}µŸx,û±…€æ U„æ ‰«­g „qµÜh­g^ÖâbM„tê¬Q÷Lž9ñ3×AŒ­5} H@€$ ËÐkX:jŸ8œÞø5O?–~ì\¾×Ó—Ñí.û_õ¹“CL ך£‡Y‰AK>–|,¢–µÓéK.qlí#ŽíûÖ5‡òù¼î'vH@€$  ¬#ÍÅèþTœ\½2—8z9±ÄK>skOÖd$ŸÑí\nl^óq¬€^Z›C"féEðR' (Ä5¢7qž@g.µ³kÇr îŸ8¶æ÷¼±$  H@ÀEsZ®æãã×8+&F(OÅÔ˜ßcò¬Ëäk³±Z@O¼Æ‘ÃExbs¨ê'f$¿fTáÌÄmjÒ©Õ:¢›¾ æÎÙ]×ó>b­$  H@À44Uâ9›¾ÔúE>W{ÈÅÖü>?ëõ‘9 |ì˜_ûúFšW hvœ±9"5-(9jäRß7*s±ñ¹xMœµX›\lF·»ìóOêÏ3z€$  H@k ¿z/ùjã§Ÿ;•£vˆelæÖÑãZ[í$ 'žBOm”ƒE˜r@|ìÔr™Ã«¬“yõJ/ñ’ŸZFí% ÏjøZ H@€$ õÐz™ÑýS'»äS¯=<®µî³¶ÎOnvòô9‹$ 'vÍÁ"P3¦|žêäÆIåƒz}êœ2ù*„—üÌáLø5N®}õÞo, H@€*9-Ôk~µK~¯%æÊøÕ’Ǧ†ÿÌ<µƒì£Aq4!͆Q&U,OÔÒC_µä±ÌŸê™ª-åRË`­]t9žê¡W+ H@€$p‘À”xì¹ãW[ý¬ž¸æ¦âÚG½Î©uüØ úvQ‰}úœ®ú:kp .TSc¤‡:>óÒCŽæMÕ˜—Þ\ÌeyâØºnõk¾$  H@ÀqÐg™]}âšÃů}䪥·ç˜›A}]þÜW¿7‘~ü¾1k±vòÌ!Ç:ÄÌ­¹ê×} H@€$ àÇ2«ú¬B®ÛÚŸZ¯×¸×k­ïS×í>½W²G½Â‘Ûk¢ Ó)ŸÜ›úÆ-ŸmBnÎö³ÐG¾®Usú€$  H@‡@ÌÖ™ä°Ôˆ÷Ùô§‡‹ø[{»Ÿøì˜×72ïh=N¾ø.tRU°.ùSµäÈï³s{1/õŒï²?×ô\œa$ H@€&ÄïÒÝ÷blæNùä¦lϱyâØŒ¹ü®xÌ/Ž3·yúÙR“&Gœv?z­Þ( 2¯ÛÔÉU¿¯Á¬×cæR×J@€$  F ë¯gµš›òÉaërXj=N>£æw™ ?¯ô:çXñ*ÇØÖÎŒˆí¶öR«¹êÏÕkO|Fí'§•€$  H@ØŽÀ”pí¹ãcs’))Wk}þT|ô«Y,ã¿D˜us#U°ÎÅõ†é¯¹¬57è˼ê§?1ë%Πg]ü콫F€$  H@XÒTô`k޹ZÍÓWsÕ§ËèuòW²W~ÍîW|}¾Ìàt1{hœµúÖßW«}ú€$  H@ë, Õ©ZÏ­‰×ôÔÓöþ+?yfñS=f}Ž ]§'ý}kvKÏÏÅœa®n^€$  H`;]{õ8;MåÈ÷Ú¡ñvwòl¥Íž@s²™'Ñ)#ˆiÊõžWiZ›Ú£×%  H@€¶%ÐEn_}®^óÕÏü}ñTϸï±_W7Nžø8õèº%7]…pr=fNòÌI®÷2¯ö0W+ H@€$psÖê³ÚW}N>•K­ç{Ìü“ØÍŸ@sÊ…'ÑiAüÒ>—£>Õ?W[êeŽV€$  HàútÛãz’Ck³ý[?yæ'ÐÙ`ˆ[8H³kD𚞥=Ú–†€$  H@˜µmý5}s=sùq‹S‰ç,~R  Bz< ýv­Xfê¡ýÌÓJ@€$  lK`QèNlµÔ¿T—:¥pæ¬×" Ï7”4þ»¦oMÏžm,K@€$  Ü ½‚x8ÛšžÍ¾¢n ‹kÐhåiÚc¯"–¯2·žA_€$  H`U¢wf©ƒæ^Çç~ÎÐõGˆé:=¾¹1–€$  H@·›ÀA"¹ßÊMˆæz†Ðõ0ñ7Ô}Ic H@€$ ;Là¦sGwët?`bEõs€$  Hàþ¸m4}³·IDATbyŠðÐSŸÊ)´§¨˜“€$  H@7Oà.㵔^{ÓöI@€$  HàXÿrìDçI@€$  Hà!P@?ÄŸº÷, H@€$p4ôÑèœ( H@€$ð ( âOÝ{–€$  H@8š€úhtN”€$  H@xˆÐñ§î=K@€$  Màÿ?«¾ˆ¾ÿIEND®B`‚gwenhywfar-5.12.0/doc/dialog/images/fox16-6.jpg0000644000175000017500000005616013142134462015772 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀüˆ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?õ€ÿ¼9à_Ù¯Ø,¦Ö¤·ÿM¿½æv dQ! ÞVåWaA ±$ú/ö&Ÿÿ>v¿÷ðÒh_ò·;#ûŸÞúÕ’}#‹þú¯NNP“Œ]’8ôi6ŠŸØºgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷ѯŸô¯‹>4Ñ<'ã kÄ6Ú>®ú‰æÒ,á…ÙZóÖ5V ™0¨<1Û¡ëšN¬Öí‚„_CÞ¿±tÏùò´ÿ¿”béŸóåiÿ+È'ø«ãUð§Û‡€ö_Aª=Ó4S², ˜.¾q —©àŠ«£üIñN£ñBÐ[Üè7>ŸÂ0ë&Þ&pdÌŒ$x‹F$2eJ„l  f—¶—ó1ò.Ç´ÿbéŸóåiÿ(þÅÓ?çÊÓþþWÍWß|Y«ÊšÌÒZiöW> Ôuhlô½E™”©YrËòʸ# ’xâº{?W¶þ#ðþ’šuž£§]ßXi7¦Cq<(ß4Œ¡l½¹È<íåüÌ~Ív=»ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¾~ð÷ÅÙÜêš$iÚ…ðÕu»•¹ÕîÚ(£µµ”… ‚K`ñØžjÞ¹ñ÷R]&]WIðæ“ ½¯‡mµ™âÔ¯ž9e3¶ÕŽç zž38£ÛËù˜½šì{·ö.™ÿ>VŸ÷òì]3þ|­?ïå7M¹7zuµÓC ™¡I xÈc?ôÎ/ûèÖœóîþòmÄ?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷ò›ý‹¤ÿÏ…§ýõÿ׫ÿ¦qßF¢?õÎ/Κ•GöŸÞcÅi?†¾ñ6w4V6°êpÈ.·mh™wðO—–9\É ‚ ë~' èzŸÉ(;ûŠ+ÒŽ•x©Or#QÁ´ŽëBÿ$dtÿ¹©Î?¹ýõY0èö?2·Êݽ6¼ð麰º>ÑÆœ‚;~ËûUŒã(=—ê(úç÷CêÏùŠV¾ð]¡œÛx7Û„’9ÊXD<ēվ^U°24ÿøBüý¦šŸü">ûtm%ÏØbóÇ,†ÛWtÀÇJµE\_ÊWÌUÔ<á BÛì×þðýÔh{Ÿ.[(Ù|ç9y0GÞnç©ï\ÿÄ?…zî­›RžkkXmÖØÛZÃlF«#DÒÆv‘¨ bºª)»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõGý³þú¬Ê(úï÷CêÞfŸý³þú£þÙÇÿ}Ve}wû¡õo3OþÙÇÿ}Qÿlãÿ¾«2Š>»ýÐú·™§ÿlãÿ¾¨ÿ¶qÿßU™E]þè}[ÌÓÿ¶qÿßTÛ8ÿïªÌ¢®ÿt>­æiÿÛ8ÿïª?íœ÷ÕfQG׺Vó4ÿíœ÷ÕöÎ?ûê³(£ë¿Ý«yšöÎ?ûêûgýõY”Qõßî‡Õ¼Í?ûgýõQ`r/ûê¨ÑBÇwñÕ¼ÎOâXÿ‰ |¸þï÷½è©>&œxZãæQò÷âŠú<%okB3µŽZ‘å›GUÎcó+|­Ð{ÓiÐèö?2·Êݽ6¾_üyzøáD(ªWгê[L¢HZ)£a•b ‘ßCÔ ÅMoÀ­b&¯á†ÕD¦± ˜ þ`êž^wnã¦3Xr«j_3¾‡OEeéhš„Ö–íè2öž[}U”0ú*K«=ÒÖ[««]> xPÉ,²FŠˆ d³ÀrI¢ÑïøÁ Ë·õ÷U$Ó´©],,™eXB¤ê8¬Wð&µxöz6§á½Jæ0KÃi<2ºÁ%T’(´{þðBòíý}ÇIETþËÓ?èiÿ~Wü(þËÓ?èiÿ~Wü(´{þðGyvþ¾âÝSû/Lÿ u§ýù_𬠷ڕ¥Ú$öö“‚'PUfí퀠à`UFš”\“؇Q¦“[ÏXê^ ¿ÕdÒloü=u¨ÄH’Ò¡y“r€äcéZßÙzgý­?ïÊÿ…M£ßðÿ‚UåÛúû‹tUOì½3þÖŸ÷åÂì½3þÖŸ÷å‹G¿áÿw—oëî-ÑU?²ôÏúZß•ÿ ¦ÃÃë­G£5­ ¾’Ý®R/³bVUfÎ1ÕÔc9æ‹G¿áÿW—oëî5è®s[Õ| ¡ÝÅg­j^Ó.f]ñÃw<0»®q¬A# Ž=+]4Ý-Ô:XY2°È" Ê‹G¿áÿ/.ß×Ü\¢ªeéŸô´ÿ¿+þeéŸô´ÿ¿+þZ=ÿø#¼»_qnŠçu¼iúž™ Š%ª]HcœD¡w®ä»òpzŒœUm[ÄtB];U×|)ay<Ë{›»x¤L€FUˆ# ƒô"©ÓI)_rFÛVØêè®I¾ðŽ­wöm-ô»ç6©v­oÉDÎ謮ÓóFマ*âÁ¢6¤úp°·ûBB³0û'˱™”|Ûv“•Ìrž‡ ˆ¢ÑïøÁåÛúûz+^¾ðo‡Öׯ4 %g$Doe†!È]äg=jõ¥¦‰ykÕ¥¶qo*‡ŽX£FGSЂ8"‹G¿áÿ/.ß×ÜhÑU?²ôÏúZß•ÿ ?²ôÏúZß•ÿ -ÿ‡üÞ]¿¯¸·Es¾* ¤ØÅu¦Å ¬ÞpRñÆ •*Ü9ÈSõûÿx}!_èz`œ‘êÅ”Œg !#=O<Õ:iEJú2Fäãmú+™—Xð\vjôél¢´[Ãs ¿™ DÌÊ º©W$©T“ÓŽFdMGÂm¢Þêæhíl!i¯¶MÖꩼù‘2‰íù‚•‚Š›G¿áÿ«Ë·õ÷F &hRhì-C)òdGjÊÖõ_hwqYëZ—‡4Ë™—|pÝÏ .ëœd+HÈ#J-ÿ‡ü¼»_qÑÑTÓMÒÝC¥…“+ ‚!Rü©²ôÏúZß•ÿ -ÿ‡üÞ]¿¯¸·QÜOBy8T³èä÷EVfEPEPEPEPEPEPEPEP/ñ4ãÂ×2—¸÷Qñ4ãÂ×2—¸÷WÕå¿î°ùþg›_øŒê 9Ñì~eo•ºzm:ÇæVù[ ÷¦×Ïc/S³ü(•%ÿÍ·ý{Íÿ¡G\ÂÈuóªx‚hï´±¤êíÚÉÍÉ>ct—ÍÚp~áã#Þ½ ¡V¹K‚NäF@;aŠ“ÿ Š’¹ÛÑ#Dµgü5{ír÷J“T×µ–Ž Y^òª¼æyó+…`\á!²pÀàc7Nº—ƒ¼YáÕÔæñéðäòI©iþ ¸½†y£'Ò³så&A]àÅ{µ®;ïÙtY|%fú©ý¥k°—ûAîðûFåÞìÄcû¹ãÐWðƒÃZ•ÿ‡<âKS³{Mæ±µµ°d˜™ã"IL¸aʪ¹8ÏJõú(¸'ào]]xÛF:UË´­…Ô“YÏâ µ EUtFë¶Ú@r #c–ùrákÎÖ¼ ,üOªßë—qÜ6»a=üŽ‹r-ŠK;`Û&B  03ƒ´íõÎØøU"×áÖoµ½[UšÕd[8îÚ!·™ÃÆ¥Žܹbyää¸Xó…:¦µ}®èOyâ/í9"ë¶kóOrÌbbWìM­±IýÒÐF_ ×¢øgoö®½¸¾8ëÏ]%RÓôØ,®n®"y®Ÿ{†#äž8÷5¬&”$Ÿ[~fsƒs‹]?Èòkhš–áO 뺋4à’à Q[…½ÓQ!vY&tb¸%BÈŒKƒÉ黧 um~÷UѤ—^°maà”ëZuLj&žáäò˜íûD«lVP¿t·#/kÛh¬®icÇt\¿Ã½GPÒ?³^ió_É$]mÇØËlŒ«üª ð9Ï0M¬C‰¿áñF§«iqxJêæâêMFK“mz£÷EdbLRó Œ·b«^ÓE I¬Í¯èê QÕoo.¼s|©sp÷,nâh‚ÈŠä…cæ·È )!x©<ú|\¶ˆo5»oøFåg’{÷»ÚæâüîIV#¦@^>UÏ>¯E eâ­;XÕ~-ÞØi7úmšÏáˆã¸k˺âQò¨‘?]ÃÚ°>!Ï…ô¨ü1§_^[\è^ˆÙÜÏâ¬|ÒŠê¦(cFRܬ1ó(ï^ÙE =â=tOw,þ#ñ þŠÃv÷z2ÚÞ=ºÜ]8”ÌUT4ŠD Dw ºsX÷ºÖ±$:zƸš}”¾±šÎêóÄSi‹5Ó«yÎdHßÏb3±Î9ÎÖÜqë¾(ðôšôf¯êúu´‘47Y4*³!ê xÙ”ã#(Tó×¥kY[Aeg¬K¼¬Q"ôUQ€Ð w “½ì–~“R¸·¹¾hâ73AŸ.Is&@;IÉJOŠ}»Á‡þFX?ôDõÓêl·6·¼ŠÖ¯½‘‚r<{ »ZNiÂ)t¿æg5)7×ü3ñFº§ÄíhGS²x^ÝÐØÝ½»oóî¶±d ¸?);NyŠæµ{^Ô4[yÿ¶¯íg¼ð߇çi-æ)²Yï¶Êê°8ôÿiz‹k¤iêâÚÙ6©w,Ìs’ÌOV$’OrM U¬—òü1ÒŸRÔíu9þÐà][NfI# Œù…Wy ´Ú2A=éÿãÕ¥ø‘àÄÑn¬m®üGylÓÇ·l9UÐçßuv𯛩l¶÷"ª¸pP€s‚;ƒëWkYTNœbº\Î0jr—{5ñeo®¥ÕôÍNþwXtM.gKIå·„ÌodGu@ùpIè¼’ ÕMcOÐô‰~)ض§zšƒé²Ëgkw¬ÜHóÃýœ¡ŸË’Cæ€Á†ân1‘^áEesK{á{Ç:n™©©ÝÛ_øyî§K»·™|èä…C bDy°*›WÀÅTñV¬j¿ïl4›ý6ÍgðÄqÜ5åƒ]q(ùTH€®áí^›E 'ñx|/¥Gá:úòÚçBðìFÎæÍcæ”WU1C0ºÆåa™Gz·â=tOw,þ#ñ þŠÃv÷z2ÚÞ=ºÜ]8”ÌUT4ŠD Dw ºs^ÃX~(ðôšôf¯êúu´‘47Y4*³!ê xÙ”ã#(Tó×¥ E{­kC¡Ç¬k‰§ÙKá{¬î¯€TW¶jœogXšÞX_Ë‘£œ¯*ÊAS…<‚ãQ’L™-:Ô´-]¼S׆ü-ªèª¤×š‚j±‹ ˆ<Ðeg·YIw‘3Ö C0;¸ÍP×ü â=sEŸ@ŽÕ4Ö›ZÔµÕZ`L1¼’yh¢7ûÕ“ Ó ¼1Zôùt{I7î›P÷gn¡:ãw™œaøÿZØÇL&1å¦Ò]ÒMû¦ÔýÙÛ¨N¸Ýæg~?Ö¶1Ó Œyiµ\«–k­Ùø¾ÃU—³ZÚÝh–Ú|°[OM>H¥”~qºLm{[JªE}:*æ (W@ó[Æ0˜Ç–›]ÂÇáÍ0h–ºn’ô^Töòù“ÄòÇæ\]?"ò×®ØÔaB†}¸OF¬«½$š !špRåf“ÍžIHøUb@ùœŽ1òí@Õ«œ“ŒQMI°¢Š+#@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(—øšqák™GËÜ{Š(øšqák™GËÜ{Š+êòß÷X|ÿ3ͯüFuPèö?2·Êݽ6Îcó+|­Ð{Ók籿Ǘ©Ù‡þBŠ(®S`¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(˜ñfµ©G¬Ùx{D›KµºžÚ{ëýCR”¤e„@ .˜pkÓµ×%L€6ŠtpxËÃ’è—ºÁÔ[ <«±qo,2Âçn¢u;—n[pÆr+Ÿ‹Çéy¨kékqoii¦9RKË„‘^âVFI";\…ÊŒn rµgðû[X5É^{X®.u?P±Š]Fæô+Ú²6Ée˜o!Šc | ð8æÅÿƒ¼MªÜxŽòôèöÒê²éM PÜI"ƶ³ùŽÌjI#¡ ßÉzÔGã? É®c& ÆèÜ5¨o³J iÔbmò̃ä »ƒÅZñn£¨é:Æ¡¦i‘j3À¥Ì2Ýy ´Iݵ½:`×oà¿ ´Ð^]/ûÓ^:Â] _íl>Ò×+ fÑûÆÁ“*>îMv/‡U¹ðíå¦meqwqBîå Œܱ¹ÈÏM¼úŠ@MáKûkÃzf±äùn³ŠçÊÝ»fô ·8Æqœ Ь‡¶:Æ—àý7I×-ì!º°·ŽÔ;—$XÑT>Z4 œ—¦·é (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®oY:λã'Àú¨ºC]ZϨj7¾HyÎ2‘²Á“1y£Á`UF[ ÐéþÕ|5w#·Œõ-oL{wÛ§Mr— ¸M¢ù~Z0 åçqÎì åv¸¯¨ú+ø§â[Ï éšTöwúNöÝN;9nõ8ËÁ2HÅÈGÝ倿¡ð/‹µ cÃz¦¥=¬:¹±¿{[iôtÄZŠ˜’#à ÌÊråróR°­Êé±é:åØÝi×1ZͧË5É–]¢$@ŽÈû˨1œ‘ƒŽ}¼k&©âazº¶žt˜ÒÙ­íÞx^y™[Y\l†l ã 1E‚ç¥Ñ\”^=Ó$Ôã·~¦,%¿m6-PÆŸe{Å cçó>ú” Sia€Õ¹â×$´DÐ.4ë{“ ß-ô2*`玄œíþ 1šC4h®oáÖ»}â [½B;_: ÙíDö»¼‹¡•ócÜI pxÉäHæºJ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š«›iÿ f•â3-ݽæš%EkvUG"íh¥eãÎ×Ù•ùÑ9Q]«¬½Ü{±Êã;vž¸'8ã9èHÇ9¬z)ÝÚ±‹âk²èî×"¦êQß`Ç¿ÍÚŽ»:Œg~sÏN•…ªxϵ׬¬uU³°Õn­ïVÐÛoŠ)‘•¥ ®ø¥Ø»£z¹ÏÌqÛÑJã<ïMøaž°ßXZM}yi}n4ý1m ´šØ«!;”•99ny³qà=BþMnãSñ 3\êÒiîL68á“yULŒHnœ·“ÈÀÝî+4ºŽâ #®«xzßV:´V?cÄÂo8ÎÍ¿1+nfîÝŠ×øƒ¡jÞ#Ð?²´­r=#Ì•M˽³L'„gt_,‘²†ã%XdwÍtTQp3<1c¨iºDVZ…Æ›3CòEö ´…#Q’LcÞÇNiÑE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžmâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¾©e7Šþ%hþ}N÷MÓ[O¹Õui&É/"ã‡ìÛ±º5c8bêCaHI½e§Ãm—R]èWÚÌ6’Û¼gO¸Ô$º€J><4Å¥¶=˜ß³;s’j 5­3W¹µó®ô¹^[9®¦xÚ6`Á%†0ç¥kê:¬·ŠT†Á]¤»qqÀ €zgޏâ­5kgsÎ~/ë7Ú>™¢›-RûL[½b+[‰ìmæqG!!£“'*½š¥à?ê—> ×5{›Øu(lu`±»Ô™,XS`-q„"®d(§ Þyì5í×Y“L’êIé×É{–@Üꬠ6AÊáÏLœÖN«àm'P—VÜß[ÿiÜZÝʰºmŽâÝ”¤È¬¤n;# r‹Ç\΃1´ß‰Ö÷z§u•åý•õ½„p麒ÜÛÜËpPE²}«…Ëá‰PWkpxÎUψµ˜5¶»ksnmE-lõG1©–ᔼrmSƒ•Ü6.í¥O×T<§Óå:¬—º¾¯{>©%œ—3LñͬždaBÆFx G¡$—  ñíÌ—^ WÃ×±Òb¾ûff3yÆæ˜™Wh;÷rÜWGâØµ tIN™w©[\FCìøíÚyþû@1‚}O¥dCà-2=N;¨ê†Â-Aµ(´£"}•.K2“Ìûì\)}¡ŽvÖæ¿¦ÏªZG ¶³¨é$ÄöF-ç‚6‘":‘ÏB½@¤Â}_TÕü=vÚÅÌ“^Zj[2ÜB‘\ĪAUPó6rŸ) ¤g5×ÖG…´ OXÍom5ÍÌ·7 susrᥞVÀ.Ä3…P Zô˜ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( _âiÇ…®>e/qî(£âiÇ…®>e/qî(¯«ËÝaóüÏ6¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ (¢¹M‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Èém$ލР31Àu$Ó-nm®£2ZÜE:´´né‘\gŒ-?¶¼¥h—Úcj–0é7Ú––o>˳¨BEc#·ÈèÈò¹B"2[(Lÿ´y/<¾-ñÃ[/‡úüÂâͬ¬"{+y Rgû8ŠBê±îp]‚Œ6×@+—K“}NÆŠà¾4Ïs›áè­Æ®ës®C Ði—m<ñ˜å%‰#ÆHï•—à}zòÇÁ^"ººÔæ²6ºËÛYí/.l”ùJ°Ê‹ÊìÌY» iXw=FŠó?ˆZÃi¼mo>­k©Ùéö²Éaqc†é£Tw†cæ Rç#'pQ‚3ÆN£uªXk~4“[‡IÔ®cm<¤Èå€o,¹ee-7·*|Q`¹ì”WœÛøÓÄ-5ׇKþÁ»×ŽŽ–¢7ûZ´µ²Ìdß´þñrcÙŸ½‘[ŸüQ†ôx#:–{©N--./%T† –•‹0аOÌB¯ñQ`:ª+ƒøªÅª|<‡nºÚÔ¶××°=Ä·h”ªÝKåï|““Â3ü$cŒWyHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP/ñ4ãÂ×2—¸÷Qñ4ãÂ×2—¸÷WÕå¿î°ùþg›_øŒê 9Ñì~eo•ºzm:ÇæVù[ ÷¦×Ïc/S³ü(…Q\¦ÁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPV+o·[^Éim5Å£·’X•š*T”cʤÊAÁ#<ÕÛËùîF ÁÁ,O9Ææ$ãÛ8ïŒÖN­©iúM„·úäv°©y%™Âª€ <Ÿ`OáT¼1âŸxžŸÃúÕŽ§lQͼ¡¶?úþtõoTÒì57³{è<Ö²¹[«s½—dªCpFxfàäsTu/ è„÷óÝX–—Pò ˤòFY 9‰ÁV]N0ë†àsÀÆÝ†sÐø+ÃQZjVß`’TÕ6½i®¥–IZš¶÷Ré+2Q«&Ç€îXá”·Ê>p•éþ&Ót_í#¬=…—ö¿ØÚÙîü•ûGÙ³¹c/Û<݇nqœŸZç šX\´NT‘ƒèG¡DZ§Os4ÈØ;B®}p03ïV¥¥‰¶§›|s´Ú†-—cª‰|CýŽù¶Á7î¦ù\ì~?à&±<z<9áZNfЯc×VôÍ9o°™ü”†;0e“!ƒUFÈMzÅÕ¥­Ñ…®­¡œÁ(š$a¼·€ëž‚FG<š¯y£i¦èÞiV7&î4ŠçÍ·Gó‘I*¯‘ó(,H“ëSqžaoãA¥x‡Mžæê+Ë-_O±ŽóQŽÔÏkÓD¬ò‹ra%7±+¸psZöëRÑußã[:Õ¼š ?hžL^à‚®ª¡7ms‚`=FkÔíÊÏO³ŠÊÂÒ KX†Øá‚0ˆƒÐ(àTô˜ÂŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( _âiÇ…®>e/qî(£âiÇ…®>e/qî(¯«ËÝaóüÏ6¿ñÕ@s£ØüÊß+tôÚt:=Ì­ò·AïM¯žÆÿ^§føQ (¢¹M‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  Ÿø‹Hðí´3j—^[ÜËäÚÀŠ^k©H%b‰,îØÀP $Þ«øwÅzfµ¨É¥¤ž©Ç¹k NÂ[KŸ#pO8G"†1î`»±ÀŽ¢¤±·ž^Õ®l®/tÁ§^Ú£G •,.›c­Ìœb%1$Ñys0^ŒÄzOˆníd³Ê2Ê¡X\9\ÏLî*Øô\öj*×&úœ·¬èú˜½Öõ[2Ô¸A5åÂB…Žp»˜žÕ&•©iÚµŠ_iWö·ö’gdöÓ,±¶:á”kŽøÂ·®¾M:kx.ψàò¤¸„ËŸ*o¼¡”‘ôa\Æ||5áïÙëŠçX:ÌW7¦Æá¬¡)rbŽ)ÑÆZv¦²Ì¥%9@°ìé½@VÙ‘]•!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¿ÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_W–ÿºÃçùžmâ3ª€çG±ù•¾Vè=é´èt{™[ånƒÞ›_=þ<½NÌ?ð¢QEr›Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ ŒÈáÑŠ²œ‚4ùæšw4²JÀ`bN?ŽŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïM§@s£ØüÊß+tôÚùìoñåêvaÿ…¢Š+”Ø(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šåþ&œxZãæQò÷âŠ>&œxZãæQò÷âŠú¼·ýÖ?ÌókÿT:=Ì­ò·AïL!XpYO+‘õõ|:=Ì­ò·AïM¯žÆÿ^§føQ"ûŸÿ>’ÿàÂëÿŽÑö=?þ}%ÿÁ…×ÿ©h®kšØ‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ˆ¾Ç§ÿϤ¿ø0ºÿã´}OÿŸIðauÿÇjZ(¸X‹ìzüúKÿƒ ¯þ;GØôÿùô—ÿ_üv¥¢‹…ŠS¾ƒ¦)ŒqH:«ê· Žý ÔÏ´xsþzÁÿƒkþ=]U¦½¤xgÀzv¥«ÞGgköhYݲÍ$²pË;³±àI< ~%xf] \Õmç¼è–oy{g-œ¶×i£8>Lêóm¤€ zÖÎNÆiÉ«œìrø~I8Þ'v *®«rI' Ϋ/k¦¢3½¬Šª bu IýíwÝÅ¡¼›7Cql[c€r¬½éÐ×á‚gºð÷žZMì÷w2Àî õÃ(o¨ŽDöf·*ý£ÃŸóÖü\ñê>ÑáÏùëþ ®?øõvºßŒt \ÑôMSRŽÛPÖdxôøYX™™,2 Ô ±$É¥‹Ä¶’x¶çÃ+âòÞÂ+çr–c’I@9ÎìÄÙã#ŸBÑþ¿áƒÞ8_´xsþzÁÿƒkþ=GÚ<9ÿ=`ÿÁµÇÿ®ê/ÚIâÛŸ ¬s‹Ë{¯ÈYŽI$Eç;³gŒ`Ž}5>ÑïE£ýüyÚ<9ÿ=`ÿÁµÇÿ£íÿž°àÚãÿW§}£Þ¨x“^·Ð|;©ë·‰,–Úu¤·s,@d °PHàd­õÿ ñÀ}£ÃŸóÖü\ñê>ÑáÏùëþ ®?øõzU¥ú\ÚCs`’¢º†êæ¤ûG½õÿ ñæ?hðçüõƒÿ×üz´ª ª¥TpbØRI?RI®ûíõæúgΣî¤ó"ŽÊ¢F@j™ÅZèqnöfÄÓ \|Ê>^ãÜQGÄÓ \|Ê>^ãÜQ_M–ÿºÃçùœ5ÿˆÎªÇæVù[ ÷¦ÓâÿE >Fè}é•ó¸ÏãËÔì¡ü8…Q\ÆÁEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP­ï¿²|®ZØO©Á¡\ÛÞ]ÙÀ»äxÚÎH|Ä_ãdiUöŽH8žñ·ö‡Œ/|I¯i.¯ ” Ôt¸ÍÕ„¶óßÜOµ‘HByg’£&\.y®îÛQ¸´µ‚Ѭ.&û<)’"\*… Àƒ€2=sÔsRlOÿ@«ßûê/þ.·–²m~fQiE&s í/ôÙõ(e/qî(¥ø—ÿ"µ×ʧä=O¸¢¾§,WÂÇçùœÿˆÎƒG½´¿Ð,g²žÞâBÉ,GS‚08 ƒGZž¾;ýš¾$xªúòóÃ×÷Âò;ºŠâ}Ï>D‘(BÄüÊ7±ŽpÒ|W¬þ¶?ûâ¼ÿìï­þú2µü¿àšF»¤¹Øõº+ÈŠõ“ÿ-£ÿ¾ð•ë?óÝ?ïOû_ÏøÁ×?ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä_ð•ë?óÝ?ïGü%zÏü÷OûàQý…/çü?à‡×ºzíä-â`õ?ïMÿ„ŸXÿžéÿ| ?°ßóþðGõÏî—Åk›{o Ìne†$*Ù’Wª $“€äžÔWË_´·Ž¼Aì^Šá#µ½±Y§‘°/"4`çUÈ'‘œ IâåƒJ„5·_Ä=š¨ùßSÿÙgwenhywfar-5.12.0/doc/dialog/images/qt4-5.jpg0000644000175000017500000007664313142134462015546 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀ£†"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ú/GÑíæµÎMÃåg =MdxÏTðï†Ú)ôÑ{¨^1KKVÝ,Äu<Gv$]…ÿ {s²?¹ýï­|ßñ›[ÕtÿŒº¬Ð¸ŒÃkíŒíŒ s·êå«êrŒñøÇAJÉ_Ëc‚N1‚m£?ˆ¦Óáûf³ðýa±2Ig~·2Ä=Z<.@ï´±ö5ÙéÞÕôË}KMŽÂêÒáÅ*JpÃúcȯ–|IüZ‹0ô(¸þUé?²®§w=¿‰4ÙZÚÞé&ˆ@F6åƒåõêçy \º‚ªçÖÚ7ú“ BNÉÑý‹¦Ï•§ýü£ûLÿŸ+Oûù\'í«êz'Ã;CI¹k+¥¿±ŒM ႽÔJÃèT~µÎü1ñÿ‹žÏÅ×¾*´‹Z‹Lñ ÞŸ ¾MuÉ„ª®è”tsóõòn¬ÓµßÞl¡^Ç®ÿbéŸóåiÿ(þÅÓ?çÊÓþþW€j:×âf¡ho5$´“Å:u­½±ŸÊò#“OiYH9†JñÏ~+Ã?|s‹8dþ˻ԯ¼/¨j6Z—Úškˆ¤µÉw mÉ\ìÊqœO·—v?f»LbéŸóåiÿ(þÅÓ?çÊÓþþW‡Ü|\ñ†™¡xJÃû LÖµÝcImA¥¶3Iˆˆ„.ØÓ"V-ó`OqZúÅr×YÐëÃi&¥odó]Þ åË;a¡-‘/1# æŸ¶—ó1{5ØõŸì]3þ|­?ïåغgüùZßÊó_>%ñ‡ˆn|Y‰çÑ®#ÓµëË(DD±yr@1÷Y¾cÞ½C?ôÎ/ûèÕ*“j÷bqŠèCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾>y÷x­Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ+Ÿñö‰¥_Å¥ÚèÉ©ê“&ôµ·¸7»„_¯'°5Ógþ™Åÿ}ð{Ý_Rµñ—ˆæI<¹Þýã-Œˆv í·ÃÆÔÃSRMê{Ü?“Ã4Ä:nÚ+úž…s¬[éaeñ„#±²$º·ºûJEîàÀ{€k«IÑ&¶Yâµ²’)rÓô–KÉîÖ]£¹P¤œþê+Ò|)áÛ? x^ Ì,‹³I+ŸšY–sîMtTVxuOðDßÄãÚu§{1ñpb+!²1ó·ñ{QV¾9ô»q¹~÷Ls÷Eõ”êsSŒ»£ÆjÍ£Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|Î'øÒõ;(ÿ Ug½E‘Ñmu¶1BÐØM*înT Až ò+BÍWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠô{‚½¾¡lìØÍò;WrÍ€NÑ’pxâ€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠAd%¾¡#)Úè–3ÆpBer# dŠ·EUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕPßĸ2Ûê)!wÏa4H 8³ $€9ä;Òý¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿGÛ‡ýõü\ÿñjŠ«öáÿ@ýcÿW?üEnôÖ?ðUsÿÄPª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿQÜêk -!Óµv#…_ìé»Ae ’pH䊽Erð‘xŸþ„öÿÀ™?øÍð‘xŸþ„öÿÀ™?øÍiì¤G´‰ÖQ\Ÿü$^'ÿ¡=¿ð&Oþ3Gü$^'ÿ¡=¿ð&Oþ3G²{HeÉÿÂEâúÛÿdÿã4ÂEâúÛÿdÿã4{)´‰ÖQ\Ÿü$^'ÿ¡=¿ð&Oþ3Gü$^'ÿ¡=¿ð&Oþ3G²{HeÉÿÂEâúÛÿdÿã4ÂEâúÛÿdÿã4{)´‰ÖQXZ>½uq+[jZ-í•ÖÝñÇ 2ÜoNo• ÈÇ+‚r@Óûpÿ ~±ÿ‚«Ÿþ"³i§fZwWEª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿGÛ‡ýõü\ÿñjŠ«öáÿ@ýcÿW?üEnôÖ?ðUsÿÄPª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨¦Ã$sD’Äë$n+)È`z})ÔQEQEä_ú]¸Ü¿{¦9û¢Š>9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ ̶aŸbªb·8¹‰I­:Â2m¶²ÿ—oý•¡_Å~ ‹ÃÚ+jrÙÝ^þþ xíívy’I4É (ÞÊ£æ‘y,ª¶~)výæ±§Â=Aq<©ª^Û¬Â8¼¬Ê'‘ @Hw9u(BåHpF_Ä2ã^ðÂé–É+—Ô´ùdò§0ºÅä2HÊà©R‚¤7sŠåüqàÛÆ´¾µÐ"¿¼Ž ëVJo5I.\ÜÜ Qaî$f¼–î`“‚yzÞ5ð”6oy7Št8í’àÛ4ͨDfmØo^ECk㯠\xÊo E«ÙZ;hn´Ç™D‚F ‹»s2¤{Øc…tn\×´›ø”\èf§ö> ¶“J–ÕÝ'Èc¸ýÛFv.ˆmš_ [kºoŠíîoô”d½Ð,,îg²hÖÞÒ{srλƒl&e ±[§8ÐMâ_¶«XiVÚ«¬Þ^ÛÏr±Ø˜dp´JìÆicfL“×Ò™oãÏ ¶‘g©^ëVZTwŽñÇ£:[Éæ#”’2®GÌ®¥HäV'Šô]WVñ¾‹c«jMµ®›} ×vg/¾Im FDÈã "s¹#8<î¿áÍsLºNðí®£&›%‰ŠK›Cb×ÎòÊò}©îщŒ™7~íIÜòqÈéú·ˆt]!­×UÖ4ûtÛ-ÅÍÊEæ·¢î#qäp*+ßxvÆÊÎö÷ÄUµ­ðSi<ב¤w€ ÆÄáò#ê+Êì­uo izUƱ¡ÃªÊþµÓ®á–òû,+Ë™‰Œª“qýÚðr+7IðçˆÞÔ­Fµ$á 6km;ìdl¨KïˆWcì üƒ!¸À½‰²2 P×eÍŒõ÷mÿ£Ò³|-lÚ_†4­1Ì»­,¡€ù²‰(~gñ6­á?i‘WN³¸6§ÙêzŠ]Ü«E/™021™BȪˆÚ@âF)øg[½Ñ¼A4ÖÚÄ—·­`ÞN³5ˆûRÛMæ4[m"«¯îË1$‚/ ÏO‡Å>›E“[‡^ÒäÒ£$=ê]Æ`\ÈÑϽx£ÃÑéPj²kÚZi÷ˆ.šî1 ¤+1ÚùÁ£žE'±®/\‹UÕl4ÍV/ Io.Ÿ¬-ìº\³ÁæÝ¢Àñ%\ǽK«(/ÿ,—‘ÐgØøsRºÔ´ÝF÷EŽÚ ¬‘fÎÛI¿·–MÃå’Y¬ÙÉÈŠC06óÔdþñΙª´–ú¶‘±ý£mŠÜ*ÌñÁw4(Â2ʼn)$Ž3’08æñv‡agök\Ðôõ2Ü*³ê)°¬Sylw6ß™I@ëüÛrp âcðÍì~kdÓ"]A¼_ý¨Ød bþ×ó¼ÝÙëönÙÝ—âájÞ*Òµ COO*ÍüC ‘Æ×ZŒrÀF 9hƒž: ƒ‚q@ΛÆ^6Óôv†ÂÏTÒ¤ÖP°·{'S0Š{¸avòÃá$$™Á9V‡ŠüL4Ó•t­CU¹ÔnþÉmmdbÎ"’RI–DPDÿÅéÅy®©¡ëß.……æÒµ-jóÃ?Ù··VcÕšâ{»o$Éc¹p«)ËH‹¬pÄñŒ€ K?è ¥OªÝÇ  k£is­4p43VØNâ„•e`Uˆ!´õèz~—«­i¶š|Û|»©î‘"}Ã+‡'#§<×xƒÃÚÎ-”¾:®¡$ÒÜM©jý‰µ'•Ö%R­r¢%Œ¬aX*Ž< føwK×ü;¦øbûRÒP¹±›VìEÕ°˜}¢ä˨IŽ"DQBìÂÈØQ‚´ê—>(ðõ¶5{{K‡M2…Ü—q¬;Ã+¼¹ ¬ÏPGjÑ·¼†æÞ;‹y£šT$i—÷†L¶I\¾¥§Ë'•9…Ö(ï!’FWJˆÄ!¸ãœVwˆ¼:öZ~’ú5µþ®šv¬º„¶wšœ—\)ãÂIs!ÁRë"©`»“±9 goi®é7vÖw6š¥ÄÎRÒH®–Ⴓ v£œ ð¬{ŽÿÄzž’½þµ¦Ú,3yî‘Iåù»O åüø<íùºs^m“¯Ûù!‹Aq*xšM_û;ˆD© ؽ©‹¼ÂÎe#~2Ì7f’ÇD×5?ŪêÚµ…¼_ý¨`–x¥1ÀºGÙãíb7 ‚Œ yunê_|=uá¿]x[XÒµKÃö1Ä.c•'òíÖQ"ˆßsEºEBÜ|Á—¶k­Ò|G¢jóÜA¤ë:v¡5«m¸ŽÚé%h£$©àõ¯<ñ—®\iŸô{}"y¿·ígšÂäMŠGm>a ë—Œœ•ÙŽ¬Ð6’Öþ>ѵ(¡ÓítkË9=ª´¶ mêF#—ôÈÈÝwƦë×E·†µ½^K[(¯nd±åbŽG•W‰%GfÌ2pŠÝsйŸ>‘ekºÁ­Á¸t–íXÉºí¦ ìûç’Gü1⳦ë¾ðÆ—y%Œpi‰`l#‚@–èŠ.u3&Õ)Œ*§Ì¤=XñO‡t{•¶Õõý+NãiV+«ÈâbŠ fˆ;@' Á©oüE¢Øj6Úmþ±§Zß]œ[[Mr‰,ÜãäRrÜúWŽü_K»â ¡Ãª&·f²Ãrn!_³£¬)£0|ù‘³Ç±[.äprjßü'¯^ø‹Ä&#®ÜØk¢ :]>4ˆ$J›dkˆÚTÃ)pÑÁbB† ÏæÓ|Í×6CþŸ­¿ôrU/;Þo&ëûŸù~·ÿÑÉ@.êåüUâ-rÇĺ^ hºv£u}guxï}©=¢F=º C)bMÀì1´ó]êä¼YàÝ3Äþ1ѵ-sJÒu]2ÃO½­¯íÖ|M4–¬ŽªÊW…†@OnÎN>7ñÅ场vŽÚåíÖ²,oŸDÒ'¾’Ãnž.ž$c ¬ÎX¡ å ÆçäÌNÁo~(C¨xëÄ1ßéÃĶW/w§ÍýŸûUm¤ ͆-¹e\´E¶œ0rËÁ76>&‚öÈiÖÚu¿‰S†Þ ŽÙto°,j¡v‚$…˜ž×Û@½ÐeX¶_E¬Z\ —/,GUÒ¤‰åáW(¸f zì¤3®ðߊ4›¤Ó&¸2ÚÃsi5´±î©1ʪÛN88d«ü;‘wcÙUjψ-·Šn¬õsD´ÒN—a{cw-Ú ¸k‰.Ú嶺í†2»¼NNF8‹ø‡Eðýޛ徿söÍ3PKß9VY…µÌ25¯ï_€¢6òÉ;~c¸†Ë?Y§éyã­K_Ôtš ¢ -äFÝ<жÖaÀ’,à•=‰Åu^"×mt? ê:ýÐ’[M>Î[ÉD 3²F…ÎÜ q’½eéž4‚kùl5'QðíÌv­vRh6<(Ê®âH¥t–L‚ÀÃŽk˜}YÙðøYí‹kMáOìó•rn>Éåìß¿ŒçóŠOxWR‹L¼Ômu;ïk‚(á¶mM-HŠ/>9$"Ç^gîÕ”¸?:&Nwzg‰4=OM—SÓu­6öÆÞmͽÒIm9u$ NM3KñG‡µ[y®4½{K¾†ijImw‹À3$”~O+zò(ôÏoâËÝRÓ Ì:\ñ.±=’½ÇÙn%–h¤û2ˆÐ2L¶îe°0­¼²Ô|]¬øî =)´K©ìtpbi i%hgžFY ù‘dÚ¸mãk!aƒŠöm]Òu»Cy£j–:•°b†kK…•7£r’3íW|Úó¿†ún£g©jú¦§º“Þ¥¼dê’X—o/Ìä-¢„8˜– €gµó½èsÃ':[[»Ÿý%iÖW…Nt|úÜÜÿè÷­Z(¢Š(¢Šò/ŽGý.Ün_½ÓýÑEú]¸Ü¿{¦9û¢ŠúªÁ‡¢8%ñ3Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|æ'øÒõ:èÿ `çßÝYYN%Ó£V³·Ú­4™Ú"P ÄxÉ8ç­ê©¦ÿÈMÿ¯ oý•¡ý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@Ʊàë}aa]^ÏúŠÂûâHòˆÛû˺ƒî*øÑïÀÀ¹Ó?ïì¿üj¶(  ì}Cþ~tÏûû/ÿ¨nô Bâ%íšbâD|ù’Ÿºá±þ«Ú·¨  ì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿÆ«bŠÇþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¶(  ì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿÆ«bŠÇþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¶(  ì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿÆ«bŠæ-<oiª\j–¶~‚þäb{¨‘ÖYGûN!Ëtîjÿö>¡ÿ?:gýý—ÿVÅ ÇþÇÔ?ççLÿ¿²ÿñª…4 Aoe¹ûf™ûÈÑ6ù’ñ´±Ïú¯ö¿JÞ¢ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãUSWðškfËVƒ@Ô-I aº*:­®ŽŠb[è7VðG¼šD0Æ¡4yUUG"Àÿì}Cþ~tÏûû/ÿ­Š(ƒ{ j6SÛ}³L_66MÞd§Ïúª›ûPÿŸ3þþËÿÆ«bŠÇþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¶(  ì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿÆ«bŠÇþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¶(  ì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿÆ«bŠæ/¼o¨[jÖ~º¼µ9·¸™ä„ç?#r¿…_þÇÔ?ççLÿ¿²ÿñªØ¢€1ÿ±õùùÓ?ïì¿üjŸm¥ÞÃyk<“Ø2Cq¬#’BÄ+«ã¹«E š2h¢M4Q@M4Q@M4Q@M4Q@Z®™uyªÛÝA-ª,PIyÎÃ%™ÆÕoîšgö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@²èw’ÄñK6•$n¥YZIH`z‚<®ETÑü#hm4{oéÖå‹ùVªñ&ãÔíX@Ͻt´P?ö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±EPÒlõ>È[ҥĒ>ï´Ì¿}Ù±$ôÝ­ÄËûºWþÍÿÆjZ(/ø™wJÿÀ¹¿øÍG%ÕÜv°ÜEdVâChnŠŒÜ†xùqÖ¬ÕCþB:Wý|·þ‰’€4¨¢Šò/ŽGý.Ün_½ÓýÑEú]¸Ü¿{¦9û¢ŠúªÁ‡¢8%ñ3Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|æ'øÒõ:èÿ TÓä¦ÿ×…·þ‰J·U4ßùé¿õámÿ¢R°4'¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ª:‡ü„t¯úùoý%^ª:‡ü„t¯úùoý%iQEä_ú]¸Ü¿{¦9û¢Š>9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ ©¦ÿÈMÿ¯ oý•nªi¿òÓëÂÛÿD¥`hOEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTuùé_õòßú&J½Tuùé_õòßú&JÒ¢Š(Ⱦ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4SMÿ>›ÿ^ßú%*ÝTÓä¦ÿ×…·þ‰JÀОŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨êòÒ¿ëå¿ôL•z¨êòÒ¿ëå¿ôL”¥EP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh*¦›ÿ }7þ¼-¿ôJUº©¦ÿÈMÿ¯ oý•¡=Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#¥×Ëè™*õQÔ?ä#¥×Ëè™(JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+Bz(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ £¨ÈGJÿ¯–ÿÑ2U꣨ÈGJÿ¯–ÿÑ2P•Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV†/Š|e¢xfxâÕÆ¬žg–Kmîæ"Ò?–‰æE(v|(RwËÇÌ2x{Å0kzýæ›kgw Vú}µâËuo-¼­çKsS ¨®˜6Ùýàã&‰v·7~´ŠÒÞ[‰[Òe+!Q·wlʪÌO` < ÇÕ<¤x⎳sâ =BÈhZ|6Ïs h¼Ï>ô¾Üü¾b†Œä|Êc¹w),y$ÖU#GYÉ]ŽI`Pwev‚rù×ÀM^)§èÚ¾£áK¯[k‘ËqàÏ¥Ô‹dòÌóÇ5ÓÍFpd#rù±˜«‘Œ°Ïkðv-ü7w Ñ Ò [çâ :]>;ˆö'ïVÖBZ Ë´õ*[ø©ÐxSYþÝÒæ½û7Ùü­BöÏfýÙû=Ô°nÎÞò·c¶q“Œ’ëYòÎÛ^·š£Í2@ ì"Ø=¸óa‰Å%ø À»€¾ÖMÖ³äxÃNðÿÙ·}·O»¼ó÷ãg‘%ºmÛŽw}£9ÈÆÎ‡S²˜6Êv…Øß2÷Ãø…¤Éq®xœÍáíNûÄ7^Oü"ºŒ6’H–x…q2¶ûg;î+¹X}î”ìuRÇR²¾º¿µµ›Ì—O¸×K´.Cr…Éü’Ær2>lu*ñƒa¾²ø¥®6-ƺ²´ÚÇÍ0’=.ÛË{n3»ÍR¹NI]§8À½a£Xi$ø‘=—ƒÙµ«ï6îÊk{·ûd-gl%¼EYîBT8mľ?Š˜™{,YÍï^–/h1ß…ðÞœî!- ¼’âú[’™ãÌ 92‡ÜçØiž)¹ð´²Ýiú³ÞMá ¥ò²Õ)òy‰Â㊚„?µµ[ø£AšëN¶Ó5’–÷ñ™Rä¼µ6Íœ©qÀVÏ1“Õr=N]JÊ-bÛH’l^ÜÛËs [OÍMÈÙÆ ÑŒ“»ŒàâÝx¾á› /øVÿZð¤·ÙK­iö“ɤ½ËÚãT´òHFhÑbY Hpª¬Nà'?Z´ÕßDZ_Ùxc캄^&€<ñø~î[¦´7j¯)ÔL‚?)¢f& ¬NÜ(]ÊîV’É4LòZËlÂG@’•$…b¡þRFÜá†@9jòÂjþ%Ò"ñ‡ÞëO†OJñÝÛ iuhžêÃkMΡ²†q‘Û|.³¸Ó¼#ýŸqöëm©jÛE2°+l·³ˆÝÎÏ(G´ô+·P#¨¢¼ÀÖšº|AðÍô>þÉyn'Xx~îcCk1 q},…nÿx±üáH-ƒ¸dØøàØt áf¡c Kc«4QC­Ì eŸË:lìÉpHÎÑ2Ä~‚¨Çž´òÈ·‘À-ehÞ7vœØ„'v[q#‘²AÚ Õæ_´ÍKPûØ4û»½Þ×íWÈ…Ÿ3Iö?.1÷Ûkm^§iÇCKwðçà ñI‚ @Ú<ÚMëja-osp’Úˆà–Y6¼äÉ?1þ€L¢¼GVÓnàð¶¤ÞxkíVjZ¼(×ú-Ö«´)zâÕ~É)`ÑÙ+pª¼?&‹§]7…¼)ÿ ·‡5-GF´—U†ãOþÊ–o-þÔE›µ¨29aWUåÂïC¸ðÔíÔWÏVZMõç€ü6ÐiÙðý¾©®}ªÊÿF›VØí/e¶ŠUy ¨”nùðXôŸéégáŸ[j¶šž£so¨\5”æÊKqg˜î¶4‘´ŒÑÄ!c ‡f9xò”Ó¼7¤èóèzt“éVÈö»»Û#31E$’FI&³õKô˸ŠÛZÃg<ídéú›@_•p@''Ÿ\Ï jút=„Rjv¼v£+ÝF¬¬#PAär(ñ§c|¶ZßZ\H—{ÊÃ:¹ åH2B“ÆHˆ  ÔQE1Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#¥×Ëè™*õQÔ?ä#¥×Ëè™(JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+Bz(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ Î×ô[ rÉm5s±$#[ÝKo"6ÊÉ+Ž ‘Z4PMM±Ò4Ë}3M¶KkKt IÑGãÉ=É<“É«tQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#¥×Ëè™*õQÔ?ä#¥×Ëè™(JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+B¿ˆ5;@Ò'ÕµkƒogÝî#g9f  *‚ÌK’HÅO§^Zê:}¶¡e2ÏksÍ «ÑÑ€*ÃØ‚ r>°×õïèº^-½•¾žßÚ—W¶\[É*Eµdq¼œ?ÊcŒ‘ó ä ð¶¤ïáïx‡N:žŸ¥x•çÁe$V’YËaxè¸,ûQ%o$¡fòÁÎð Ù+'BÖ´õMzËìÞWöF –{÷îówZÁ>ì`mÿ_·ýÜçœ6Ô<)ÕíSíÒønÞi.­òc̉l·=ÅOTxÎà½AÐ׌øƒÃ–6Öÿ ±ð›¦·«XÝÍesm¤6n¡“OZ4S Íp²1‹væb[iÉ5±­øB]]š/i£LžûÂú¤osG½V¶¯+ô2üóÌw¿“ƒLNª‘jVRë:DsföÚÞ+™¢Ú~Xåi6Î0ra`¼ã#>]ðkF¸°ñ3ÜG±‹û5¢»·‡Ã:bI6øÊ¼²M<‚y@ é»!˜—?(;±èºE¯ÇK½jçÃh×wÚM¢Ùji¥™6O»nPˆ˜ÄЮY—p £8ýTÖu+-G½Õõ)¼‹+y.neÚ[dh¥™° “€ À׉ü=ðþ©e¯iòø‚Ý¿´ Žäk¦ ܫ߫C a5ãLÑÜ¡}¬¡˜ *@]_ž Ô¼#â;Ä=Þ©îƒx¾µ~ÑýšÛ]£†^?×ÿªÛ)'6ÈÝ »VOŒõŸøG|­xƒìßjþÌÓç¼ò7ìó|¨ÙöîÁÆvã88ÏCIàõѓÖ‹ iGIÓFÿ&ÌéÍcå|í»÷,ªS-¸ýÑœädŸµÐ.­|'ã='JðíåËMá[øìºÖwÓ\ÂC+VöGÉ"HÁÁRùèè +Ì5ïK¢ëwxLþÌžûÂÚ¤Oq•I/C[ W•ú~yˆf;ˆßÉÁ¬ <=££øŠÇÁ>Ô´[k¿ÞÙ]ÁuföŸj¾‘TA‘ lŠ<àÒŒƒ½~cØÖ[c†þØ8©ñ—EŠö¦¥áM_ZÕï,JøvâÒÂ[*/²ª˜ÒDDDÂVe%K«€gî4W5ñ:ÖþóÁW¶ú|7¹’žvÛ,Öë2ãC‘ó4BEòMr:Æ¢Ká==tO j0xf=ieÕt´Ò¥…® òemJ‡d˜Y'ͱÎÖÎKÔê¥ö¥ecuaku7—.¡pm­Wi>d‚)%+8ù"äà|¸ê@>Mgá„ÕD³“Ãבxa¼_5Í¥…ųÆ-ìÿ³'_ž2Š&¸ß„`$U#æÅVÖ¼£Újˆº‡ƒï‡tŸ3Ájº;]¤Vsi Ê…Q‰ˆÝ°$"s“„³Á,’Kpk,+Ü© ªÛ×2JüÁNTñŒ5y6³á™5K¥£Ü\é’øÝn¥ yOðø{†3(’~RÙSœâ™ý•7†õ_:ËC¿M EñÚ`¶²³yV²èþ[4 %\Nùü \¢¼O^´×uÍ3ÄWÖzMõ¶ŸsâØnnmïô™¦7VK¦ÛǸÛåO5”‚¤‚•Òü8¸O ø]–è\É þ¶iÖ°èÒiË”F¥b·šFt‰H–VÉB«€2Õx¿[»ÑÓM·Ó´øoõ R÷ìv°Ír`‹pŠI˜»„r $.xRIÀï[µÄ|LðΛâ-{Á_Ú^´Õííõy¾Ñö‹5"…¬n³»p !‘aëÁapµÉÿdÉÿ FáÔÿá/ÿ„›íÛd“ÊþÎûNí¿iÆÏ/쿺ò·g;{Ðoáïkk–šgöw“öíÞyû¶ý‚ö;^›Fwù›úü¸ÇÍœ×Y^9âmÓ 2ÎòÒý¬<`–“¼l‹óê‘=±,Fð7©î ‘3P[ørÛQMBøgRÐm†„ÿhK»)-DÚšK–¬Cæº4rn”dËóÀÕExÿ‡í¼Y«x—L}gOÔSLÖ¯‡ˆ$Žâ2>Áä‡X­ŸûÅ“í<îI½+?áf­Ùx»G›US±›ûbh|5q ^Áó¯žvŠtó6ºíRrA=k]Ö³5MËìÞoö¾ ö{÷íò¶ÚÏ>ì`îÿQ·}ìçŒëYò{«êSyV6ò\ÜË´¶ÈÑK3aA'€ ª—ZÏ‘ã ;ÃÿfÝöÝ>îóÏßžD–é·n9ÝöŒç#:ñãú§…ìuø’Þ ¿ÓìgðÜV—ºsÁö­GäkR@<Ù¬„Ì3Ë!ÜHê…ü1¯ø—Âk„–? Ûèú®Û)ô—µ‚)ZâÏ $Šb%`¬¿6Òã8ÍzuáºÖ­èV“ØoдýKY†[;Ý}Q1xëdÆÖ9Ý*B·Ìd;y 5èÜê¹=ؤWœøcáΕ…>ùž’+¹Rµòau•ãþΙÚ;£ÔÆ'HWcü …\sŠ{mãºÞ.‘£kÚ=Ÿ…ĺ"xš?²Û>=Õ­½«XBÏ"ÚBA¸‹Ï2/–¿(v''º™©ÿÂ%=®« ÞMáÛo &Ó­ôi­’m<Ù!]›4Žb.Æ }×F gºQ^—5ç‡ÊÈÖ“-ÀŸ#y<ß3‘òmÎqŠ«ðïÄŸð’Þx¦x®ž{+=amlÃÀbhYZ»£+*°"W—!†A$t ýOÂ:×ö¦£¬éÒéïx·¦Mâ+Ýû8]jú¯Û’;wH“ìÖð…%•I`a<ãžpËð™øsûmt¶Íö‡¸6Ë'Øæû9˜ B}žVü‚6îÎAÏ ÷¼)e¬ *ãQ•n äV!–Îf„ÜÈÊ©šÇ¿,¹]Ù$àG­øÆ:Ÿˆ’æ}B íâ×­õžMrõGÙ£»I„cP ¨»C’ÛŠ‚B“¹rüH÷ÖZ忬ït;¡/‹-µQšOíß%乇f݉—>vüm]˜ÝHJÿ„ÏßÛk¤}¶o´=Á¶Y>Ç7ÙÌÀbìò·ä·vrÆxªrxïÃö wú£ÜÜÝ\_Gmž™pï'Ù® R¢ÆÙš2UI{ êð9]oÀž1ÔüD—3êOo½o¨¤òk—ª>ÍÚL ûeEÚ–ÜTË¿áoj:_ˆìu+™­+íÝÁ‹§j1ÜÅŒ¨èˆCz1nÐW¢j–Ö—©¦\-Ťà˜ä®pH ‚A óXºÏŒm4¿i>šÇP’MJÎk…¸‚ÊyR2’é)PšÅœ°í]Ø)¨¼5¦ëÚYé‘Ãi-´ú¾©{}8bDpMq<Ñ"‚Aó –,ðTwRlkÚ^®þ5еý2;ã´¶¹±»Šâv‰„SÉlæD*¹—ìÿpíwÞÄð_Ä 6äͦëŒÍ¨ÿnêæÆA ”½š8!3*yAüµŒ-¹¸êO:Ïã]ÊÎ)/u»–{ËÈ!K2âIìó´r)¹òÈÒci?0À`*‡ü"ü!ߨþu§Ú?á'þ×ݹ¶y?ÛmÛ¹ßå|¸Æ7qœsYš—õƒ¢C½®—u{§ª]G7ö¥ÍŒ°%Õä“¡I¡RÜ+.øÈÚÄp¹ ÎùõM=4S­=ÜI§-·ÚšáŽE·vòOA·šã¼Wãí=|'&¯¤_]Z ]OLK§»Óå–ÞkØcvÙ2U£2Àø9ÒǦ^¿‚WFÔ®-µKæÓE­Ì×1f+™<½¬Î€ýÖ9%AèH®/NðG‰²®¬®g´¶¶mKJº¶°þÔ¸¾Žµ¼I¦e–d7¢#j•üÄ€®ÏÆÞºÓµñ%´:h x·–“[Ia•&9Q_ ƒ´ót¥±ñ§‡/,d¼ŽöhÒ+¸,åŽâÎhfŽYäHâV‰Ð:†iWç8ÖO‹<¨êúÆ·mui º³Ò…Ÿ˜±qew=ÈóêØ¼kÁ'¸àf•ÿ„¼M¬E¬ê·ï¤YëRiimÒMn‚ÆäÜÆBˆÄ»³B|«Œg°6SYÞ9ñö›e$V•©Jº™×4ëe³‘¡>eä 4>iCÿ)Ÿ*p<‘Rçž.Ö5KUÕÿ±-$º“B0Áks,¢4±¿{™C;F»‹+ü§h烀7ê>ñiQ¢Ù6†Ú(ñ,ZÙ¹šiÎÏ·­Ü‘ya ä6𯿕,¿å )l·È#.ñ¿Œm<+ Û]ØêK«^IoºÒÊ{ƒH$”¶Ø£rÄ”Q³ƒ‚Ì2#lgÂ!¨ÿÂýçZ}£þí}Û›g“ý±öݹÛþWËŒcwÇ5©ã/W¾“BÔ4Hìf¼Ò5#x ¼¡Žekià+½QÊ'ÜÓ÷qß4 ĵø¦é¾)ñV™â FdKV­ÊØÈñÛ@öV® ²F…cS$’ÒÜgýgÆ^ÑõQ¦jïÀe)m,‘Àá ²*”ˆ1é¼®k\ð†£}á߈ÚtSZ,Þ'ó~ÄÌͶ=ÚtÃÌ;r>x˜ñ»å õàcxÇáÍö©â-nîÝ#½²×v¨§×õ $„ˆRs²u*ŠpÛ$#é>,ø†o øD]ÚÉw ÅÍý¥ŠMmb÷Oštœ"£r˜®àAm«‚X)pñ·†ôÁe§_ê÷Ò\›x “ÜØJ¬ž`ä¬J–îçø\GÉÆÑÒ¯øÛH¹Öôk{;G‰$TÓîÉ”6Ay î8’±°ädÍs*ðˆï¥ñF›¦É¥dø§oÛg¸’E¸´ÌÛÉå B²f8Ô®Y6±'š`/ü$zÏü'ÙŸlÿDÿ„¿û7Ëò“þ=ÿ°¾Õ³8ÏúïŸ9Ïlíâ¶¡øá9eºŽ=NCöhf˜¿ØæÊçÍ0¹M³mÁÈŒ±ªðˆê_ð˜ÿlùöŸgÿ„Ÿû_nößäÿcý‹n6ã™Î3¼ç?-Qðσ|Al|5¤êͤ6á…u´– §½g’Ý¨ÈæñHº÷ĺ­ÝÌúŒB;;Hï'Ø ²Ã&àµA'qFIÇ“'Žü?`Gª=ÍÍÕÅôvÑÙé—ò}šàÅ*,h™£%T‘÷°Î /Ѿëo¥ËsªÚM*^G¢rçÎÓíÌFÖ1‘˃m`xýôø'#=/…¼!¨é~#±Ô®f´x­ÿ·wf-þ¨Çs2£¢! èĸs@kxjÃUòÏo¨3-¢ÛZM<Ò•Îà"D2epw|¿.9Åhxo\Ò¼G£Ç«è·bîÆW’4”#(fŽFø` Œ3ßןjºuç‚!Ó¼E6¥ Ã-¶¡¬!ÛÛÚ´7÷r¹˜FÞ\Š#Œr¤YAä¿ðQ.×áÝ´×Ê‚k«ëṳ̂lˆé5äÒ£*·!Y]XΠexòÒ/é:ÇŠµÈ‡ÃúEíéû†Yo F$fO”¬’ U6±'k ½|7w§ê7Ë%´:j†¼–³ZÉ ‘•&9U_ ƒ´ã Ž3\v•ðëZµÑtÛ)ntæ{]/Ã6r‘Ê—ÓoyÈù:2° êz…ÖÇ|wâ+ÿÈ/#·‹PÓôÈ­Ùe‘f³º¸¸ùŠeRdŒnF ÷±‚ /‡9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ ©¦ÿÈMÿ¯ oý•nªi¿òÓëÂÛÿD¥`hOEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTuùé_õòßú&J½Tuùé_õòßú&JÒ¢Š(Ⱦ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4SMÿ>›ÿ^ßú%*ÝTÓä¦ÿ×…·þ‰JÀОŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¨êòÒ¿ëå¿ôL•z¨êòÒ¿ëå¿ôL”¥EP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh*¦›ÿ }7þ¼-¿ôJUºÊ·žþÚÖÞÕ´›‰ ¼1Á¾)c*á(a¹8#Œãžµ¡£EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½EQûeïýoïä?ü]l½ÿ -ïýü‡ÿ‹  ÔU¶^ÿÐ÷þþCÿÅÑöËßúÞÿßÈøº½Tuùé_õòßú&J>Ù{ÿ@[ßûùÿLQwyhïc-¬vîÒ3JèKŒ ¤ÿ{98éß<jÑEä_ú]¸Ü¿{¦9û¢Š>9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ ÏψçÓBÿÁ”ÿüZV†~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj3âùôпðe?ÿ#V…ŸŸÿϦ…ÿƒ)ÿùŒø‡þ}4/üOÿÈÕ¡EgçÄ?óé¡àÊþF£>!ÿŸM ÿSÿò5hQ@ùñüúh_ø2Ÿÿ‘¨ÏˆçÓBÿÁ”ÿüZP~|Cÿ>šþ §ÿäj’Øë>rý®ßIHyÜ`½–Gq…hÚÒ®Q@Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ¢Š+@¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¡âGxü;©I2:ÚJU”à‚àƒ@Ëâ)^)u­=$F*Ê× #¨<Óá%ðïý4ßü Oñ®Ê2F°AE`""( ª8Ð wžÞ´ÅÿÂKáßúi¿øŸãGü$¾ÿ æ›ÿ)þ5ÚyíëGžÞ´ÅÿÂKáßúi¿øŸãGü$¾ÿ æ›ÿ)þ5½ÿ g‡·¿áÿ„‡IþØÆ~ÁöÈþÑÓ?êó»§=*M#_·Õ5 fÊÝ&Y4‹Õ³¸. ío à® ÈÛ:prŒ`wþ_ÿÐsMÿÀ”ÿ?á%ðïý4ßü Oñ®ÓÏoZ<öõ /þ_ÿÐsMÿÀ”ÿžÃXÒoæ0Yjvw2…ÜR)•Ž=p u¾{zÖ_v•nÄ élQ»®fU8=²¬ÃèHï@Ï4PBóÏ"EjYÝÎÔ“Y¿ð’øwþƒšoþ§øÕË€­¬hÈê ã¬2 X%eãÙ•Hô Õ¿©ê¶z]„Ú†§{megïšââUŽ8×Õ™ˆ{šå?á%ðïý4ßü Oñ£þ_ÿÐsMÿÀ”ÿßÔ|Igeu¡ÀKÏý·vmm$‡k&áo5Æâs÷J@Ø#<•ìIÕõû}/PѬ®f“W½k;r€®¶óNKdŒ °8ã'%xÆHçá%ðïý4ßü Oñ£þ_ÿÐsMÿÀ”ÿí<öõ£ÏoZâÿá%ðïý4ßü Oñ£þ_ÿÐsMÿÀ”ÿí<öõ¬ßköúîŸ-í¢L‘Å{ufÂPßoq$x'‚Ñ1ðF@<wþ_ÿÐsMÿÀ”ÿ?á%ðïý4ßü Oñ®ÓÏoZ<öõ bÂþËP‰¥±»‚ê5m¬ÑHéÅX¨µÆÏ‹l˜ ØNâÛ$[sëÍMÇÔÔ´QEä_ú]¸Ü¿{¦9û¢Š>9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ (¢°4 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÎñGü‹Z§ýyÍÿ Ѫ$G“ú”q«;µ¤¡UFI%ÒÈÿ¼o©¦ïª_m†_ÞÂë$oó#©È`z{Š>Ò´w}ê—ÚV´­x¯öŽƒÿ cþ­ÐÂ}äìûßôßí|çí{~öß;÷¾wÝÛÎqW$¿¾¶ø©âxµKë/ÂRxŠ>îÎVÚïû7Oòâž@CE qÊýæÂ±Ppþ½ö•£í+@Ë»èßT¾Ò´}¥hw}cø½³¥B?éú×ÿG¥[ûJÖW‰çY,­¢»ß[m^ç«}“ôЗ'ΊéîOý&š¹¿ŠRêºÖ½¢øSDÓôýDÅ"êú½íã[ÂÐÄãÉFuŠC–›k´‚ pq]¢ë£¤Ìä*%ÛncÀ •WŸveÜÞµ>Ò´ ðNðiš?„¼)âûæÐ‡üUöyf±¿“ØÉ§^µ¹Yö£„|–“G•!ùqš›ZÔì&Ó<=%1áxÓmÿ?ßb°ä—cK¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¢ûM·üüEÿ}Š>Ómÿ?ßbŽIv ¢Z*/´ÛÏÄ_÷Ø£í6ßóñýö(ä—`º%¢¡7v£­Ì?÷Ø£ívŸóõýü{9vdyGÇ3þ•l7'ß<þÈ¢²?h/è:mÄ3jZ¤6ÖË(ŒL"yAvL…ùŽp­ùQ_IKN•8BR³²8Ý9I¶‘à_²ßŠ5õÕ/ü<59¿³-tùn €€|¹ Ñ)*ØÜ¾\íËŒ’kÝ[Õ€ÿù¿:(¬rÙ7GWÔ+¤§ Ó­êÇþ_çÿ¾©?¶µ_ùÿŸþú¢ŠôL¬ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈ?¶µ_ùÿŸþú£ûkUÿŸùÿïª( ,ƒûkUÿŸùÿïª?¶µ_ùÿŸþú¢ŠÈC¬j‡þ_§ÿ¾¨þ×ÔÏú|ö¨¢†4‘òoÅíwVÖ£nm³Ò[ÿÙgwenhywfar-5.12.0/doc/dialog/images/qt4-2.jpg0000644000175000017500000007565013142134462015540 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀ£†"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ú/GÑíæµÎMÃåg =MdxÏTðï†Ú)ôÑ{¨^1KKVÝ,Äu<Gv$]…ÿ {s²?¹ýï­|ßñ›[ÕtÿŒº¬Ð¸ŒÃkíŒíŒ s·êå«êrŒñøÇAJÉ_Ëc‚N1‚m£?ˆ¦Óáûf³ðýa±2Ig~·2Ä=Z<.@ï´±ö5ÙéÞÕôË}KMŽÂêÒáÅ*JpÃúcȯ–|IüZ‹0ô(¸þUé?²®§w=¿‰4ÙZÚÞé&ˆ@F6åƒåõêçy \º‚ªçÖÚ7ú“ BNÉÑý‹¦Ï•§ýü£ûLÿŸ+Oûù\'í«êz'Ã;CI¹k+¥¿±ŒM ႽÔJÃèT~µÎü1ñÿ‹žÏÅ×¾*´‹Z‹Lñ ÞŸ ¾MuÉ„ª®è”tsóõòn¬ÓµßÞl¡^Ç®ÿbéŸóåiÿ(þÅÓ?çÊÓþþW€j:×âf¡ho5$´“Å:u­½±ŸÊò#“OiYH9†JñÏ~+Ã?|s‹8dþ˻ԯ¼/¨j6Z—Úškˆ¤µÉw mÉ\ìÊqœO·—v?f»LbéŸóåiÿ(þÅÓ?çÊÓþþW‡Ü|\ñ†™¡xJÃû LÖµÝcImA¥¶3Iˆˆ„.ØÓ"V-ó`OqZúÅr×YÐëÃi&¥odó]Þ åË;a¡-‘/1# æŸ¶—ó1{5ØõŸì]3þ|­?ïåغgüùZßÊó_>%ñ‡ˆn|Y‰çÑ®#ÓµëË(DD±yr@1÷Y¾cÞ½C?ôÎ/ûèÕ*“j÷bqŠèCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾>y÷x­Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ(þÅÓ?çÊÓþþTÙÿ¦qßFŒÿÓ8¿ï£G<û¿¼-Ä?غgüùZßÊ?±tÏùò´ÿ¿•6éœ_÷Ñ£?ôÎ/ûèÑÏ>ïï G±ö.™ÿ>VŸ÷òì]3þ|­?ïåMŸúgýôhÏý3‹þú4sÏ»ûÂÑìCý‹¦Ï•§ýü£ûLÿŸ+OûùSgþ™Åÿ}3ÿLâÿ¾óîþð´{ÿbéŸóåiÿ+Ÿñö‰¥_Å¥ÚèÉ©ê“&ôµ·¸7»„_¯'°5Ógþ™Åÿ}ð{Ý_Rµñ—ˆæI<¹Þýã-Œˆv í·ÃÆÔÃSRMê{Ü?“Ã4Ä:nÚ+úž…s¬[éaeñ„#±²$º·ºûJEîàÀ{€k«IÑ&¶Yâµ²’)rÓô–KÉîÖ]£¹P¤œþê+Ò|)áÛ? x^ Ì,‹³I+ŸšY–sîMtTVxuOðDßÄãÚu§{1ñpb+!²1ó·ñ{QV¾9ô»q¹~÷Ls÷Eõ”êsSŒ»£ÆjÍ£Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|Î'øÒõ;(ÿ Ug½E‘Ñmu¶1BÐØM*înT Až ò+BÍWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠlšŒqFÒKgªÇÌï¦\*¨I%0½\¢¹Y|CâQ+ü8@Ço›;«ãý " P úšoü$^'ÿ¡=¿ð&Oþ3Z{)í"u”W'ÿ ‰ÿèOoü “ÿŒÑÿ ‰ÿèOoü “ÿŒÑì¤Ò'YErð‘xŸþ„öÿÀ™?øÍð‘xŸþ„öÿÀ™?øÍÊAí"u”W'ÿ ‰ÿèOoü “ÿŒÑÿ ‰ÿèOoü “ÿŒÑì¤Ò'YErð‘xŸþ„öÿÀ™?øÍð‘xŸþ„öÿÀ™?øÍÊAí"u”W'ÿ ‰ÿèOoü “ÿŒÑÿ ‰ÿèOoü “ÿŒÑì¤Ò'YErð‘xŸþ„öÿÀ™?øÍièúä·q¼wšN¡my °Ek,à)ÎÖʧCƒÔ•<‚fP”UØÔÓÑ4U_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"¤¢ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕPßĸ2Ûê)!wÏa4H 8³ $€9ä;Òý¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿGÛ‡ýõü\ÿñjŠ«öáÿ@ýcÿW?üEnôÖ?ðUsÿÄPª*¯Û‡ýõü\ÿñ}¸Ð?XÿÁUÏÿ@¨ª¿nôÖ?ðUsÿÄQöáÿ@ýcÿW?üEZ¢ªý¸Ð?XÿÁUÏÿIöø·lk}A$ ²Æö,Ž2UJe±‘œŒŒâ€-ÑU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµETñP[êUÁ1}‚o4œ6Í›¶ðFìc Œæ—íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕWíÃþúÇþ ®øŠ>Ü?è¬àªçÿˆ  TU_·úëø*¹ÿâ(ûpÿ ~±ÿ‚«Ÿþ"€-QU~Ü?è¬àªçÿˆ£íÃþúÇþ ®øŠµEUûpÿ ~±ÿ‚«Ÿþ"·úëø*¹ÿâ(ÕØdŽh’XdÀee9 B¥:€ (¢€ (¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAY–Ì#ÓìU@ìVçw1)5§XFM¶ÖC?òãmÿ¢R°4+ø¯Äx{EmN[;«ßßÁo½®Ï2I&™!EÙT|Ò/%€5VÏÅ.ß¼Ö4ïøG¢H.'•5KÛu˜G•™BÄò!ˆ ç.¥\©Ëø‘¦\kÞ]2Ù%rú–Ÿ,žTæX£¼†I\*B#T†ãŽq\¿Ž<xÖ—ÖºW÷‘Ïá}jÉMæ©%Ë››j"Œ=ÄŒÀ7’ÝÂŒpO Ï@›Æ¾†Íï&ñN‡²\f™µ‚,Àc-»À íëȨm|uá«Má(µ{#«Gm ÂÃö˜ó(HÁQwnfT{ p®Ñ«šñö“qÿ‹LÔþÓ§Ã4ÒiRÚ£[£„ù w»hÎÅÏñ £“Ká‹mwMñ]½Íþ’Œ—º…ÌöMÛÚOnnY×c0m„Ì¡v+tçšé¼Kâ¶Ñõk *ÛAÕu›ËÛyîV;쎉]˜Í,c¬É€2zúS-üyávÒ,õ+ÝjËJŽñÞ8ãÔgKy<Är’FUÈù•Ô©<ŠÄñ^‹ªêÞ7ÑoìumCI¶µÓo¡šîÏìå÷É-¡HÈ™a„Nr#`äg×ü9®i—QéÞµÔdÓd±1IshlZâyÞY^Oµ=Ú11“&ïÝ©;žN9€=?Vñ‹¤5ºêºÆŸ`n›e¸¹¹H¼Öô]Än<ŽE{â¯ØÙYÞÞøƒJ¶µ¾ m'šò4Žà0Øœ>Ac=Ey]•®­á­/J¸Ö48uY_ºuÜ2Þ@¿e’c9s#€Ñ1•C²n?»^Efé>ñxsš•¨Ö¤ü!c¦Ím§}ƒÌ• }âñ ì`à„d7÷±6FAªºÄ¹Ò/¬ÿ šÈðµ³i~Ò´Ç2î´²†æÊ$|¢ùœñÉg®JµªK6èg¬/ÿ šv—­þ™?ýtoç\×üJ|9gbb´ŽêïP½[+T–àA˜Èï™$ ì\FÜ€I;@‘]û§\×Vþuã[ýCFk[ QÞãδÕCyǃ•ÈVÚs´ä«Ç9Ùkúž›}ã 6ÇD‚͆â Cí0:œç cGÈÀà Îá‚yÁeão Ýi7ú ÔÞßNÁ¼–ÒÛI#*Z9U\nw›¶kˆ‹áÅõφõý5¢Ò¼=¢örÚišEÄße¶–Þ_7xu2™"±P€€›š’ÇÀ:›hÚÀš;[ Néìe‚I5»Ý[sZNgŒI%ÎF_ˆ£›–ÈÀ3²ÿ„ßãB}jK«¨mRqm²k ã¸2œmŒ@È%f!)$ŒŠ†ˆ>ƒG´ÕeÔ¤÷wc ‹9ŒÆä#¹„ÄÌY1|¬ äÔ€sµ7ź¾Ÿ¦jáÛëZN©öëkTº–KiÉ’)Œ0%e‘ƒþS·ƒ‚MM3Â:ÑÕtígQ—N[ÃâI5«è`wh£S§If‘ÄÅAr3Bçç8èÇ^mõ¿·Ê-c¸û##YÌ·|ŒEäó|ÎAÙ·vqŠ©ðçÄçÄמ*ž+·¸±³ÖVÖÌ=¹…¢AejªÁ„²Kãp$Ž€•©øKZþÕÔu­:]9ï‰#ÖlažGX¤Q§GfñÊÁIBq+ãä8<©ð÷I×4¹¼G{¯4]k·Û’;ã‰>ËoBYT–Î9ààghP´ñî´Î·÷ž²‹A}v].¡ÕK•u¼k4‘á0ª…iT}Ù€Àóƒ[º?ü7«ê‘é¶7³¼Ó+=»Ég4PܪŒ“ ®‚9F9ù¸ç¥axOáö›§Ï&¡« ï/ÿ¶/µTêW2ZÄf»šX™`fò•Õ$\œ6â ?1Àðï|e‹¼9«ëzŒ_ÙWrÍwrÚíìæ÷}¬ñ[WéíPp3†ÃvÖ¼'}®ZèÖº”¯wy¬‘fÎÛI¿·–MÃå’Y¬ÙÉÈŠC06óÔdþñΙª´–ú¶‘±ý£mŠÜ*ÌñÁw4(Â2ʼn)$Ž3’08æñv‡agök\Ðôõ2Ü*³ê)°¬Sylw6ß™I@ëüÛrp âcðÍì~kdÓ"]A¼_ý¨Ød bþ×ó¼ÝÙëönÙÝ—âájÞ*Òµ COO*ÍüC ‘Æ×ZŒrÀF 9hƒž: ƒ‚q@ΛÆ^6Óôv†ÂÏTÒ¤ÖP°·{'S0Š{¸avòÃá$$™Á9V‡ŠüL4Ó•t­CU¹ÔnþÉmmdbÎ"’RI–DPDÿÅéÅy®©¡ëß.……æÒµ-jóÃ?Ù··VcÕšâ{»o$Éc¹p«)ËH‹¬pÄñŒ€ K?è ¥OªÝÇ  k£is­4p43VØNâ„•e`Uˆ!´õèz~—«­i¶š|Û|»©î‘"}Ã+‡'#§<×xƒÃÚÎ-”¾:®¡$ÒÜM©jý‰µ'•Ö%R­r¢%Œ¬aX*Ž< føwK×ü;¦øbûRÒP¹±›VìEÕ°˜}¢ä˨IŽ"DQBìÂÈØQ‚´ê—>(ðõ¶5{{K‡M2…Ü—q¬;Ã+¼¹ ¬ÏPGjÑ·¼†æÞ;‹y£šT$i—÷†L¶I\¾¥§Ë'•9…Ö(ï!’FWJˆÄ!¸ãœVwˆ¼:öZ~’ú5µþ®šv¬º„¶wšœ—\)ãÂIs!ÁRë"©`»“±9 goi®é7vÖw6š¥ÄÎRÒH®–Ⴓ v£œ ð¬{ŽÿÄzž’½þµ¦Ú,3yî‘Iåù»O åüø<íùºs^m“¯Ûù!‹Aq*xšM_û;ˆD© ؽ©‹¼ÂÎe#~2Ì7f’ÇD×5?ŪêÚµ…¼_ý¨`–x¥1ÀºGÙãíb7 ‚Œ yunê_|=uá¿]x[XÒµKÃö1Ä.c•'òíÖQ"ˆßsEºEBÜ|Á—¶k­Ò|G¢jóÜA¤ë:v¡5«m¸ŽÚé%h£$©àõ¯<ñ—®\iŸô{}"y¿·ígšÂäMŠGm>a ë—Œœ•ÙŽ¬Ð6’Öþ>ѵ(¡ÓítkË9=ª´¶ mêF#—ôÈÈÝwƦë×E·†µ½^K[(¯nd±åbŽG•W‰%GfÌ2pŠÝsйŸ>‘ekºÁ­Á¸t–íXÉºí¦ ìûç’Gü1⳦ë¾ðÆ—y%Œpi‰`l#‚@–èŠ.u3&Õ)Œ*§Ì¤=XñO‡t{•¶Õõý+NãiV+«ÈâbŠ fˆ;@' Á©oüE¢Øj6Úmþ±§Zß]œ[[Mr‰,ÜãäRrÜúWŽü_K»â ¡Ãª&·f²Ãrn!_³£¬)£0|ù‘³Ç±[.äprjßü'¯^ø‹Ä&#®ÜØk¢ :]>4ˆ$J›dkˆÚTÃ)pÑÁbB† ÏæÕ R\ßi^×mÿ¢%£Î÷ªZŒ¹¼Óyérßú&Jnyµâ_¾‘«Øi6º«¬ÞÞÁ=ÂGbÖë²8Z%vc4±Ž³ zúV‡ï\Šü:uïè——PM>ÓM¾ŠI¬õ­e’[BŠZG`V99_”g´ÏüD]->Ú]OÃÚ Pu[´—ìJ-ĆxÒDÁ*›VB¿½‰·üàT²|PÐõ ˬxoTÓnþͬÚé÷J× '•š‚Ú´¤#üªÉ½ãbpFÖÆ2+&ÏÚ¯‹!¸ŠÚV±‡Å z²Ësæ9¶ÙŒÌÅØù¿)Ý–?xäsPK¢j÷~¿ðÕÖ‡#"øž;ñ$’ÂÐÝÛI«ý©Êå¾X‰Ü®«“Âî g¤èšþ®[=΋«Xjp#ìi-.eVô%IûW=ªüB¶Óu ^)´ jM?F™aÔ58–·€˜c˜±_7Í*©*Dd}(Ó,.-~ ëZ ·Xì®ôË’E*7Í—[ò9 ðòG#gGÁ×z®»âÆÕu}VÛGÕ5ßû>€Cy³¶‹·–e´n…C®BôÁÉîÿá%жÿ°ÿ·4Ïí\gì?jO?Î|¼îéÏJeÏŠ|;mªÿdÜkúT:ŽP}’KÈÖl»A°ß32Ç$€:×”ë:7nõè£KØí!ñ$ʶßÙñØ›qv®Òr¦äÌcÜ_•É/‚Àíh^wcç¡æ×ŒCá=z/IÉ×n,ŸÄ?Úé,ééhŸæ®òÑý«r¯ÈT U8±ç{Ð ž_ø¨lÏý:Oÿ¡ÃWüÚÚ_øžZœÿË´ßúUwÎ÷  ýsÅ‹§êßÙ6Z.©­_¬ s,"!äÄÌʬÍ,ˆ¿1GIÚx©`ñ5»‹9n¼­2)à–G‹P˜ArŒ’Gda—/‚á° GÁÁ·ŽìEÖ­×ü"z¶¥"Áå¥ö‘ª­Ì1%™b%:ó7$ü£¾d_ŠWû&ïTÓWYž T³šî#!Œ÷6¦ec€ßºŒ‡p;òHÛøËÆÞð¬3뺥­§q ’\FŽ|ÉV=øv"î,Dz«Õžÿ4[oÝYê:æ‰i¤.ÂöÆî[´Ap×]µËmuÛ evÿxœœŒqþñ‹áû½7Ë}~çíšf —¾r¬³ k˜dk_Þ¿Dmå’vüÇq –~³OÓóÇZ–¿¨é(/4D[ÈŒ%ºy¡m¬Ã$YÁ*{Šê¼E®Úè~Ôuû¡$¶š}œ·’ˆ@gd ¹ @ã$zËÓVô5äQè)žßÅ—º¤7¦˜t¹â]b{%{²ÜK,ÑIöe d ™mÜ0Ë`a[ye¨ø»YñÜzSh—SØèàÄÓ@ÒJÐÏ<Œ²ó" ɵpÛÆÖBÃìÚ.»¤ëv†óFÕ,u+`Å Ö— *nFå$gÚ®ùµç ôÝFÏRÕõMN=u'½KxÉÕ$±.Þ_™È[E8p71,@(Ïkç{Ð"ç†Nt¶>·w?ú>JÓ¬¯ œèùõ¹¹ÿÑïZ´QEQEä_ú]¸Ü¿{¦9û¢Š>9ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ Á‡O¿º²²œK§F­goµZi3´D ˆñ’0qÎ3[ÕSMÿ>›ÿ^ßú%+C;ûPÿŸ3þþËÿƨþÇÔ?ççLÿ¿²ÿñªØ¢€1ÿ±õùùÓ?ïì¿üjì}Cþ~tÏûû/ÿ­Š(ûPÿŸ3þþËÿƨþÇÔ?ççLÿ¿²ÿñªØ¢€9cÁÖúº½Ÿ‡u…÷Ä.‘å·÷—t'ÜUñ£ßs¦ßÙøÕlQ@ÿØú‡üüéŸ÷ö_þ5QÝhš„–²Æ.tß ñ,¹ä×:Ü¢€%º”Ku,«®å†zàš‹&Š(É£&Š(É£&Š(É£&Š(É£&Š(É£&Š(ɬ{½&ò}f{Èf³Hä†4gpr¥ó÷Q¿¼+bŠÇþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¶(  ì}Cþ~tÏûû/ÿ£ûPÿŸ3þþËÿÆ«bŠÇþÇÔ?ççLÿ¿²ÿñª?±õùùÓ?ïì¿üj¶(  ì}Cþ~tÏûû/ÿªš¿„ÓX³6Z´¡jHc ÐyP‘ÐíhˆÍttP3ßAº·‚8-äÒ!†5‘£Êªª8§ÿcêóó¦ßÙøÕlQ@ŒÝP¹²žÛíšbù±²nó%8ÈÆÕTߨú‡üüéŸ÷ö_þ5[P?ö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±Ecÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5[P?ö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±Ecÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5[P1}àÛ{ýBÛP¾³ðíÕå©Í½ÄÈï$'9ùÕü*ÿö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãU ƨK-¼ŸlÓ“!|y’óò2ãýWû_¥oQ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãTcêóó¦ßÙøÕlQ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅý¨ÏΙÿeÿãUA¼nÚÊëMgáÓ©ªl[Âç…Æ1¿ÉÝŒvÍtôP3ûPÿŸ3þþËÿƨþÇÔ?ççLÿ¿²ÿñªØ¢/ j {ÏÛ4ÏÝÆé·Ì—ÅNÕ³úÔߨú‡üüéŸ÷ö_þ5[P?ö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±Ecÿcêóó¦ßÙøÕØú‡üüéŸ÷ö_þ5[P?ö>¡ÿ?:gýý—ÿQý¨ÏΙÿeÿãU±EbË¡ÞKÅ,ÚT‘º•ei%!êò¹SGðŒZ5¡´Ñí¼?§[–/åZ«Ä›Sµa>õÒÑ@ÿØú‡üüéŸ÷ö_þ5Gö>¡ÿ?:gýý—ÿVÅCI³Ôtû!lJ—Hû¾Ó2ý÷fÆ<“Óv? µÿ/îé_ø7ÿ©h ¿âeýÝ+ÿæÿã5—Wp]ÚÃq‘[‰ a¡¸v*B3r5ãåÇZ³Tuùé_õòßú&JÒ¢Š(Ⱦ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4SMÿ>›ÿ^ßú%*ÝTÓä¦ÿ×…·þ‰JÀОŠ+']Ö³5MËìÞoö¾ ö{÷íò¶ÚÏ>ì`îÿQ·}ìçŒ j+–ðßÄ xŠâÎ 'Qšc}–ÎI,g†+… ¸ˆät ì%A,0r ;Âþ>𧉦¶‹FÔ¥œÝÂgµy,æ….[ËyUÊän I^r tôVx¯B.“¬-Ô²Ùë‰4ó¬²=À6ïpƪ_&(Ý‚ã'q¸€bøuâ˜éÒÍhfðÇ“öÖFm²mÓ§¶>_Ë“óʧ¿('¯œø9£ø“QðwÛ½Pi0éz>™Ý«ÛJí=ÃIfbEt(0©3g û˜òô¯[¢ká¿ øÆÈø'K¾:Ò|).xn%k‹¸ÖÊ{hØ¡Œ,mûÅ%w09ô»q¹~÷Ls÷EõT?ƒDpKâgªhç:=¯Ì­òžƒÞ¬ÕmçGµù•¾SÐ{ÕšùÌOñ¥êuÑþ ©¦ÿÈMÿ¯ oý•nªi¿òÓëÂÛÿD¥`hORèŸò5Xÿ× ¿öJŠ¥Ñ?äj±ÿ®씆v”QE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@yæ›ÿïÿ]åÿÑ^‡^y¦ÿÇ»ÿ×yôcSBeª£¨ÈGJÿ¯–ÿÑ2U꣨ÈGJÿ¯–ÿÑ2S¥EP‘|r?évãrýî˜çîŠ(øäÒíÆåûÝ1ÏÝWÕPþ =Á/‰ž©£œèö¿2·Êzz³U´s׿VùOAïVkç1?Æ—©×Gøh*¦›ÿ }7þ¼-¿ôJUº©¦ÿÈMÿ¯ oý•¡=K¢ÈÕcÿ\&ÿÙ**—Dÿ‘ªÇþ¸Mÿ²RÚQE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEçšoü{¿ýw—ÿF5zyæ›ÿïÿ]åÿÑM –ªŽ¡ÿ!+þ¾[ÿDÉWªŽ¡ÿ!+þ¾[ÿDÉLF•Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV„õ.‰ÿ#Uýp›ÿd¨ª]þF«úá7þÉHgiERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWži¿ñîÿõÞ_ýÕèuçšoü{¿ýw—ÿF54&Zª:‡ü„t¯úùoý%^ª:‡ü„t¯úùoý%1TQEyÇ#þ—n7/ÞéŽ~袎Gý.Ün_½ÓýÑE}UàÃÑø™êš9Îkó+|§ ÷«5[G9Ñí~eo”ôõf¾süizt†‚ªi¿òÓëÂÛÿD¥[ªšoüôßúð¶ÿÑ)XÔº'üV?õÂoý’¢¨ˆºŠöË9ÒbWP^=ã qéHg}EqÚž ÿ ·þöTjxƒþ‚6ßø ÿÙQ`¹ÚQ\_ö§ˆ?è#mÿ€Ÿý•Úž ÿ ·þöTX.v”Wý©âúÛà'ÿeGö§ˆ?è#mÿ€Ÿý• ¥Åÿjxƒþ‚6ßø ÿÙQý©âúÛà'ÿeE‚çiEqÚž ÿ ·þöTjxƒþ‚6ßø ÿÙQ`¹ÚQ\_ö§ˆ?è#mÿ€Ÿý•Úž ÿ ·þöTX.v”Wý©âúÛà'ÿeGö§ˆ?è#mÿ€Ÿý• ¥Åÿjxƒþ‚6ßø ÿÙQý©âúÛà'ÿeE‚çiEqÚž ÿ ·þöTjxƒþ‚6ßø ÿÙQ`¹ÚQ\_ö§ˆ?è#mÿ€Ÿý•Úž ÿ ·þöTX.v”Wý©âúÛà'ÿeGö§ˆ?è#mÿ€Ÿý• ¥Åÿjxƒþ‚6ßø ÿÙQý©âúÛà'ÿeE‚çiEqÚž ÿ ·þöTjxƒþ‚6ßø ÿÙQ`¹ÚQ\_ö§ˆ?è#mÿ€Ÿý•Úž ÿ ·þöTX.v”Wý©âúÛà'ÿeGö§ˆ?è#mÿ€Ÿý• ¥Åÿjxƒþ‚6ßø ÿÙQý©âúÛà'ÿeE‚çiEqÚž ÿ ·þöTjxƒþ‚6ßø ÿÙQ`¹ÚQ\_ö§ˆ?è#mÿ€Ÿý•Úž ÿ ·þöTX.v”Wý©âúÛà'ÿeGö§ˆ?è#mÿ€Ÿý• ¥Åÿjxƒþ‚6ßø ÿÙQý©âúÛà'ÿeE‚çiEqÚž ÿ ·þöTjxƒþ‚6ßø ÿÙQ`¹ÚQ\_ö§ˆ?è#mÿ€Ÿý•Úž ÿ ·þöTX.v”Wý©âúÛà'ÿeGö§ˆ?è#mÿ€Ÿý• ¥Åÿjxƒþ‚6ßø ÿÙQý©âúÛà'ÿeE‚çiEqÚž ÿ ·þöTjxƒþ‚6ßø ÿÙQ`¹ÚQ\_ö§ˆ?è#mÿ€Ÿý•Úž ÿ ·þöTX.v”Wý©âúÛà'ÿeGö§ˆ?è#mÿ€Ÿý• ¥Åÿjxƒþ‚6ßø ÿÙQý©âúÛà'ÿeE‚çiEqÚž ÿ ·þöTjxƒþ‚6ßø ÿÙQ`¹ÚQ\_ö§ˆ?è#mÿ€Ÿý•Úž ÿ ·þöTX.v”Wý©âúÛà'ÿeGö§ˆ?è#mÿ€Ÿý• ¥Åÿjxƒþ‚6ßø ÿÙQý©âúÛà'ÿeE‚çiEqÚž ÿ ·þöTjxƒþ‚6ßø ÿÙQ`¹ÚQ\_ö§ˆ?è#mÿ€Ÿý•Úž ÿ ·þöTX.v•çšoü{¿ýw—ÿF5_þÔñým¿ðÿ²ª–p´lwÅ™‰ –bzdúÐÕGPÿŽ•ÿ_-ÿ¢d«ÕGPÿŽ•ÿ_-ÿ¢d¦#JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+Bzd²G•Õuf8ŸMÿ—‹OúûƒÿF­Aöûùý¶ÿ¿«þ5,3E2–†T‘AÆQü+½®/Tÿö¥ÿ]“ÿDÇHdU VÓËqK%´‚)Õ1‰Ê«…`>éÚêØ=˜„W  éRx±õM_Q×5Ëk˜u[»Khlµ-ã´H&h“÷hBHX ùó¿¦0+ûUñ>¨|Mñ–ÚAÓtEonmî`‘æ¹évo"#«ªÇò(Á*ù'äÖ¨¯.ñ‡Ä=sOñ6±c£ésÝÅ¢´I%´Z õä—ÎÑ$¬©<*b„í‘@ß»'¨Qƒ],·ˆµOjVzYÒ Ó4{¸mnÖæ){†x£™Ê2°…IWWÜÀ—­tÖ—V×q4¶—\F²iNT´9ÛÁÍcÄšwƒ¾Új§I›KÖ4È--RÚ'YíÚ;3*3¹r²H[8TÚÄ›­=nŠóŸø·ÅëáÍFèhɧx©û:( ÍdÆÞKˆŒ¤É‰AHÈ`¢<1Ö®øÆ×ž)×nt´³¶µ:@hõF/¼K6÷Œ}œƒÌyÉv¶cpm ÎæŠã~*Àɦé:¤š…µÍ®·¦D†ÚúhQÒkûhäY$ ¡+‡ Œœc&»*b (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ £¨ÈGJÿ¯–ÿÑ2U꣨ÈGJÿ¯–ÿÑ2P•Q@EñÈÿ¥ÛË÷ºcŸº(£ã‘ÿK·—ïtÇ?tQ_UCø0ôG¾&z¦Žs£ÚüÊß)è=êÍVÑÎt{_™[å=½Y¯œÄÿ^§]á ªšoüôßúð¶ÿÑ)Vꦛÿ }7þ¼-¿ôJV„ôÉC*¼r$ŠYr2¬ddzzÓè  ¿Ûz×üôÓÿðÿøåQ-4·3ÜÜÔõ¯î¬îkŒ•‚úx"¹ÀyÑÆê’ðùÁàÒ®ÝøsF»±×,®,÷ÛëÛ¿´ÓÍqçî nAÊþî4_—3Ô“ZÔSÏë~ðþ±¨µýõ¤þ|ˆ©7‘y4 p£¢Ê‘º¬ dŒ8aŽ*[ß èwšôzäÖ²‹ô1’ñ]KJc9C$jÁ$*yÁÇjÛ¢€1"ð¦ö“ÅaåÍgwqw©3‡I'‘¤›æ ’®îÄ¡ÊôãŠ~ð…<35´º6›,ÒªIy4Én„ÞZHì¨[qP s’rk§¢€9½?ÀÞ°¿–öÎÂh¦t•“l·ÿ¬òP¾Ø w1…5¡iáíÒm:kKíßM­­LD¦Èˆ¡üËòƒ†ÈȨÍjQ@~,ð®âˆ­âÖ ÑÛH%mu;›Q¼2º³d]ÅY”¶v‘‘ƒZÖVñÚYÃiJÑÃƦYZW Îä³9f$ž¤“SQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@QÔ?ä#¥×Ëè™*õQÔ?ä#¥×Ëè™(JŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+Bzd®P.ØÚFgTU\d³0P9 u"ŸMÿ—‹OúûƒÿF­'û­ÿ@‹ŸûûÿP –Xf…á–& èåI¨aÊ’:]Ýqz§ü‡µ/úìŸú&:@bj~%ðæ—¨Ã¦êzþ•c{><›k‹Èã–Lð6«OáRé:½¶¥«ÙÀ’¬šUâÚN\ÌN àœ³(çƒÆ0O¡ë>ПÄ:_‹î,-ukÍVîI¡¼@d¿åcoå©Ì¢aC`©\db±üQa,6ÿ¼Sk«êö—ÚEË]Y¥µô‘B²Å¤ÚHãR]ÄC†É ËExÄ­cÄPxßZ€k:L°?°M߈.l•Ç”¬YmcÖï2™©%° ^õ3_Ø·Äëë_ø‹PÓ¯"»µ] Æ;Ù!Žêe˜D§lù”̸6ÅP~^´ÛxW¶Öì%¼´IR8ï.m”wÁ<9àž FÄ{xgW¶ñ†ôÍzÍ%ŽÛR³Šî”ê’ u  œõ¯,øwyzž(k]vöæÃHmwWþÅ[y pÞ\hÝy‰;‚ qÎÈÊÃ'æa„Ìø¨X3áí¶âMKR¾—MT×,%¼ycµm V0“¶ ²ˆQ …Þ¬OÍÖ€=ÞŠñ_ë1Ï{ |O©Ï¬ÜÅp|_e6¡&Í=¼Œìc-‹]“Ñ „Ê’~nµ¹ðëUׯ%»½ŠÌÛ»x|ȾQÔ"ÜÀËpæaÂ# |¬_nìˆÀ;­kÄ^Ñ%‚-k]ÒôÉ.![»¸á2E F Ó9¡¯<ø£ã èZ¢h3Ýø~Ó_Õlö™õYbŠ(-w0ß)r7¨bûb,Ùû£sÃÂ6Ö^Ò,ô«Á}§ÛØÃ­È”H&‰P}ÆÈäuÍ05(¢ŠQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGPÿŽ•ÿ_-ÿ¢d«ÕGPÿŽ•ÿ_-ÿ¢d  *(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÕM7þ@úoýx[蔬 钢Ȼ[pÁ ±R9Èä }QÖõm/CÓdÔõF×N²ˆ%ÅÌ«k’ËIñ  Ÿ¾ÿŸíCÿeÿâ©#@…ÛtŽÎÛ™¤‘‰À’Ièrðµ>ÐýáŸüÅÿÅQÿ Sá§ýÞÿÁœ_üU!•ÆÿÂÔøiÿC÷†ðgÿGü-O†Ÿô?xgÿqñTÀ쨮7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øª?áj|4ÿ¡ûÃ?ø3‹ÿŠ ÊŠãáj|4ÿ¡ûÃ?ø3‹ÿŠ£þ§ÃOú¼3ÿƒ8¿øªì¨®7þ§ÃOú¼3ÿƒ8¿øªìT†PÊAdÞ Tuùé_õòßú&J½Tuùé_õòßú&JÒ¢Š(Ⱦ9ô»q¹~÷Ls÷E|r?évãrýî˜çîŠ+ꨈà—ÄÏTÑÎt{_™[å=½YªÚ9Îkó+|§ ÷«5ó˜ŸãKÔë£ü4SMÿ>›ÿ^ßú%*ÝTÓä¦ÿ×…·þ‰JÀО°0²|cðÚJ«"C¢j—1+Œ„˜McÑÂM*í‘ÇF9ß®xœ|dÐOýKš·þ”é´†z'žÞ´yíëU7Ѿ˜‹~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFúÈÑ~!x'[¿M?EñŸ‡u;Ç¥½¦§ Ò698UbMt^{z×Ì×›Uð7Ã=þoë‹m&ŒN‰¦ZãRƒËò±¾O>LyDùqåQÆW8®ºëÆðÚè?ðOâ)“ÄßðœG Z›†ûRÚÉ®©@FwZÙ•A?!V ߆{/öÞöOµÿiYýŸíeó|õÙçy¾O•œã›û½½w|½x«ž{z×ͧJðÄ? õ«&ÖµAq¦xÚ9õH›ÄWfK+q®¹I\³03K¿ÅD¤—@ã©ñ–« Å¬[A«xÏSÒ|6¾‚m îÓW•~Û9i°˜6nd‹r¨ÌûüÆ8læ€=§ÏoZ†óQ·³‰e»º†Þ6‘"V–@€»°TPOvb¤Zò ÃXño‰'Ö:ø£®§tEö³áûY¤¹—8”ÅdÃp)ß‹èšåí„ñ™ãE‘ã 7*±`¬GP V÷Ú} R±ñ&•z°µ¶¡ Çs(ŠÖBv¥Û|áä1âaåå·FX|¯ÎQ€ùükZþµªM¬$WVw~1þpŠú$ÐüÖ†6}Q³ßÊ_Z¿â»}%ÔcñBj—‘G£›é!f¬âÙØPÂ#“ÍÛ翆°~ër\ëÞò|Gª_øŽïÎÿ„·MšòIc²Ä3f;mö\£M¡w+½Öéç·­{zׇ|:ŽÿOÐþëâ-~þóÄ1E§öíJYâ™_Kžä-Ø¢²¼)†PŒî,I5ìÛèoÏoZ<öõª›èßL ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zÑç·­TßFú·ç·­{zÕMôo  ~{zטü) „æ·BAm¬ê¶ÐF£ 1ê j:***ª¨à` ô=õçŸ ÿäY½ÿ±ƒZÿÓÕ :º£¨ÈGJÿ¯–ÿÑ2U꣨ÈGJÿ¯–ÿÑ2SJŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐUM7þ@úoýx[蔫uSMÿ>›ÿ^ßú%+Bzæ/¥Ko‹~žfÇ.‰ª[FÌpfšÆEŒîR)X/]±¹è§=RÖ´/[Ó¤Óu:ÓQ²”ƒ%½Ô+$m‚ʰ à€ ØûJÑö•®þÃ_ú<-ÿ‚˜?øš?áWü5ÿ¡Âßø)ƒÿ‰ guö•£í+\/ü*ÿ†¿ô x[ÿ0ñ4¯økÿB…¿ðSÿ@×ÚV´­p¿ð«þÿÐáoüÁÿÄÑÿ ¿á¯ýÿÁLüMw_iZ>ÒµÂÿ¯økÿB…¿ðSÿGü*ÿ†¿ô x[ÿ0ñ4Ý}¥hûJ× ÿ ¿á¯ýÿÁLüMð«þÿÐáoüÁÿÄÐuö•£í+\/ü*ÿ†¿ô x[ÿ0ñ4¯økÿB…¿ðSÿ@×ÚV´­p¿ð«þÿÐáoüÁÿÄÑÿ ¿á¯ýÿÁLüMw_iZ>ÒµÂÿ¯økÿB…¿ðSÿGü*ÿ†¿ô x[ÿ0ñ4Ý}¥hûJ× ÿ ¿á¯ýÿÁLüMð«þÿÐáoüÁÿÄÐuö•£í+\/ü*ÿ†¿ô x[ÿ0ñ4¯økÿB…¿ðSÿ@×ÚV´­p¿ð«þÿÐáoüÁÿÄÑÿ ¿á¯ýÿÁLüMw_iZ>ÒµÂÿ¯økÿB…¿ðSÿGü*ÿ†¿ô x[ÿ0ñ4Ý}¥hûJ× ÿ ¿á¯ýÿÁLüMð«þÿÐáoüÁÿÄÐuö•£í+\/ü*ÿ†¿ô x[ÿ0ñ4¯økÿB…¿ðSÿ@×ÚV´­p¿ð«þÿÐáoüÁÿÄÑÿ ¿á¯ýÿÁLüMw_iZ>ÒµÂÿ¯økÿB…¿ðSÿGü*ÿ†¿ô x[ÿ0ñ4Ý}¥hûJ× ÿ ¿á¯ýÿÁLüMð«þÿÐáoüÁÿÄÐuö•£í+\/ü*ÿ†¿ô x[ÿ0ñ4¯økÿB…¿ðSÿ@×ÚV´­p¿ð«þÿÐáoüÁÿÄÑÿ ¿á¯ýÿÁLüMw_iZ>ÒµÂÿ¯økÿB…¿ðSÿGü*ÿ†¿ô x[ÿ0ñ4Ý}¥hûJ× ÿ ¿á¯ýÿÁLüMð«þÿÐáoüÁÿÄÐuö•£í+\/ü*ÿ†¿ô x[ÿ0ñ4¯økÿB…¿ðSÿ@×ÚV´­p¿ð«þÿÐáoüÁÿÄÑÿ ¿á¯ýÿÁLüMw_iZ>ÒµÂÿ¯økÿB…¿ðSÿGü*ÿ†¿ô x[ÿ0ñ4Ý}¥hûJ× ÿ ¿á¯ýÿÁLüMð«þÿÐáoüÁÿÄÐuö•£í+\/ü*ÿ†¿ô x[ÿ0ñ4¯økÿB…¿ðSÿ@×ÚV´­p¿ð«þÿÐáoüÁÿÄÑÿ ¿á¯ýÿÁLüMw_iZ>ÒµÂÿ¯økÿB…¿ðSÿGü*ÿ†¿ô x[ÿ0ñ4Ý}¥hûJ× ÿ ¿á¯ýÿÁLüMð«þÿÐáoüÁÿÄÐuö•£í+\/ü*ÿ†¿ô x[ÿ0ñ4¯økÿB…¿ðSÿ@×ÚV´­p¿ð«þÿÐáoüÁÿÄÑÿ ¿á¯ýÿÁLüMw_iZ>ÒµÂÿ¯økÿB…¿ðSÿGü*ÿ†¿ô x[ÿ0ñ4Ý}¥hûJ× ÿ ¿á¯ýÿÁLüMð«þÿÐáoüÁÿÄÐuö•£í+\/ü*ÿ†¿ô x[ÿ0ñ4¯økÿB…¿ðSÿ@×ÚV¸„¬$ð|—(CCs¬j·0H9Yb“P¸’9ôedeeaÁ àÓáW|5ÿ¡Âßø*ƒÿ‰®¹@U  ¨jŽ¡ÿ!+þ¾[ÿDÉWªŽ¡ÿ!+þ¾[ÿDÉ@*(¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­£œèö¿2·Êzz³_9‰þ4½Nº?ÃAU4ßùé¿õámÿ¢R­ÖU¼÷öÖ¶ö­¤ÜHmᎠñKW¡C ÌÈÁgõ¬ *Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐê*Û/è {ÿ!ÿâèûeïýoïä?ü]^¢¨ý²÷þ€·¿÷òþ.¶^ÿÐ÷þþCÿÅÐ꣨ÈGJÿ¯–ÿÑ2QöËßúÞÿßÈøºb‹»ËûG{mc·v‘šWBX”e'ûÙÉÇNùàVŠ( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐV~|Cÿ>šþ §ÿäjТ°43óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#QŸÿϦ…ÿƒ)ÿù´(  üø‡þ}4/üOÿÈÔgÄ?óé¡àÊþF­ (?>!ÿŸM ÿSÿò5ñüúh_ø2Ÿÿ‘«BŠÏψçÓBÿÁ”ÿüF|Cÿ>šþ §ÿäjТ€3óâùôпðe?ÿ#T–ÇYó—ívúJCÎãì²8ãŒ+@ óþÐþ•rŠ(¢Šò/ŽGý.Ün_½ÓýÑEú]¸Ü¿{¦9û¢ŠúªÁ‡¢8%ñ3Õ4s׿VùOAïVj¶Žs£ÚüÊß)è=êÍ|æ'øÒõ:èÿ QXQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@U;ÇáÝJHÙ‘ÖÒR¬§‡Ž_è1JñK­ié"1VV¸PAAæ›ÿ /‡è9¦ÿàJvQ”‚5‚Ò(£@UQÀ€S¼öõ /þ_ÿÐsMÿÀ”ÿ?á%ðïý4ßü Oñ®ÓÏoZ<öõ /þ_ÿÐsMÿÀ”ÿ?á%ðïý4ßü Oñ­ïøK<;ý½ÿÿü$:OöÆ3ö¶GöŽ™ÿWÝ9éRiý¾©¨k6Vé2ɤ^­ÁpgkxgpNFÙÐsƒÜc€s¿ð’øwþƒšoþ§øÑÿ /‡è9¦ÿàJvž{zÑç·­qð’øwþƒšoþ§øÔöÆ“1‚ËS³¹”.â‘L¬që€k­óÛÖ°üjû´«v oKûbÝs2©Áí•fBGz†y¢‚žy(£RÎîp¤šÍÿ„—ÿôÓð%?Æ®\mcFGPÈo•aJÁ+/̪G¡ö­ýOU³Òì&Ô5;Ûk+8|׬qƾ¬Ì@ÜÐ)ÿ /‡è9¦ÿàJð’øwþƒšoþ§øÖþ£âK;+­^í»³ki$;Y7 y®7ŸºRÁä¯bH~¯¯Ûéz†ep“4š½ëYÛ”…u·šr[$`mÇ9+Æ2@;ÿ /‡è9¦ÿàJð’øwþƒšoþ§ø×iç·­{zÐÿ /‡è9¦ÿàJð’øwþƒšoþ§ø×iç·­føs_·×tùomdŽ+Û«6€û{‰ sÁ<‰ˆï‚2às¿ð’øwþƒšoþ§øÑÿ /‡è9¦ÿàJvž{zÑç·­söZ„M-ÜQ«mfŠ@ÀN*ÅE®6|[dÀ^ÂpäÙ"ÛŸ\nlzn>¦¥ Š( "øäÒíÆåûÝ1ÏÝQñÈÿ¥ÛË÷ºcŸº(¯ª¡üz#‚_=SG9Ñí~eo”ôõf«hç:=¯Ì­òžƒÞ¬×Îb/S®ðÐQE QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVwŠ?äZÕ?ëÎoýÖPñ"<žÔ£YÝ­% ª2I(p –Gýã}M7}Rûl2þöY#™NCЃÜQö•  »èßT¾Ò´}¥hÅ´tøSð…nƒþï'gØ6ÿ¦ÿkç?kÛ÷¶ùß½ó¾îÞsй%ýõ·ÅOŪ_\é~“ÄPy÷vr´n×Ùº—ò([ŽWï6Šƒ‡õï´­iZ]ßFú¥ö•£í+@‹»ëÅí*ÿOÖ¿ú=*ßÚV²¼O:ÉemåÞúÛj÷8•Xã蟠&€$¹8ÖtSÿOré4ÕÍüR—UÖµíš&Ÿ§ê&)WÔíïoÞ†'J3¬R´Û\ ¤ƒŠèuXµ&g!Q.Ûsݪ¼û³(äõ©ö• g„jwƒLÑü%áOß6„|?⯳Ë5ü˜ŽÆM:õ­Êϵ Cä´˜B<©ËŒÔÚÖ§a6™áé/|M© Áã‰"Óµ¶É潟ö]Æãöœï1‰ZhüÝÙ3»Õî?iZ>Ò´¬‘Z\]kè:]‰u¹!jž Òü]ªé°ë–ÚSXÅm‡RñMå³J¢%þΰËöö2ùŠÁÙœíÆÍîiZ>Ò´ÀàgÔ¬âý¯‰e3#î ±T“ïW=¤ØÍ¥øpø¦ÏYÖc¼><žØ@/ä¾DÚûÛÉ€,ådvÜT°c@W¯ý¥hûJЊŮx‘þ&<7zÕ…†¦¾#òc´¸ñÊÉ&ŸçíUM5`18h0Â]ç wP Xïíô/øKÿá"×äÔŽ$±XäÔ¥kajúëZ|ÞYQ¥”‚zÏÚV´­gêÇ>+°ÿ¯ý Y¬û©DÞ*µÛÏ—c6üé"ÛŸLílzàúV… (¢€<‹ã‘ÿK·—ïtÇ?tQGÇ#þ—n7/ÞéŽ~袾ª‡ðaèŽ |LõMçGµù•¾SÐ{Õš­¤gû×,§å=;ÕšùÌOñ¥êuÒøQE QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEI´}Ýô}5Ù‰,Íi$ž¤’9¤þÅÑè ¥ÿàüM^¢€(ÿbè¿ôÒÿð?þ&ì]þ€º_þÇÿÄÕê(ö.‹ÿ@]/ÿãÿâhþÅÑè ¥ÿàüM^¢€(ÿbè¿ôÒÿð?þ&ì]þ€º_þÇÿÄÕê(ö.‹ÿ@]/ÿãÿâj[m;Nµ—͵Ӭ­äÆ7ÃnˆqéY¢€4QÍE4i$n0Èã!‡¡©ÿbè¿ôÒÿð?þ&¯Q@±t_úéøÿGö.‹ÿ@]/ÿãÿâjõGûEÿ .—ÿ€qÿñ4bè¿ôÒÿð?þ&¯Q@±t_úéøÿGö.‹ÿ@]/ÿãÿâjõGûEÿ .—ÿ€qÿñ4bè¿ôÒÿð?þ&¯Q@ÚZZZ#%¥­½²±ÉXbTúà šŠ(¢Š(Ⱦ9ô»q¹~÷Ls÷E|s8»¶ù” ç¨ÿdQ_U‡_¹‡¢8%ñ3Õ4†Ý£ÚüÊ~SÐ{ÕšÂðn¿¥jþ±»²¾†X%…e…È(^7•¶°dy­´ÛÏÄ_÷دžÄÂ^ÖZT¤¹-Úm¿çâ/ûìQö›oùø‹þû‡$»]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ-Úm¿çâ/ûìQö›oùø‹þûrK°]ÑQ}¦Ûþ~"ÿ¾Åi¶ÿŸˆ¿ï±G$»Ñ- »µnaÿ¾Åk´ÿŸ¨?ïà£Ù˰s#Ê>9Ÿô«a¹>ùàöE‘ûAxŸAÓn!›RÕ!¶¶YDbaÊ ²d/Ȭs…oÊŠúJXšt©Â•‘ÆéÊM´ý–üQ¯®©áá©Íý™k§ËuåÈf‰IVÆà0ÍòçnXœd“^èÚÞ¬üÍùÑEc–ɺ:¾¡]%=oV?òÿ?ýõIýµªÿÏüÿ÷ÕW¢edÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPAýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}QEdÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕPBcT?òý?ýõGö¾¦x7ÓàÿµE1¤“~/kº¶±ãRÛR½yáÓï®-íc ¬1€NŽIÀÉàQEñõsmž’ØÿÙgwenhywfar-5.12.0/doc/dialog/images/gtk2-4.jpg0000644000175000017500000004163413142134462015674 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀë?"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷_x/LÓ4xžH –éãýä¡ó¼œnù°ÜŽ|’ž3Õ<;á…¶Š}4^êŒRÒÆÕ·K1O$Q݉WC¡ÈÜìî{ë_7üfÖõ]?ã.«4.#0ÚÁ»c;c(íú¹jú¼«<Çèó[w÷Up´# q²HõüE6ŸÛ5Ÿ‡ë ˆ’K;õ¹–!êÑár}¥±®ÏH¶ðö¯¦[êZlvV—)RS†ÐûE|°¶Ñ¿ÔÒ„’=£ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¸OÚWÔôO†w†“rÖWKcšÃ{¨•‡Ð© ýkøcãÿ=Ÿ‹¯|Uiµ™â½>}šê=’#U]Ñ(èçæ=ëäÝY§k¿¼ÙB6½]þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯Ô˜þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯¸ø¹ã 3Bð•‡ö™­kºÆ’ÚƒKlf’9]±¦D¬[æÀ žâµõ‹:害 5׆ Ò4MJÞÉæ»¼Ê#–vÃBZ%"6^.bGAÍ?m/æbök±ë?غgüùZßÊ?±tÏùò´ÿ¿•æ¿|KãÜø²?Ï£\G§k×–Pˆ‰bòä&€cî³|ǽz†éœ_÷ѪU&ÕîÄãЇûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}|óîþñZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿•qŸöæ°ÓôHïîP ð‘ç¦æ=°É­|ÿÓ8¿ï£YÞ•—CYAi¤g˜÷.IÎkåx§ˆêdÔ©´ß¼Þ½­ë§S¯ †fî¶*N¶V¢kZv !Ú³ù»âјcoÔŒ{֕Ι£[[Isqmc1©wv—@êjo²Ühwq]ÑŽwjóÔno¾i&` m©i’KÅ’*gþøJóò.0©¡^nïÙ«ëùi¡–gJ8:.ªW²gUo1¿í:WƒÖkCÊKqs䙪® ǦqVô)t-Râk6Ó#³¿€f[[†Úàx`á—Ü®+ukð ,ûTQŠæ¼K«\Ûø¯Ã—èC]è­ÏmñÈáXu$ÔeÜ_W‰…&Ûævûû[õ¹ò<úëÆŸ.îÛ#½ñ=Π­¼Ri‰w{tÅm­-Žé%#©êQ݉VUƧ%„?jÕ| ±Ù™ÖðO$cÔ¦@ï´“õ®/Ç:•õ¯Å RT`¼0Àq±” qÿ-Tÿá%ÖyÝxX ¨¯œU§UÁ7¡ûVYÁÐÅa!YÙó+õëÚß­ÏeÒìü=©éðêX\Z룑 éôê+Ë>-øNŠå5+6ò6>ÖÄŸ)$†äp1Ücƒ‚ÀÍðPžK¯i…TÚÁqñ‚p¤ß¸o”T߯t)>Hù¸^‡ë_M•Õ–"*roT~}åtcR¦¢M&Õÿ®§§è_ò€ìîŸâ÷5ÅüOð;xŽhµ]3ìQêG幡¹9ØøäI!‡Lž¹ãª¶¸û7†m®BC3í`@î=ˆ9ùGëUÿ¶ßþ|m?ò'ÿ\¯<.!Êž3HRç„]ú'ük,ÆÖÃÀšF);Mì·ë,iþÒ®Iý+Ö~x2øx؉îöâC5åÉãÍúÀt¯ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿU‹Îñ»{W{y•õ{lËzž§ê–†ÏSÓlom‹+˜n#!e!”ílŒ‚„ ‚ÇCÑl5;½NÇDÒíoï9º¹†Igÿ}ÀË~$ÔÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñUÇõ¿î‡°ó ¼9áù¯Zú_hò]<ërÓµ² ª»BØÎनn tªúWƒ¼%¤Ë4º_„ô ž³ÊÖÖQÆd‹û‡h_n•‘àÞxƒÃŸÚwZm„rëØ§™€‘]K'j.Osž+ûmÿçÆÓÿ"ñT}oû¡ìr•Ç|q¥C¤ÏàÏI§Á#I ©°‹ÊÛï2®Ü{‘Ö¤—Áž—P³Ôeð–€÷–(‘ÚNl£/§ÜT8Ê…ìNÕgûmÿçÆÓÿ"ñTm¿üøÚäOþ*—Ö×ò‡°}É,t=ÃS»ÔìtM.Öþ󛫘`D–÷Ü ·âMhÛ8ÿïªËþÛùñ´ÿÈŸüU`x“Æ·šwˆü1¦A¦Øõ[é ›ÌÊ¢ZÍ(Ûóõ܋Ϧ}rÖüƒêþggÿlãÿ¾¨ÿ¶qÿßU—ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú£þÙÇÿ}V_öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüU\ò«ùšŸöÎ?ûêûgýõYÛoÿ>6ŸùÿŠ­ëÛ«˜ï'Ž;‰‘FUUrð£ëžAõ2¯ý³þú£þÙÇÿ}TŸm¼ÿŸ¹ÿïá£í·Ÿó÷?ýü4}sÈ>¯æGÿlãÿ¾¨ÿ¶qÿßU'Ûo?çîûøhûmçüýÏÿ \ò«ù‘ÿÛ8ÿïª?íœ÷Õq¿uÝVÏÅþ·Žöv¶¹ÕnÄ +l˜-ÉPÀ Ž™ö½ý¶ÿóãiÿ‘?øª>¹äWó5?íœ÷ÕöÎ?ûê²ÿ¶ßþ|m?ò'ÿGöÛÿϧþDÿâ¨úç}_ÌÔÿ¶qÿßTÛ8ÿïªËþÛùñ´ÿÈŸüUÛoÿ>6ŸùÿŠ£ëžAõ3SþÙÇÿ}Qÿlãÿ¾«Œðo¹äWó5?íœ÷ÕbÜǬi7S]èÖð^A1/-›H‡=JÇ=H&¦þÛùñ´ÿÈŸüUÛoÿ>6ŸùÿŠ®,},>>—²¯ £Jp•7x³›×¥ñ׊¢:\Z\^²“‰îe™ö÷تNO×ëÒº(ü;¦Åáxü;º¥œP¬QáþeÛѳýìŒçÖý¶ÿóãiÿ‘?øªÄÖ¼]wm⯠hÐØY,z½ôÐO'ÎYR;Y¥rØÉhדž3ë‘– …ÀÓtèÓÑïçøhJ·ÆÌûȹøF/èMlò¥Ýõ̾}åÉãÌŒp;(\·Åÿ3û¸ÿׯñ}kÔ+Îþ6ø”Æ7(ù—‚9êkÛË1)Ôöj6Ðñ±“¼äîÛ;iN|oó+~ù:i+˼iy«iZãê÷“j_ðA 9m:h·}íæ<¨ã.¤û¤Âç“êÑÁquáÞ&¸a*±!$ ?\W7}à«kýB=F÷‘ÜÞG·dòéû¤]§+óÏ‘èzW›‹þ<½Mh uyãbëCÖ¯ãÑæM>+Kóщ#xZ áKHFÒX¡û¼©Àù¹"åïŠuÝ._K0·½Šj :Æ%‰·GæÅnFí¼°cc%Ž2îÀömustÞ…§ºVK‰œ J¬0ÁŽß˜ÁÏ^õ%׃¡º–êkŸ G4—h#¹y4ðÍ2 a\•ù€Ààú æ62<;y©êúÇP·›K»ß$"Di#øeEpAÂäuƒáÝÍÝ×…Õï®å»ž;ËÈ Òã{¬wRƹÚÎÕ€+¢´ð©´Ó›NµðëCdáƒÛ¥–#`ß{+Œ÷õ¦hÞE…áÑü0ºlR6çKK)Y½HU4óÿ‡É©ÉðŽö=x ÔšóU[Y$ÆÕß\m' ޾ ýJ­‹¯t©ÓAK=]µ™nU$Q+t!SÈ ¸o-°¤‚0Äà Ÿá…µaàÓu^…–ÿQóm®ì›ÞÎÃ*Õe`Fx ƒÞ¶SÀ:riï§§ƒ­ÖÑä¼#NÀÀr6ýà;õ g¨øŸÄRmàUÿüIİÜfDO>òX]B1£žè@­K/k7>(—N‹Hó­-oVÆæDŠL†òÕš]ßt(,>SÉ_›=«°> €Ù½™ð¬fÚH’„éãcF„²!]¸*¥˜ÐqÖx*Øjj‘‹ÈUV9Æž7 Q…¶ä`p=9=ïööŸo£j÷ÃT–XœY¡Cn–ë ó¤”ÎÒ»”s’ÛBã’"ñÇüžÿ°¥×þ\WWà‹;ýE5+ïAu|BÜͦ‡•Bœ®®F $zf±ücáýzx"â R–mFåç‘-]–%6S¨,@‚ÌOrzÆñ¥æ­¥k«ÞM©Â=0å´é¢Ý÷·˜ò£ŒºSî’@ žNeçŽu‹­Z¿G™4ø­/ÌsF$áh7…-!Ib‡îò§æäE¾ðUµþ¡£{áHîo#Û²ytýÒ.Ó•ùŠçƒÈô=)ÀömustÞ…§ºVK‰œ J¬0ÁŽß˜ÁÏ^ô áï|S®érøŠY…½ìPëPiÖ1,Mº?6+r7må€óã,qÇKáëÍGXЧþÒ¶›L¹/$!ÑJ:,¨® \‚zŽN½×ƒ¡º–êkŸ G4—h#¹y4ðÍ2 a\•ù€Ààú tX4·Ò¡ð×—a `öËcˆœ7ÞÊã=óÖŸÃ˽MîµÍ?T–ë̳ºA7R$²ÅD¬3"Ü@äŽç¦=âDfm_‰u…ÑKÃ2AŸh¶'#y9ÔG¨ëYZG…N‘lÖÚW‡ZÆbí½™K¤€9<k¬¿ekë†RL¬A‚2hÃ-¼e>—öf“›iö‚CwªØê‚êÏæÝBIpBG!*+dr:—³ªkúÕÍ”×w½®›4qh\ßØÊ­ïçI¾Jù{T1#$W±yi³ËØ»?»Ž)Ô\g˜iþ1×.|zt´¿Ó¾Ïìvë³@snЫyè7yŒÌX²”qX'ÅS[ƒÄZ:Çc¬&›i©Ø–ШK©d¸Uu˜¡2¡HÃ~êšôý«¸6Ѹ ŽihÏ~*Èéð÷þÂ×_úAsX^4¼Õ´­qõ{ɵ/øG †¶4@Û¾öóTq—R }ÒHásÉéþ"éºÿŒ| %…ÕÒ[jw/;C 8‰M†bÊ 2{*Ý÷‚­¯õõß Gsyݓ˧î‘vœ¯ÌW<G¡é@uyãbëCÖ¯ãÑæM>+Kóщ#xZ áKHFÒX¡û¼©Àù¹"åïŠuÝ._K0·½Šj :Æ%‰·GæÅnFí¼°cc%Ž2îÀömustÞ…§ºVK‰œ J¬0ÁŽß˜ÁÏ^õ%׃¡º–êkŸ G4—h#¹y4ðÍ2 a\•ù€Ààú ç »ñ³àPEoý—­® ´‘Õ‘L›HŠP£%N8 õêWÀ——.5=/P7&þÂáVc-ÒÜ.5eØáŒ…A=ˆ5ÒCá‡K}* l°0’Ùlq†ûÙ\`ç¾zÓ´Ÿ 6‘jmt¯µŒ‹˜íìÌjXõbäñÖyðù59>ÞǢϓ^j«k$˜Ú²ë¤ä×Ô¡éU¢ñuî•:h)g«¶³-ʤ‘ê%n„*by¡ƒ— å¶FœƒÓü1ð¶¬<Ún±áËвßê>mµÝ“aã{ÙØeXr¬¬Ï{ÖÊxNM=ôôðuºÚ<‚W„iÃc8Fß¼~´ àµøŠ@M¼J¿ÿ‰8–ŒÈ‰çÞK ¨R2sÁÁ©eâÍfçÅéÑiu¥­êØÜÈ‘IÞZ³K»î…‡Êy+ógµvÁ°7³>ŒÛIBðºFÔ^ ]Féî%[W)›…Ž0 ³(÷ w úŠŸìWŸóé?ýû4}Šóþ}'ÿ¿fÈ(©þÅyÿ>“ÿß³Gد?çÒûöh ó¿‡þ%1Ê>eàŽzšô¿±^Ϥÿ÷ìט|iž°’Ù'…¦µ™"¸ˆ^'*+ªvº6f¡ée_ï&aˆø ωúö‘ð Ä®™vmïlìšh&Œsª¹ߟZäµx¼=£ê2éÚ¿í¬i÷°ãÍ·ºÕ´È¥L€Ã*Ð2<ö"º/Œç?³gоeoø–Iб%vä/ñþÆHÿô×§×>-^¼½GGøq<žÊ_ ^ÞCggûDjW73ȱC ZÖ–ï#±Âª¨ƒ$’@u­k¿ k0êkaŽþ$Ý·–’I4GOX£ @7¼ ½Ê¦â3 F¯é_äA‹þÃú'þm+ƒñåíî—¨Ý\XÉö½þʱ“Pò˜K©‘˜3E´)pLiœËÎÕLÈS“Ö™wâoV>¼ÒM¥ˆÔµ©­–ÞáØ•-.­ÂŒ xòct¨ðMA…üI'•¿Å_¢ß³vû#÷{¼¬çŸ»æ¾qŸõc9Ì ð¿‰$ò·ø«ât[önßq¤~ïw•œâ3÷|×Î3þ¢Lg1ù‹kñT¹³¹¿L±K},@º„m3™¤¸x[È8ÆÑå–RGÏ¿.3[¾ñuÖ±ã=[ïkmöNï:u—p¸Ë~ïÊöŒ‰3÷_ 3Ö€0`ð¿‰$ò·ø«ât[önßq¤~ïw•œâ3÷|×Î3þ¢Lg1ù–ôoj®e©Áñ?Ç å¼sÆ>ѧI…u >híÙƒÕY”ö$s[/5ý¿ÅkkOíK©lo4{™Í›„ò¢xå¶E)… ȑ󸞽†jx6_?Â,Þwæið7™æù›óÛüÉwg®|É3×{ýâÎÿªÿÑPñÇýü²ÿäj?áÕè¨xãþþYò5wR‡ÿ„Uÿ¢¡ãûùeÿÈÔªÿÑPñÇýü²ÿäjî( þWþЇŽ?ïå—ÿ#Qÿ«ÿECÇ÷òËÿ‘«¸¢€8ø@u_ú*8ÿ¿–_üGü :¯ýßË/þF®âŠáÿáÕè¨xãþþYò5ð€ê¿ôT¿øÎsû6x«æVÿ‰dûV¥‡4]k]»ðçˆ|?¦¯|—¯ þ‰5Ì‘¸¶‚¥Ô`©)û¹žMeüg9ý› ¼iôí+BÆÞÚV_³°ÂÌá–Ep¬T,åþóŒ$€*6ÐÙ|Bð íä6v~8ðÍÍÌò,Pë¼ŽÇ ª¡²I$Zé«™¶hrº-–§­ºØ|>“MU˜yqY¯“#,HÎvË÷•f‘I8†P2 ~c[NÒ¯%²–ëáÑA³Êi`²co¹¢cÒS­+“·<Á!&?3¬¢œ¬:kÜÜ\·Ã׊mIw®ðÙ"Éäï‘)Ü?xÛ‡9û<˜Ý˜¼Åº²Óµ_ù |=y~Ñ,sJn!²r$+ooÞœ²,®¤ŒœA \æ?3©¢€9Hì4ɧÓg“áãE-šD–®ðÙh¹„€¤Jv„29Âôò$ÛœÇæZ°1Äö’Cà‹«GŒ³ÜJд¿vSŽdbÛs“o!³™ÐÑ@¨²Ónµ¸5ˇŒº¯îñ},M¿øÎsû6x«æVÿ‰dûWaðwþBÿ?ìdÿMz}qÿÎfÏ|Êßñ,“ ÿbJÔ±°ñ¦‹­k·~ñ‡à´Õï’õá¿Ñ&¹’7Ð@@tºŒ"?w “É®|SµyzŽðâtŸäA‹þÃú'þm+™ø©^éº cuö'ºÔ-lä»Ú¬m’Y•À`W8lAH=)5û/xŠÒßNÖüKá–°MBÎòU³ðüñJÿg¹Žà*»^8\´@TðOÐÞ[[^ZËiwożÊRH¥@èêz‚{ælÔ⹨ÜÅ ‡‡|ù-íà–ö(ÒI ´’:0€Â…± ÿ{§Ë‚k»Òü; ij‹¦èšm˜ŽS2y¨›d*SxÀá¶’¹ë‚GJedž<7s-¼·—,–¿ê혾mß/|ÜýyëHg%¬ø“^½økâ@Ö¶VÑXß}ˆBXÜÄð—@ÌÝ2J´”àdõ¦]ø§[Õ…¯4“ib5-jke·¸v%cKK†+p£H<˜ÇÝ*<]ð燅ÍíÏö™ç_#GvÿeLÜ+cps˜ ƒ×4º‡‡|?¨ùŸoÐôÛ¯6Q4†kTrÒØä}à¿.zãŠá­~#ê—6w7ñé–)o¥ˆP¦bó4— yÚ<²ÊHùó·åÆkwÂþ.ºÖ!Ê?â¯nçþ=-kÑÊ¿Þ>LÇðÿÆsŸÙ³Å_2·üK$è?Ø’µµø+GÔeÓµx{O½‡m½Ö¥ R¦@a•fdyìEdüg9ý›¹ñjõåê:?Éeñ À7·ÙÙøãÃ773ȱC Z¬ò;*ª†É$k¦¥øëÿ" _öÑ?ôëi\ÏÄ}J÷MÐ k¯±=Ö¡kg%ÞÕcl’̨ιÃ`‚Aé\íXÔéh®Äëz&©áË \¸¼–÷Tt‘u)*§Øîb†a¹OQÁ³,~#ëšÌPØxwÏ’ÞÞ ob$»I#£Ø (QÏ÷º|¸&ÏO¢¼ïYñ&½{ð×Äþ$­l­¢±¾û„±¹‰á.™ºd”'h)ÀÉëL»ñN·« ^i&ÒÄjZÔÖËopìJÆ–— VáF­¥øïAž ÍA4ÛûÕ·¸/,ml3€D"Û¿qeVÞ98⻊@QEQEQEQEQEQEQEQEQEQEQEQEOkþ¢ëþ¹ý k?IÿT?õÚëÿJ¦­ _õ_õÈèkYúOü‚¡ÿ®×_úU51‡Çïù"ž0ÿ°Lÿú ®Å'þ&ŸÆåñW·sÿ–µß|~ÿ’)ãûÏÿ šà|Râiñ nQÿ{pG?ñék^ŽUþñòf8€ïþ3œþÍž*ù•¿âY'AþÄ•©caãMZ×nü9âÁi«ß%ëâMs$n- €€éu*D ~îA'“YÎfÏ|Êßñ,“ ÿbJÖÕüsà­Q—NÕüaáí>öy¶÷Z”1J™†U˜Aç±Ï‹þ<½J¡ü8‘kö^>ñ¥¾­ø—Ã-`š…ä«gáùâ•þÏsÀUv¼p¹h€$©àž+¡¼¶¶¼µ–ÒîÞ+‹y”¤‘JÑÔõö5ÏY|Bð íä6v~8ðÍÍÌò,Pë¼ŽÇ ª¡²I$Zé«™¶heé~Ð4µEÓtM6ÌG)™<‹TM²)¼`pÛI\õÁ#¥2ãù–Þ[K–K_õ öˆL_6ï—Ž>n~¼õ­z) Êðð¹½¹þÃÓ<ëähîßì©›…lnqózàf—Pðï‡õ3íú›uæÊ&ÍjŽZ@»œ¼åÏ\qZ”PSxkí=”í é†[T³²&mÕNT!ÇÊäÓµY·ÒôËg†K}:΀H!háU1‰4›p8Ü@'HÉ«”Pbø{A]lë‹¢éÃT<›Álžvq´øÎqÆsÓŠÓ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šž×ýE×ýrúÖ~“ÿ ¨ëµ×þ•MZ¿ê.¿ëÿÐÖ¼¿PÑuJöæx!Ê?â¯nçþ=-kÒÊ¿Þ>LÇðÿÆsŸÙ³Å_2·üK$è?Ø’»ƒ¿òøÿc$úkÓëøÎsû6x«æVÿ‰dûV¥‡4]k]»ðçˆ|?¦¯|—¯ þ‰5Ì‘¸¶‚¥Ô`©)û¹žMaŠv¯/QÑþN“ã¯üˆ1ØDÿÓ­¥s?õ+Ý7@¬n¾Ä÷Z…­œ—{U²K2£8 ç €H  ¥&¿eãïZ[éÚ߉|2Ö ¨YÞJ¶~ž)_ì÷1ÜWkÇ –ˆJž âºËkkËYm.í⸷™JI¨OPAàc\ÍšœGˆ#ÖôMSÖ>¹qy-î¨é"êRUO±Ü6Å Ãrž£‚fXüG×5˜¡°ðïŸ%½¼ÞÅI!v’GF°P¢6!ŸïtùpMwz_‡t -QtÝM³ÊfO"Õl…Jo6ÒW=pHéL¸ðdžîe·–ã@Òå’×ýC=¢Í»å㛟¯=i 䵟k׿ |OâHÖÊÚ+ï±K˜žè›¦IBvòœ ž´Ë¿ëz±ðµæ’m,F¥­Ml¶÷ĬiipÅn`‰Ç“û¥@'‚k²ðð¹½¹þÃÓ<ëähîßì©›…lnqózàf—Pðï‡õ3íú›uæÊ&ÍjŽZ@»œ¼åÏ\q@5¯Ä}RæÎæþ=2Å-ô±ê´Ì^f’ááo ãG–YI>vü¸Ínø_Å×ZÇŒõo½­´_Ù;¼éÖ]Âã-û¿(wÚ2$ÏÝ|(ÏZÛo xu§²´0Ë`Š–oöDͺ©Ê„8ù@<€:v«6ú^™lðÉo§YÂð -*¦1#“nˆã©4Àêþ1»?´]&;««M=od²’ÜÚ>.ØÛHþar¸Ú®WrœŒôªŠkki¦‚y­â’[v/ ºѱR¤©= RG‰- (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€'µÿQuÿ\‡þ†µÅÚËÏý~\èç®Ò×ýE×ýrú×iÿ/?õùqÿ£ž×—ø¤ÿÄÓâÜ£þ*öàŽãÒÖ½B¼¿Å'þ&ŸÆåñW·sÿ–µée_ï&aˆøÿã9ÏìÙ⯙[þ%’tìIZÚ¿Ž|£ê2éÚ¿Œ<=§ÞÃ6ÞëR†)S 0ʳ2<ö"²~3œþÍž*ù•¿âY'AþÄ•Ø|ÿ¿Äû#ÿÓ^Ÿ\øµzòõ*ðâ`Y|Bð íä6v~8ðÍÍÌò,Pë¼ŽÇ ª¡²I$Zé©~:ÿȃý‡ôOý:ÚW3ñR½ÓtÆëìOu¨ZÙÉwµXÛ$³*3€À®pØ‚ zW;V5:Z+ƒñzÞ‰ªxrÃG×./%½Õ$]J@Ê©ö;†ÁØ¡˜n@ÀÔp@¬Ëˆúæ£s6óä··‚[Ø£I$.ÒHèÂ6 FÄ3ýîŸ. ¤3Óè¯;Ö|I¯^ü5ñ?‰ k[+h¬o¾Ä!,nbxK fn™% ÚÊp2zÓ.üS­êÇÂךI´±–µ5²ÛÜ;±¥¥Ã¸Q‚$Lc ¢Àz=æV¿õK›;›øôË·ÒÄ ¨FÓ1yšK‡…¼ƒŒmYe$|ùÛòã5»á]k3Õ¼:ö¶Ñdîó§Yw Œ·îü¡ßhÈ“?uð£=h°¢¸;¹õí#â"]j·7躖 –ºrAx»b&Ô|²Bc1%mÂBFW+€Mw”€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šž×ýE×ýrú×iÿ/?õùqÿ£ž»K_õ_õÈèk\]§ü¼ÿ×åÇþŽzO^_â“ÿOˆcrø«Û‚9ÿKZõ òÿŸøš|C”Å^ÜÏüzZ×¥•¼|™†#à;ÿŒç?³gоeoø–Iб%jXØxÓEÖµÛ¿x‡ÃðZj÷Ézðßè“\É‹h :]F ‘Ÿ»IäÖ_ÆsŸÙ³Å_2·üK$è?Ø’µµø+GÔeÓµx{O½‡m½Ö¥ R¦@a•fdyìEsâÿ/Rè$Zý—¼Eio§k~%ðËX&¡gy*Ùø~x¥³ÜÇp]¯.Z *x'Šèo-­¯-e´»·ŠâÞe)$R tu=A‚=sÖ_¼{y ŸŽ<3ss<‹0ŪÀï#±Âª¨l’IÖºjæmšz_‡t -QtÝM³ÊfO"Õl…Jo6ÒW=pHéL¸ðdžîe·–ã@Òå’×ýC=¢Í»å㛟¯=k^ŠC2‡‡<<.on°ôÏ:ù;·û*fá[ƒœ|Ààd¸¥Ô<;áýGÌû~‡¦Ýy²‰¤3Z£–.Àç#ïùs×V¥”ÞðëOe;h:a–Á,ß쉛uS•qò€ytíVmô½2Ùá’ßN³…àZ8ULbF &Ü7 ÇR2j嘞ÐcÖÛ\MN]Q³›Ál‚c‘´üøÏ@^ƒ§EQEQEQEQEQEQEQEQEQEQEQEQE=¯ú‹¯úä?ô5¬-'I·–É®%¼•[«–Ú° ‰®áé[¶¿ê.¿ëÿÐÖ¹?èø›ÀRéúÎ¥¢ÜË%Ñ‚ûO¹xe†Au6Ó• ²ú©8#ß1 ñôö^ðN³âC%Åçöm”·"('šUI »qÚ ÀÎ:àô¯0ñIÿ‰§Ä1¹GüUíÁÿÇ¥­]ñ„µO~Í^,²×|Mªx‹V—JžK»»ËÉfPÛÉrv ü ê{KÅ'þ&ŸÆåñW·sÿ–µée_ï&cˆøcÕlt½[Ἲ^·¹Ó¯;{ˆbºUveòþOŸæÈ_—ž<Öž£“Ü=žl×2‰§1i—he}Š›Ûæm¨‹“ÎG@*sŸ iŸ2·üM,zúx•â-ZúËYÑ4ûk70ßßÃ×DecV¿ïO'õíÍ‹þ<½GCøhÕÔµÛÉ¡Ò5.êâYGÚ¢´¸°ºvq ‘·š¨ÃŸ.Fˆîåb‡‚EOý¥ýµü^…qòÿÉt±ÿ±FûÿKlk±®cQ?´£ÿ ¡ÿ‚ËÏð£ûJ?újø,¼ÿ Z(ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-ŸÚQÿÐ PÿÁeçøQý¥ýµü^…-^÷]±²…f¼Òî­¢ic…^[ ¤Rò8D@HûÌìªRXÉ©ÿ´£ÿ ¡ÿ‚ËÏð®?â¯üyøcþÆíÿKá­?jÚˆ´K ¾[ã*ËcævaèÉÎxÇ¥6ãÖ-¤º:hµ{K©­ÞeŽ{y¡w‰0ì¢Ln¤ŒgÇ­sšÇ€¼+«_=íý¦¨ó9$ùZö¡ ’NØãQrI$($ž¤ÕIÁ_Žö*q‘á;ñÁÏü¾Ø×c@Î&çáO€®må¶¹ÒµI • Iž#ÔÙ]HÁR Î#ŒWø‚C%ßäb€¿‹ [;Z÷ªð-hþ÷ǃrøªºÏüyZ×£•¼|™†#à=cÅ,м3à»Õµý Nº{¨§²‹R½û2\4/¼®à®À}ÐX#mÜ29ó¡ñŽà2·ü%2¬sâK®9þ=;^½b·2i¶"+¨"ŒFûØÀdlä`¹xûÙ9ôâ§ò.è)þ ÿ®l_ñåêUáÄðoøYñ”^&o|&3ŤϦ¬CÄ·Aq,öòï?èyãÈ#÷ç<`êÂã¸ÿ¡§áþ—ü‰^Ëä\ÿÐR/üþ=G‘sÿAH¿ð\øõsšž5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@5ÿ Žãþ†Ÿ„?øR]ÿò%ð¸î?èiøCÿ…%ßÿ"W²ù?ô‹ÿÇÿQä\ÿÐR/üþ=@ â/‰Ûk¦¥Ï‹¾F–:µ–¤<¿ÝeͽÂM³&Ìãv͹íœàãQ>2\+_ü! T¡oøI.ó´HÏÙ:ʽ—ȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêñüEðüŸÄÞ&ñÏÃËx Ñn4ø¢Ó5™§wyn-¤‰ Œ-ÎOQÅvŸð·¾ÿÐù àb×gä\ÿÐR/üþ=G‘sÿAH¿ð\øõqŸð·¾ÿÐù àb×—¶§§ë^4Ô´«û[Û+o†x\:8û¨È#ß#ê+è?"çþ‚‘à¸ÿñêà>6š, ç¬•ÞÆ-™;› Ë`cÏ9¯G*ÿxù3 GÀwÚn±í2Ê~SÐc½MPé­»G´ù”ü§ ÷©«›üyz•Gøh(¢Šæ5 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€.ÝÝ\Ç"$w"ˆ£ÀW UÖÃA4뫃ó\\ü±ã®ãž1ïY?-5+ÿë6z?˜o¦ÓvB±¾Çrb*·XŒ€r0H9æ>,Ó¡Ô¬µGðg†ïlmÓÂ×ö—Q*[O>Fýž"™vË÷AÛ¸Œüø¦#Øu­Bþ=öHïnQÖÞB¬²° …<Žk à”²ÅðKÂMMV ãì©hRê²øSXþÞKª¨˜]+ÆV;8ç£EŒr[“» -|ÿ’!á/ûé¿úM@IÔ.D‚3}(r óNHN3î?:aÕÜ[=ÉÔØAíòùÿ*í$6Np0AÓ¼›[·ñ<Ÿ߯phRIi¦^Ãcó\=˜ — òÎð^Rù 7 xÈÏçuK_Â%â +M¶ñ$·WÛÿk³–ÊO#Êy.ÜÕ ÎÌÑíÚI`@}¶óþ~çÿ¿†¶ÞÏÜÿ÷ð×’Ûê>!µ°±¿ñBøzME·É øû%ÃJ¥,~`·ù°feR8:+ψ_ñ8’;A5Hã½ØÚÌèÀ9òL%¢† \9ßœ0'8ö‰5)ãxÒKù¤m±«LAs‚p9äàôŸöÛÏùûŸþþó+í95‡ðªi—~%kXµ™^âæâ9âž%û ë÷¥@Ê¥™W< ±ƒÀçá¼ñûßYC}wªZíà[IšÒwY]fu̱DÀ³*¦C•NåÇ${oÛo?çîûøkçÿÏ4÷><–yÌÿ H¤%›ÆÔO`…w>ÄÑkº}åíÖ±2]Þê‘]Cp‡ÉŠžO³»FÏ•WknücƒÖŽ$ñèÜ£>+èGý9Z×¥•¼¯FcˆønÓo KQe,Ñ,ö®ÑȤ€AÍYûE¿ü÷‹þûÆxáE·‡ôûËp"¸].̉‚Ky ç×…QÏ¥p ­êÀÇüßtC eê¦ÕÌ}¬©{‡¹}¢ßþ{Åÿ}Š>Ñoÿ=âÿ¾ÅxYÖõcÿ/óÿßTŸÛZ¯üÿÏÿ}VŸØÐþ`úÌ»ëö‹ùïýö(ûE¿ü÷‹þûá_ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþoÀ>³.Ǻý¢ßþ{Åÿ}Š>Ñoÿ=âÿ¾ÅxWöÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?›ð¬Ë±î¿h·ÿžñßb´[ÿÏx¿ï±^ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæüë2ì{¯Ú-ÿç¼_÷Ø£íÿóÞ/ûìW…mj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù¿úÌ»ëö‹ùïýö(ûE¿ü÷‹þûá_ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþoÀ>³.Ǻý¢ßþ{Åÿ}Š>Ñoÿ=âÿ¾ÅxWöÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?›ð¬Ë±î¿h·ÿžñßb´[ÿÏx¿ï±^ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæüë2ì{¯Ú-ÿç¼_÷Ø£íÿóÞ/ûìW…mj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù¿úÌ»ëö‹ùïýö(ûE¿ü÷‹þûá_ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþoÀ>³.Ǻý¢ßþ{Åÿ}Š>Ñoÿ=âÿ¾ÅxWöÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?›ð¬Ë±î¿h·ÿžñßb´[ÿÏx¿ï±^ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæüë2ì{¯Ú-ÿç¼_÷Ø£íÿóÞ/ûìW…mj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù¿úÌ»—¯|LЬõi¬ÿ²|WrmöÄÒÛøvòH™•B¶×á†Aà ƒÔ0jü-]þ€>4ÿÂf÷ÿ×ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæaõ™v;]Oâv‹s§\ÛG øÈ<°º)o Þàç÷u/ƒ¼Mgàÿƒž±ÕôýnKÓ¤ÙFöÖZMÅÌ‘4vêH#CåHls€pqÂÿmj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù˜}f]Ž÷þ®‡ÿ@á3{ÿÆèÿ…«¡ÿÐÆŸøLÞÿñºà¿¶µ_ùÿŸþú£ûkUÿŸùÿïª?±¡üÌ>µ.Ç{ÿ WCÿ ?ð™½ÿãtÂÕÐÿèãOü&oøÝp_ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþfZ—c½ÿ…«¡ÿÐÆŸøLÞÿñºCñ[Btû–o?øÝpÛZ¯üÿÏÿ}RgT=oçÿ¾¨þƇó0úÌ»ïü-mþ€^3ÿÂfóÿןéhñ5÷‰íôû+ÈUñ]Ú¥í¤–Ò4kgn ‘T”až„©Å?ûcTÿŸéÿïªõ_‡vV© Á©GÛ.U¼Ù‰%› xç àp**PŽ^½¬]ÛѺÞë?ÿÙgwenhywfar-5.12.0/doc/dialog/images/gtk2-3.jpg0000644000175000017500000005007113142134462015666 00000000000000ÿØÿàJFIFQPÿÛC  !"$"$ÿÛCÿÀë?"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷_x/LÓ4xžH –éãýä¡ó¼œnù°ÜŽ|’ž3Õ<;á…¶Š}4^êŒRÒÆÕ·K1O$Q݉WC¡ÈÜìî{ë_7üfÖõ]?ã.«4.#0ÚÁ»c;c(íú¹jú¼«<Çèó[w÷Up´# q²HõüE6ŸÛ5Ÿ‡ë ˆ’K;õ¹–!êÑár}¥±®ÏH¶ðö¯¦[êZlvV—)RS†ÐûE|°¶Ñ¿ÔÒ„’=£ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¸OÚWÔôO†w†“rÖWKcšÃ{¨•‡Ð© ýkøcãÿ=Ÿ‹¯|Uiµ™â½>}šê=’#U]Ñ(èçæ=ëäÝY§k¿¼ÙB6½]þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯Ô˜þÅÓ?çÊÓþþQý‹¦Ï•§ýü¯¸ø¹ã 3Bð•‡ö™­kºÆ’ÚƒKlf’9]±¦D¬[æÀ žâµõ‹:害 5׆ Ò4MJÞÉæ»¼Ê#–vÃBZ%"6^.bGAÍ?m/æbök±ë?غgüùZßÊ?±tÏùò´ÿ¿•æ¿|KãÜø²?Ï£\G§k×–Pˆ‰bòä&€cî³|ǽz†éœ_÷ѪU&ÕîÄãЇûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}|óîþñZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿”béŸóåiÿ*lÿÓ8¿ï£Féœ_÷Ñ£ž}ßÞbì]3þ|­?ïåغgüùZßÊ›?ôÎ/ûèÑŸúgýôhçŸw÷…£Ø‡ûLÿŸ+OûùGö.™ÿ>VŸ÷ò¦Ïý3‹þú4gþ™Åÿ}9çÝýáhö!þÅÓ?çÊÓþþQý‹¦Ï•§ýü©³ÿLâÿ¾ÿ¦qßFŽy÷xZ=ˆ±tÏùò´ÿ¿•qŸöæ°ÓôHïîP ð‘ç¦æ=°É­|ÿÓ8¿ï£YÞ•—CYAi¤g˜÷.IÎkåx§ˆêdÔ©´ß¼Þ½­ë§S¯ †fî¶*N¶V¢kZv !Ú³ù»âјcoÔŒ{֕Ι£[[Isqmc1©wv—@êjo²Ühwq]ÑŽwjóÔno¾i&` m©i’KÅ’*gþøJóò.0©¡^nïÙ«ëùi¡–gJ8:.ªW²gUo1¿í:WƒÖkCÊKqs䙪® ǦqVô)t-Râk6Ó#³¿€f[[†Úàx`á—Ü®+ukð ,ûTQŠæ¼K«\Ûø¯Ã—èC]è­ÏmñÈáXu$ÔeÜ_W‰…&Ûævûû[õ¹ò<úëÆŸ.îÛ#½ñ=Π­¼Ri‰w{tÅm­-Žé%#©êQ݉VUƧ%„?jÕ| ±Ù™ÖðO$cÔ¦@ï´“õ®/Ç:•õ¯Å RT`¼0Àq±” qÿ-Tÿá%ÖyÝxX ¨¯œU§UÁ7¡ûVYÁÐÅa!YÙó+õëÚß­ÏeÒìü=©éðêX\Z룑 éôê+Ë>-øNŠå5+6ò6>ÖÄŸ)$†äp1Ücƒ‚ÀÍðPžK¯i…TÚÁqñ‚p¤ß¸o”T߯t)>Hù¸^‡ë_M•Õ–"*roT~}åtcR¦¢M&Õÿ®§§è_ò€ìîŸâ÷5ÅüOð;xŽhµ]3ìQêG幡¹9ØøäI!‡Lž¹ãª¶¸û7†m®BC3í`@î=ˆ9ùGëUÿ¶ßþ|m?ò'ÿ\¯<.!Êž3HRç„]ú'ük,ÆÖÃÀšF);Mì·ë,iþÒ®Iý+Ö~x2øx؉îöâC5åÉãÍúÀt¯ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿU‹Îñ»{W{y•õ{lËzž§ê–†ÏSÓlom‹+˜n#!e!”ílŒ‚„ ‚ÇCÑl5;½NÇDÒíoï9º¹†Igÿ}ÀË~$ÔÛoÿ>6ŸùÿŠ£ûmÿçÆÓÿ"ñUÇõ¿î‡°ó ¼9áù¯Zú_hò]<ërÓµ² ª»BØÎनn tªúWƒ¼%¤Ë4º_„ô ž³ÊÖÖQÆd‹û‡h_n•‘àÞxƒÃŸÚwZm„rëØ§™€‘]K'j.Osž+ûmÿçÆÓÿ"ñT}oû¡ìr•Ç|q¥C¤ÏàÏI§Á#I ©°‹ÊÛï2®Ü{‘Ö¤—Áž—P³Ôeð–€÷–(‘ÚNl£/§ÜT8Ê…ìNÕgûmÿçÆÓÿ"ñTm¿üøÚäOþ*—Ö×ò‡°}É,t=ÃS»ÔìtM.Öþ󛫘`D–÷Ü ·âMhÛ8ÿïªËþÛùñ´ÿÈŸüUiiZŒ³ÙÜH‘Çlé$jÀCäd“è)ýoÈ=‡˜ïûgýõGý³þú©>Ûyÿ?sÿßÃGÛo?çîûøhúç}_ÌþÙÇÿ}Qÿlãÿ¾ªO¶ÞÏÜÿ÷ðÑöÛÏùûŸþþ>¹äWó#ÿ¶qÿßTÛ8ÿïª“í·Ÿó÷?ýü5çŸ |I¨ÞxA®5·÷-ªêa§¸yÈÓ…ÝÐ( àéG×<ƒêþgÿlãÿ¾¨ÿ¶qÿßU—ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú£þÙÇÿ}V_öÛÿϧþDÿâ¨þÛùñ´ÿÈŸüU\ò«ùšŸöÎ?ûêûgýõ\g‰¯æjÛ8ÿïª?íœ÷Õeÿm¿üøÚäOþ*í·ÿŸOü‰ÿÅQõÏ ú¿™©ÿlãÿ¾¨ÿ¶qÿßU—ý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿG×<ƒêþf§ý³þú£þÙÇÿ}WàÞxƒÃŸÚwZm„rëØ§™€‘]K'j.Osž+ûmÿçÆÓÿ"ñT}sÈ>¯æjÛ8ÿïªÅ¹XÒn¦»Ñ­à¼‚b^[6)z”'ŽzMMý¶ÿóãiÿ‘?øª?¶ßþ|m?ò'ÿ\XúX|}/e^F”á*nñg7¯Kã¯Dt¸´¸¼=e'ÜË2;íï±TœŸ®×¥tQøwM‹Âñøv+uK8¡X£ÃüË·£gûÙÏ­;ûmÿçÆÓÿ"ñU‰­xºîÛÅ^Ñ¡°²Xõ{é žOœ²¤v³J6屒ѯ' šcp´½•:š^™Ì|;ðŒ^КÙåK»ë™|û˓Ǚ!àvP8¹o‹þ$g÷qÿ¯_âúרWül?ñ)ŒnQó/sÔ×·–bS©ìÔm¡ãb#'yÉݶvÒœø:ßæVýòtÒW—xÒóVÒµÇÕï&Ô¿á‚rÚtÑnûÛÌyQÆ]H)÷I …Ï'Õ£‚âëÂ0%¼MpÂT%bBH~¸®nûÁV×ú„zï…#¹¼nÉåÓ÷H»NWæ+ž#Ðô¯7üyzšÐþ<êóÇ:ÅÖ‡­_ǣ̚|V—æ9£Fð´–¤±C÷ySórEËßëº\¾"–ao{:ÔuŒKnÍŠÜÛy`<Æ8ÆKd1Ü7ìÚêæé¼# Ot¬—8•Xaƒ¿0#ƒž½êK¯Cu-Ô×>Ži.ÐGròiášd¹+óÁôÌldxvóSÕô9Ž¡o6—w¾HD‰ÒGðÊ‹ 8àƒ†Èëû›»¯ «ß]ËwßFÕ,±8³B†Ý-ÖAçI(+¥w(ç%¶…Ç$zG‡ÿäyÿ]bþRW;à‹;ýE5+ïAu|BÜͦ‡•Bœ®®F $zfº}"ÚâÖÆånmåžXʉ©`çëŒÌP™üJ¾¶Ñüaý­s¨iú˜H-•4gÕd¶¼ˆùóÛÆ‡3îi˜ÝŽF£ãÞi>&7é Acª téeˆKoä‡áüÓíÀ¸2íÚJ©`ÅA#¡ÇJ¨bÁFãÁ8拌ò}gÄÚ¾…yã¸'ž-jÚ4¶¸hÿÐmdŠ×tà1Pp !eŽ~lõžÕŽ¥à«Ë¿j6 j­4r^CySþ'’&ÚŒ •#gŽƒ­<ŒEUU  8(€ø98‘üE7v÷V±_§ÖWosh€Â™HärNr eÞ¤×3àdÔäøU¨Ç¢Ï“_jëk$˜Ú²ë¤ä×Ô¡é^ʪª¡UBÐ^mðÓÃZ”ž–ÇSðýÛÅ6£©‚âÍŠÉÞÎÃ*Õe ŽÄ@¼^.½Ò§M,õvÖe¹T’=D­Ð…LO t0rἶ’À0_¨øŸÄRmàUÿüIİÜfDO>òX]B1£žè@®õ<§&žúzx:ÝmA+Â4ᱜ #oÞ¿Zœø6fög±›i"H^§È…vખb@IÇZãì¼Y¬Üø¢]:-#δµ½[™)2ËViw}Р°ùO%~löª_¼Wu¦øƒL°¶¹¹²‚Û3tëjÎ.D³*˜ƒm#7Ç9(û»Áà«a¨E¨ F/!UXçxÞFÛ‘ÀôvçB¼¹T[y•dQ%©`®§*Ã#‚ÄP#…ñÇüžÿ°¥×þ\T>4¼Õ´­qõ{ɵ/øG †¶4@Û¾öóTq—R }ÒHásÉÙñ‡õéüià‹ˆ4MJXmµ—žDµvX”ÙN ± 0=ÈëfûÁV×ú„zï…#¹¼nÉåÓ÷H»NWæ+ž#Ðô g^xçXºÐõ«øôy“OŠÒüÇ4bHÞƒxRÒ´–(~ï*p>nH¹{âwK—ÄRÌ-ïb‡ZƒN±‰bmÑù±[‘»o,˜ÇÉcŒ€F;†ð=›]\Ý7„aiî•’âC§Ò« 0c·æps×½Iuàèn¥ºšçÂÑÍ%Úî^M<3LƒW%~`08>‚€9È.üC¬ø'T[ÿeëF+ˆ-$udS&Ò"”¨ÉS‚=z•ð%åËOKÔ É¿°¸U˜Ët· ‡Yv8Dã¡PAÏb tøE!ÒßJ‡Ã[,$ $¶[Dá¾öW9ïž´í'ÂͤZ›]+ícbæ;{3–=X€9MNO„w±è³Å¤×šªÚÉ&6¬†úãi9uõèzUh¼]{¥Nš Yêí¬Ër©$z‰[¡ ˜ž@è`åÃym…$†'`ôÿ |-«¶›¬xrô,·ú›mwdØxÞövV«+3Áõ²žÓ“O}=<n¶ •ápØÎ‘·ïß­8-GÄþ"oÒ¯ÿâN%†ã2"y÷’ÂꌅðpGBjYx³Y¹ñDºtZGikz¶72$Rd7–¬Òîû¡AaòžJüÙí]ðlÍìÏ…c6ÒD¼'O4%‘ íÁU,Ä€“Ž´ƒÁVÃP‹PŒ^Bª±Î4ñ½Œ( ·#è(ÀxÇÄ­§ŒoWý)4}ÊÒêqop‘3ù²È¥°QŒ˜ãfT}îI*ç‰?ä¥ü<ÿ°¥ßþ›îk¦Ô<"š…ݽåÿ†EÕͱÌÍc½ã9å$dr㸲µý\—â.£Ñµ‚×Qº{‰VÕÊD¦ÆáAcŒ(,Ê=Èè¾¢§ûçüúOÿ~Íb¼ÿŸIÿïÙ¤2 *±^Ϥÿ÷ìÑö+ÏùôŸþýš‚¼ïãaÿ‰Lcr™x#ž¦½/ìWŸóé?ýû5æg…ì$¶Iái­fH®"‰Ê‡ ꮃÙèEzYWûÇɘb>Ô|4AðüDùo´ÐFBHFA¦ý®_îAÿ~ü)Þ9ðò|Êß+tôÎZâ|ŒŸ&Å …ôùÛ+òã5…âûÛkKˆ®öÜ‹]½Êø!moÌhŸî…`3Ø(®cSÒþ×/÷ ÿ¿ þ}®_îAÿ~ü+Ì ñljo.­4Ý)m¤Ô ÓWÍ–Má峎ãÌ8Ú¥ñ·«z¯w?¼E=½¼v:v–.ÖÓTšèÍ#ù{ìnV©œ9$‚~èÇ\`šé¿k—ûß„ÿ >×/÷ ÿ¿ þÂéºíÇÄ-.DÔnÛNÕt¯EŒž_—«Ú…*B†Î$|î'“ÆìèµËýÈ?ïÂ…k—ûß„ÿ ‚ŠC'û\¿Üƒþü'øQö¹¹ýøOð¨(  þ×/÷ ÿ¿ þÊ|#Õoï¼o{{8¹¸—QÕ7É,jìBêWH dpªªªàt•Ä|%–H>Ã<0™¤ŽóXtŒur5;²ñéLûírÿrûðŸáGÚåþä÷á?¼ËKÕo4߇Pxöë_½Õ®&ÓííZHÒÖImP1ª“Œ‚HPKn"?‰µ±â½7F¼òâ×V1\5™aÌm§\̪Cd© ƒ#'¢žøKû\¿Üƒþü'øQö¹¹ýøOð¯2¹ø…¨?F’ËO²’çSÓ´Û ²LÁ®î#‡’;FòAﶬé/×ßS´ƒS±ÓDj—ZIkw}ÆXb–Q(€¬°°ÛɃ¸Ñ¨‰ö¹¹ýøOð£írÿrûðŸá^_¥xºûUÑ"›Ä—PèVך-¾°—:|§|Hänˆ—S’r ;ˆàž«ÀYÿ„f×á®YZ!rN°²íy‚=»°:õÉÉ 7Úåþä÷á?µËýÈ?ïÂ…AE!“ý®_îAÿ~ü(û\¿Üƒþü'øTPÿk—ûß„ÿ >×/÷ ÿ¿ þ?Úåþä÷á?¹Oj·óüRñ…´Ó‡·´Ó´³Âc_.2í|\…Æ6ÕÉÆHUà t•Çx_þJ׎¿ì¢ÿ;ú`wk—ûß„ÿ >×/÷ ÿ¿ þÁiM¯x‡ÄÜø‚ÿN]'Q[X-mŒj‰Š)7ÈIbûÉ瀸Æ$óÞ'ñÞ´ÞÔîã†ÞÒ+Ý;Um:H$o´[=¨`óÇ;Iã óg4õïµËýÈ?ïÂ…k—ûß„ÿ â.üa,w0}–ïǤ®\å•­Òmß_œñè3\Ü_|T<>u‰ô­DžÄ.‰4…¼’¥šÇßÀÈ~¶ž´j­ý®_îAÿ~ü(û\¿Üƒþü'øW'‹5„ñ=ͱ²±þÊ·Ö¢ÒKyç±’Þ9Dƒ .;ŒœŒ`·ÁÓêÖž=Õô=BóP’Õ,âžÕoeŽg—÷’+ʬŠ6) ߠÐ3¿û\¿Üƒþü'øQö¹¹ýøOð¨(¤ÿk—ûß„ÿ >×/÷ ÿ¿ þÝ[P¹ƒJ»ž!Éê~ÏÁ HþùƒÀ—·š‡Ã;ëÛûÉn®§¾²’i®É$Œt»,³1É'Ü×Òš÷ü€ïÿëÚOý×ÌŸ üZk¹Gú]sÿ «*ô²¯÷“0Ä|Ö>9ðò|Êß+tôÎZÈÖt}'Z·K}cL³Ô!GÞ‰s ȱŒÃƒ‚y÷ªšý”z·ÃQ¤M©\XG¨]ÚÙ=ÍÏÙæˆM7–J?›æÀl’—6|§§qû3YLt /̰U[6û"fÝTåBqò€yèioü5áÝB(¢¾Ðt»¨á’IcI­ÕF,ìbI=Ï&³î?gËæìñŽ!ó7íÙâ)Ï—»ÎÆÝÄýß6^ï;w÷|ØñœÿǼYÝ™|ÞnVksf-+Kˆ›f€J³°(ÄŠú}à (=@t¡4­- dÓlÔ••I(È•÷Ê:tvù›ûÇ““X׳ǃeóvxƒÇù›öìñçËÝçcnâ~ï›3Ÿø÷‹;³/š\~Ï —ÍÙâCæoÛ³ÄSŸ/w»‰û¾lxÎãÞ,î̾iÊÂåáá VXx{HþÑUb»û~ta@Pñ¸ ­zæ®?gËæìñŽ!ó7íÙâ)Ï—»ÎÆÝÄýß6^ï;w÷|ØñœÿǼYÝ™|Ó•…Î–Šæ®?gËæìñŽ!ó7íÙâ)Ï—»ÎÆÝÄýß6^ï;w÷|ØñœÿǼYÝ™|Ó”.t´W5qûfý»fý»^ï;w÷|ØñœÿǼYÝ™|Òãöxðl¾nÏxâ3~Ýž"œù{¼ìmÜOÝócÆsÿñgveóNV:Z+š¸ýž</›³Ä8‡Ìß·gˆ§>^ï;w÷|ØñœÿǼYÝ™|Òãöxðl¾nÏxâ3~Ýž"œù{¼ìmÜOÝócÆsÿñgveóNP¹ÒÑ\ÕÇìñàÙ|Ýž ñÄ>fý»^ï;w÷|ØñœÿǼYÝ™|Ó”.tµÇx_þJ׎¿ì¢ÿ;ú¹qûãöxðl¾nÏxâ3~Ýž"œù{¼ìmÜOÝócÆsÿñgveóKÙãÁ²ù»^ï;w÷|ØñœÿǼYÝ™|Ó•…Í©4Í6C!“O´s$Âá÷B§t¡B‡Sà|`¾ð^¡ãX<-â;Mý¡Ž}Rúmi­ÞÛ'lq/˜ Í&Èbå%oùòÛø6Úî!u(¶¼µžU³ŽG—ÊIwÉ„ŽDwù²ªX°ÈòæÏ”ýEÇŠôˆ<ÝñêÇÊß»f‘tùÙçgnØÎïø÷“ÎíÑc>t[ðÅ^££ü4pxß^›â<ú,zdVú‚ZÅe=Ì ×†a:n6F%‹)PP…+‚AaÏXx»YÒ¼;µd#ŽIü+á5Î<›4šK¡,¸v  Œ±Àà¶@5ë÷)Ñ¡iZHuVhD€”Ñîœüžví»c;³öwÆ3»tXÏõ¸ñ^‘˜I¬ÞVýÛ4{§ÎÏ;;vÆwǼ˜Æwn‹ó¢ß©—àmZ}kÀ×—^!Ô¬¤^â&½´¾EÜgçia}±¸‚Q† îz Ï‚:¾™©ü74ïEz¶—ú”&t¼/ bî(³bw°Ç•ÁäWM7Š´{e•LZ®!ÞGºaòyÙÛ¶3»þ=äÆ3»t[sçE½nVýÛ4‹§ÎÏ;;vÆwǼ˜Æwn‹ó¢ÞâzO‹O…t©tý;ZÐïoi«sâ[=R[ûwŽ[Ø ’K˜ÝˆŠR²;²rÕÿüTÖ4Ýõ¬µë9æ°7òÙ_ºÀ–Ú¬PŠŸõŽÚ2°à±Br¼êæ­á›Ûf·Ô,õYb¶¹[¼E¤ÞËo$’+ ‘üÿ=£Cæ 7 ¢ßrh¶â@Ðê„[ïÿW£Ý?Üóó·lgwü{ɹݺ,g΋x˜Þj÷±ø»í§Ä²èVøÐEs#H¢- ÄèŽ_åÚdx,À›­ðïÆÞ#×|m%•ýÎ^}ìWkÏÏj"¬EP9”œ¸¸ÁÞvŒÜÜx¯HƒÍ߬|­û¶iOžvvíŒîÿy1ŒîÝ3çE½'ñNLϪZ0áÌz=Ó“³ÏÎ6ÆwǼ˜Æwn‹n|è·€r·Z¶…cûBXØÄ—·ºÒÜXɪÌÂ[O$, øF)æAa¸óɯH¬+éy»ãÕ•¿vÍ"éó³ÎÎݱßñï&1Û¢Æ|è·—+Ò ówÇ«+~íšEÓçg»c;¿ãÞLc;·EŒùÑoݬ_hšg„µMCÄwgÒ-íšK¹7²€dà© žÀIàTW+Ò ówÇ«+~íšEÓçg»c;¿ãÞLc;·EŒùÑo.VýÛ4‹§ÎÏ;;vÆwǼ˜Æwn‹ó¢ÞãÚ'ˆ,t?j¾)ðÞ¹§ÜjZÝ¢Oe²·±è–M(@ϺR¢L3‘ŽÀÄ ”N_âoë:„usywas'ü"^!xo,çŽFe‰­BбEq¼† ÝAsŠõë鉄‘êÍåoݳGº|ìó³·lgwü{ÉŒgv豟:-é7Š´{e•LZ®!ÞGºaòyÙÛ¶3»þ=äÆ3»t[sçE¼‡ÆÞ#›â­Î‡ö:Ö }Q-…ÄðFó[U¼å þk¹f%J®Ì)\d¾#êÚ‘ñGÀ’Þx†+ Éï&†[yµC<Òçi0—s.ÀnKà ê®vyÙÛ¶3»þ=äÆ3»tXÏð'ã„¶Öwú~§w­è‚[+–:6§¬I§‹£”>ln„“"…*2¬™Á\ó‘§|IÔ¤×f)©G‹V²´‡Ã’ÛƒzÖ“Y[Í$ɼ~d‘Æ"`rNG¦]x§FÌóaÕ_È.NÝéùO;%qÝÿòcݺ-¹ó¢ßNßWðÖ“uª]Ai«,×WsvÉ¥^IæH‘¼d®#9ÊÙ`á¿tFLÑïòÍ7ÇÚ§‰!k9u8om…÷‡o š)"2Æ'Ô‘^)<Ÿª¿&IŽK*x|g®èÚVÇÅîi|M¨ÙßÜ\Én$ÓQgº0¡2¨d›|Î6áTr¸õ‰¼U£Û ‹UÄ^ao/Gº|íó÷mÛÝŸ³ÉŒgv豟:-å׊´xÖe–-UÖ=ûÂè÷NÏ;8Ägwü{ÉŒgv豟:-àî§â-*?ƒ±xƒÇ÷–¢×ÉF¹}>ð¬w¿jxßyÛòî+ó`’5¡ðsÀ–κ½¶¤’O<±›{ÿ¶Gl+2Û‰²wùjBg?ÃÆiÏâ½"7|z±òwîÙ¤]>vyÙÛ¶3»þ=äÆ3»tXÏòãÅzDnøõcåoݳHº|ìó³·lgwü{ÉŒgv豟:-à´VÇŠôˆ<ÝñêÇÊß»f‘tùÙçgnØÎïø÷“ÎíÑc>t[Ëéy»ãÕ•¿vÍ"éó³ÎÎݱßñï&1Û¢Æ|è·€nÑXW+Ò ówÇ«+~íšEÓçg»c;¿ãÞLc;·EŒùÑo.VýÛ4‹§ÎÏ;;vÆwǼ˜Æwn‹ó¢Þ庩à­_âEÖ©¡ëö‹ý“%ÄV:jk¬n5kÐ914„ùJw*.ß™²ØÚ¨L>ñ߈u½Òâþ÷I½Iï4g––6ÒiuÓË˪€ÇO™Y9ά\x¯HƒÍ߬|­û¶iOžvvíŒîÿy1ŒîÝ3çE½&ñNng-«˜Ë—òô{§Ý³ÎÎ6ÆwÇ»ãݺ,g΋x’\xÏÄ-¶Ÿek§Ãq{¯Ì··²Â©$Ñês,p–™Õv…$•yQò• Muÿ¯ícø©jš¾¦šMÚéÍ=³Á©µº›¿%Š":²ùœç rààc¬ºñN”Kªâå¶è÷Ožvvâ3»þ=äÆ3»t[sçE½nVýÛ4‹§ÎÏ;;vÆwǼ˜Æwn‹ó¢Þñ*âÇXø{ö«ézu”Ó[Ê—ÒÞùv·%Rbi‘ 2­ü]ú9±ø‚Öég¦ÙkZG„ôôµÕ]®×Ûíng¶{mŸgš]»¢>så@(ê¸#uzõÏŠ´x„Ë,Z«üÀá4{§ÎÏ;8Ägv~Ï&1Û¢Æ|è·Ò¼Õ¼2ºÂjÓYê­ycm=²:i7Že¤UUŒ†ËYeHŸÝmÏðMø™¬ÞøÛD±‘ãµÓÇg¤Ü–kiÀÜ3"Þí½ð§$÷XãxcÄúî…áÕ¾ƒ\’êæ/‡ºEÜëq(†ãÍ‘Tï·j»í9#Ÿ»dŸÅZ< 3vyÙÛ¶3»þ=äÆ3»tXÏð ?…>!Ôu«-N]CUÓµÛÝAuo#í)–y P`ò« Ž2pþ\؉!µÑ5K+ý ØA$Ùºœ—°!óe¥gf ;)^ò$œ íåñNl&W ô{¦Îß?vݱÙû<˜Æwn‹ó¢ÞKâØL :¯îŒ…ü½é²WÎݱÙû<˜Æwn‹ó¢Þ½_éóý£Ã¾&Ÿí+?›¯Bþa—Í2gO´;·ù³nÏ]Þl¹ë½þñú¶ãÅzDnøõcåoݳHº|ìó³·lgwü{ÉŒgv豟:-ÿ,,wPi^-‚÷ÌK¤ñk:ÎÅä,-n&YI9ÎI–CŸã¼} ³ýáz3GÀ}%áƒÛæVùÇAí%Qñ4Ï $Òê–:¹·…žâ %ˆn8rŽX’$;Õï èvß2·Î:i+žñ^“âûÿYßÁ§hZŽ‹§"ËgkuªKnÆëœÍ"­¼¶Œà–c“·o6+øÒõᣮ‰»K3w ݼ^jÛ4€K³×g\V~›âm.úYcöæ>ÛP”Î,qOælÉÎSçÓŽkŒ‹ÀZ·ü'W:Åз¸¶¸ÔÓRIü£Àâfß —Aól1Í ~kÇÃVööÇ϶Ò4+]‹+š[ %y±ŒáÌ]­µŽFJñƒ©ê2jV‹¤¾© µå°ŒÈ­h†s Ü ’ÇØf¨è$Óu˜/¤‡í6²iòywÝÂÐÉl7ìU•=x5—áXÐ<o§ZÙ&¯4“ÜÃÍóK™ùÝbBª[– IêNißô}cJÑo[µ°mVîc=ÕÄW¯p/%*»–†=€U ª t  š‹t½fÏíÐÇ}kdѤ°Ý^Ú½¼SFÿu•œ¹G ÚÖŽ°ÚÌÚµ€Žìí¶sp›f>ˆsó~ä:ÿüEk§•²Ñ4ûM5¯4Å] NâöÑäMB2mx€‚5E`B)I%~P |9ñ~©¥j¶ÿcA¬/¬’ñãŠÎY–5F!-"þí”Üõà€E›Æ^·ÕM¼Ôc´¸]@éÊ'ùD“‹u¸ ˜òÜœ ñÔŒìC}e5ìÖPÞ[ÉuXVP^0z\ägÞ¸)|­&®š².•}4~!]LEq; xŽ˜¶l ym‡ ‚OøÀz–…â…½¿ò®c·žòX/÷ââBä<^Hään̬2¡‡ ì£ñœþ+ âíu¶k¡¾ÖD‰ãRŠH@WÁ•3´œgA¯\•ö™â9>(iúä6zIÒ-´éìÞþE¸>kÀå„b¼qüîÎF1]m¡r,쥺hg˜D»ŒpFd‘½•G$ÔõCÄ_ÛØW£ÃâÈêÆŸmvX˜ùK•íp8Çh/Añž‘¬^êv‰õ”ºZ$—Ÿnµh à•Ë7ÀÎ:€AèEXÖ|S¤ézdÚœ²´öQióê =¾$C;w`ƒÉ;†1ךâ&ðO‰îü t m4«Kˆï`Ôá5g¸}Fu•dÌÍl¡KmÈ!\) íP*Ÿ†Ú¼ú-ý¼b´š÷EÕì™$½i€¸¼kvWÜ!@÷L[ Án7dšõ}d/×O7–âñ“Ì[s(ó ÿ{nszÊ×|U¦è—ðÚêj1Ç#Å»[9Þ6‘ö iÀË=Fqšäâð¤Ÿîu™¼«»)µTÔã›í¾T°°…cÚSÉbø @ýâ‚­‚>moé>)Õ¼U¦ì´Ñî¼5hÑÜ=¼Ú„K-ʾCºˆ\:G…eMË—Á?tPÆ¿âk þßN’ ûËÛˆžt·²µiœD…C9Ú8ºŽy$ð5~-ON’é,ÖöÜ]:îí ãŸüÂxã5ËüLðåî¼-ÛOÑìn.â†T‚ùµyì.-±Ê<1³$FG*8=¹ ÁÞ)¸Öµhæ‡NG¯Y^>¹2²\JÐXÚ«ãÙ†Guu$8<£€ze߉tX,Vö;ønà7Yµ‘eÛ,Ò¤H3®}7NñO‡5 6}JÓZ±{;yž ¦iB,n’4lv1ó)ô=FA¼ëBøuâ¨î$¹Ô'ÓRIŒeÙxòù¯gyçÊø¢ e$"€x$Å‹ï‡Þ 6VÛ.˜¿ÙÚíî¡ Çvc7QÜ<ì7„rF&pà€Ü®xôSR†ÃM7ÞEÕÚ|»Î™ßq`.xç¯@9'‡5«L†žÒùbY!tš&ŽH¤Š:2°ÀÔd`Ö hþ"Ñ~âøR=:ßV†!òíÞo˜‡e¶©;G–@ÀÅiøKŸFðÜ}Í•½¤ÈÎÒoëÌvbÍ#JÑÆY݉f;G$ÐåQ@Q@ÂxÛLÿ„ŽË@šÃY·¼½’D·ó´ùËRÌÛ± NTw­.µ§Ý๊ï˹ŽÖU·‘\Ç#º  ã9ç®?EÐüiÿ «¨ëVZŸQßl—öÚ´ÆK+N|¸âˆÛ‘Ã1Þ79'8 £ à õ›:ÎÞálc¹³}2?=/‹¤ÑZÝÅ3b1m$#mŸÈÎ2ÄÒ,|G£ÝiâüÞÅm^Md¦åÄ{¥Šg‰”dóóFØõ.½«Ç¤[$ÒYj7…ßjÇehó·BrBŽN='æš¿Ã]nf·=•êgVŠkV»òW˼¼iÔ‡h$ça ë´{1Ç=‡‹´ß·„¬´ ½œrâ8.广’)¸o*QŸ0à åxž¸  óø·C‹ÂÖž%[‰gÓïD?e0Àí$Í) *cvâX 1Îqƒ‹Þ Ó^Ê;«ÉKó¨‹Pg“ ѱžHädŠËÔt;ÀÚ økF™aŠƘ÷²-¼b26ì˜E¿+´m€äkÏ¿áñd!°†ãKÓµ•m3WŽuéî ±Ši,Äq}¥âgü®pÊÒÀ/ Áý¥§ý½ôñ}lo#O1íĪe êW9ǽdøwÆ^מÞ J/µO§Ûê+m'Ë ‚ufŒ{áX #ã#<>ðûÅvþ%Ðînµ ;Ëm&æ7[¶¹e–HVÈÛ•ò„xÞX–.Ò6G€5>ë‹á¹´Q.”¦ïÂ6:,×bWß öé2’«åüñ¿šä© ¥z•…í–¡oö‹ »{¸rWÌ‚@ë‘ÔdqY~ñFŸ¬ê7lvú…í¼I;A{hð;D傺QŽ@Ȭχž¾ÐâÔî/-a‚îõÑ™RÿÏG(›Aâ‚ðáI ôÀ‡Á~Õì¼c«ø‡P²ÓôÅÔ-ãŽK{mB[Ã,ªîÆBòF›Þ@E䓎vµó7ˆÏúwĹGüU§‚9ÿ;Zúf¾fñÿNø€7(ÿŠ´ðG?ñçk^†Yþð½Ž#à>†ð‚yÚE¬~bòã:|²WCöúkÿŽÿõëÁ':uŸÌ­óŽƒý™+«®lWñ¥ê:?ÃE/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´V¥/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯GØ?é¯þ;ÿ׫´P/°Ó_üwÿ¯_-xœlÔ¾!&õãÅì9Ÿô;ZúʾOñYÿ‰·ÄA¹GüV ÁÿÇ¥µzgûÂôf8€úÁ':uŸÌ­óŽƒý™+«®SÁ':uŸÌ­óŽƒý™+«®lWñ¥ê:?ÃAEV¡EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP_'ø¬ÿÄÛâ Ü£þ+àŽãÒÚ¾°¯“üVâmñnQÿƒpG?ñém^†Yþð½Ž#à>…ðIÎgó+|ã ÿfJêë”ðIÎgó+|ã ÿfJêë›üizŽðÐQE¨QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÉþ+?ñ6øˆ7(ÿŠÁ¸#Ÿøô¶¯¬+äÿŸø›|D”Å`ÜÏüz[W¡–¼/Fcˆø¡|s§YüÊß8è?Ù’ººå<s§YüÊß8è?Ù’ººæÅ^££ü4QE`jQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEòŠÏüM¾" Ê?â°nçþ=-«ë ù?Ågþ&ßåñX7sÿ–ÕèeŸï јâ>èÏE¬²È¡ÆH^Ÿ,‚ºí;þ~?ñÆÿ å4“Ÿ Åó+|ëпI\˜·jÒõ*‡ðÑÖlißóñÿŽ7øQý±§ÏÇþ8ßá\ÏÌÍluŸÛwüüãþlißóñÿŽ7øW'EÌ,uŸÛwüüãþlißóñÿŽ7øW'EÌ,uŸÛwüüãþlißóñÿŽ7øW'EÌ,uŸÛwüüãþlißóñÿŽ7øW'EÌ,uŸÛwüüãþlißóñÿŽ7øW'EÌ,uŸÛwüüãþlißóñÿŽ7øWžh:Ãêz§ˆ,šŒi:‚Ù«Ϙ ¬î>œÌF?ÙÏzç5?ˆú|VWgkr×–—–0Ïk$y“˹¸XC(Brß œ‚@È£™…fþØÓ¿çãÿoð£ûcNÿŸüq¿Â¼Žçâ&o$‹PûRyßh´ùšÜE·Ì.3Œ êF , Z¿6²šûXÅ¢ÂèCfÁÈYÃZÁ2’{dÍŽ;G3 ™ý±§ÏÇþ8ßáGöÆÿ?øã…xC|TìÍzš^ëOøG?µUüߘÝlöLcïme?Ò¶.»[ˆnn X$e]’°ŒÉ´`îûªÜAÏs0±éÛwüüãþlißóñÿŽ7øW™xOÅú_‰YŒ7Ðù¶qÞÀnmÌ~t}×\öÏ8<ƒÐ‚héž8‚æ%´ë¹ïžóP…m¬ÓÌa­ÛÛ™XœÕ8ÎIb84s0±ëÛwüüãþlißóñÿŽ7øW™Kã "=m´¶-ÏØÚèB|qåùžVÿïmïŒgåÎî(ðŸ‹ô¿² o¡ólã½€ÜÛ˜üè$û®¹ížpy¡œÌ,zoöÆÿ?øã…ÛwüüãþÉÑG3 göÆÿ?øã…ÛwüüãþÉÑG3 göÆÿ?øã…ÛwüüãþÉÑG3 göÆÿ?øã…ÛwüüãþÉÑG3 göÆÿ?øã…ÛwüüãþÉÑG3 göÆÿ?øã…ÛwüüãþÉÑG3 göÆÿ?øã…|¹âyMK⣮Öñs0Èäƒgk^ï^­ÞøðnQÿWB9ÿ+Zôr·|Gɘb>ØõOx_¾±>$ñ—¥}¦L@.gXÚM»·mä¹rGMÃ=E`ÿÂÞø_ÿCæÿ‹]eŠÜɦ؈® Š1ïc‘³‘€åãïdçÓŠŸÈ¹ÿ ¤_ø.?üz¹qŸÇ—©t?‡Œÿ…½ð¿þ‡Íÿø[ß ÿè|Ð?ð1k³ò.è)þ ÿ£È¹ÿ ¤_ø.?üz¹N3þ÷Âÿú4ü Z?áo|/ÿ¡ó@ÿÀÅ®Ïȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêã?áo|/ÿ¡ó@ÿÀÅ£þ÷Âÿú4ü Zìü‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ 3þ÷Âÿú4ü Z?áo|/ÿ¡ó@ÿÀÅ®Ïȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêã?áo|/ÿ¡ó@ÿÀÅ£þ÷Âÿú4ü Zìü‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ 3þ÷Âÿú4ü Z?áo|/ÿ¡ó@ÿÀÅ®Ïȹÿ ¤_ø.?üz"çþ‚‘à¸ÿñêò„ñŸÂøõÍSR·ø·o:¤ââîÅ.í|—qppÆ3"å"NŽ9ɬ[K߃VöüU€8ŽÊ(eK»XÚ´›Î‡hX‚“»ï#Š÷"çþ‚‘à¸ÿñê<‹Ÿú Eÿ‚ãÿÇ©â“êŸæ¹[÷ø›§6¦Ï+\^É5¤¯?™³!‘âhÆhj‚õ99ét?ˆ¿ t‰/ä¶ñþŠæþán%ßy,1B…¶%8õ'¶ôo"çþ‚‘à¸ÿñê<‹Ÿú Eÿ‚ãÿǨÅÿÀÑb–C┺ïöØÚ1ÿ­è"û¿êv€»zàsÍj^x¿á÷ïÄË K¶Õ¨²Ã{)/ÙE©Pl1ŽAä’ã¯ä\ÿÐR/üþ=G‘sÿAH¿ð\øõyvŸã_ƒö3XËÄ-)šÊæîæ-×ÑàµË»ÈsŒcŒg5Ÿ/ˆ~ÉâoíÃñ.À7Û¾ßöu»·Øf0˜r[g˜WiáK` Ø|‹Ÿú Eÿ‚ãÿǨò.è)þ ÿ 0Ð|oðƒF}9­~ éNtý.=./2ú3º$Û†ló|£‘íT"ñGÂ[Kˆî´¿ŠvšuÒKxí4W–îd[›†¸‘:2à;§Œœœú÷‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔä’ø«á šÓߟ‰–Ùï´À^Ãä›<Ìíߨ6ÝÛw â®h>7øA£>œÖ¿t§:~——™}ÝmÃ6ù¾QÈÀö¯Oò.è)þ ÿ£È¹ÿ ¤_ø.?üz€8Ïø[ß ÿè|Ð?ð1hÿ…½ð¿þ‡Íÿ»?"çþ‚‘à¸ÿñê<‹Ÿú Eÿ‚ãÿÇ©ÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>hø´ÂÞø_ÿCæÿ‹]Ÿ‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>hø´ÂÞø_ÿCæÿ‹]Ÿ‘sÿAH¿ð\øõEÏý"ÿÁqÿãÔÆÂÞø_ÿCæÿ‹Gü-ï…ÿô>høµÙù?ô‹ÿÇÿQä\ÿÐR/üþ=@gü-ï…ÿô>høµåí©éúÅ—5-*þÖöÊãÅណ>Çj2÷ÈúŠúȹÿ ¤_ø.?üz¸€&‹ùë#åw±‹fNæè2ØÇsÎkÒÊ¿Þ>LÃðö›Ÿì{L²Ÿ”ôïST:knÑí>e?)è=êjæÅÿ^¥Qþ (¢¹BŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ·wW1ȉÄÈ¢(ðÈäEu°ÐM:êàÅ|×?,xë¸çŒ{ÖOÅKMJÿÁzÍžæé´Ý¬o±Ü˜‡Ê­ÆÖ# ŒEy‹4èu+-Qüá»Ûtðµý¥ÔcJ–ÓÏ‘„g„FȦG]²ýÐvî#?>)ˆökP¿G½’;Û”u·«,¬!O#šÂø%,±|ð“E#ÆÇDÓFUˆ8û0ªZº¬¾Ö?·…Òêª&Jñ•NιèÑc–äîÃd _ÿäˆxKþÀºoþ“PRu ‘ ŒßJ‚Á|Ó’SŒûΘuwÏru6G»|¾Ê»I “œ AôÁ¯&ÖíüO'Ä7ñœ’Zi—°ØÄ|Çf%ÁH<³¼”¾C ÂÞ23ÆyÝR×Ä_ð‰xƒJÓm¼I-ÕÇöÿÚì岓ÈòžK†·0åB³³4{v’X;ç ÀÐm¼ÿŸ¹ÿïá£í·Ÿó÷?ýü5ä¶ÃÄ:ˆml,oüP¾“QA-ÅÄ2C>>ÉpÒ©g@˘-þl™TŽÎŠóâüN$ŽãPMR8ïA¶6³:0|“ h„!‚€Wwç Î=¢MJxÞ4’þDiljÓ\àœy8ý§ý¶óþ~çÿ¿†¼ÊûNMaü*še߉ZÖ-fW¸¹¸Žx§‰~Ã:ýéP2©fUÏ,@ ð9øo<~÷ÖPß]ê–†;xÒf´ÖWYd3,Q0,Ê©åFÓ¹qÉÛöÛÏùûŸþþùÿÄ3Í=Ï%žs#ÿÂRi fÀ±µ“Øá]Ï…£ñ4ZîŸy{u¬L—wº¤WPÜ!òb…'“ìÄ.ѳåUÚßÄ¿àõ£‰Û´ÛÈÔYK4K=«´r) sV~Ñoÿ=âÿ¾Åqž8Qmáý>òÜ®K³"Dà’Þh9õáTsé\kz°ñÿ7ç]ÁCz©µsk*^áî_h·ÿžñßb´[ÿÏx¿ï±^u½XÿËüÿ÷Õ'öÖ«ÿ?óÿßU§ö4?˜>³.Ǻý¢ßþ{Åÿ}Š>Ñoÿ=âÿ¾ÅxWöÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?›ð¬Ë±î¿h·ÿžñßb´[ÿÏx¿ï±^ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæüë2ì{¯Ú-ÿç¼_÷Ø£íÿóÞ/ûìW…mj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù¿úÌ»ëö‹ùïýö(ûE¿ü÷‹þûá_ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþoÀ>³.Ǻý¢ßþ{Åÿ}Š>Ñoÿ=âÿ¾ÅxWöÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?›ð¬Ë±î¿h·ÿžñßb´[ÿÏx¿ï±^ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæüë2ì{¯Ú-ÿç¼_÷Ø£íÿóÞ/ûìW…mj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù¿úÌ»ëö‹ùïýö(ûE¿ü÷‹þûá_ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþoÀ>³.Ǻý¢ßþ{Åÿ}Š>Ñoÿ=âÿ¾ÅxWöÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?›ð¬Ë±î¿h·ÿžñßb´[ÿÏx¿ï±^ýµªÿÏüÿ÷ÕÛZ¯üÿÏÿ}Qýæüë2ì{¯Ú-ÿç¼_÷Ø£íÿóÞ/ûìW…mj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù¿úÌ»ëö‹ùïýö(ûE¿ü÷‹þûá_ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþoÀ>³.Ç¥ëß4+=Zk?ìŸÜ›}±4¶þ¼’&eP­µÄxapà õŒ£ÿ WCÿ ?ð™½ÿãuÁmj¿óÿ?ýõGöÖ«ÿ?óÿßTcCù˜}f]Ž×Sø¢Üé×6Ñè>2,.Š[Ã7¸‚9ýÝKàïYø?àçƒìu}?[’ôé6Q½µ–“qs$Mº‡Ðùdœàp¿ÛZ¯üÿÏÿ}QýµªÿÏüÿ÷ÕØÐþfY—c½ÿ…«¡ÿÐÆŸøLÞÿñº?ájèôñ§þ7¿ün¸/í­Wþçÿ¾¨þÚÕçþûêìh3­K±ÞÿÂÕÐÿèãOü&oøÝðµt?úøÓÿ ›ßþ7\öÖ«ÿ?óÿßTmj¿óÿ?ýõGö4?™‡Ö¥Øïájèôñ§þ7¿ünüVЇ]Æcþå›Ïþ7\öÖ«ÿ?óÿßT‡YÕ[ùÿïª?±¡üÌ>³.Ç{ÿ [Aÿ Œÿð™¼ÿãuçú_ÚÊòÕ|@×v©{i%´ÙÛ‚ÅdU eg¡*qOþØÕ?çúûê½WáÝ•ªh0jBöË•o6bIfÃ9è8 Š”#—¯kvôEFn·ºÏÿÙgwenhywfar-5.12.0/doc/dialog/main.c0000644000175000017500000000153313142134474014002 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "testdialog.h" #include "gtk2_gui.h" int main(int argc, char **argv) { GWEN_GUI *gui; GWEN_DIALOG *dlg; int rv; rv=GWEN_Init(); if (rv) { DBG_ERROR_ERR(0, rv); return 2; } gtk_set_locale(); gtk_init(&argc, &argv); gui=Gtk2_Gui_new(); GWEN_Gui_SetGui(gui); dlg=TestDialog_new(); assert(dlg); rv=GWEN_Gui_ExecDialog(dlg, 0); fprintf(stderr, "Result: %d\n", rv); return 0; } gwenhywfar-5.12.0/doc/dialog/testdialog.c0000644000175000017500000001610313142134474015214 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "testdialog_p.h" #include #include #include #include #include GWEN_DIALOG *TestDialog_new() { int rv; GWEN_DIALOG *dlg; /* create dialog */ dlg=GWEN_Dialog_new("testdialog"); /* set signal handler */ GWEN_Dialog_SetSignalHandler(dlg, TestDialog_SignalHandler); /* read dialog from dialog description file */ rv=GWEN_Dialog_ReadXmlFile(dlg, "testdialog.dlg"); if (rv<0) { fprintf(stderr, "Error reading dialog file (%d)\n", rv); GWEN_Dialog_free(dlg); return NULL; } return dlg; } static int GWENHYWFAR_CB TestDialog_SignalHandler(GWEN_DIALOG *dlg, GWEN_DIALOG_EVENTTYPE t, const char *sender) { fprintf(stderr, "Received event %d from widget [%s]\n", t, sender); switch (t) { case GWEN_DialogEvent_TypeInit: /* This is the init event. It is issued immediately before showing the * dialog on screen. Only after this signal has been received the properties * of a dialog are accessible. */ fprintf(stderr, "Init\n"); /* add some entries to the ComboBox "combo1" */ GWEN_Dialog_SetCharProperty(dlg, "combo1", GWEN_DialogProperty_AddValue, 0, "Erster Text in Combo1", 0); GWEN_Dialog_SetCharProperty(dlg, "combo1", GWEN_DialogProperty_AddValue, 0, "Zweiter Text in Combo1", 0); /* select first entry (entry 0) of the ComboBo "combo1" */ GWEN_Dialog_SetIntProperty(dlg, "combo1", GWEN_DialogProperty_Value, 0, 0, 0); /* same for ComboBox "combo2" */ GWEN_Dialog_SetCharProperty(dlg, "combo2", GWEN_DialogProperty_AddValue, 0, "Erster Text in Combo2", 0); GWEN_Dialog_SetCharProperty(dlg, "combo2", GWEN_DialogProperty_AddValue, 0, "Zweiter Text in Combo2", 0); GWEN_Dialog_SetIntProperty(dlg, "combo2", GWEN_DialogProperty_Value, 0, 0, 0); /* set the title of the ListBox "listbox1". Please note that multiple * columns can be specified here (separated by TAB, i.e. '\t') */ GWEN_Dialog_SetCharProperty(dlg, "listbox1", GWEN_DialogProperty_Title, 0, "Column1\tColumn2", 0); /* add some entries to the ListBox "listbox1". As with the title * multiple columns can be specified (separated by TAB). */ GWEN_Dialog_SetCharProperty(dlg, "listbox1", GWEN_DialogProperty_AddValue, 0, "Zeile 1 Spalte 1\tZeile 1 Spalte 2", 0); GWEN_Dialog_SetCharProperty(dlg, "listbox1", GWEN_DialogProperty_AddValue, 0, "Zeile 2 Spalte 1\tZeile 2 Spalte 2", 0); /* for every column of a ListBox the width can be specified. This is done * by modification of the property "ColumnWidth". In this example we set * the width of column 0 to 100 pixel and that of column 1 to 200 pixel. */ GWEN_Dialog_SetIntProperty(dlg, "listbox1", GWEN_DialogProperty_ColumnWidth, 0, 100, 0); GWEN_Dialog_SetIntProperty(dlg, "listbox1", GWEN_DialogProperty_ColumnWidth, 1, 200, 0); /* Set the width and height of the dialog itself to 640x480 pixel. * As you can see specifying the dialog itself is done by providing * an empty widget name. */ GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Width, 0, 640, 0); GWEN_Dialog_SetIntProperty(dlg, "", GWEN_DialogProperty_Height, 0, 480, 0); break; case GWEN_DialogEvent_TypeFini: /* this is the fini signal. It is emitted immediately after hiding * the dialog from screen. After this signal handler returns the * properties of this dialog are no longer accessible. */ fprintf(stderr, "Fini\n"); break; case GWEN_DialogEvent_TypeValueChanged: /* this signal is emitted by some of the widgets when its value * has changed. For LineEdit widgets this event occurrs when something * is entered into the text field, for a ListBox this is emitted when * another entry from the ListBox is selected. */ fprintf(stderr, "ValueChanged\n"); if (strcasecmp(sender, "listbox1")==0) { fprintf(stderr, "Selected list entry %d\n", GWEN_Dialog_GetIntProperty(dlg, "listbox1", GWEN_DialogProperty_Value, 0, -1)); } break; /* this signal is emitted by some widgets upon activation, e.g. a Button * widget sends this signal when it is clicked. */ case GWEN_DialogEvent_TypeActivated: fprintf(stderr, "Activated\n"); if (strcasecmp(sender, "okButton")==0) return GWEN_DialogEvent_ResultAccept; else if (strcasecmp(sender, "abortButton")==0) return GWEN_DialogEvent_ResultReject; break; case GWEN_DialogEvent_TypeClose: /* this signal is emitted by the dialog when closing of the dialog is * requested (e.g. by clicking the little X in the title bar). * If the dialog doesn't want to be closed you can return * GWEN_DialogEvent_ResultReject here. */ fprintf(stderr, "Close\n"); return GWEN_DialogEvent_ResultNotHandled; default: fprintf(stderr, "Unhandled signal, ignored\n"); return GWEN_DialogEvent_ResultNotHandled; } return GWEN_DialogEvent_ResultHandled; } gwenhywfar-5.12.0/doc/dialog/Makefile.in0000664000175000017500000006020314730344661014765 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 = doc/dialog ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = images EXTRA_DIST = \ main.c \ testdialog.c \ testdialog.h \ testdialog_p.h 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) --gnu doc/dialog/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/dialog/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 clean-libtool 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 mostlyclean-libtool 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 clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ 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 mostlyclean-libtool 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: gwenhywfar-5.12.0/doc/dialog/testdialog.h0000644000175000017500000000177413142134462015226 00000000000000/*************************************************************************** begin : Sun May 16 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ /** @file dialog/testdialog.h * This is the public header file for the dialog. It is to be included * by the sources using this dialog. */ #ifndef TESTDIALOG_H #define TESTDIALOG_H #include #include #include /** * This is the constructor for the test dialog. * It reads the dialog description from the XML file * "testdialog.dlg". It also sets the signal handler. * As a result of this call the dialog is completely * setup for use with @ref GWEN_Gui_ExecDialog(). */ GWEN_DIALOG *TestDialog_new(); #endif gwenhywfar-5.12.0/doc/dialog/Makefile.am0000644000175000017500000000013613142134462014741 00000000000000SUBDIRS=images EXTRA_DIST=\ main.c \ testdialog.c \ testdialog.h \ testdialog_p.h gwenhywfar-5.12.0/doc/plugindescr.xml0000644000175000017500000000121713142134462014510 00000000000000 1.3.0 Martin Preuss(martin@libchipcard.de) Exporter for CSV This plugin exports data to a CSV file according to a given configuration.

This plugin exports data to a CSV file according to a given configuration.

Diese Erweiterung importiert und exportiert CSV-Dateien.

gwenhywfar-5.12.0/doc/db2.png0000644000175000017500000013450613142134462012634 00000000000000‰PNG  IHDR^éS2Ö pHYs_^ΑëˆtIMEÓ âìHi IDATxœìÝipcç}çû/ÎÁ @wp'{a﫺[í–e˱t½$rf2g2ucOªnÍܪ[uóâÖ$5ËÉ2“ëÊš¤fœI\©ÄwâÄ–íÄV,«-µ––Új©Šìnî¸$±ïÀ¹/ZÄôÞd7›`ÿOU—àœƒ$„óÃsžçÿ€B!„B!„B!„B¬›NÓ4­ÜB!„¨J¹ „BQ)$x !„Bl ^B!„›D‚—B!Ä&‘à%„B±I$x !„Bl ^B!„›D‚—B!Ä&‘à%„B±I$x !„Bl ^B!„›D‚—B!Ä&‘à%„B±I$x !„Bl ^B!„›D‚—B!Ä&‘à%„B±Iôån€ØÅb‘|>N§C§Ó•»9⚦¡iªª¢ªj¹›#„¢Œ$xm—/_æ›ßü&íííØíör7GÜ"•J166Æ?úGÿˆãÇ—»9B!ÊH‚×6‘Éd…Bô÷÷£×ë …BånRÅÓëõx<¬V+/^$N—»IB!ÊL‚×6a³Ùèìì䨱cÄãq±Ùl(Š ã+MÓÈf³ìܹ“úúz&''q8ån–Bˆ2“àµÍ$“I–——‰Çãô÷÷c6›ËÝ¤Š”ÏçùÉO~‚Ë墾¾¾ÜÍB±EHðÚf4MC¯×ãt:innÆb±”»I)ŸÏc6›e¢ƒBˆÛHðÚ† V«§Ó‰ÕjÝðãG£Q‚Á ‹‹‹˜L&ìv;ªª‹Åðxø€ááaöìÙƒÑhÄl6c2™èííÅëõréÒ%þÍ¿ù7¥±e~¿ƒÁ@}}=}}}8NŒFc¹eB!*œ/ñXVå^=xàÀºººèììdnnŽöövr¹Åb£ÑH:&S(0˜L&t:]]]ìÛ·¹¹9þüÏÿœl6KSSmmm¥’Ùl½^ÉdÂjµb·Ûihh ««‹H$Âüü<Éd³ÙŒÛíF¯×S]]MCCC¹MB! ÁK<ƒÁ@KK ýýýtwwßö˜¦i444 ª*@€+W®0::ÊÊÊÊmE]F#n·ƒÁÜ?11A[[½½½=z€/ùË¥š¦mÞ‹B!6/ñD¬¨¿û»¿#Nó›¿ù›èõzR©±Xì¡ûÇb1¢Ñèm÷åóyÂá°,6-„â©%ÁK<étšË—/388Huu5ÕÕÕ¤R©ÒLÇÙÙYâñø]û™L&zzzâܹs8l6‰D‚B¡ÀÎ;×=31ŸÏ“H$°X,2ÎK!DYIðë–L&I§Ó‹Eâñ8Ñh”d2‰Åb)Uª_}¬X,’Íf#R(Èçó,,,H$H&“hšF"‘ Nc³Ù8räSSS óúë¯ãñxÐ4 §ÓÉÁƒÑét‹E Éd’••âñ8.—‹b±H*•BQjkk)‹ÌÏÏ£iƒA‚—Bˆ²’ªbÝfff˜ŸŸ'—Ë1>>εkטššºm»ÝÎóÏ?O?‘H„o~ó›¸\.ÚÚÚJÛ¬Öû˜ššbqq»ÝΑ#Gxùå—9|ø0CCC\»v ·Ûͧ>õ)ŒF#±XŒl6‹Ëåbvv–‹/266Æ¡C‡ÈårL&Ï=÷…BsçÎQ(6õw$„BÜ‹ôx‰u«¯¯ç¹çž£¿¿“É„ËåÂårݶªªÔÖÖòÒK/qâÄ L&‡þþ~Nœ8ACC=z”\.Gcc#.— N‡^¯§¯¯ÚÚZž}öYŒF#‡ššTUeïÞ½øý~r¹NG{{;{÷îÅëõâñx0™L|ñ‹_$ŸÏc³Ùðx<ÒÛ%„¢ì$x‰u[­ ßÞÞ~ßmEÁl6ÓÙÙùHÏáv»q»Ý÷|ÌçóáóùîºÿÎöÜ9ÓR!„(7¹Ô(„B±I$x !„Bl¹Ô¸ ­]ý'6ßj¡W)ö*„âV¼¶EQ(‹Äb1ÆÆÆ0™LånREZ-›±ÞšcB!¶7 ^ÛŒÙlfyy™ññq&&&ÊÝœŠæp8n[I!„àµÍX,8€ßï/wS*žÁ`Àår‘ÉdÊÝ!„[„¯m&‰P(X^^.wS*šN§£ººZÆx !„¸¯m¤X,255E"‘`br‚‚ :EWîfU¬O÷¼gÍ1!„•I‚×6¢i‹‹‹´´´Ð¹»—pFQÆv—E1ŸçÚßÿœP($ÁK!D‰¯m&ŸÏ£×ëqT;ÉÕ7=x-/„˜™dvt ‹ÝJµÇ…Ñj!HPíqãm®Çb³¢¨Û·Œ\!—§HQÖˆBq ^bCåsyãS\<{Ÿ¿‘¶T{kHFã¤I‚æ&fhÛÙ…«¶³mm³þ2é ù\îf`S¶o`B±½ÉLl(o“—׃Þh ¡½™ž»Øú(ϼôÝûv2;<Á_üûÿÂÏ_{›¥¹Å‡>_-B .3?>K!/=HB!ž^Òã%6·¹ž£¿p“ÕÂkõCrÙ<'¿ðÞ¦úûîS,¸Áõ‹“Š'¨ooÆ`4lb«…Bˆ#ÁKl N‡Åf¥¥»L*Ãó*Ó×ǘºÖ†Íagìê Ðé°9ìgçqÖ¸ð4Öá¬q13:ÉØÀu2© 37Æiìl!›Ê2u} £ÅŒªWÈesD—#tö÷RÛXWî—+„BÜ“/±©l;¾–;ZˆGbL^ÅçoââÙó-&êýM\yû"žz/½‡w³ûøâáñpŒl&ÃÂônŸ‡¥¹ oÿàušºZ±Ø-„C+\zó/ÿË*ÁK!Ä–%c¼Ä¦ST»ËA!Ÿ'Z&º¦¦¡–î};ØýÌúO 1ym ¢£®¥žº–zj}ì<º—·†l6K"c×±ýœø_ž§{ïNn\ ’±B!¶.éñ›N+IÇ“(ªŠÃí¢®µUUÉçrÌ O°X$ŽSíÉ¡ÓéÐ ŸüËc²˜QõzÛ›yî—_$“N3=<Áüä,©DŠb¡Xî—'„BÜ—ôx‰M•ÏçIÅ“„‹˜­j›|¨ªB"#“Ïæ(ä hÚƒT±¨‘ÏæHÅ’¤)ò¹ü&½!„âÑIð›BÓ4ŠÅ"ÉXœàìóS\u5x›|L Žðê_¼B`lšžƒ»iêòcuØoîS(ÞUr¢X(2øþ%þø·~ŸB¡@Çîü;:QTåfù‰â'ÿdD!„[Œ\j›fqzŽŸ¿ö6ž=ϧùóþì)ŒfÏž'‰Ëd™"Ža¶˜™'“JßvœéáqF¯^'²´B!Ÿ'²´ÌüÔì'Á.Adi»ÃŽÞ oq!„[‡œ•ĆŠ,­Ä(äó,/„ŒM‘IgÈ$Ó„CË‹EºìbÏÉC4u¶’I¥©÷71;2Éò|á>Æîr`¶Þ¬h¯Ó)T{ÜX«lD–ÃÌŒL`4›ð6ÕÓÒÝÎøàŠN¡{ß ù‘å0žú:t:Y \!ÄÖ"ÁKl¨d,ªªx}¨ŠJl%F>_$‰ж³‹ÖÞìNª^%›Î°÷ÙÃÄV"D—ÂgèÜÛG!ŸGU\µnàæ©dŠ•Å%:÷ô±ûØ~â‘ñp”D$N]K'¿ð\µ5 l[9 B!Ä=IðÊÛT»ÎÃÁOG§SPUZñæ`yUUQ úRo”ÁdÄå­á…_ýÅbEUÐ ´öv C‡ÑlààsϰïÙÃè Tƒžj›—þׯ 5T½ŠªªtíéCQT½¼­…BlMr†JÕ«¨z“ż¦íu:ªªb±[o»ÿÎeL`ºå‰¸kü–Ád|¤6 !„›Ef5 !„Bl ^B!„›D‚—B!Ä&‘1^ÛP<gi>ˆZ´¢ª’­ËAÉç!S"®B!n#Ák›±Ùl‹E–烸³nE‚W9h…“ «Õúð…BT ^Ûˆ¢(tuu¡ÓéXXX`ii©ÜMªX:ŽÝ»wã÷ûËÝ!„[ˆ¯mD§Óáv»q»Ýx½Þr7§âY­Vñx¼ÜMB±EHðÚf4Mcii‰ééiœN§\j,MÓ˜˜˜ ¥¥‡ÃQîæ!„Ø"$xm3±XŒ¡¡!Þ|óMvî܉Ñ(EEË¡X,200À™3g8sæL¹›#„b‹àµ ù|>žyæžþyÜ]&¹\MÓp:ånŠBˆ-D‚×6d2™p:ÔÕÕmz𚘘`||œP(„ßï§­­ ÇSz< –¶ñz½øýþm9=—Ëa³ÙÐ˺‘B!n!€Ä†ŠÅb ðÊ+¯ðÝï~—‰Déñt:Íôô4¯¾ú*Äb± yÞ|>O4%›ÍnÈñ„Bˆ'A‚—ØP;w£ƒ••þäOþ„ýèGÌÌÌ”olläÀ˜L&:;;Ù¹sç†ßùÎwÈårôôô”œ={–©©)ªªªp¹\¸Ýn^ýuæççùìg?˳Ï>K*•Âb±ðÑGQWWÇÁƒùÌg>CUUš¦á÷ûQU•ÞÞ^úûû12£P!Ä–#g&ñDy½^Ž;Æ×¾ö5~ö³ŸñÚk¯¡iZiöa$áÒ¥K444ÐÕÕE{{;]]]ìÝ»—Ë…N§ÃáppôèQr¹ßüæ7Ke*\.WéyL&:‹Å‚Íf+×ËB!H‚—x¢Ìf3|õ«_ehhˆ‘‘TU%•JÉd˜ŸŸÇï÷ÓÐÐPšåxâÄ …ét£ÑˆÛí¦¥¥EQˆD"2{Q!ÄSIf5Š'Îh4âñxøêW¿J]]ßùÎwîZ8:‰L&o»/“ɰ´´D.—czzš‘‘8À… øþ÷¿¿™/A!„ØÒã%ž8NÀîÝ»cttƒÁ€ÛíæØ±cœ;wŽh4ÊÊÊ ‡ƒÅÅEœN''Ož$‘H Ñëõü“òO0 ÌÏÏó­o}‹^xºººÛž/N“H$p8¥çB!¶ ^bCÍÎβ¸¸H&“áã?FUU¼^/:·ÛÍáÇÉf³œN'555œ8q‚ùùyVVVxÿý÷ñxýéOsòäIE)U›KÓ44MÃd2±²²Rîæ!„Ø"$xm#:EQáòåËF ^e‹Åèêꢮ®Žb±Xîæ!„Ø$xmCsss ÐÓÓƒÑh,ws*R±Xdll ‹Å‚Ãáå‹„B¼¶%£ÑHCC/¿ü2UUUånNEÊçóüð‡?ÄjµR(ÊÝ!„[„”“B!„Ø$Òã%6T(" …¨©©!ŸÏ£iZi‰ »ÝŽ^¯çÃ?ÄårÑÒÒBssó]ÇI¥R,--177GOO‡ƒH$ÂG}D6›ÅçóÑßß×~Éd’©©)®]»Fss3---ÔÖÖ>ñ×-„B¬…/±!’É$@€‰‰ ±X ¿ßO6›%N£ª*ñx¼„~øÃÒÖÖÆÉ“'F§§¹xñ" 8âñ8ï½÷Á`Ý»wß3xe³YnܸÁßþíßròäI¬V«/!„[†/±!ÆÆÆøÆ7¾A.—ãÔ©Süú¯ÿ:ªª¢i ¼ÿþû\½zƒÁ@ww7вþ«Ü‹…îînB¡ÑhôžÛ8×&„bË’à%[0d``€×_ßøßààÁƒ¥K‹^¯—Ç“ÉdhjjZS}1›ÍFgg'n·—ËÜ,—¡×ëÑét÷%¨(Ê#…:!„b3HðmzzšááavìØAggçm[,Z[[I§Ó·UrÇãÌÏÏ3>>Îôô4f³™¦¦&¼^/±XŒÉÉI†‡‡q¹\·¹;æççKË#±´´D>Ÿ¯vëû×k¨Ýö;RÞB!ÊB‚W…º³ÇéqêLMNN8tèÍÍÍØl¶{>_oo/333,--122‚N§ã•W^ÁårñüóÏsæÌ¦§§ùë¿þkþøÿ˜ÿøÇx½Þ»Ž©i…BK—.ñöÛoÓØØˆªª 033C&“yä×´U­%T !„غ$xU˜û]â{Ð廇I$D"‘uï·:3ñàÁƒäóyøðÃyæ™gèî¯ïû &&&…B¸Ýn^|ñEÌf3^¯—@ °-_í©’&„O' ^äaãª5| R©Éd’\.·æýL&‡·Û×ëÅ`0‰DÐ4 ›Í†Ýnàþ¹\Ž÷ߟ`0Hcc#uuu˜Ífjjj°ÙlÛzp `Bñt’QÈâ6²¶ãêLÂÙÙYâñøºÂ×ã( |üñǬ¬¬P]]]‘ëR>îX- nB±¹$xUˆ'JúûûÙ»w/ׯ_'ÇŸØsÝK2™$Wìzˆ¿£i2Xþ_ëtĄ⠓à%ÛêX­#GŽðýïŸï|ç;¬¬¬”ff2B¡—.]b|||Þ×`0pâÄ Þxã Èd2¤Ói–——7­çm«Øè™ŠÄ„bãÉ/q—õŽõ²Ùlôôôð«¿ú« 1;;Ë[o½Egg'f³™\.G<GÓ4²Ù,Ñh”B¡@,cqq±ô/S,I&“D£Q–––hiiayy™……Òé4‹‹‹hš†¦i¬¬¬°cǦ¦¦øè£xçwðù|LMMa³ÙÈf³$ R©f³¹".E®eì×£Ž[Ý^JQ!Ä£“à%îò(—ìš››ùú׿ÎÈÈï¾û.o¼ñÉdò¶ò‡FÓ4p8äóy™™™! R,±Ûí$ ÆÆÆˆF£|êSŸ"3==Ñhdyy‡ÃÝng~~žÎÎN>õ©Oa³Ù8þ<6› «ÕJ?&“‰d2I"‘Àd2UDðZµžö¨$ˆ !ÄúI𪹹™Ïþóœ9s›Ív[ùÕ"¨‡.Õô2™LX,–ÒºŽŠ¢àr¹¨¯¯gÿþýd³Y¬V+‹NG]]ÅbƒÁ€ÕjÅd2ÑÚÚJmm-§OŸ.U®×ét¨ªŠÅb©˜Þ®{ùM[sÏÖ­êQ.1ÞÄ$˜ !ÄÝ$xUMÓ6%|˜L&L&Ó·1 w­§xgÑU³ÙŒÃá¸kß[+߯RU³ÙŒÛí~„oriñΰ´c½$ˆ !„/q‡JX 'ðÜk_¹T)„ë'Á«‚ܪ6rÉ !@‚˜B¬…¯m(3::Ê«¯¾ºæes~øÃ>áVU–B¡À|@ww7§ÜÍ) bBq7 ^ÛÏçcÇŽÆ5ëªÔÁçOŠ¢(´´´ÐÐÐpÏqi•H‚˜BHðÚ6 …Éd’••êêêxöÙgKL×¢µµõ ¶®2µµµa³ÙˆÇã¤Óéuý=*Áã( aBˆ§•¯m"‰péÒ% .—‹b±¸®q[?øÁž`ë*—¢(Äãq>üðCNžòwân¼„Ej„m_Re_ˆ'ÁKˆ5ÅÚÝïwõ 5#´ŸØº$ˆ ±~¼„OœÔ« Ä„x8 ^B¬Ó=6r’X;¹ YY$ˆ q7 ^B÷ÞkòA'žVÙ$ˆ !Á«bhšöÐð%ÖF>ô7ŽÔ«lRe_T" ^Bˆ-EN¢•IŠ»ŠJ!ÁKÜE.3>˜ŒñÚOkk+V«µÜM{êœÿìg×¼mWW×}›žž¦X,ÒÚÚJMM\^‡|>O$¡ºº«ÕÊÂÂB¹›´!ní%M$·Ýwçí‡õºn6½^OMM µµµ ’ÍfËݤ²º|ù2W®\Áëõ¢ªj¹›s_ϼöZéçŸþô§¼óüó·Ý¾Õ­·W^Ý~õ8wÞÞŠ‰‘H„Ï~ö³ÔÕÕ•»9¼¶»l6‹N§#™LÒÐЀ×ë-w“ž:ç×±mww÷}eqqññT¬V+mmm:tˆb±H&“Ááp (J¹›öxþÇÿ¸íæÐ/ÿrég¿ßó¾;o²Mßûn¶T*Eww7]]]LLLl‹žÈÇ188Èw¿û]>\z>þÕ¿*ýxîÜ9Ôûoo»  ÞñóÝvû“ý ··\EÁf³ …dÿþý¼Äæ0¸Ýn·Ä›n;ûV[ÿW.wÏÇ\.ù|~“[´½$“I’É$‘H„Ý»wc·ÛËݤ ÕwåÊ]÷­¯¾¾¾{Þþn?_¾Ç¾wZÝv­Û?È?üÃ?`µZØË[Ijkk9rä_ùÊWfjjªÜMz4ÿõ¿>ð¾À'ÿmnn^Ûí¯} €†{÷!V÷]µžc(Š‚Õjeß¾}D"‘Òí­@‚WÐét(Š‚ªªèõÿ'ƒŒŽŽòóŸÿ»ÝNmm-ÕÕÕhoo§¡¡aßw+zÐ8ˆ§q`øVd0p:455UD/Ëÿßóþ–––Þ¾Õ7ª«ïºï»ýý÷=öZØl¶§¿Çq­~¾jšF,CQ”ö€?­z?éÙZµ´z{{×tûì©Sœ¹ã8·ZÝæN¯}íûÝ*‹qùòez{{±X, †-ó~•à%6ÄÊÊ o¿ý6mmm¨ªŠÓé$NsñâEÆÇÇ9uê^¯Ë-3¸6[4E§ÓQUUU¶6ˆÇ§×ë±Z­8œNç†?²¸¸ÈÜÜ&“‰ªª* Ñh·ÛÛí.[à»u`ô¯}õö3Ò4˜z5=ÊÀi³Ù¼¥Ç2•ƒ¦id³Yòù<‹¥"f-wÌÎÞvûìêýŸ¼ö‡ÝþoüÆ'ÇY½}?gO*mû ¼õÖ[¤Óil6ÛC·ßL¼Äc«­­¥¡¡NG}}=»ví¢¿¿ŸîînþãüüøÇ?F§ÓqæÌ™²/MÓ(‹Œ¡×ëÙµk׺öÿM{¤™@âé …xçwøñL]]]]]¸\.®_¿Nww7»w醴··,ß W’¦iäóyþï;Ê7¿ôK¿Ä¾}ûÊÖóU,™œœäëss÷,K²Þ÷¢” xzär9&&&8þ<###¸\.ü~?¹\Ž••öîÝKgg'§ÜMÖ÷^¬”/ ¼Ä¡ÓéJÅu:v»L&ÃåË—Åï÷ Éçóøý~Z[[ ‡ÃŒŒŒ°¸¸ˆÉd*•øÜç>G>Ÿgvv«ÕJ @Ó4Z[[ñûý„B!®_¿Îää$X­VB¡‰D‚;wâ÷ûYZZâÚµkØív†††¨­­¥ªª “É´¦×ó°^/9imf³³ÙŒN§Ãjµât:ñz½Øív¬V+ÃÃüÿþûtuu•%xe³Y"‘?øÁèêêâÅ_,=ö¸ÌÅÖ§( N§“x<ÎÜÜ.—‹ššôz=¹\ŽW^y…½{÷rôèÑÒLØrH§Ó„B!Ün÷mƒÚ7ê=ú4Yà%6T2™$³¸¸H2™$R]]ÍáÇ›S®/\¸€Á`àÚµk„B!fffp:,..òÞ{ïqñâE:::¨ªªb~~ž¾¾>"‘ƒƒƒÔ××såÊÂá0mmmüʯü óóóœ?ž·Þz‹—^z‰¦¦&ÆÆÆxçwøÅ_üEü~?š¦‘J¥Èår„B!l6Ûºg¸<­ÿ“‹Ç§×ëKuñE!L&™››#‘Hàt:‰Åbèt:œN'‡ƒD"A8&•J¡×ë) ‹EÚÚÚH§Ó¤R) ‘H¤Twoõ8+++Äb1jjj€›'±\.‡ÏçCUUyõÕW …B?~«ÕŠÁ`1W@¯×SWWGUUf³™ÆÆFººº¨®®Æf³ññ„Ãaìv{Ù‚W>Ÿ' òÆopâÄ ÚÚÚî¹]¥~¦Jðjff£ÑÈÂÂ7nÜ ‹qèÐ!¾øÅ/2::ŠÑhd÷îÝ<óÌ3ÔÖÖòî»ïòöÛosâÄ , UUUD"Ž9Âç>÷92™ ÿðÿÀ7J'žªª*®^½Ê+¯¼ÂéÓ§±Z­x<<{öìáØ±c,,,ðío›ééi¬V+===TUUát:9vì˜Ì0$¢( ¤R)Þ|óM8~ü8|ðF£‘ãÇsüøq®^½Ê¹sç¸ví555D"²Ù,ÿá?ü&&&¸ví‡wÞy»Ý^ÚïÒ¥K¼öÚk\¸p—^z ½^ÏØØ¡Pˆ_ûµ_£¿¿ŸP(D0äÚµk\¸pžž¼^ï–D,6ÅbÁëõÒÕÕE0d``à¶ÞÐÍ”H$àþàðx<÷ ^•J‚—ØPõõõìØ±ƒ;v°{÷n …‡£ÑHSSF£‘`0Èõë×¹vísss 4MC§Ó¡×ëq:Øl6Ìf3š¦199I6›¥··—#Gްÿ~N:ÅÒÒÌÏÏ£( Š¢ ×ë1F4M+WUÕRY­8ØRl=…BÉÉÉRÏëìì,™L†C‡ñ™Ï|†L&ƒÉd¢££ƒƒ¢iׯ_çÂ… ìÙ³³Ù\ê{á…èèè såÊÆÇljÇãTWWc2™¸zõ*ƒƒƒìܹ³Ù\º¬Ù×ׇßïghhˆßþíßæùçŸçøñã´··c2™ðù|ìٳ瞗ÍeRHeÑéthšF4Ån·ãñx…Büô§?¥X,RWWÇÐÐôõõÑÕÕÅ… fee…ªª*‚Á ÍÍÍ|å+_áÂ… $“I4Mchh¨4ÎÑï÷sá®^½J<çðáÃ,-- …( |ùË_¦P( ™åòåË´´´P___š!¼žæÞ29‰ UUUE]]­­­·Ý¿:³pii‰‰‰ Z[[Ñëõw]Q‹År[8ŠF£är9ìv; ¥™‘š¦‘N§+~©ñä¬Öf2˜Íf8€ßï§££ƒ¹¹9ÚÚÚH&“ E!N³´´D>ŸÇ`0`2™P…¶¶6Ž9ÂÒÒögF"‘ ¡¡¶¶6Ìf3ÕÕÕ„ÃáÒ—«ÕŠÕjÅçóÑÕÕE&“aii‰d2‰ÉdÂívc0p8Ô××?öë|šOb•,›Í²¸¸ÈÔÔ+++LOO£ª*}}}ôôô …˜œœÄn·ãóùXZZbii MÓèêêbii‰«W¯xî¹ç°Ùld2¸tép³÷ÇÌÕ«W ƒ´´´ "‹qäÈL&333œ?žÓ§Oãõz1™L¥EßWgY>ì*C¥|Yà%6…¦iLLLð“Ÿü„ÁÁAþðÿUU™ŸŸgrr’Ü}ª½ÃÍÿñ£Ñ(@€h4J±X,M§Ïd2ë^šc5®ö€ q/ªªÒÔÔÄ®]»Ø±cÇmiš†ÏçC§Ó¸~ý:ãã㬬¬Ü¶Á`Àår•¾åçóy¦§§©­­¥««‹ƒðÒK/•Þ—“““ö*åDV©ÒétiŒl>Ÿgff†¶¶6Nž‡ƒ––~úÓŸb0øêW¿Zïh·ÛÙ¿?v»¥¥%þäOþ„d2IMM ¥Ëò===k~MkyÏ>í_$x‰MsõêUÆÆÆJ·ççç™™™`jjêž3ÄTUeÏž=üèG?â{ßû>ŸL&ÃÂÂ_üâ×=H¾P(‡±X,2&F<’|>Ïøø8?þñ ƒü‹ñ/0 ¤Óif×PÜ1‰Dî:f8.õl”ÈžöX¥³ÙlôöörøðajkkK½ÿ‡³ÙLoo/ÕÕÕ„B!Þ}÷] ‡ÃÔÖÖ–Ža±X¨®®.} Åb ÓßßÏþýûéëëãÔ©S¼üòË˜ÍæMy]÷šù¸Þ«¼Äc[^^fqqMÓX\\drr’ºº:¼^ïm×óÛÛÛghhˆ³gÏ¢ª* ,..’Éd…B …Bið°ÛífÏž=¥™_CCC,,,PWWGGGv»`0H*•* Ìfnnަ¦& óóóx½^úúúˆÇã¼ÿþûø|¾5—’âN¹\Ž+W®088Xš‘˜J¥ˆÅbäóyÀ={q ===\¾|™Ÿýìg¸\.l6©TŠt:MÿºÇ æóy‰‹£ÑxÏm¶ÓIKüOªª–VqX»*™L 9wî6›ŽŽ‚Á wÃ`0”. ’É$Ùl¶Ôc 7¿ð®–2ÙÌ5g·ã{W‚—xlÙl¶TÞáp ( Éd’b±XÚF§Ó±sçNR©ªª‡éééÁãñËåðz½d2Ün7}}}Øl6Òé4ªªÒÚÚÊ©S§p¹\\½z³ÙLSSGŽÁn·c6›ñù|X,¬V+±XŒL&ÃéÓ§ñûý¤Ói4Mãĉ–——ill”©÷âžVâ.‹¥ž©x<ŽÕj-õ hšF&“)]ò)]/‹„B!r¹‰DMÓH$¤R), dzzš7npöìY<Š¢`³Ù8xð :ŽB¡€Éd"•J±´´D$)“É$:¯×[ºÔ¹:1å~ÁKTžh4Zš!{øðažþy†‡‡Kõ¾î L&555ÌÎÎ222‚Ïç+õ楉KëQ(Jãex‡/±V{·Nž@iÐ3Ü,³ÒÒÒ‚ßïçàÁƒ(ŠÂÛo¿Íùóçñx<=z´4¸9“N§©©©annŽH$ÂÔÔ{öì)«µµ•gŸ}–P(ÄÙ³g9qâDy~YbËZYYá­·Þ*;ÌårŒŒŒ‡1™LܸqƒD"q×~‡#GŽðßÿûgnnŽ••jjj˜˜˜ ±±‘—_~yݽ²étšH$‚Çã‘/Hð`5=(̬¢{m·–ô çXk=.©Û%Ö¢¾¾žçž{Žþþ~ŒF#N§ó¶10ð?—ÄúÜç>Ç‘#G0¸Ýnr¹GŽ)­Yzüøq2™ >Ÿ·Û]zwuuáv»9qâDi_·Ûªªô÷÷ÓÒÒB6›¥¦¦EQèîîfÿþý¸Ýnjjj0 ¼øâ‹d³Y, 555ré¼Bär9fffX^^&‘HpýúujkkQå¶å£¼^//½ôÙl–ññqþþïÿžžžžR/l¡P`zzšÅÅEŠÅ"£££¨ªŠÇãáÙgŸ%™L222Âàà ‡;v°k×.4M+O4™LŒŽŽ’ÍfYYYáÀ„B!–––p»Ý|þóŸgvv–>úˆööörýʶ ^Bq ›Í†Íf£¥¥å¾Ûèt:L&~¿ÿ®êàw–R¹§Ó‰Óé¼çɨ¶¶ö¶ÁÏ÷;®¥¬\ƒ;vàr¹°Ûí¸Ýî»z¡ªªªØ³g±XŒp8ŒÛí.‹]ý2°Zñ^Q”Ò G‹ÅBSSgΜ¡¥¥………ªªªØ¹s'ÍÍÍ¥áf³¹4ÆLUÕR{VWWðz½üãü1™L¥ºtr¥á& ^`µèê?QòûB<.ƒÁ@SSMMMÜnµ&ÜK/½tÛý«Ã2:::ªªtwwÓÝÝ}ÏÇWË Üj×®]wÝ÷…/|ám¬T¼*Äj [¼ !„bsIðÚæVË9,--qîܹu×¼' nH•ñJwë—ù"Q>ò»âÑHðÚæŒF#.—‹†††Gªò.6Nmm-ÍÍÍånÆSMQ …ñxœÑÑQù"QF™LFÖ=½ÚQ~[ù÷/ÿ×ls&“‰ÞÞÞu-Ù žŒÕY•~Ùl&“É033SZõ@”‡Ãáà{Åb±T»J”ÇVî‘•àµÍÎ;Çõë×)©PNuuutvvÊ´êÇ`6›ikk{àŒC±9TUÅétnÙ^…rÐétX,2™ 7nÜ`~~¾ÜMªX¹\ƒÁ°%ë†IðÚæ‚Á ù|“ÙDʪQT%x•ËT0€Á`àõ"‘Š¢ …ÊÝ”ŠW]]Íf“ n¡( V«•îînªªªÊÝœŠ¦ÓéèééÁëõ ËÝœÛHðÚæ¢Ñ(µµµ9v”%o‘ì&×XÌesdSi’ñŠª¢7èÑëõ T½“åf=²½CáÕï½Íòòr¹›ñT›err’±‰q * eÊÆë¬aÿž}÷-IP©4MÃï÷ÓØØXî¦T4N‡ÑhÄjµJð•eyq‰á>æƒ×Þ¦Ê]·É‡«ÎCl%B±PÄå­¡çÀ.ª\NŒ¦­×%,¶–ÅÅEü~?Ÿùü ,×)Ê'XÙ ýÝ{,..JðºE:fxx˜áááÒš¢<Ìfsi‰®­F>¶ÄewVa­²Y ãöyñ4ÖÑÒÝF6!\avlŠoÿÁãÀ§ÓÙßKm£ïáRñÄÍcÖy0še©”JQ(PU{•´³HÁ°¹Ï¿²¸ÄÌÈ$S×F±ØmT{\˜íVR‰$h଩ÆçoÂb·nûKpšŽRϵ¸)›Í2==Muu5vŸ‹¤½Ü-ª\¹dšñ¡ ºººÊÝ”»HðO”­ÊFUµ€*—ƒÚF7—>Y^Ƹð“·È¦38cÃZe{àÒ±•s3ÌŒN±ÿô ^bÓ ‚3ó|øÆûÔ·5Ó¶£“ƒžL*M*–$4·Èìèí»º©©÷b­²­é¸™t†\&‹ÕnEÙæm;+‹D£Qq´{Yñlîăb¡@2ž`ea‰d<ÁhÄj·‚¢£»9ÃÒît`­²aØæW¢óËL]¸F:Þrë˜Jðeã®ó°çä!œ5.þËÿù»ÄÃ1êÛšñ÷vÜ<ùh:E¡X,~²@¶¢03<Áå·?`bp„ÎÝ=8ÜÕèÐQ(äèíæX EU¶}σØ<žz/nŸU¯âkm ko-=7'KÌŒLrî{?á¿}•çå%}úZz;J cßO±P$Zaeq _&‹¼_Å£Éçò,LxïÕsL]Ãå­¡µ§Å ’ˆÄÑ´"m;ºiémÇå½¹ûZ/‡jÅ"Èz‹@‚—(+«ÝFKO;-=d3®ÿ|‡ËÉà…ËDB+´ô¶3vå:¶ê*:v÷Ð\¹‰Y–—¸þá³£ÉÌ{?z㓟òy¦ì<¶='•ûeŠ ài¨ãðgNb´˜xë•×Èfr˜mVêšn~¸ñÁa®_`eq _k&‹yó-¶½Ñ@C{3U.'›…–žvúïÁáv’N¦X˜žãâëïrþG?ãÄKŸ¦}w7U.皎š¢5¼Mk"îO‚—(+½AÍaÇ]çanb†ùÉYÂÁebá(ÅB*—E¯²85G±P¤¥§£Ù„ÙjÆh2b¯v`¶XHÅ“Œ Ü çÀ.jêkIƼöí⨩–à%6…Ùj¦±£™|>Ϲïý„ÙÑI&G°;Œ|ƒB¡@•ÛIpz{µo³oS=ñiÆ?¾Ad)ÌÔõqü}7«ó]½ÉbBÕëÉçrD–´ïê¡Þ/³åĽ)Š‚ÅnÃ`4 êo~¶:jªq×yÈçrÍ&æÆg¸öÁUþþÏÿ†_øõ_¤«¿›óþ¥/2© ÁÙyF® a±Ù$xm ^bK0˜ ètI§ÉçòÔ6x1˜Œx›|Ôû›/.¢X(଩¦ÆWKt9LsW.o Ùt{uõmMøwt.š] \)÷KÄb·Q×\OC[3éDЉÁšºÚ¸òöh€¿¯ƒ+o@•ËI÷þ]x›êIF$¢qRñ$Ks‹ÔµÔÇx燯ÓÜ݆ÝYE,áâÙó¼øÏ¾"ÁK<½Á€§¡ŽCŸ9A6᛿ýÿо«›jÕ '²´r³Ø¨NG&™Æl·`±YI'ÓÜøècÞýOƒ—G÷b±YH'Ó¤âIT½ :(ä ryÜužm?~ìqIð[ÂÍñàöÕÒÜå§obi.ÈÕw?drp”ph¹4Hÿ^< u|å_þS&®rõ‹ÄÃÑ›3Í„Ød:EÁ^í`in‘ðÒ ‘¥ªëjðÔ{é=¸€kÿøG>{o³_K&³™¾Ã{¨ñyYY\"²æùCýøû:˜¼6ÊßüÑ·XY±âñ¸ë<´ô¶ÓÜÝF`lš‰¡Qr™¯ýÕ÷©okF¯×3|yˆGöÐw¨k•Ù‘I‚²™ ƒï]¢ïp?#W®óñù©ªq¢è¢Ka¡e~ñû*¾Vùrð 2JN”U.›%ºf~r½AOko;áÐ2ïÿä-®ø1m;»¨okÂþ€®p€àì<ßþOÊò\ú¶fZû:0Y¶ÖLQ4M#O¢ÓépÖ¸ðµ6нo'6§ƒ‰Á¦æˆ‡£ä?™e¦êõŸüS1šŒŸ ÜoäÅö2…|ž‰ÁfG&I%’[zý9ñtPU³ÕBu­›d,ÁÊBˆd<½ÚAcG3þ4´513<Áüä,£O£j›ŸÿŽNLV ‰ÈÍ/·}ûÙýÌ,U6.¿õÉX¢Ü/qË“à%Ê&O23<Á{?z£ÙDÛÎN|þF¦nŒ3pþ#æ§f©knÀh1¡ÓéÈçóD—ÃdïXd:‰118Ìëÿãïˆ.‡©r91Û¬è…|.G:™&LSÈKÍ!ñdåóyÒñ¡ÀF³‰º–zU!¶&ŽP,×´¶a!—'‰‘Š'Éf²hEYQl,Ý'3>TUÅþÉä¥j½Á€Ùj!\&Ž¡êõ8kªoŽs;ñ6×c4oöœõ´csTaµÛ(æ gçÉgse~e[Ÿ/ñD‹EŠŸY, äsù›Ëe²„ \:÷s¾û_þ‚G÷râÅç¨ö¸™º>Nl%J±X$L±X$Ž’Ëæ˜Ÿœ%H¡SthšF>—'4»ÀäÐ(Éh‚t2Mt)ÌüÄ ZQ#›Î -Òà âÉ) $"1¦çpz\øüL_ç§ÿßß394JÏ]4v´`uØÑ4B>W¨*ä _âÿý?þ=©xÿŽÿŸ½;Ž«<üÿ­}S©•öÕZlË»-y·q³4k09@7„9?zšN†žCÏÉé“IfN&I“NO¦'=Í„Lè !, »Ãjll°dÉ6x“,Yû¾•jß8ºmÙ’-Ù’JR=Ÿs8ØU·ê¾o¹êÞç¾ïsŸ·œâåhu:ñÄùßÔ8!.6v\Æ”f&³ —üÒBJVTà÷ú9w¢‘žÖNÂÁÐeß§|m%ëwm¦õt õ'èi뜣,|’ã%fÕPï}½ô¶÷`0Ä3äÆ;:JÈ$Ínå¯ÿáï(XZ‚#Ó Àæ›vìêãÝç^##/‹ìQÃ}C¤;íè|£^êOÒtü4e«—±n×ZÏœ£½ñ*µŠ’ålø“-X6ºz)_»\>ŬêïêåÈ{9øÖ‡l»ízªoØŽ9ÍÂÁ?À34@,¥ë\;ža7* í̹Kr»šÚ8{üîa¢‘ž!7Ýç:ˆEcø}~Üà:_S§ŸãÒýbÁóûü tõÒÞØÌλnÀbKãTÍçì{e/[nÙÅò«IÄãø®0extd€ IDATà÷ïñù¡:nyà+8³3ìž_ë!Îgx‰Ye0É/+b×Ý7c4›H³Ÿ¯šœfO#O`²ZÈ*ÈÅh6¡ÑjˆÇb䕲ñÆŒô b²˜É*Ê#3?ŸÛƒ+7 ­^GÙšåh´²‹ò°gž¿ážÛñ{¼¤ÙÓÉ)Îgç]7¢Óëqfg 3¤ðŸ¸fîÁF‡ÜÄc1†zè<ÛJ$!è0:8B<gÕÖ ¬ÞVEAE1ñhŒ‚Šº[:éâħG•e´P/lÏtb±[émï¦ãl V»œâ|Ê×VÒÖp탫Šu•¨Õ*F†È*̕ﳘ–h$‚{`˜cji¬?Á¦›vþñfgŽœ ½¡…M7íD§×ãu{ˆE£ø<^†úÆ- ‹Æèmïâô‘Ïi:~AO<'“ˆÇ øüøF½¨5j &£|O' —˜UV{:V{:¥«–Ni{µFƒÙjaÕ–õ—ÝÎ’žFÑÒ%ãÛpý–q—;kÄL ùhuZò–b4 ú v÷áuB —.¡dE9›­VK$fõöj<#£ õ 0ÐÕKÙÚå$€H(Œ-Ã-ÃÁèðžáQ¼nÙÅù¬Ø´–‘þa<#£¼> ÊKØ~ÇnÒvñ8«,(.Ç BDÑó#¤ßùÑUµšßOOkgž"Žpûÿ÷UÊV/§³©•€Ç‹F£Á3<Êpïá@D`÷ùi;ÓŒJ¥B£ÓâõÅÙð¥­.]BF¶ µVCAy Õ7n§¿³—ÓµÇñzX¹m=îÁa &Ù™8³\4;ÉHÿgŽ|βêÕl¼qñhŒ÷_xƒª/m%»0—7îÀ;â!äU3ååˆR^B1EjµFnŠé‚cë4^²»nü¡W­W_’¯uñšZ®ÅåitZ2 rØvûõ¬»n:ƒKúùime‘lG:–t«2…mJ3S¼¼Œ;ÿêk Ra¶¦‘î°aµÛ0[Ó°¹l»ýK„ƒaì™ÒÒ­,«Z…+7‹p(LFN&jš’X¬i¤gØdŠñ2ä—,„B,«Ã6åõá|@Ÿî´“î´{ÜþÇ›Æ//÷÷ŒœL2r2Ç=–]”7ͧ& ¼R@<'‰ˆ¨PÉEHòÄR@!Rœ^)ÀçóÑÚÜ‚ÍçÄ %’F퉂äD !DJ“Àk‘ËÊÊÂåráõzÑ ¸Ñh4W~‘˜9®,²³³“ÝŒÏëõÒßÝ‹:jA§“ïs²¨‚1Áâ*HàµÈåääPPP@WWW²›’òJKK%ðºF‹€ÁÞá˜\H$QºÞ‚Õzù5TSU0Äà  6Ê)6YÔþ‰yšÞ!ߊE.==ââb9áÏjµ½^¦z¯EYY&“‰ÎÎN†††’Ýœ”¶|ùrŠ‹‹“ÝŒy©¿¿ŸH4ŠËãJvSRVp$Ñù¹¨¼^‹œ×륾¾ž÷ߟüü|L&S²›”²úúú(((à¶ÛnKvS,»ÝN^^.—œÐ’Íh4’žžN8NvSæ £ÑHee%>Ÿ`0È`ÿ@²›”²‰›6m";;·ÛìæŒ#×"‰D‡Ãô÷÷SZZŠÍ6õÛŒÅÌ:sæ Z­üä®E<g``€¦¦&ìv»|žIäv»ÉÏÏ'/OJŒÑëõáóùðx<ÉnNJÓjµØl6‡^bîÙl6V¯^ÍîÝ»ÉÉÉ™Ó}‡Ãa‚Á ¡PƒÁ€Ñh7ÝF …B„B!Ôj5ƒÃ"]WÑëõ‰D’ÝŒÍçóqúôiöîÝ˪U«d7‰>ÿüs6mÚÄ]wÝ•ì¦Ì«ÕŠÑhÄb±È…A% ¢Ñ輬ž/ß 1«Îž=Ë‘#G¨««£ªªŠªª**++•ç9räGŽÁf³)۲Ɨ˜XVV[·nåæ›o&===ÙÍIY*• »Ý~å SH4ehhˆ÷ߟsçÎI\ƒAZZZ¸çž{HK›_u|$ð³Êåra·Ûéèè ©©‰ÞÞ^ÒÓÓÉÎÎF«Õb±X())aß¾}Øl6òóógä*1‹ÑÛÛ‹Ùl–“Ã"£×ë±Z­dddÌùÔyKK ÍÍÍtwwSZZzɪƒƒƒ477ÓÜÜŒÃáP¶YŒ#¸2¢3±h4Š^¯'//ªªªd7'e ÒÚÚJ<>ÿìåW#fUVVùùùtuuqäÈòòò¸ñƱÛí¤¥¥QQQÙlÆétRRRrÍûŒF£x<8@yy96l¸æ÷ ÐØØÈ‡~HAA7Üp;vìÀb± R©‡Ãôõõñᇲ|ùò›ÚÅbø|>e*^Ìo.—‹üü|6oÞ<§ûF£ 322B4Åápàp8Æ}gÜn7###ŒŒŒ(Ï/Ʋ ]]]ÔÕÕÍËßËâ» óÖ­·ÞŠZ­æñÇçܹsƒÁYÙO(¢½½'žx‚O>ùdVö1™±E‘çc^¸vË—/géÒ¥øý~ž|òI~ÿûß»ªÎÉÉaóæÍ˜Íf–,YÂêÕ«gä» …8{ö,###×ü^bñ ƒÔÖÖòË_þ’Ÿÿüçìß¿ŸáááqÛœ={–W_}•ÿøÇ¼öÚk477'©µ©K/1'T*Û·oçºë®ÃápðÒK/qòäÉI·¯««ãÍ7ßäÃ?äÿïÿÍ3Ïøà°ÛíØl6JJJèîîæØ±cD£QV¬XA"‘Àï÷sòäIrss©®®f×®]ÊÝEEE òòòX±bE2»œòãÉ\¯×S]]^¯gpp—^z‰¬¬,Ǹí"‘^¯—Ç3<<ŒÑhäàÁƒ¸\.6oÞL~~>ÍÍͼüòË|òÉ'üûÿï$ ±nÝ:²²²Ðh4øý~FFFèèè ½½]¹Ø˜)]<Œ=¶ÐÿÍã÷o* ¸ë®»øÍo~ƒF£¡¢¢‚²²² sžb±^¯8_+/ b2™0™Lh4¼^/n·[¹“5 R©0¤¥¥áñx¨««ã™gža×®]8Nt:fQ€_- ¼Äœ2›Í,[¶Œï}ï{üÿñ?xóÍ7©¨¨PrWB¡äçç³nÝ:6mÚÄÖ­[ùÊW¾B"‘PîP,//ç¾ûîã‘G ¤¤$)ëöMõ ráv÷Ýwßl5gÞ[l'Á7âóùxôÑGyå•WˆÅblÙ²Ey¾¿¿Ÿ½{÷ÒÞÞŽÙlÆb±àt:9pà---Üu×]lß¾]™¦öìÙCZZ¯¿þ:¿þõ¯¹ÿþû•º]cWéáp˜ÁÁAœN§^óÔB>Ùét:222¸çž{xùå—yñÅ• ÎÝn7£££Äb1å{ &##ƒ®®.Nž<Éš5k8xð ^¯—[n¹µZ}IÀságµ˜ƒ¡dYLA˜J¥Âf³ñ§ú§deeñÀ‘‘1nõ¡¡!:;;Ù¹s'6l ¬¬ €¿ú«¿"‘H(ŸÁÎ;æ·¿ý-ög†ÓéLJŸ9 ‰YÕÔÔĉ'øä“OP©T¬[·Ny~éÒ¥|ûÛßæóÏ?§´´‹ÅÂæÍ› ƒÔÕÕqêÔ)233Y¾|9k×®E¯×+CÞhµZŠ‹‹Y¹r%§OŸæÜ¹säää`±Xؽ{7±XŒ?þ˜åË—'ë#Püæ7¿!‰ð•¯|…§žzŠòòrnºé¦d7kÆL7Xè'µ‹UVV²qãF¾øâ %Æn·³cÇ>üðC†††ðz½Øl60™LÜtÓMøý~H$|õ«_Åh4ÒØØÈÿý¿ÿ—[o½•ÂÂÂqû …Bx½^ÒÓÓg4Á^\j±a&“‰²²2þæoþ†#GŽðî»ïŽ œb±CCC—”Üñûý„B!l6 ²aÃ^yåt:,‰t•$ð³Êl6SVVÆwÜAvvö%’ÓÓÓY½z5iiiJÙ‡ÌÌL6oÞLVVmmmX,–,YBii)Z­VIØ´Z­˜ÍfŠ‹‹ÙµkEEE+‹qß~ûíÊmùV«uVF»‰Ä”ŽD"Á‹/¾8ãû_hòÉ ÎWÃîîî&‰pòäIŒF#¹¹¹Àù kÆ øý~:::p8JàÕ××Gww7Ÿ}ö™™™Øív²²²0œ:uŠžžÌf3%%%¬Y³·ÛM]]+W®$==]Idöù|466ât:üg¹,–ÏX«Õâr¹¸õÖ[éíí¥««KyÎáp••ÅÑ£Gq8D" CCC8òòòðù|tvvb4¹ë®»xþùç9yò$GŽaÍš5—äÖ†B!¢Ñ¨äyMB/1«òóóÉÏÏgÇŽ“n£V«•áí1………—\é¹xôÊb±““ÃÖ­[Ç=~Ýu×]e«ÅLZ,'/8—b0$''‡ŽŽ%‘xLEEÔÕÕ‘——‡ÕjeÍš5D£Qêêêhhh ‰PVVÆÚµkókÊÅãqrssÑjµ”——+w–ù|>|>6›;JEWWYYYs~B»øßñ—¿ü%‡ƒ;vðÔSO±}ûv¶oß>§mšŠT‰ÅbÊ(U8f``@5TVV²iÓ&B¡¡PFCAA«V­¢®®Žƒ244„Óédppêêj–,YBkk+CCC¸\.vìØAcc#mmm¼ÿþûc·Û1 Øív¼^/CCCh4L&“^ÀKˆk4v žè³â×b±ö»²²’ÒÒR"‘Z­V©w!ƒÁ@UUÕ¸r+W®¤¢¢‚H$‚Z­Æ`0(Ó„Û·o'£ÑhÐëõ”——STTÄ­·ÞŠÑhD¯×£R©øó?ÿsàüè…Á`˜‘‚ÀS±]ìË÷5 RSSCgg'¼òÊ+ÜrË-ã.bo¹å*++©¯¯Çn·“™™É 7Ü€F£¡¾¾žÓ§O“Í 7ÜÀŠ+ðx<|ú駨T*òóóÑjµ¬[·Ž@ @ww7gΜ¡²²’¢¢"n¸áêëëI$R?ñ2$ðb†,–ƒ÷ÕJ…þO¥p©Z­¾$ »ÜâÖ—‡˜l3Qaüj-ÆÛÅØ'½^OEEéééƒAìv»RûpŒÅb¡¤¤³ÙŒÃá@§Óár¹Ø¹s'L&%%%Øívb±›7oF£Ñ`·Û•À+''‡P(¤¼Wyy9ÿîßý; .— «Õ*Aý$$ðBˆ–J#¶‹­?Óét—MÓ3–7;F¯×STT4é’WÞ ——G^^޸njF#™™™WÙòÔ"W H$D£Qe^_$G4]ô~±p-Öïæbí—X¸$ðZäÔj5£££Ô××ãñxÆU‚s«µµ•ÒÒÒd7C!DIàµÈ ÿ~éK_"--M–ÔI¢üü|©è|T*£££466²oß>eÙ1÷:::äóâ*HàµÈ™L& 1VÁs'‹a0ˆD"ÊÚ”bzt::Žh4ÊÙ³ge%‚$R«Õ2‚>‰`0ˆ×륽½=ÙMIYýýý„B¡yy¬•£V hhhàÙgŸÅd2ɉ*‰Ün7¥¥¥|ùË_&&»9 Rzz:ëׯgÛ¶m¨T*¹H¢D"V«Åëõ&»)óŠF£¡££ƒÓ§OÓÐÐìæ¤¬p8L__¡P() Ë_Žœ…S@"‘@£Ñ°sçN¹ë$‰êëëÑjµD"Iø½Jjµš¦¦&>ûì3 ƒ^Iäñx(--¥¬¬l^Ž*$ƒF£Áf³qóÍ7³eË– 뼉¹ljD"”––ÒÛÛ›ìæŒ#W « ¼|ùrY[+‰†‡‡• ëõ÷÷sòäIV¬X!'¶$êììÄ`0——'שÕjL&F£ŸÏ—ìæ¤¼x< ¼Ä¬êéé¡¡¡£GRRR‚F£!`·ÛÑh4X­V yõÕWQ«Õ¬_¿žuëÖ]2’á÷ûéé顾¾žªª*JKK …Büîw¿£§§‡œœöìÙ3áëxõÕW©¬¬dݺu²”…bV *++¹õÖ[“Ý””5<<̇~ˆÕjwx‰YáñxØ·o¨ÕjV­ZEFFjµÇC?mmm8NÊËËééé ¬¬l©¸x"‘h4¼^/ýýýØívÇ„¯Âëõb³ÙHOOŸtÒT%—˜qÃÃÃ|ñŶnÝÊ_þå_*£Xýýý:tˆ“'O‹Å¨®®¾ªï¨^¯§¬¬ŒžžÜn÷„ÛX­Öy—¯"æp8Lss3‡fppŠŠ ÑjµJ¾Yqq1ƒƒƒ<÷Üslݺ•mÛ¶±zõêqï“H$p»Ý|þùçô÷÷sÇw`6›ijjâ…^`÷îÝÜpà ã^Çáí·ßæØ±clÛ¶mÛ¶QPP07À!—˜q]]]|ñÅ”——SQQÓé÷üØÕײeËÆM qêÔ)ôz=§OŸ&²qãF*++¥¶¶–W^y…|]»vMºÿ³gÏrèÐ!¬V+Z­–––NŸ>MEEŬõY,^|ñÅ|ôÑGÜ{ï½lß¾}Ü|FF›7o&ât:§T¨Øl6SVV†ÍfSJ¼ŒÝhr¹×Jí21™úúzÞ{ï=<«W¯fÛ¶mX­VB¡½½½œ={–S§Na·Û1™LƒÁËsN$ÊÍQcÌf3ùùùœ:uŠÑÑÑK^£V«IOOG£Ñ …d}ÚIHà%fÜÈÈmmmdddàt:'f¦ŽD"Àù­F£QŠ2vvv‰DÈÏÏW¦r^ýõK®².äv»immåĉTWWc6›ÑétW<¡ 1™®®.Μ9ƒZ­fùòå”——{Þ`0PPP@UUÕ¸Å^¯—îînÎ;G{{;:Ž¢¢"²³³ñx<œ;wŽcÇŽqÓM7]2Õsñþ;::”Õ'éïïŸwy+"yFFF¨««ãÍ7ßd×®]”––Ž»‰(--`0ȹsç0S*¤m4ÉËËÃjµ*#¸ƒ‡ÃqI@6F¥Ra4åÎñ+ÀK̸P(„ÛíVJ@L•ÝngéÒ¥TUUa0Ø¿?õõõÜrË-,_¾œ+V\ñÝÖÖFgg'iiilݺU¹:;pà€,o"®JGG­­­¬^½šÂÂÂI¿GcÙàà pþdxîÜ9L&o¾ù&:ŽÝ»w³{÷nº»»yã7øþ÷¿Ï[o½5av"‘ râÄ >øà Ðét444ÐÑÑA(š½N‹eìb³»»››nº‰eË–{>''‹ÅB"‘ 77—þþ~%kly£`0ˆ^¯Ç`0(ÿÏÍÍ%33óŠšßï'*Óï@@ E_†^bVÄb1FFF.¹q¶>|˜––V­Z%Å5ÅŒðù|ŒŒŒLûuYYY¬Y³†mÛ¶pôèQjjjضmeee¬Zµê²¯O$´µµÑßßOzz:·Ür éééÔÖÖÒØØ( T ÅÉ“'ñûýlÙ²…¼¼¼ —ÈË­5 JàÕÞÞN}}=---¼ÿþû¬Y³†;v°jÕ*Ž;ÆK/½DKK ?ÿùÏÉÈȘtÿ|ð---JþáèèèÀkê+o"Äôäåå±nÝ:úúúèéé™Ó ·ÑÑQÂá°TÓ3"+£¸cÓâS¡×ëIKKÃf³‘‘‘^¯ÇãñÇ1™L—^ÛoMM ]]]™™‰ËåÂáp`6›å&¡èëëSî7 ~74͸; U*6›ÜÜ\ŠŠŠÈÏϧ««‹S§N¡V«ÉÉÉ!‰pöìÙIï8ƒ´··ÓÙÙI"‘`ÅŠ¬X±‚¢¢"l6›¤wLB/1ã Øºu+z½ž3gÎpôèQ‚Á ’H?v"¾ª‘„Ë»íùÌ™3ŒŽŽF‰Çããö/ÄtØl6ìv;ÝÝÝŒŽŽN+øºV `·Û/©&Ę@ €Ïç# Mù‚S¥R‘‘‘AII +V¬ ªªŠX,FWWjµš¢¢¢+®í;V{Îï÷SPP@uu5ÕÕÕ,[¶ —Ë%×$ä—,fœÃá`åÊ•lÛ¶O?ý”Ÿýìg HùÕ¾ IDAT ('¬X,ÆÐÐ_|ñ'OžœÑ}oÚ´‰¬¬,Þ|óMZZZðûýD"%Y\•ÊÊJ6oÞ̹sçèèèÀãñÌéþÃÃÃ2‚+.+ 2444§ß“ááaÞxã âñ8yyys¶ß…Nr¼ÄŒS©T8Nzè!víÚE{{;O>ù$ëÖ­###ƒD"A8&;;«ÕÊ™3g”¢§OŸ&33“Ó§OÓÕÕ¥Ô…©¯¯§¶¶–µk×2<<ÌñãÇÉÈÈ ©© ¿ßÅbáìÙ³dff²sçNû÷ïçøñã”––’H$`hhH)Ú*RËÅWàSÉAÉÊÊbõêÕlݺ•½{÷‡¹ÿþûIOOG§Ó‰D¥££³Ù|Iù”kië¶mÛøÃþÀ»ï¾Ë¦M›(..& 1888§#ob~»0øôÓOéííÅårÍY`<Çãñàõzçd‹œyĬ0¬^½šÜÜ\å¶y›Í¦ , ÙÙÙJeåM›6p:˜Íf Ñjµ„B!222ˆF£rï½÷RXXˆÁ`@§Ó±dÉ222”¥ZÒÓÓY¾|9Z­–³gÏ*m)**Âb±››+¥%RÐdÿÞ*•êŠÁ—Éd¢¬¬Œûî»'N088ÈG}DEEf³™h4Š×ëUŒîïï'‰àñxèééQþU*‹·´´ÐÓÓCYY###tuu‘H$èëë#‹¡R©èïï§¢¢‚ÎÎN†‡‡9tè­­­tww“žžN$Áëõâ÷û•R"5UVVRYYIMM o½õñxœ5kÖ(Iöáp¿ßÏðððŒ]ÀùßÆÊ•+•Z‰[¶lÁh4‡ ’\? ¼Ä¬r¹\¸\.6nÜ8é6ååå—ÔFºøvh8p¹Ø…KIKKSŠZ q¥ {*ÁWvv6_ÿú×9wî555|òÉ'„Ãal6›²ÍúõëÑétœ>}›ÍF4exx˜îîn†‡‡•‘à`0Hoo/###üéŸþ)¡PˆÎÎN¬V+n·›Í†Ãá §§‡ÒÒRvî܉Ñh¤¦¦†³gÏb6›Ù°a‹…P(„ßï—%YR\NNëׯç‹/¾àÝwß%-- §ÓInn.pþÎÜÁÁA:::(++#+3Á`Pù/‹Ç•2±X ½^ßï' ‡ …B¨T*âñ8f³™o¼‘Çœ'NÐÜÜŒËåbtt”`0H4U–Ö’›Aþ^Bˆ”7•à ??§ÓÉÎ;1™LãN&F£•JÅúõ멨¨ ‘H ×ë1™L,Y²D™´Ùl”””°víZÂá0&“I¹í¾ûî#£Ñh0™LèõzŒF#ìÚµ •J¥Œli4 ƒAF»ÕÕÕrúôiŽ?ÎsÏ=§\|ÆãqŒF#ëׯgttT¹ ±½½Ó§O 9}ú4###8z{{©­­ett”¥K—RWW‡ßïg``€³gÏb4ñûýôõõQVVÆ]wÝE]]O<ñ.—‹@ @~~>ÃÃà àp8”%‹„^BˆEl¦§”õz=z½~ÜH×Å´Zí%¥"&ª«4Q!Ö‰F®4Í÷)„Åb¡¨¨«ÕJff&~¿\»^¯Çn·£×ëY³f iii˜L&\.éééèõúq [/[¶ŒŒŒ Âá0yyyddd`µZ•µwN'™™™˜ÍfÖ­[GVV}}}ʉZ­Æd2‘››+5/"W ËA»ÊÉÑÓÓ#%-„³F«Õ’™™yÙ26› ›ÍÆòåËÇ=^\\<îï“-Æ^TTtÉc¹¹¹Ê´¦¸2 ¼R@0¤³³“?üpÒ“˜} äää$» ^"‘÷ßLË[S#qB\ ¼R@yy9=ôT»N²µk×*I¯RÊâêݸwï^¬V댽ïï~÷;^{íµ{¿Å®¦¦†¢¢¢KFJ„—'GÿE*ÓÕÕE}}=n·›@ €×ë•«Ô$óù| ÐÜÜ,£_Wiì.«ÕzÅEÓ§c&ß+,Y²„‚‚Ìf³”g¹ÈXây}}}²›’²FFFhkk#//oÞý¶%ðZÄb±MMM¸Ýîd7E\ *5ÄÔÄb1å–øüü|¶mÛ6¥|¹£G²nݺ)í#??ÿZ›™Ròóó1ƒA€t½€F£ÁãñpôèÑd7%eùý~FFFˆÇãóî®_ ¼©‚‚~øÃ¢ÑhdzqžI$D"‘9«,½x<Ž?ŽV«ÅårÍxÐúƒü@¦¯‚J¥" *«Jˆó¾ô¥/QUU%ÇÞ$ŠÇãìܹ“œœÚÛÛ“Ýœq$ðZ¤t:ÙÙÙÉn†3¢¸¸˜Gy‡Ã1í[Ó/,²»uëÖqÏ:thFÚ—Ê¢Ñ(›6mbåÊ•ÉnJR qìØ1~ÿûߣÕj‰F£2ª= :;;ill$$»9€^Bˆ ;;›={öÌøûnÙ²eÆßS¤&§ÓIaa!¡PH®y$ ¡Óé(//Ÿ7õÄT ɶB¤ˆ«Y$[!fÒüÊ8B!„XÄ$ðB!„˜#x !„BÌ ¼„B!æˆ^B!„sD/!„Bˆ9"—B!Ä‘ÀK!„bŽHà%„B1G$ðB!„˜#x !„BÌY$[!Ä%¾¯Rñ½ZËòû­‘ ÌØ{ ±ÐHà%„bV}/‘¸$øš(ÛVˆÅL•HÈ·\‘Tìåð7±± h¦ƒ É‚­©€L,’ã%„bB×(MD‚'!$ðB1‡®&ø’€M,&x !„PÌô(×D$©L/!„“š‹@ìr$H‹^B!æœT"UIà%„˜ûÑ­+_>Ÿì‘7!fŠ^B!.k6ƒž©Œ|IÐ% ¼„B$ÕDÁרcÕû¾J%Á˜X°$ðB‘ô@f²‘¯ï%2å( ¼„B\Ñ\–™˜,»° Œ‰…JÖjB1o\.çk¢ç$è Œx !DŠ[¨Á‹ä‰…H/!„S2ßš©äÍ·6 !—Bˆo²ü/!æU"!ßP!DjP]4ú!‡¿K]gÛbìÓµ’¯«çv»innÆb± Õ¦Ü þ¼‹Åðù|àr¹’Ý1Ï\t¥Rþ×¼:JiµZ¾úÕ¯*WII åååüìg?#ðË_þ’¿ÿû¿çG?úÑœ·ï©§žJ‰}Î¶ÅØ'‘<'NœàÛßþ6«V­Âáp$»9‹‚þÇ×ðw¾sMïãóù8qâ?ü0_þò—g¢ib™(¸J…°y5âuñ{\üÚãdzvíZŠŠŠhmm½úF^…¦¦&V¯^M ˜³Ñˆdìs¶-Æ>ÍñºzGå±Çã¶ÛnC£ÑÐÒÒ’ì&-H#<2ésöþçi½—Á` ??Ÿôôt^yåîºë.®¿þúkmbJ¨©©áw¿ûÅÅÅÆd7gN{à–<ýôeKŸÏGkk+ñÁêÕ«¯ú}æÕˆ×•,[¶ €îîîq' üq{ì1š››)..æÁä[ßúÖ¸©‡úúzžzê)ž{î9†††&|ì™gžá¿ÿ÷ÿNSS×]wÏ<ó ™™™ÜyçàßN’¯¿þ:·ß~;Á`G}”§Ÿ~šÞÞ^*++yôÑG¹í¶ÛÆíç׿þ5]]]|ó›ßäùçŸçË_þ2Ï?ÿü„ý½Ò>§Úï‰Lµßc®Ô¿É‡êêjŽ9¢<¾bÅŠËöIˆé2 dffRTTD0¤««‹¼¼<™vœ†Ú+üþFy„ê7Þ˜òûuuua³ÙX¾|9999˜L¦kmbÊp»Ý455QPP€ÇãÁív'»IsF÷è£tttùîw•çÆK­V‹Óé$ÓØØˆÇã¹¶÷›¡v͉¾¾>àüÔã…~øa^ýu^}õU***xôÑGùÏÿù?sôèQ^xáe»»îº‹¶¶¶q¯½û+äüàTWWsøða}ôQ}ôQ¾õ­oñôÓOsâĉIGâ‰{öì!‰°ÿ~¬V+÷wÇwÞÉÞ½{¹á†¸ýöÛéêêà§?ý)ßûÞ÷èëëãÌ™3“ö÷rûœN¿'2Õ~Oµ­­­Üyç;vl\Ÿ^{í5òóóùû¿ÿ{¾ñoàt:/Û'!®V(btt”`0HII ‹%ÙMZ0j§²Íí·óWÜ.‘HpâÄ úúúX¾|ùµ7.ÅØív*++Ù½{7½½½444¤ÜÈÀÙûîSþ\þì³ã¿ðïseíÚµ˜Ífº»»±Z­×ô^ jªñ¯ÿú¯ùÅ/~Áÿûÿþ8ü¸ÿ~®»î:~õ«_)¹a;vìà“O>ᥗ^â+_ù ###JÈØ{ŽŽb³Ù8uê”r èîî&//ÌÌL%à›¬]¿úÕ¯xàhmm¥¨¨€ááaœN';wîäã?ÆãñžžÀ{ï½ÇîÝ»¯é³˜N¿'2~O¥p>Pܰa_ýêWù×ýWŒF#¯¾ú*¿ýíoùõ¯}Å>¥2™j¼z§Nâé§ŸæŽ;î  ÒÑÑÁm·ÝvÍÇTñãiœÔ¿ ^q›x<ÎÓO?Mnn.[·nåÉ'Ÿäúë¯gË–-×ÒÌ”Q[[Ë›o¾ÉwÞI[[lÚ´ F“ì¦%ÝëUUÜqÁ,ʵl7@€}ûö±yóf–,YÂSO=Å×¾öµÅ;Õøê«¯²gÏ>ûì3þëý¯¼÷Þ{|÷»ßU‚.€ÿóþ7Þxã¸×>ôÐC|òÉ'üâ¿P±@ãBœ/¼:ËÎÎ```àŠí|æ™g(..¾ä¹±i¶´´4屩]—3~Od:ýžJÿV®\É~ô#¾õ­oa³Ùøÿñ?òãÿ˜·ß~{:]⪩Õjt:ƒƒÁ0ãïßßßOss3 X,\.ƒ¾¾>ŠŠŠ((( ##cÆ÷;_Lå3ÇãhµZÔêyU­hÁ‰Çã¨Õj¬V+ÅÅÅ)?uþØW388¥Çàß° ŸŸ.¯×‹Z­&_õ{\l^ÿK~ík_#‰`6›¹ùæ›9pàÛ¶m·ÍG}@VVָǷnÝ œ¿zsñ¨ÂdÊAc*#õõõD"‘I“íçjM§ßÓiÏDýžJÿÆü§ÿôŸøÃþÀã?ÎÇÌË/¿ŒÓé¼ìk„X(Âá0MMM¼õÖ[”””°bÅ œN'---´··SZZJUUv»N—”6Æãqü~?Z­vƧ¨ûmþó^¯Çjµât:g<ðJ$ø|>†††p»Ýèt:ez>àp8HKK›7ùy—«~ït:/{7äX0v5ß]N‡ÉdšÑÏ^^ápøŠÛôööçó;.ü‚äåå\sÜTŒŒŒçsÐÆö;Ûæ²ßÓéŸJ¥âÉ'Ÿ¤¤¤„öövôzýŒµCˆdËËË#77FCII UUU”––²f;óïðÑGFÙ¹sç„#ìs!ÓÒÒ‚Íf£°°pFß[‚®Å#‘HÐÖÖÆ|À§Ÿ~ŠËåbéÒ¥h4š››Ù±c‡RE`¾¹¸þ×TKPÌ— ‡?Õ•¬Zµ €Ç{lÜã,]ºtVö9—ýžNÿþéŸþ «ÕÊÿú_ÿ‹ï~÷»S«Œç«a_¼mYY ìÛ·‘‘žxâ Þyçzè!žþy<È?ÿó?óϬò¬Óé”R 555ÊûõôôL9l²}N§ß™N¿§Ò¿Ã‡sÏ=÷ðá‡* úZ­–þð‡üþ÷¿çþûïgïÞ½”——OÚ'!Šh4JKK z½žææf𛛉D"lݺ•›nº‰®®.¬V+kÖ¬aÇŽh4Ž9BMM ;vìÀl6c6›àßøk×®edd„ÚÚZZZZH$dffb³Ùøì³Ï¨­­åúë¯'-- —ËEff&UUU”——sìØ1ž{î9z{{±ÙlTTT`2™(**¢ºº½^ÅRWÊ“‘ +õ¸ÝnL&………¸ÝnÞ{ï=X¹r%555dff²qãFª««©©©¡¶¶–öövœN'ýýýØív¾ûÝïòÙgŸÑÛÛ‹Á` ¶¶–¼¼<ª««Ù¸q#Ÿ~ú) ¥¥…›nº ŸÏGGGCCC<ôÐCdff200@?_|ñuuu”••át:gå®å¹2¯¯‹_ÿú×ùú׿~Å; ÿõ_ÿ•uëÖñ/ÿò/deeQVVÆ#<Â7¿ùÍqÛmÞ¼Yùsuu5‰D‚;v(­[·NÙ׆ .Ùö‰'žàÁäŽ;îàî»ïVŠ”êt:Þyç¾óïð /àõz©®®æ‡?ü¡2%xa ›âââ)ÝN¶Ïéô{"Óé÷Tú7öÙ®]»Vy¯`0Èš5khnn¦¢¢â²Ÿ£ …Z­ÆårQRRBaa!ùùù$ ²³³Ç åìÙ³tuu144D("‘H Ñh”;Ö‡RÆ¥¡¡FCEE6l`É’%¬_¿ž`0Hzz:­V‹N§Ãl6c·ÛIOO' F•iOµZ^¯ŸVY ®RW8¦­­'NÐÙÙIww7† 6°yóf¼^/‰D‚ŒŒ ***èéé¡»»›£G²nÝ:àüw½¥¥…;v`µZ•Qß“'OFq¹\ƒAöíÛG[[6l@¥RF‰D"a6›‰Åbüú׿æî»ïfÉ’%äää R©p¹\cµZ|M³yx]mÑH•JÅÃ?ÌÃ?<í÷ŸlŸ=¾k×.Ξ=;áöV«•Ç{ì’<¨+íçJ.·Ï©ö{:í™ìñ«éŸÑhœöç(ÄB ÑhÈÈÈ ¨¨ˆÊÊÊqÏÅb1t:‘HD¹»x,0ºø=ÒÒÒ”ýX,ÆÀÀYYYdeeQQQ¡lÇ ‡Ãr£Š˜‰D‚p8L @«ÕâñxX»v-k×®eùòå´··³dÉ4 ‹‡ÃAss3Äãq%ÇQ­V³fÍ–-[Fkk+¿úÕ¯ˆÇãäççSXXˆJ¥"‘H(ßy£ÑHZZ6›’’ ”Zy~¿‹ÅBff&Z­–ÌÌÌ¿K7YæUà%„ ÝX^ÌË/¿ŒÏçãþÏÿ œ/ËÒÙÙI"‘˜ôG¥Ráõzq»ÝãòX"‘ÃÃÄB¡iµåÂýÌt-A±x ÊËË©®®¦´´tÜs‰D‚òòrìv;ííí:tˆÓ§O3888®Ž¤Ñh$##C©_hlldíÚµ¬Y³†M›6pß}÷)ßË™Z¡cª%%æË¨®^B1ƒÂá0uuuttt(K”uttÐÓÓC$¡©©iÂT“ÉÄÆùàƒxå•WˆÅbØl6<áp˜o¼qÚQ£Ñ(n·›´´´”\ïO\»`0H[[o½õZ­–={ö Õj Naù(8_SÒëõŽ{,‰àv»g´LÅXP5Q6_®1x !Ä 322B,£¿¿Ÿ®®.233q:ÊM%†œœ\.>Ÿ}ûö‹ÅHOOÇï÷ãõz•;ƒá| ˜±Dæ7ÒßßÏ©S§øì³Ïp¹\8òóó1D""‘‹…‘‘ZZZèî¸˜x<Îðð0Z­VYìäÉ“ØívÌfsÒ>3±°ùý~Ž=ÊÑ£G)..Æår‹ÅˆD"¨T*zzz—¼Îd2Q^^®”N±Ùl˜L&¥Æ]YYÙ´—•ŠD"ƒÁËV’ŸoAÖD$ðBˆ)%“——‡J¥btt”‘‘ed ÎOÛlÞ¼ÇñcÇ8rä6lPr`ÒÒÒðx_úÒ—°ÛíŒŽŽ’ÍîÝ»åܹsTUUÉ4£¸ÄXI”p8L<'à÷û …Bãî ‡Ãtww‡•ºZCCCÏøv¢ IDATƒA4 Ê4x"‘  ‰DHOOgÛ¶mJ)ˆ±ù@ €ÓédýúõJΗF£! âñx…B¤§§‹Å‡ÃÊw>‹ñÿ·wçñQ•÷âÇ?³/ÉdŸ$$!!d!@aQAˆ¸`EŠÔjmïµ½/TªÕ{µöek[~^kimëmµ´n½¥ŠµbëWK˾/ …ìû¾Ì’ÙÏï8§’ÀÉò¼_¯y½2gÎyÎóœ3“ùÎ9Ïó}ÚÚÚp»Ýh4šQ=wåè­¹ Â0KHH &&†E‹É#µZm¯_î*•ŠÈÈH–/_Î-·Ü‚R©D§Óáõz¹ùæ›1 x½^n¹å|>ƒ¡×ÔZéééLœ8‘Ûn»MÞÖtÍž=›ììl|>:…BANNK—.E§Ó¡ÕjQ«Õ|ùË_–'«öo+çóOÔÔÔ„ÓéäܹsÄÄÄ`4{õ󊈈àK_ú‹…ŠŠ þüç?“Åb¡¦¦€ºº:êëëñx<”——Ill, ,ÀëõrèÐ! ‰‰‰aÞ¼y\{íµ(•J, “ÉDUUÕÕÕÔÖÖ²`Ál6 „††rë­·b±X8pàÀ€©’Fx ‚ ’F£é5™p_ …û,¥¥¥TUU±oß¾€ï¯¯ã}¥†z¾8pѲ'N ©Œ`½_…¾éõzy$_iii°«3®………]ÔI[¥R‰ÏçÃjµR[[;êç'­ìv;^¯7  FTàu¹£€®Ô† .Z¬ºÃ?ÿùO9ˆP(¼ýöÛWm}ï+ˆó5Ô2ÆÓ{d4ÐëõL:•3f»*ãžR©D­VÓÑÑ쪌Zƒ—ËEII •••Á®Î¸¦Õj:óÈ ¼‚‘䯴´”ßýîw#¢.ÁÒÜÜ 0,·û;ÞW*çk¨eŒ§÷ÈH'Iuuu455ɹ…Äù ž¸¸8&OžŒÁ`vUF%¥R‰Á``öìÙ$''»:ãšB¡@£ÑOWWW@ʱwÚÚÚøÎw¾C\\¡¡¡|õ«_¥®®N~=??ŸG}”èèhœN'«W¯Æh4rï½÷ÊëH’Äïÿ{²²²ÐjµdddðÜsÏáñxäuV¬X!Ow P(P(|üñÇÕçÕW_eÊ”)Fn¿ývyº?‡ÃÁÚµkINNF§Ó‘››Ë'Ÿ|2¤úög0í¸œòýíõ÷ð?÷aùËŒŠŠô~ÿõ_ÿ…Ùl&$$„+VpèÐ!¹ÌÁï¾¼ñÆÌš5 ½^Oll,>ø ííí}®{©óÕW»cûöíäååBvv6CÚ^¸ºêêꨫ«£ÃÒI£»ƒzxåáîàtI¡ Cç¿Åxþ\†çÿá} yòï@QW¼Î÷ÄOð½ï}çž{Žßüæ7<ýôÓäççsüøqÂÂÂX¾|¹ˆù_ojj¢¨¨H.ã‘Gá£>bóæÍddd°nÝ:žzê)Nœ8Á¦M›8}ú´ô×çhíÚµ,X°€'Nðßÿýßüò—¿äÉ'Ÿäü£¼ÝwÞ‰ÛífÏž=˜L&ž|òIV¬XÁ¶m۸馛Ußþ ¦—S¾¿½ýµ¿¯Îãíç»ßý. ”––"Iÿüç?¹óÎ;åís¼ûòÄO°aÃþú׿rà 7°qãF|ðAΞ=Ëž={z­;ÐùºœNñï¼óßøÆ7øå/ÉÖ­[åàM9Z[[ÉÌÌ$ûš\Zc}x‡ù¿›×ëÅëöàñxP*”(TJyJ蹊¡R«zý¸‹$ŸÄÑ?ÿ¶¶¶`WeÔòg€oll¤¬¼I)®à‹J¥"%)™y×]°+¸ )À W.|s µxÿö6›­×Ä®÷Ýwo¾ù&k×®å'?ù ‹Eî“´}ûv–.]Ú«œ={öÈ_Ðÿþïÿ./_¸p!ûöíãÝwßå+_ùJ¯}^XWÿò³gÏÊ“ÎÖ×ד@BBµµµlܸ‘o~ó›TVVÊ—…ÛÛÛ‰ŠŠ"//Ý»wXßþ ¶—[þ¥Úþtþ×ÚODDDDDÈËvìØÁ’%K ôú³mÛ6–-[Æoû[9Øq»Ý¬\¹’ŠŠ NŸ>Ý«ÜÎW_íºÔ±¨««#++‹¯}ík¼öÚkòò¿ýíoÜ}÷ÝCjK®ôs3ž={–×_ÄÄD233™˜™”À«±ªŽâg(>ö9¡a˜“â 1…bíì¹=aNˆ#yZ¡á¡£>óö¥ø¯©&sÝu×ñÇ?þ‘Å‹3oÞ¼`WmT8zô(ï½÷“'Of„ ÍátDú@Ä]Aáq¸(ûçIÌ¾Ž„„6lØÀ=÷ÜsE}IGì§ÿü  `Íš5¼ù曼ÿþûüä'?éÕ±¹¯ ã•W^àæ›o¾¨œ}ûöñꫯÊ×@ü_âf³€––yÙ›o¾ ÐgÞcÇŽ Xßþ ¶—[þ¥„‡‡_´l ýH’ĪU«Ø°a“&M`ñâÅWHøû„­ZµJ^¦ÑhzÝÊ=ß@端v]Ê‹/¾ˆÅbaõêÕ½–ê8 cƒ>Ĉ×㥡ªŽƒ£)sb¦¨p:[Û©,*ãôárÎ!)}áÑ Ø,VœváѨÆpÀ&ôæt:ÑëõÄÄ™ÁìÖŽA>ŸÎ–vêʪi©kDo4Z«ÁÕí <&Šèx3:£~T¤º\Nk7n¯·Û°2GÍÑòG—þaâ]vݹs'±±±½–ÏŸ?èùUq9ü¿TÏ¿÷žŸŸô\…¹0s¶ÍfT}û3Øv\ËÐ}•9Ð~î¿ÿ~vìØAff&ßúÖ·ä«QWâСCÄÇÇyÛ¾Î×P•¿Ú…ÓX µ˜0¶…GG`Šè™£.*.†ÄÉÉLž1…i×Î$uz&’$qjßQ|²ƒŠ³çp|ñÖI’°uY¨+«¦ìt1nWàþñ Â%I[7¥…ìûøŸ|~à8ueÕ´Õ7ÓXUGUq9%ù§)Î?MGs.§kà2¿àrºpØ»ÇõUýQxù'¥ìÉjllz~5œÏ?§”Åb XÝüC¦›ššV¦ßp¶#~þóŸóÐCáõzyã7˜1ckÖ¬éø •¿}°ÚêöÅ-árÅ&ÆsݲE,¹g9;ßÛÆÁOwÒTSÉm$I¢ìóbŽlßDZÀÙí¼äú‚( ¥’¸äÂÍ‘hõ:ÓSÈš›Íœ¥ó¹~ùR2fN¥8ÿ o>÷2Çw¤£yðýù:šZi¬®×ר¹níÿòíëv^_ÂÃÃikk£¢¢‚©S§ÊËýÙ¬V·ººº8xð`¯Ûa0œí­VËK/½Äc=Æúõëyýõ×yíµ×P©T¼ôÒK—Ufhh(äçç³xñâ×x`þÄ…---ýNö*—¢T)‰0G‘:-ƒ¸ä:šÛ)=YHDt$Gÿ¹É'CeQ)1bIž2™Äô«ê©/¯ÁÞe¥èØçdäfár¸8¹çFSj—ÓEsm#sÏgÒ´ô`7U  •¥²g€ˆJ¥B¥V£ÖhPªTÄOJâš[¢ÖjøøÅëõrÍÒDÅÇô[¦Û墪°Œâü3H’Ä´”1}‹òRFM«ý·ón¿ýöA­ïïÈé¿UççO+Èþ9ÙÙÙ¬_¿¾×ò’’233¯¨ìálG eff²~ýzªªª¸ÿþûå~p—#''€×_=@µš)S¦}g»„ÁÒéuDÄDbNŒÇÙí ®¼šŽ–v«êèjë ³¹ÒSÅTœ9ô\yP*(”Š/FD*éjmçÌá“8ìÔ v‹½n§®¢:˜ÍÆ ¥RIh¸‰Œ™S™:w-u”*¢¦´kggpîÄY* Ë8±ë0å§KèliÇãòPYXFɉ3”.¡¡¼‡½›ö¦V ž¢ìóbÊÏ”Prâ ù;ÑÙÚwª ±`Ä^ç稂žNæ|ï{ßè5oU_sX­Y³€—_~¯×+/ß»w/ …‚‡zH^æ¿¢qþzçÿ}þ%ÑóÿöïןÃjçÎ<þøãtuuÑÚÚÊ3Ï<#^Õ·?ƒmÇå–~‡Á ;ž¿?™íG¡P°{÷nùydd$/¾øb¯¬¿}ïKùÆ7¾ô bøßÿý_¹žeeerGú¡œ¯¾Úu©åþóûüóÏ÷Z^_ÿ¯[E#í–¯02)” Œ!F$Ÿ{— ‡ÍŽ91žÔéLšžAZÎ6;µ¥U( b&˜‰Iˆ#*.†ô™S‰0÷ô+T*¤eOaÆ‚9LÌœLåÙRºZE–xaø˜"ÃI˜œLbú$Ú›Ú¨8{Ž–Ú&v¿·#Û÷qæðI>{ë}¶‡š’ |^/m-t´´ÓÑܳ¾½ËJí¹Jv¾û)'væôÁ|mÝÍß~û: c7܈ ¼fÍšÀm·ÝÆéÓ§±Z­ü¿ÿ÷ÿøÇ?þÁ| w°>r䈼MCCÃEå¬X±‚Õ«WsêÔ)~øa:::8{ö,?øÁxüñÇ™;w®¼nZZ»víâ½÷ÞcÙ²e½Ê?yò¤ü÷©S§ä¿ýWáÖ¬YÃõ×_À /¼@xx8111üõ¯åÇ?þñ êÛŸÁ¶ãrÊ÷z½lܸQ~þá‡ö Tü#2Ïoë`ös×]wñÆoÐÖÖ†Õjåç?ÿy¯}ïKY½z5yyyH’Ä<€N§#!!¯ýër¹C9_}µëÂåÇ—ÿþÏÿüOæÎ˾}û¸÷Þ{©©©¡ªªŠŸþô§ò:bša0|^–Ž.”*•|Kqê53Ñêuœ>˜OÅ™R¬—ÎŽ=qÊd¾ú_ÿµ£‹SûŽqîÄù„‡zˆˆˆ´Z-±±±ÜsÏ=<ñÄC:_}µëÂå×\sü·N§cûöí¬Y³†¿ÿýïL™2…‡zˆþð‡DDDððÃóÞ{ï]² ‚àvº°´wÒPYƒÑB\J-íœÚŒ¦ªzbã‰ø¢3ó¥4U׳ãÿ>ÅÑÝMDl4QñæqÛWF.ŸÏ‡³ÛR¥"4Ü„91ŽŒYÓчh©kÄÚaÅÖiÁÙíD¡T 3èÐê{¡á&Ô ““¹öÖ<ÜNmõÍ´7µaë²âõ îŽÈh4â:×k4yäyä‘K®7˜ …bPe-Z´ˆsçÎ ªüþ–›L&Ö¯_Q?¯¡Ô·?ƒiÇå”?Ð6}½>Øm^yå9Ù…ú:Þ1™L¼ôÒKývÐÊùê¹…žA}µ©¿)‹á|{7 •u;…Z£&)#…èx3ç 9º}Ysf0wéõÔ–V¡Ò¨ñ¸=_|ùô¾’e·X)Î?ͯ¾ÍþæÇDÇ›±wÙP(xÜyX¿Z£Á˜pUy=6;­õMLÎÎ"&!½Á€ôE* ‡ÝŽÃf0€Òô„†™°¶w¢P*é¶Ú†©Á#>™‚ WYSM{ÞÿŒ÷_ù y+ofÞm7¢1pjß1¬í=·=n7µåÕXÛ»è¶Ù©..Çaïë«æ\¥' {:+»=tµuP_UƒÏë£Ûj§³¥®Ö¼âÖ£p•9ìZš©.*'&ÁLT| ¥§ŠøàÕ·i®m`Úµ¹$gMÆh ¹d9Çwäµý½ŽÌ9Ó™4=c˜Z<# ÂhÔ\×H[c ·›úŠt!Zë›°Ylt[íÄ%'ðoßÿ6©Ó3ˆŽ7ãv¹˜ÿ¥q94TÖpðÓ]$¥'ã°ØPªU„EE` ¡¥¾™æÚŠŽ">%‘™7\CmigÄiï&$,”kn^ˆZ­¦³µ‰™©"ýpÕx½^Zj9üÙÎ:Ámßú ³ÏG¥RqæðI¬=Üu¥Ut[íX;-Ô–U]”hµ²°ŒòSE´7·âóúèji§µ®'¦­ËJgkJ¥cXˆ<(k,ŸNA„P©Õħ$0{ñ< ¡!DÄD¡3ðù$ !FÂc"‰KNÄj@¥R¡qk˜"ðAA&Oɵ·,D©R¡ÖjP*r.CµVƒV§“ç¾Õè´Ä&ų|õÝH>j­QÏ„”D”J•Ü×kÞm‹ð,ΠGkÐÖ3Òçõ¢5èQ©U¤ÏÌB£Õ¢Õiƒv ®&x ‚ ‚ S(htZ4C|”J%J­–ÈØè^Ëõ}¯ç¦ˆ°^ÏÕj5º Ö1†^ºCþh'F5 ‚ ‚ qÅK„1C’¤ž|l’—Ÿ:O¸_ÿ+É](c™¼A3:;;Q•Wc´…£Vá磉$I(ìc7ë¸ \)x ‚0&˜ÍfBBB°vYPHˆÌíA"I ±ñÄÆÆ»*£žÍf£³¹ ʱ–TatðÚ]àöô ®¼Aõ )))FêëëñxDæö`ÊÊÊ"111ØÕµ z½žîînZk›ˆêŽ?$‚Dår¢Ñ£Õn„¥¼A"""HJJb„ Á®Ê¸§V«1 X­Ö`WeTÒh4deeáv»imm¥µµ5ØU·”J%³fÍ"%%·Û2Eà%˜ÐÝÝÍÉ“')(( >>µ˜6'($I¢©©‰¬¬,²²²‚]QI©Tb6›Ñëõ˜Íæ`Wg\S*•F"""hnnH™â?“ c‚Ãá ¶¶–¢¢"L&ƒ!ØU—$IâìÙ³ x]¥R‰Íf£µµ“É$'*†—Ï磥¥% eŠÀK„1#..ŽyóæqÇw`2™†uß=óÑõtÂU(= %Ïë—ãÍçóõùúXáóùèêê""""ØUµ$I¢³³“pèÐ!¦N:&ß+£Ûí¦°°;3ٳg¤Lx ‚ À™3g((( ²²’œœf̘Arr²üz}}=˜˜HNN999—(QïY¸p!7Ýt“¸u$6›ÿû¿ÿ#,,là•IœIA„0™L¸\.òóó9uêË—/ç–[n!::…BN§Ãh4R^^NtttÀ®È¹\.ÚÚÚ Ãh4¤Lad0ÄÆÆ’’’2¬—Ï磺ºššš, IIILœ8‘ððpyææfjjj¨©©!..ޤ¤$†­ŽÃÅb±†F£ X™âÚ¥ B¤¤¤””„ÃáàðáÃìÚµ‹“'Oât:ñù|ÄÄÄ••…N§#!!ÔÔÔ+Þ§×륣£ƒÐØØ€V žB¡ÂØâóùhjjbß¾}¼ýöÛ|øá‡œ;w§Ó)¯ÓÙÙÉéÓ§yçw8vìXÀF^z½^l6Û˜N #/A„ å«_ý*---¼ñÆ455õú $»ÝNQQ/¼ðWeê+ØËØx 0U*999¤¤¤ÐØØÈ‹/¾ÈgŸ}Fmm­¼NJJ ¹¹¹¨Õj¦L™Â”)S²o«ÕJaaá˜NE"n5 ‚ Á`àæ›oÆh4ròäI6mÚĪU«HOOïsýcÇŽaµZQ*•Gff&ééé;vŒýû÷SUUÅòåËinn¦»»›ÄÄDfÏžÛí¦¡¡²²2 ÈÈÈ`„ „††ôÖˆß@Á‡B¡Àë»Óßþ±<¥ÿÖ¸F£!,,ŒÅ‹óù矣×ëùÖ·¾%¿¿t: …­V£v»Ó§OóÊ+¯ðÝï~—ÜÜÜ´fä— Bi4ÒÓÓå‘iÛ¶m#!!N×ëËÉf³QSSC~~>N§£ÑÈÑ£GžŽøéééx½^ª««Ù¿?áááØl6ŒF#qqqH’„F£A£ÑÐÝÝËå’GN“J¥âøCPë0ÆKÅM7ÝÄ'Ÿ|ÂñãÇÉÊÊâºë®#**ê¢u=µµµx½^|>ÍÍÍDEECXXµµµ”——ãp8˜6mmmmH’DDD‰‰‰X­VJKKùôÓOY¶l‰‰‰„††¢ÓéÆÔ¨Nx ‚ \sæÌÁn·³uëV>úè#T*yyyò—tSS~ø!DGGE||<ÿûßiooç`Þ¼y¸\.NŸ>Mjj*sçÎeÙ²eò~ü¯ÓÒÒÈÎξjíÊ­¶xàªÕc$ËAXxx87ß|3­­­ìÚµ‹·Þz‹ÄÄÄ‹‡x½^, »víÂåráv»Ù»w/ÙÙÙäåå‘››ËÁƒyýõש¯¯ç»ßý.ùùù( rss¹ãŽ;èî£ƒÖÖVΜ9äI“HKK#::Z^Ãá™/ÞÈO±7± ãChh(sçÎåùçŸçÅ_dË–-èõzìv;Ð3ZêìÙ³L›6Y³f1}út,XÀÊ•+Ñétr93gÎD’$Ö®]Ë´iÓHJJ V“„A«AØ7ÞˆÍfcãÆ¼óÎ;ÜqÇDGG˯WUU±wï^***ˆˆˆÀ`0Í–-[°X,ÌŸ?Ÿ¥K—ÒÕÕÅîݻٿ?ÑÑÑäææ²hÑ"L&F£‘‰'0}út²³³Ñëõ¨Tª`5ûªQ×3}ü¢¯ØùÇb¼µ]ƵZMLL óçÏçÈ‘#òÑGa³Ù€ž+V«ǃ^¯'66€äädÜn7]]]FÜn7‡ &PQQA~~>3gÎ fÓ„AKAØÄ‰Y¸p!­­­?~œÐÐPfÏž-÷ékiiáäÉ“ÄÄÄššJBBÉÉɤ¥¥‘’’‚J¥Âl6³hÑ"|>o½õ_úÒ—˜£ÑHNNQQQ|þùçrªÿÄÑv»††RSSIMM•o{ßzë­x½^\.jµš‰'’‘‘ÃáÀápŒé´ýUŸÌ‚³ñà…B~‚0:LŸ>¹sç’––&ßFŒŒŒ$//³gϲyóf>üðCvîÜÉ»ï¾ËÎ;‰‰‰Án·Ëó~ík_ãÆoÄív³aÃêëë/ÚÓ餥¥Eþ2 –?üá|øá‡466ò³ŸýŒ IÒ¨| Õ•l;Òét:¹ÿþû1|ðÁ½R¥ø|>ÚÛÛ嫺~‡ƒÖÖV<åååTVV¤nŠ©IDAT2þ|vìØÁ§Ÿ~:ÜͺqÅër‚ˆ oA޵çC9CÝN„À+..¦¬¬ ‡ÃÁž={˜?>“'Oz®nÍ;ƒÁ@aa!ñññDEE‘——Ggg'çÎãÔ©S˜ÍfÒÒÒ˜>}:gÏž¥¡¡ððpŒF#YYY´´´P]]MYY&“‰°°0–,YBkk+ùùùLš4骴Ï?¥p±±dõÅŸ:âšk®¡¼¼œššùÊjLL ÙÙÙ;v ·ÛMgg'&“‰ÆÆF¢££™5kV«•¦¦&t:÷Ýw’$ÑÔÔÄæÍ›Y²dI¯Ìø€|UÌd2©~^#"ð®œÂ!¸  Ì›7“ÉtQ2aÂ"##1›ÍÄÅÅa0HNNféÒ¥$%%Q[[‹Édbúô餥¥¡P(Ðëõ$$$F£!##ŸÏGyy¹¼ÈÈHîºë.T*•ÜG&˜·½^/6lÚþ‡ËX¶ü™ëÛÛÛéî¸˜ŒŒ """P©TÄÇÇ3oÞ<Ün7MMM„„„Ëüùó©®®¦®®Žýû÷#ßR×h4”””ÐÖÖ†Éd"77—S§NqâÄ :Dff&†¦NJ[[555„††ìCP£.ðÏ}½Ka‚0ü222ÈÈȸä:z½þ¢Žñ—Êú}íµ×özîï?s¡U«V ±¶—ÇlôuåËÿšÏç–ºÃX¶Îçóù8wîííí:tˆ°°0"""äu®½öZÒÓÓ9xð f³³ÙÌüùóQ(:tˆÊÊJ¼^/·Ür ÙÙÙx<JJJðx<ÄÇÇ£P(˜>}:‹…òòrêêꈉ‰!>>ž»îº‹ÖÖVJKK™5kV°ÃU3ê/H L#A®¦ñ€Àøj«ŸJ¥bæÌ™¤¥¥át:ÑëõÝ ãú믗'g×jµÌž=›ÌÌLœN§<¸Ä?RqéÒ¥H’$'D6mÉÉÉ8N"""0„‡‡sÿý÷£V«Ñëõ„„„Œ©ÛŒ0 /¿ ƒ‹±ö|¨D°%‚ ‚B¡Àd2]”$õBjµº×U0¥RyÉ4ççýú¼¨ÑhÆ|®ºx=-Ib”ÞeÁ– ‚ Œ.#"ð,hˆc ‚ £Ùˆ ¼.L«Ð×kãÕxo¿ †B¡ ­­£Gb³ÙzM»# I’())³YÇáJ˜ÀËO=Äq„¡Ñëõ$%%1uêTÂÃÃEæö š>}ºœ¡_¸< …‹ÅBUU‡sÌG‹îînÚÚÚš”xÄ^‚ —#44”ääd222DÐd^¯N‡Åb—£A£Ñàp8¨¬¬Äf³‰÷tø|>ìv{@¿¼A3òóóÙ¾};z½^|Q‰$Ittt““CNNΘÎëuµ(•JÂÃÃùÒ—¾Ä7ÞˆZ-¾ªƒÉëõ&Oßu¥ÄÙaÌp8¸\.æÎ+熗$I?~I’p¹\Á®Î¨¤P(P«ÕÔÖÖR\\ŒV«Ó5‰ÏçÃf³‘™™‰N§ È\x ‚0f¨T*"""˜7o‘‘‘Á®Î¸$I]]]h4qµë •••qøða&Ož,®à‰Ûí¦´´µZ°~‹"ðA„H£Ñ0iÒ$¾õ­o¡Ñh‚]qÉn·óñlj×ë H™"ðA€ÚÚZJJJ¨¨¨ )) Ç#÷ Q(ò”([·n%::šéÓ§“}Q9V«•ÚÚZ ™?>±±±´µµ±mÛ6l6“&M⦛nºh;‹Å™3gؽ{7Ó§OgÚ´iLš4iZ.\- ……BR©W¼‚D©TÊç!PDà%‚pü¹Ãðù|DEEa2™ðx>žôôô>·«®®¦ººš &Ðkz¢ÑL^‚ —ÉívS^^ÎK/½Dxx8·Ür +V¬_oiiáÈ‘#œ/ÿ—_II ÇŽ#;;­V‹ÕjÅétŠ4Âe©ªªâܹs8fÍšuÑ-@“ÉDFF.—‹ÈÈH9O›Íf£¥¥…êêj !66–¨¨(ùÖecc#'NÄ`0ô»ÿ††:::Ðjµ@Ï€•ÎÎ΀&)Dà%‚p™ìv;CJ¬GNN .D’$öìÙÃñãÇY¶léééL›6í’Û{½^***hjj"<<œÛn» “É„Ùl¦°°P$.˹sçhnnfÁ‚$''÷y«O£Ñ›› @II uuuÐÒÒÂæÍ›IKKã¶Ûn#//ÂÂB6nÜȇ~ȧŸ~JNNÎEeú?;äðáØÍf ùùù”——tžÄ‘`\^ ,@¡P°wïÞ`WE„1ÂívÓÕÕ5¬YÚ}>»w靈³“¬¬¬1{KF^‹‹Å2äÔ‰‰‰äææ’••…Çã¡´´”“'O²`Á¦NJffæ%·w»ÝTUUÑÖÖFll,+W®”ûEÚíö1—ÃlÄ$ñçÉ8ÿ¡R©ˆŒŒdÞ¼yüêW¿Âét^Ñ>|>Ÿ˜°U„€ILL$%%…ÊÊJZZZp8ò_I’hjj¢««KäwÆãñ`·Û±X,x<žAog4‰ŠŠ">>ž‰'¢R©hooG’$""" »äö‡ƒC‡ÑÙÙIbb"ÉÉɤ¤¤Éds?,FÌ'Öívóæ›oÊÏËËËéîîæÈ‘#Ì™3‡'Ÿ|’o¼»Ý~Ùû8pàûöí»¬m ‡}®¬`ìs´ÇF 233™={6‹…¢¢"***ä|GÐócÏívcµZéîîè¾ÃÂÂp¹\TWWãp8ðù|òþD/ár„„„ V«ihh »»{ØúV9NŽ=ŠÅb!::zÌÿo1—Z­æî»ï–ŸOš4 ­VKzz:¿ÿýïùÿø<ÈOúÓ ÔoÆ ãbŸ£…86ÂH`6›™1c .äã?fãÆ´µµÉW \.---äççsîܹ€íW¥Rqà 7 V«ùì³Ï¨¯¯—'omms}b„á1{öl¦M›Faa!uuuý挻Z¬V+]]]úÏ`Q}¼ü#úòØcñ§?ý‰·Þz‹ŸýìgÃX+(--åw¿ûݘßçh!Ž0R¨ÕjRSSyôÑG),,¤³³“¿ýío̘1ƒ¼^/‡CñXUU…Ûí¦¥¥…²²2)++£¥¥¯×Kgg'õõõ”——3kÖ,êëë)))A¡PP^^Ž×ëE¡PPUUEbb¢Üoõ“O>Ál6ÓÑÑARR.—‹öövººº ·#…A™8q"3gÎ$33“÷Þ{—ËŲeËä÷ÓéÄb±P__OTTTÀö«×ë™?>{öìáÀäååa2™p8crTã¨ù4N™2€úúú^Ë%Iâ÷¿ÿ=YYYhµZ222xî¹ç.º?ŸŸÏ£>ÚëÍrá²7ß|“3f`4Y¶lÍÍͬX±B¾MàïöñÇËå8Ö®]Krr2:ŽÜÜ\>ùä“‹öÓédõêÕFî½÷Þ~Û;Ð>Û8q‚Ç{ ³ÙŒËåbíÚµ$%%a4¹ýöÛ)//ïµ¾Ïçã¿øéééhµZbccù·û7yhü`Û8Øãt¥çC†Sdd$‹/æË_þ2sæÌA’$Ün7.— ¯×‹F£a„ DEE¡ÑhÈÉÉ!33“ððp<ááádff2sæL´Z-n·›ØØXî¾ûnbbbðx<¨T*Ìf3ÙÙÙdffâõz‰ˆˆ`Μ9ÜtÓMèt:yˆÿ’%KHKK#44Tôk†$,,Œììlîºë.Ôj5………=z”ÊÊJjjjä‡ÍfÃjµÒÙÙ‰ÏçÃb±ÐÚÚ*?º»»ñù|twwSSSƒÅbÁl6ÓÖÖF[[V«•¶¶6 çûÅáp0{öl&NœHgg' ??ŸÆÆF4 N§»Ý~Åý¼GŠuÅëRššš.Ê+òÈ#ðÑG±yóf222X·nO=õ'Nœ`Ó¦Mòz+W®¤ªªª×¶«V­¢¢¢€Ÿüä'Ì;—dznÝ:Ö­[Ç÷¾÷=Þxã NŸ>-ßs¾ðŸ˜$IÜyç¸ÝnöìÙƒÉdâÉ'ŸdÅŠlÛ¶›nº‰åË—SWWÀo~óž~úiššš(**ê·½—ÚçPÚÝ—åË—S[[ ÀSO=Å=÷ÜÃSO=Åoû[žzê)–,YÂÉ“'å‘ßÿþ÷yþùçyë­·X¹r%?þñùÍo~CGG‡ð ÔÆÁ§@œAÿü‹7ß|s¿ëDFFÊCñý.ñ5iÒ¤> ¦¦¦^´Ìh4’””tÉ} ÂPdffòÄOPTTÄŽ;xï½÷¸þúëåu†ë¯¿‡ÃAQQ†¶¶6ÊËË ¡¢¢«ÕJtt4œ8q‚ÖÖVæÎ+¯ãóù¨¨¨szÕÖÖ2eÊ–-[ƾ}ûxçwˆŽŽÆ`0žžŽÛí¦££‹Å‚N§ æá )À€^ËÝþBkÖ¬‘éõ×_——íÞ½[¤7öZwÁ‚ ½ûî»ò²ööö‹Êîìì”—={V^^WW'’Ùl°^o¼ñ†H•••ò²¶¶6 òòò$I’¤®®.yûíÛ·_ñ±J»ûÒÜÜ,—]ZZÚ뵕+WJ€ôßÿýßò2“É$) ù¹ÿø„††ÊËjã`ŽS ÎÇhu¥Ÿ›ñìÌ™3Ò÷¿ÿ}©¨¨HÚµk—ôüóÏKmmmÁ®Ö¸åóù¤>ø@Ú²e‹”ŸŸ/=ûì³Ò‚]­QãÈ‘#Ò³Ï>+ÕÖÖJ[¶l‘^~ùeÉår k|>ŸdµZ¥šš©¸¸Xjhhššš¤¦¦&©¹¹Yr¹\’Ãáš››¥ÂÂB©¸¸Xª©©‘ÚÛÛ¥ÊÊJ©¨¨H*++“ìv»ÔÔÔ$•••I………R]]ÔÙÙ)uvvJeeeRii©T[[+Y,ÉãñH‹Eª©©‘Μ9#•””H¥¥¥RYY™T]]-µ··ûq$I²ÙlÒ¦M›¤íÛ·Kû÷ï—~øÃJWT戽âµyófî¼óN:ÄÚµkÙ¾};?úÑøæ7¿)¯óÊ+¯\ôkoÍš5ìÛ·W_}•¯|å+}Γf2™ä¿ÏÏíŸè³¥¥eÀzúGb¦¤¤\ôÚ±cÇ€Íâ°téÒËÈPÚݗ󧀘G•—õ5<µ¿!«þŽ¨Ò ncåçç=é0Ôê¾g ‡Æ¥ÝC­ÏìÙ³e$صkÐs/þoû¿þõ¯ÞÇg 6^ÉqÊùÆ7¯×‹Ýn§¥¥EŒì I’èèèèõCJ„±×`²@û;w;Î^ó?ùçE³X,W§rçéèèzú ù÷{µ]Ívû¯†]8ŠdÏž=|ûÛßF¯×ó«_ýjÈWî‚qœ„ñÇf³Q^^ÎÖ­[/9'œpõH’ÄÉ“'™6mZŸýÒa¼±×`„‡‡ÓÖÖFEES§N•—û;ß Çåʺºº8xð «V­ºêûƒ«ÛnÿhÁóËøøã¹óÎ;Y¹r%ùË_.kú†`'aüÉÊÊâ+_ùʘÌv=š$$$GXXؘO†y5Y­VÊËËÙ¾}»x?‰Ó餠 €œœ’““R樼æÍ›Ç–-[عsg¯¤µµLªdgg³ÿ~Ö¯_ß+ ())áöÛo§¸¸8àû d»=O¯[………,Z´H^öÄOàñxøõ¯}Ùsfã8 ãƒÓ餱±‘3gÎÑhÖy…‹ét:º»»)--¥¡¡áŠfÏÌf3 Øív‘‹-H<ÑÑÑDEElDåˆ ¼Îï“áv»ü’_³f [¶láå—_æÁ”ìÝ»…BÁC=$¯{þ­3ŸÏ‡R©ì•óJ’¤>Sø×U©Tx½^¼^o¯_÷Þ{/û÷ïgçÎ<þøã<óÌ3¸Ýnžyæy˜øùÓwøËŒþö9”väôéÓÌœ9S~þæ›o¢T*ùÎw¾#/+++þÕi²¯ã3Psœq>„ñÇápPSSÃŽ;.êØ+—Ýn§¬¬lØ3 f>Ÿ—ËEww7Ó¦M#99yÌ%mrss ¥¥¥ÇsÅSr˜ÀËçóñ׿þU~¾iÓ&î½÷Þ~;bCO"ÍÕ«WóÇ?þ‘‡~˜_üâÔ××óƒü€Çœ¹sçÊëúGÎAOGï9sæpèÐ!yYAA€œ8qâ¢uÓÒÒ(..f×®]tttðÚk¯±uëVÖ¬YÃÛo¿Íþýûyá…xá…€ž\'»wïàÈ‘#ry ƒîãÔß>‡Òî|ûÛßæOú©©©üå/áå—_æG?úsæÌ‘×™1cùùù¼ôÒK¬^½šçž{N¶JKKy÷ÝwY²dÉ%Û8˜ãˆó!Œ?Ó§Oç…^Àh4Š |„ñ'ÑôLÖÖÖÆ±cÇÐjµ„††âõzÅÀ¢À?ñ÷‰'X¾|ù•¥|F/¼Ÿ?Øâûë0ÐöÒÜûÛßRQQAZZ>ú(?üð€õ꯮}-ßµk«W¯¦¾¾žU«V±~ýzù×µÅbá‡?ü!›6mÂjµ2wî\ž}öYn¼ñÆ‹ÊS«Õƒmu©}¶Ýýñ×éã?æñǧ²²’ôôt{ì1xà^ë^ã8G#8'‚ ãÈI'! ñ¥.‚ Á!n5 ‚ ‚ x ‚ ‚ x ‚ ‚ x ‚ ‚ x ‚ ‚ “«>ª±¿9AAÆqÅKAa˜ˆÀKAa˜ˆÀKF‘àVaì x/ñ¥!‚ ‚Ð7qÅKAa˜ˆÀKAa˜ˆÀKAa˜ˆÀKAa˜ˆÀKAa˜ˆÀKAa˜ˆÀKAa˜ˆÀKAa˜ˆÀKAa˜üg=M ïÖtIEND®B`‚gwenhywfar-5.12.0/install-sh0000755000175000017500000003601013616550647012722 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2018-03-11.20; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&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: gwenhywfar-5.12.0/README.DARWIN0000644000175000017500000000031713142134462012545 00000000000000 Currently Darwin does not handle the "__attribute__ ((constructor))" entries in C files as it seems, so in your programs on Darwin you will have to call GWEN_Init() yourself before doing anything else... gwenhywfar-5.12.0/data/0000775000175000017500000000000014730345116011700 500000000000000gwenhywfar-5.12.0/data/Makefile.in0000664000175000017500000005026114730344661013675 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 = data ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__dist_cert_DATA_DIST) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h 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__dist_cert_DATA_DIST = ca-bundle.crt 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)$(certdir)" DATA = $(dist_cert_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ @INSTALL_CERTS_TRUE@certdir = $(datadir)/gwenhywfar @INSTALL_CERTS_TRUE@dist_cert_DATA = ca-bundle.crt @INSTALL_CERTS_TRUE@EXTRA_DIST = README 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) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_certDATA: $(dist_cert_DATA) @$(NORMAL_INSTALL) @list='$(dist_cert_DATA)'; test -n "$(certdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(certdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(certdir)" || 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)$(certdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(certdir)" || exit $$?; \ done uninstall-dist_certDATA: @$(NORMAL_UNINSTALL) @list='$(dist_cert_DATA)'; test -n "$(certdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(certdir)'; $(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)$(certdir)"; 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 clean-libtool 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-dist_certDATA 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 mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_certDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_certDATA 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 \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_certDATA .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: gwenhywfar-5.12.0/data/ca-bundle.crt0000666000175000017500000066547213531037643014213 00000000000000## ## Bundle of CA Root Certificates ## ## Certificate data from Mozilla as of: Mon Aug 26 19:18:40 2019 ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates ## file (certdata.txt). This file can be found in the mozilla source tree: ## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt ## ## It contains the certificates in PEM format and therefore ## can be directly used with curl / libcurl / php_curl, or with ## an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## ## Conversion done with mk-ca-bundle.pl version 1.25. ## SHA1: 6118a9aae201f36ca7df02a3795b601fbf9ed385 ## GlobalSign Root CA ================== -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== -----END CERTIFICATE----- GlobalSign Root CA - R2 ======================= -----BEGIN CERTIFICATE----- MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== -----END CERTIFICATE----- Verisign Class 3 Public Primary Certification Authority - G3 ============================================================ -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- Entrust.net Premium 2048 Secure Server CA ========================================= -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= -----END CERTIFICATE----- Baltimore CyberTrust Root ========================= -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- AddTrust External Root ====================== -----BEGIN CERTIFICATE----- MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= -----END CERTIFICATE----- Entrust Root Certification Authority ==================================== -----BEGIN CERTIFICATE----- MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 -----END CERTIFICATE----- GeoTrust Global CA ================== -----BEGIN CERTIFICATE----- MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm Mw== -----END CERTIFICATE----- GeoTrust Universal CA ===================== -----BEGIN CERTIFICATE----- MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI P/rmMuGNG2+k5o7Y+SlIis5z/iw= -----END CERTIFICATE----- GeoTrust Universal CA 2 ======================= -----BEGIN CERTIFICATE----- MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS -----END CERTIFICATE----- Comodo AAA Services root ======================== -----BEGIN CERTIFICATE----- MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== -----END CERTIFICATE----- QuoVadis Root CA ================ -----BEGIN CERTIFICATE----- MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi 5nrQNiOKSnQ2+Q== -----END CERTIFICATE----- QuoVadis Root CA 2 ================== -----BEGIN CERTIFICATE----- MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6 XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3 UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1 WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8 VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u -----END CERTIFICATE----- QuoVadis Root CA 3 ================== -----BEGIN CERTIFICATE----- MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8 nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4 ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2 Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto= -----END CERTIFICATE----- Security Communication Root CA ============================== -----BEGIN CERTIFICATE----- MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi FL39vmwLAw== -----END CERTIFICATE----- Sonera Class 2 Root CA ====================== -----BEGIN CERTIFICATE----- MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH llpwrN9M -----END CERTIFICATE----- XRamp Global CA Root ==================== -----BEGIN CERTIFICATE----- MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= -----END CERTIFICATE----- Go Daddy Class 2 CA =================== -----BEGIN CERTIFICATE----- MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b vZ8= -----END CERTIFICATE----- Starfield Class 2 CA ==================== -----BEGIN CERTIFICATE----- MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 QBFGmh95DmK/D5fs4C8fF5Q= -----END CERTIFICATE----- Taiwan GRCA =========== -----BEGIN CERTIFICATE----- MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O 1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS -----END CERTIFICATE----- DigiCert Assured ID Root CA =========================== -----BEGIN CERTIFICATE----- MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== -----END CERTIFICATE----- DigiCert Global Root CA ======================= -----BEGIN CERTIFICATE----- MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= -----END CERTIFICATE----- DigiCert High Assurance EV Root CA ================================== -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K -----END CERTIFICATE----- Certplus Class 2 Primary CA =========================== -----BEGIN CERTIFICATE----- MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 l7+ijrRU -----END CERTIFICATE----- DST Root CA X3 ============== -----BEGIN CERTIFICATE----- MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ -----END CERTIFICATE----- SwissSign Gold CA - G2 ====================== -----BEGIN CERTIFICATE----- MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR 7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm 5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr 44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ -----END CERTIFICATE----- SwissSign Silver CA - G2 ======================== -----BEGIN CERTIFICATE----- MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG 9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm +/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH 6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P 4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L 3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx /uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u -----END CERTIFICATE----- GeoTrust Primary Certification Authority ======================================== -----BEGIN CERTIFICATE----- MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= -----END CERTIFICATE----- thawte Primary Root CA ====================== -----BEGIN CERTIFICATE----- MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== -----END CERTIFICATE----- VeriSign Class 3 Public Primary Certification Authority - G5 ============================================================ -----BEGIN CERTIFICATE----- MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq -----END CERTIFICATE----- SecureTrust CA ============== -----BEGIN CERTIFICATE----- MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= -----END CERTIFICATE----- Secure Global CA ================ -----BEGIN CERTIFICATE----- MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW -----END CERTIFICATE----- COMODO Certification Authority ============================== -----BEGIN CERTIFICATE----- MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== -----END CERTIFICATE----- Network Solutions Certificate Authority ======================================= -----BEGIN CERTIFICATE----- MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey -----END CERTIFICATE----- COMODO ECC Certification Authority ================================== -----BEGIN CERTIFICATE----- MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= -----END CERTIFICATE----- OISTE WISeKey Global Root GA CA =============================== -----BEGIN CERTIFICATE----- MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= -----END CERTIFICATE----- Certigna ======== -----BEGIN CERTIFICATE----- MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----END CERTIFICATE----- Deutsche Telekom Root CA 2 ========================== -----BEGIN CERTIFICATE----- MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU Cm26OWMohpLzGITY+9HPBVZkVw== -----END CERTIFICATE----- Cybertrust Global Root ====================== -----BEGIN CERTIFICATE----- MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW WL1WMRJOEcgh4LMRkWXbtKaIOM5V -----END CERTIFICATE----- ePKI Root Certification Authority ================================= -----BEGIN CERTIFICATE----- MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX 12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= -----END CERTIFICATE----- certSIGN ROOT CA ================ -----BEGIN CERTIFICATE----- MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD -----END CERTIFICATE----- GeoTrust Primary Certification Authority - G3 ============================================= -----BEGIN CERTIFICATE----- MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt -----END CERTIFICATE----- thawte Primary Root CA - G2 =========================== -----BEGIN CERTIFICATE----- MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== -----END CERTIFICATE----- thawte Primary Root CA - G3 =========================== -----BEGIN CERTIFICATE----- MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= -----END CERTIFICATE----- GeoTrust Primary Certification Authority - G2 ============================================= -----BEGIN CERTIFICATE----- MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 npaqBA+K -----END CERTIFICATE----- VeriSign Universal Root Certification Authority =============================================== -----BEGIN CERTIFICATE----- MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 mJO37M2CYfE45k+XmCpajQ== -----END CERTIFICATE----- VeriSign Class 3 Public Primary Certification Authority - G4 ============================================================ -----BEGIN CERTIFICATE----- MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== -----END CERTIFICATE----- NetLock Arany (Class Gold) FÅ‘tanúsítvány ============================================ -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= -----END CERTIFICATE----- Staat der Nederlanden Root CA - G2 ================================== -----BEGIN CERTIFICATE----- MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ 5291qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8SpuOUfiUtn vWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPUZ5uW6M7XxgpT0GtJlvOj CwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvEpMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiil e7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCR OME4HYYEhLoaJXhena/MUGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpI CT0ugpTNGmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy5V65 48r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv6q012iDTiIJh8BIi trzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEKeN5KzlW/HdXZt1bv8Hb/C3m1r737 qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMB AAGjgZcwgZQwDwYDVR0TAQH/BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcC ARYxaHR0cDovL3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqGSIb3DQEBCwUA A4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLySCZa59sCrI2AGeYwRTlHSeYAz +51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwj f/ST7ZwaUb7dRUG/kSS0H4zpX897IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaN kqbG9AclVMwWVxJKgnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfk CpYL+63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxLvJxxcypF URmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkmbEgeqmiSBeGCc1qb3Adb CG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvkN1trSt8sV4pAWja63XVECDdCcAz+3F4h oKOKwJCcaNpQ5kUQR3i2TtJlycM33+FCY7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoV IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm 66+KAQ== -----END CERTIFICATE----- Hongkong Post Root CA 1 ======================= -----BEGIN CERTIFICATE----- MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== -----END CERTIFICATE----- SecureSign RootCA11 =================== -----BEGIN CERTIFICATE----- MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= -----END CERTIFICATE----- Microsec e-Szigno Root CA 2009 ============================== -----BEGIN CERTIFICATE----- MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi LXpUq3DDfSJlgnCW -----END CERTIFICATE----- GlobalSign Root CA - R3 ======================= -----BEGIN CERTIFICATE----- MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r kpeDMdmztcpHWD9f -----END CERTIFICATE----- Autoridad de Certificacion Firmaprofesional CIF A62634068 ========================================================= -----BEGIN CERTIFICATE----- MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V -----END CERTIFICATE----- Izenpe.com ========== -----BEGIN CERTIFICATE----- MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ 03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU +zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK 0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ 0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== -----END CERTIFICATE----- Chambers of Commerce Root - 2008 ================================ -----BEGIN CERTIFICATE----- MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ -----END CERTIFICATE----- Global Chambersign Root - 2008 ============================== -----BEGIN CERTIFICATE----- MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B -----END CERTIFICATE----- Go Daddy Root Certificate Authority - G2 ======================================== -----BEGIN CERTIFICATE----- MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 -----END CERTIFICATE----- Starfield Root Certificate Authority - G2 ========================================= -----BEGIN CERTIFICATE----- MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 -----END CERTIFICATE----- Starfield Services Root Certificate Authority - G2 ================================================== -----BEGIN CERTIFICATE----- MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 -----END CERTIFICATE----- AffirmTrust Commercial ====================== -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= -----END CERTIFICATE----- AffirmTrust Networking ====================== -----BEGIN CERTIFICATE----- MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= -----END CERTIFICATE----- AffirmTrust Premium =================== -----BEGIN CERTIFICATE----- MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== -----END CERTIFICATE----- AffirmTrust Premium ECC ======================= -----BEGIN CERTIFICATE----- MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM eQ== -----END CERTIFICATE----- Certum Trusted Network CA ========================= -----BEGIN CERTIFICATE----- MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= -----END CERTIFICATE----- TWCA Root Certification Authority ================================= -----BEGIN CERTIFICATE----- MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== -----END CERTIFICATE----- Security Communication RootCA2 ============================== -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 -----END CERTIFICATE----- EC-ACC ====== -----BEGIN CERTIFICATE----- MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D 5EI= -----END CERTIFICATE----- Hellenic Academic and Research Institutions RootCA 2011 ======================================================= -----BEGIN CERTIFICATE----- MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 -----END CERTIFICATE----- Actalis Authentication Root CA ============================== -----BEGIN CERTIFICATE----- MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== -----END CERTIFICATE----- Trustis FPS Root CA =================== -----BEGIN CERTIFICATE----- MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl iB6XzCGcKQENZetX2fNXlrtIzYE= -----END CERTIFICATE----- Buypass Class 2 Root CA ======================= -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn 9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b /+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN rJgWVqA= -----END CERTIFICATE----- Buypass Class 3 Root CA ======================= -----BEGIN CERTIFICATE----- MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR 5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh 7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH 2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV /afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz 6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi Cp/HuZc= -----END CERTIFICATE----- T-TeleSec GlobalRoot Class 3 ============================ -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== -----END CERTIFICATE----- EE Certification Centre Root CA =============================== -----BEGIN CERTIFICATE----- MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw 93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM dcGWxZ0= -----END CERTIFICATE----- D-TRUST Root Class 3 CA 2 2009 ============================== -----BEGIN CERTIFICATE----- MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ 4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm 2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= -----END CERTIFICATE----- D-TRUST Root Class 3 CA 2 EV 2009 ================================= -----BEGIN CERTIFICATE----- MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T 7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv w9y4AyHqnxbxLFS1 -----END CERTIFICATE----- CA Disig Root R2 ================ -----BEGIN CERTIFICATE----- MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa 5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV 7+ZtsH8tZ/3zbBt1RqPlShfppNcL -----END CERTIFICATE----- ACCVRAIZ1 ========= -----BEGIN CERTIFICATE----- MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ 0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR 5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J 9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd 3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p EfbRD0tVNEYqi4Y7 -----END CERTIFICATE----- TWCA Global Root CA =================== -----BEGIN CERTIFICATE----- MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M 8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg /eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= -----END CERTIFICATE----- TeliaSonera Root CA v1 ====================== -----BEGIN CERTIFICATE----- MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ 6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA 3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx 0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= -----END CERTIFICATE----- E-Tugra Certification Authority =============================== -----BEGIN CERTIFICATE----- MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB /wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G C7TbO6Orb1wdtn7os4I07QZcJA== -----END CERTIFICATE----- T-TeleSec GlobalRoot Class 2 ============================ -----BEGIN CERTIFICATE----- MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR 3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN 9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== -----END CERTIFICATE----- Atos TrustedRoot 2011 ===================== -----BEGIN CERTIFICATE----- MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr 54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G 3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed -----END CERTIFICATE----- QuoVadis Root CA 1 G3 ===================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV 7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX 9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP +V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh 3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV hMJKzRwuJIczYOXD -----END CERTIFICATE----- QuoVadis Root CA 2 G3 ===================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD 6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr O3jtZsSOeWmD3n+M -----END CERTIFICATE----- QuoVadis Root CA 3 G3 ===================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe 6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX 0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 PpxxVJkES/1Y+Zj0 -----END CERTIFICATE----- DigiCert Assured ID Root G2 =========================== -----BEGIN CERTIFICATE----- MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH 35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv 0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo IhNzbM8m9Yop5w== -----END CERTIFICATE----- DigiCert Assured ID Root G3 =========================== -----BEGIN CERTIFICATE----- MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy 1vUhZscv6pZjamVFkpUBtA== -----END CERTIFICATE----- DigiCert Global Root G2 ======================= -----BEGIN CERTIFICATE----- MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO 3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu 5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl MrY= -----END CERTIFICATE----- DigiCert Global Root G3 ======================= -----BEGIN CERTIFICATE----- MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y 3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 VOKa5Vt8sycX -----END CERTIFICATE----- DigiCert Trusted Root G4 ======================== -----BEGIN CERTIFICATE----- MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy 7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN 5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb /UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa 5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP 82Z+ -----END CERTIFICATE----- COMODO RSA Certification Authority ================================== -----BEGIN CERTIFICATE----- MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ 5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX 2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I LaZRfyHBNVOFBkpdn627G190 -----END CERTIFICATE----- USERTrust RSA Certification Authority ===================================== -----BEGIN CERTIFICATE----- MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz 0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O +T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq /nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ 7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM 8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 -----END CERTIFICATE----- USERTrust ECC Certification Authority ===================================== -----BEGIN CERTIFICATE----- MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu 9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= -----END CERTIFICATE----- GlobalSign ECC Root CA - R4 =========================== -----BEGIN CERTIFICATE----- MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= -----END CERTIFICATE----- GlobalSign ECC Root CA - R5 =========================== -----BEGIN CERTIFICATE----- MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 -----END CERTIFICATE----- Staat der Nederlanden Root CA - G3 ================================== -----BEGIN CERTIFICATE----- MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp 07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE 41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA 8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b 8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq 1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= -----END CERTIFICATE----- Staat der Nederlanden EV Root CA ================================ -----BEGIN CERTIFICATE----- MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r 0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr 08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV 0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd 74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq 5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi 5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== -----END CERTIFICATE----- IdenTrust Commercial Root CA 1 ============================== -----BEGIN CERTIFICATE----- MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi 1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl 3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH 6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe 2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R cGzM7vRX+Bi6hG6H -----END CERTIFICATE----- IdenTrust Public Sector Root CA 1 ================================= -----BEGIN CERTIFICATE----- MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL 4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ 3Wl9af0AVqW3rLatt8o+Ae+c -----END CERTIFICATE----- Entrust Root Certification Authority - G2 ========================================= -----BEGIN CERTIFICATE----- MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP /vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO e4pIb4tF9g== -----END CERTIFICATE----- Entrust Root Certification Authority - EC1 ========================================== -----BEGIN CERTIFICATE----- MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef 9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G -----END CERTIFICATE----- CFCA EV ROOT ============ -----BEGIN CERTIFICATE----- MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD 7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB /wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua 4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su -----END CERTIFICATE----- OISTE WISeKey Global Root GB CA =============================== -----BEGIN CERTIFICATE----- MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk 9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB /zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= -----END CERTIFICATE----- SZAFIR ROOT CA2 =============== -----BEGIN CERTIFICATE----- MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE 2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul 4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 +/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== -----END CERTIFICATE----- Certum Trusted Network CA 2 =========================== -----BEGIN CERTIFICATE----- MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ 9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 zAYspsbiDrW5viSP -----END CERTIFICATE----- Hellenic Academic and Research Institutions RootCA 2015 ======================================================= -----BEGIN CERTIFICATE----- MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ 6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn 82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q p/UsQu0yrbYhnr68 -----END CERTIFICATE----- Hellenic Academic and Research Institutions ECC RootCA 2015 =========================================================== -----BEGIN CERTIFICATE----- MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR -----END CERTIFICATE----- ISRG Root X1 ============ -----BEGIN CERTIFICATE----- MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ 4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf 1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY 9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV 0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ m+kXQ99b21/+jh5Xos1AnX5iItreGCc= -----END CERTIFICATE----- AC RAIZ FNMT-RCM ================ -----BEGIN CERTIFICATE----- MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou 08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ 47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW +YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d 8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm 5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= -----END CERTIFICATE----- Amazon Root CA 1 ================ -----BEGIN CERTIFICATE----- MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB /zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy 8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa 2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 -----END CERTIFICATE----- Amazon Root CA 2 ================ -----BEGIN CERTIFICATE----- MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ 3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY +gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= -----END CERTIFICATE----- Amazon Root CA 3 ================ -----BEGIN CERTIFICATE----- MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== -----END CERTIFICATE----- Amazon Root CA 4 ================ -----BEGIN CERTIFICATE----- MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN /sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri 83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== -----END CERTIFICATE----- LuxTrust Global Root 2 ====================== -----BEGIN CERTIFICATE----- MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2 xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm 1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/ a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB /zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5 Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT +Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW 7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt /f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc 7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr -----END CERTIFICATE----- TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 ============================================= -----BEGIN CERTIFICATE----- MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= -----END CERTIFICATE----- GDCA TrustAUTH R5 ROOT ====================== -----BEGIN CERTIFICATE----- MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ 9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx 9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd +PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ 8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv /EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== -----END CERTIFICATE----- TrustCor RootCert CA-1 ====================== -----BEGIN CERTIFICATE----- MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw /Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P 3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= -----END CERTIFICATE----- TrustCor RootCert CA-2 ====================== -----BEGIN CERTIFICATE----- MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 /p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh 8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU 2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv 2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ -----END CERTIFICATE----- TrustCor ECA-1 ============== -----BEGIN CERTIFICATE----- MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u /ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== -----END CERTIFICATE----- SSL.com Root Certification Authority RSA ======================================== -----BEGIN CERTIFICATE----- MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxDjAM BgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24x MTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYw MjEyMTczOTM5WhcNNDEwMjEyMTczOTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NM LmNvbSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcNAQEBBQAD ggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2RxFdHaxh3a3by/ZPkPQ/C Fp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aXqhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8 P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcCC52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/ge oeOy3ZExqysdBP+lSgQ36YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkp k8zruFvh/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrFYD3Z fBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93EJNyAKoFBbZQ+yODJ gUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVcUS4cK38acijnALXRdMbX5J+tB5O2 UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi8 1xtZPCvM8hnIk2snYxnP/Okm+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4s bE6x/c+cCbqiM+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4GA1UdDwEB/wQE AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGVcpNxJK1ok1iOMq8bs3AD/CUr dIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBcHadm47GUBwwyOabqG7B52B2ccETjit3E+ZUf ijhDPwGFpUenPUayvOUiaPd7nNgsPgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAsl u1OJD7OAUN5F7kR/q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjq erQ0cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jra6x+3uxj MxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90IH37hVZkLId6Tngr75qNJ vTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/YK9f1JmzJBjSWFupwWRoyeXkLtoh/D1JI Pb9s2KJELtFOt3JY04kTlf5Eq/jXixtunLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406y wKBjYZC6VWg3dGq2ktufoYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NI WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= -----END CERTIFICATE----- SSL.com Root Certification Authority ECC ======================================== -----BEGIN CERTIFICATE----- MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ 8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z 5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl -----END CERTIFICATE----- SSL.com EV Root Certification Authority RSA R2 ============================================== -----BEGIN CERTIFICATE----- MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim 9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 +qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 ++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX 9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== -----END CERTIFICATE----- SSL.com EV Root Certification Authority ECC =========================================== -----BEGIN CERTIFICATE----- MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy 3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe 5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== -----END CERTIFICATE----- GlobalSign Root CA - R6 ======================= -----BEGIN CERTIFICATE----- MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMX R2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds b2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs U2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQss grRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE 3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbF vuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+ azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05O WgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguy CLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP 0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kN b7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQE AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNV HSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0 lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrY BzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr 3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB1 0jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/T uTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItK oZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= -----END CERTIFICATE----- OISTE WISeKey Global Root GC CA =============================== -----BEGIN CERTIFICATE----- MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 -----END CERTIFICATE----- GTS Root R1 =========== -----BEGIN CERTIFICATE----- MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv b3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIi MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx 9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7r aKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnW r4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqM LnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly 4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr 06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om 3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNu JLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEM BQADggIBADiWCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73sv fuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xm ld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9b gsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq 4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWEr tXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyyF62ARPBo pY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9SQ98POyDGCBDTtWTurQ0 sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQcu51OyLemGhmW/HGY0dVHLql CFF1pkgl -----END CERTIFICATE----- GTS Root R2 =========== -----BEGIN CERTIFICATE----- MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv b3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIi MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTuk k3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo 7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWI m8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5Gm dFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbu ak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscsz cTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73Vululycsl aVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy 5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEM BQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ +YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3Da WsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5r n/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56Gtmwfu Nmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ 7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXs gWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ld o/DUhgkC -----END CERTIFICATE----- GTS Root R3 =========== -----BEGIN CERTIFICATE----- MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP 0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0 glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa KaqW04MjyaR7YbPMAuhd -----END CERTIFICATE----- GTS Root R4 =========== -----BEGIN CERTIFICATE----- MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa 6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV 2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x zPKwTdb+mciUqXWi4w== -----END CERTIFICATE----- UCA Global G2 Root ================== -----BEGIN CERTIFICATE----- MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV 8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/ R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa 4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97 8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo 5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9 yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A== -----END CERTIFICATE----- UCA Extended Validation Root ============================ -----BEGIN CERTIFICATE----- MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR 59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH 0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS 3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4 dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb +7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr dhh2n1ax -----END CERTIFICATE----- Certigna Root CA ================ -----BEGIN CERTIFICATE----- MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8 JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16 XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq 4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/ /TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of 1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq 7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3 4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd 8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS 6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= -----END CERTIFICATE----- emSign Root CA - G1 =================== -----BEGIN CERTIFICATE----- MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1 cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ 6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2 vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q +Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx iN66zB+Afko= -----END CERTIFICATE----- emSign ECC Root CA - G3 ======================= -----BEGIN CERTIFICATE----- MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4 MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11 ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc 58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7 jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj -----END CERTIFICATE----- emSign Root CA - C1 =================== -----BEGIN CERTIFICATE----- MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/ Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+ XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp /6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1 NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9 wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI= -----END CERTIFICATE----- emSign ECC Root CA - C3 ======================= -----BEGIN CERTIFICATE----- MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd 6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9 SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== -----END CERTIFICATE----- Hongkong Post Root CA 3 ======================= -----BEGIN CERTIFICATE----- MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQELBQAwbzELMAkG A1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJSG9uZyBLb25nMRYwFAYDVQQK Ew1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25na29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2 MDMwMjI5NDZaFw00MjA2MDMwMjI5NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtv bmcxEjAQBgNVBAcTCUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMX SG9uZ2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz iNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFOdem1p+/l6TWZ5Mwc50tf jTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mIVoBc+L0sPOFMV4i707mV78vH9toxdCim 5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOe sL4jpNrcyCse2m5FHomY2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj 0mRiikKYvLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+TtbNe/ JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZbx39ri1UbSsUgYT2u y1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+l2oBlKN8W4UdKjk60FSh0Tlxnf0h +bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YKTE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsG xVd7GYYKecsAyVKvQv83j+GjHno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwID AQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEwDQYJKoZIhvcN AQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG7BJ8dNVI0lkUmcDrudHr9Egw W62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCkMpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWld y8joRTnU+kLBEUx3XZL7av9YROXrgZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov +BS5gLNdTaqX4fnkGMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDc eqFS3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJmOzj/2ZQw 9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+l6mc1X5VTMbeRRAc6uk7 nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6cJfTzPV4e0hz5sy229zdcxsshTrD3mUcY hcErulWuBurQB7Lcq9CClnXO0lD+mefPL5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB 60PZ2Pierc+xYw5F9KBaLJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fq dBb9HxEGmpv0 -----END CERTIFICATE----- gwenhywfar-5.12.0/data/README0000644000175000017500000000265613142134462012503 00000000000000 The Mozilla CA bundle extracted and converted to PEM . See the PEM file itself for the actual date of the latest Mozilla source change that is included in the converted file. The converted file is licensed under the same license as the Mozilla source file: MPL 2.0. We use mk-ca-bundle.pl from curl: https://github.com/bagder/curl/blob/master/lib/mk-ca-bundle.pl Copyright notice from CURL follows: COPYRIGHT AND PERMISSION NOTICE Copyright (c) 1996 - 2016, Daniel Stenberg, . All rights reserved. Permission to use, copy, modify, and 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", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. gwenhywfar-5.12.0/data/Makefile.am0000666000175000017500000000015413642701411013651 00000000000000 if INSTALL_CERTS certdir=$(datadir)/gwenhywfar dist_cert_DATA=ca-bundle.crt EXTRA_DIST=README endif gwenhywfar-5.12.0/gwenhywfar-config.cmake.in0000666000175000017500000000564113702435660015754 00000000000000 # Macros cmake's CONFIGURE_PACKAGE_CONFIG_FILE() would create macro(set_and_check _var _file) set(${_var} "${_file}") if(NOT EXISTS "${_file}") message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") endif() endmacro() macro(check_required_components _NAME) foreach(comp ${${_NAME}_FIND_COMPONENTS}) if(NOT ${_NAME}_${comp}_FOUND) if(${_NAME}_FIND_REQUIRED_${comp}) message( WARNING "${_name} required component \"${comp}\" not found") set(${_NAME}_FOUND FALSE) endif() endif() endforeach() endmacro() set_and_check(prefix "@prefix@") set_and_check(exec_prefix "@exec_prefix@") set_and_check(includedir "@includedir@") set_and_check(GWENHYWFAR_INCLUDE_DIRS "@gwenhywfar_headerdir@") if(WIN32) set_and_check(GWENHYWFAR_LIBRARIES "@libdir@/libgwenhywfar.dll.a") elseif(APPLE) set_and_check(GWENHYWFAR_LIBRARIES "@libdir@/libgwenhywfar.@GWENHYWFAR_SO_EFFECTIVE@.dylib") else() set_and_check(GWENHYWFAR_LIBRARIES "@libdir@/libgwenhywfar.so.@GWENHYWFAR_SO_EFFECTIVE@") endif() set(GWENHYWFAR_FOUND TRUE) # find components # Only for backwards compatibility. It is recommended to use # find_package(gwengui-cpp) or # find_package(gwengui-qt4) list(FIND GWENHYWFAR_FIND_COMPONENTS "cpp" FIND_GWEN_COMPONENT_CPP) if ( NOT ${FIND_GWEN_COMPONENT_CPP} EQUAL -1 ) find_package(gwengui-cpp "@GWENHYWFAR_VERSION_STRING@" EXACT) if (gwengui-cpp_FOUND) set( GWENHYWFAR_INCLUDE_DIRS ${GWENHYWFAR_INCLUDE_DIRS} ${GWENGUI_CPP_INCLUDE_DIRS} ) set( GWENHYWFAR_LIBRARIES ${GWENHYWFAR_LIBRARIES} ${GWENGUI_CPP_LIBRARIES} ) set( GWENHYWFAR_cpp_FOUND true ) endif() endif() list(FIND GWENHYWFAR_FIND_COMPONENTS "qt4" FIND_GWEN_COMPONENT_QT4) if ( NOT ${FIND_GWEN_COMPONENT_QT4} EQUAL -1 ) find_package(gwengui-qt4 "@GWENHYWFAR_VERSION_STRING@" EXACT) if ( gwengui-qt4_FOUND ) set( GWENHYWFAR_INCLUDE_DIRS ${GWENHYWFAR_INCLUDE_DIRS} ${gwengui-qt4_INCLUDE_DIRS} ) set( GWENHYWFAR_LIBRARIES ${GWENHYWFAR_LIBRARIES} ${gwengui-qt4_LIBRARIES} ) set( GWENHYWFAR_qt4_FOUND true ) endif() endif() list(FIND GWENHYWFAR_FIND_COMPONENTS "qt5" FIND_GWEN_COMPONENT_QT4) if ( NOT ${FIND_GWEN_COMPONENT_QT5} EQUAL -1 ) find_package(gwengui-qt5 "@GWENHYWFAR_VERSION_STRING@" EXACT) if ( gwengui-qt5_FOUND ) set( GWENHYWFAR_INCLUDE_DIRS ${GWENHYWFAR_INCLUDE_DIRS} ${gwengui-qt5_INCLUDE_DIRS} ) set( GWENHYWFAR_LIBRARIES ${GWENHYWFAR_LIBRARIES} ${gwengui-qt5_LIBRARIES} ) set( GWENHYWFAR_qt5_FOUND true ) endif() endif() check_required_components(GWENHYWFAR) # The target is available since gwenhywfar 4.15.3 if(GWENHYWFAR_FOUND AND NOT TARGET gwenhywfar::core) add_library(gwenhywfar::core UNKNOWN IMPORTED) set_target_properties(gwenhywfar::core PROPERTIES IMPORTED_LOCATION "${GWENHYWFAR_LIBRARIES}" INTERFACE_INCLUDE_DIRECTORIES "${GWENHYWFAR_INCLUDE_DIRS}" ) endif() mark_as_advanced( GWENHYWFAR_INCLUDE_DIRS GWENHYWFAR_LIBRARIES ) gwenhywfar-5.12.0/aclocal.m40000664000175000017500000030440514730344660012560 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'.])]) # gettext.m4 serial 68 (gettext-0.19.8) dnl Copyright (C) 1995-2014, 2016 Free Software 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-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) # intlmacosx.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2004-2014, 2016 Free Software 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 Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([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]) ]) # libgcrypt.m4 - Autoconf macros to detect libgcrypt # Copyright (C) 2002, 2003, 2004, 2011, 2014, 2018 g10 Code GmbH # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This file 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. # # Last-changed: 2018-11-13 dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION, dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS. dnl MINIMUN-VERSION is a string with the version number optionalliy prefixed dnl with the API version to also check the API compatibility. Example: dnl a MINIMUN-VERSION of 1:1.2.5 won't pass the test unless the installed dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1. Using dnl this features allows to prevent build against newer versions of libgcrypt dnl with a changed API. dnl dnl If a prefix option is not used, the config script is first dnl searched in $SYSROOT/bin and then along $PATH. If the used dnl config script does not match the host specification the script dnl is added to the gpg_config_script_warn variable. dnl AC_DEFUN([AM_PATH_LIBGCRYPT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_ARG_WITH(libgcrypt-prefix, AC_HELP_STRING([--with-libgcrypt-prefix=PFX], [prefix where LIBGCRYPT is installed (optional)]), libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="") if test x"${LIBGCRYPT_CONFIG}" = x ; then if test x"${libgcrypt_config_prefix}" != x ; then LIBGCRYPT_CONFIG="${libgcrypt_config_prefix}/bin/libgcrypt-config" fi fi use_gpgrt_config="" if test x"${LIBGCRYPT_CONFIG}" = x -a x"$GPGRT_CONFIG" != x -a "$GPGRT_CONFIG" != "no"; then if $GPGRT_CONFIG libgcrypt --exists; then LIBGCRYPT_CONFIG="$GPGRT_CONFIG libgcrypt" AC_MSG_NOTICE([Use gpgrt-config as libgcrypt-config]) use_gpgrt_config=yes fi fi if test -z "$use_gpgrt_config"; then if test x"${LIBGCRYPT_CONFIG}" = x ; then case "${SYSROOT}" in /*) if test -x "${SYSROOT}/bin/libgcrypt-config" ; then LIBGCRYPT_CONFIG="${SYSROOT}/bin/libgcrypt-config" fi ;; '') ;; *) AC_MSG_WARN([Ignoring \$SYSROOT as it is not an absolute path.]) ;; esac fi AC_PATH_PROG(LIBGCRYPT_CONFIG, libgcrypt-config, no) fi tmp=ifelse([$1], ,1:1.2.0,$1) if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'` min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'` else req_libgcrypt_api=0 min_libgcrypt_version="$tmp" fi AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version) ok=no if test "$LIBGCRYPT_CONFIG" != "no" ; then req_major=`echo $min_libgcrypt_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'` req_minor=`echo $min_libgcrypt_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'` req_micro=`echo $min_libgcrypt_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'` if test -z "$use_gpgrt_config"; then libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version` else libgcrypt_config_version=`$LIBGCRYPT_CONFIG --modversion` fi major=`echo $libgcrypt_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'` minor=`echo $libgcrypt_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'` micro=`echo $libgcrypt_config_version | \ sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'` if test "$major" -gt "$req_major"; then ok=yes else if test "$major" -eq "$req_major"; then if test "$minor" -gt "$req_minor"; then ok=yes else if test "$minor" -eq "$req_minor"; then if test "$micro" -ge "$req_micro"; then ok=yes fi fi fi fi fi fi if test $ok = yes; then AC_MSG_RESULT([yes ($libgcrypt_config_version)]) else AC_MSG_RESULT(no) fi if test $ok = yes; then # If we have a recent libgcrypt, we should also check that the # API is compatible if test "$req_libgcrypt_api" -gt 0 ; then if test -z "$use_gpgrt_config"; then tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0` else tmp=`$LIBGCRYPT_CONFIG --variable=api_version 2>/dev/null || echo 0` fi if test "$tmp" -gt 0 ; then AC_MSG_CHECKING([LIBGCRYPT API version]) if test "$req_libgcrypt_api" -eq "$tmp" ; then AC_MSG_RESULT([okay]) else ok=no AC_MSG_RESULT([does not match. want=$req_libgcrypt_api got=$tmp]) fi fi fi fi if test $ok = yes; then LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags` LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs` ifelse([$2], , :, [$2]) if test -z "$use_gpgrt_config"; then libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none` else libgcrypt_config_host=`$LIBGCRYPT_CONFIG --variable=host 2>/dev/null || echo none` fi if test x"$libgcrypt_config_host" != xnone ; then if test x"$libgcrypt_config_host" != x"$host" ; then AC_MSG_WARN([[ *** *** The config script "$LIBGCRYPT_CONFIG" was *** built for $libgcrypt_config_host and thus may not match the *** used host $host. *** You may want to use the configure option --with-libgcrypt-prefix *** to specify a matching config script or use \$SYSROOT. ***]]) gpg_config_script_warn="$gpg_config_script_warn libgcrypt" fi fi else LIBGCRYPT_CFLAGS="" LIBGCRYPT_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(LIBGCRYPT_CFLAGS) AC_SUBST(LIBGCRYPT_LIBS) ]) # 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 # po.m4 serial 24 (gettext-0.19) dnl Copyright (C) 1995-2014, 2016 Free Software 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.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; 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 INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <, 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # 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. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done 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 ]) # 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/acx_compile_warn.m4]) m4_include([m4/as-scrub-include.m4]) m4_include([m4/ax_have_qt.m4]) m4_include([m4/ax_pthread.m4]) m4_include([m4/binreloc.m4]) m4_include([m4/distri.m4]) m4_include([m4/fox.m4]) m4_include([m4/iconv.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/os.m4]) m4_include([m4/qt4.m4]) m4_include([m4/searchfiles.m4]) gwenhywfar-5.12.0/config.guess0000755000175000017500000012637313244306071013235 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: gwenhywfar-5.12.0/ltmain.sh0000644000175000017500000117716713627151556012560 00000000000000#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 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. # GNU Libtool 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. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool 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 . PROGRAM=libtool PACKAGE=libtool VERSION="2.4.6 Debian-2.4.6-14" package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 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. # 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 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES 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 . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! 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 # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! 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 ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2015-10-07.11; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 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. # 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 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 . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd _G_rc_run_hooks=false case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do if eval $_G_hook '"$@"'; then # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift _G_rc_run_hooks=: fi done $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, you may remove/edit # any options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. In this case you also must return $EXIT_SUCCESS to let the # hook's caller know that it should pay attention to # '_result'. Returning $EXIT_FAILURE signalizes that # arguments are left untouched by the hook and therefore caller will ignore the # result variable. # # Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # No change in '$@' (ignored completely by this hook). There is # # no need to do the equivalent (but slower) action: # # func_quote_for_eval ${1+"$@"} # # my_options_prep_result=$func_quote_for_eval_result # false # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # args_changed=false # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: # args_changed=: # ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # args_changed=: # ;; # *) # Make sure the first unrecognised option "$_G_opt" # # is added back to "$@", we could need that later # # if $args_changed is true. # set dummy "$_G_opt" ${1+"$@"}; shift; break ;; # esac # done # # if $args_changed; then # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # fi # # $args_changed # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # false # } # func_add_hook func_validate_options my_option_validation # # You'll also need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options_finish [ARG]... # ---------------------------- # Finishing the option parse loop (call 'func_options' hooks ATM). func_options_finish () { $debug_cmd _G_func_options_finish_exit=false if func_run_hooks func_options ${1+"$@"}; then func_options_finish_result=$func_run_hooks_result _G_func_options_finish_exit=: fi $_G_func_options_finish_exit } # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd _G_rc_options=false for my_func in options_prep parse_options validate_options options_finish do if eval func_$my_func '${1+"$@"}'; then eval _G_res_var='$'"func_${my_func}_result" eval set dummy "$_G_res_var" ; shift _G_rc_options=: fi done # Save modified positional parameters for caller. As a top-level # options-parser function we always need to set the 'func_options_result' # variable (regardless the $_G_rc_options value). if $_G_rc_options; then func_options_result=$_G_res_var else func_quote_for_eval ${1+"$@"} func_options_result=$func_quote_for_eval_result fi $_G_rc_options } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propagate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned). func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= _G_rc_options_prep=false if func_run_hooks func_options_prep ${1+"$@"}; then _G_rc_options_prep=: # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result fi $_G_rc_options_prep } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= _G_rc_parse_options=false # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. if func_run_hooks func_parse_options ${1+"$@"}; then eval set dummy "$func_run_hooks_result"; shift _G_rc_parse_options=: fi # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_match_parse_options=: _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) if test $# = 0 && func_missing_arg $_G_opt; then _G_rc_parse_options=: break fi case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) _G_rc_parse_options=: ; break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift _G_match_parse_options=false break ;; esac $_G_match_parse_options && _G_rc_parse_options=: done if $_G_rc_parse_options; then # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result fi $_G_rc_parse_options } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd _G_rc_validate_options=false # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" if func_run_hooks func_validate_options ${1+"$@"}; then # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result _G_rc_validate_options=: fi # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE $_G_rc_validate_options } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion Debian-2.4.6-14 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= _G_rc_lt_options_prep=: # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; *) _G_rc_lt_options_prep=false ;; esac if $_G_rc_lt_options_prep; then # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result fi $_G_rc_lt_options_prep } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd _G_rc_lt_parse_options=false # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_match_lt_parse_options=: _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"} ; shift _G_match_lt_parse_options=false break ;; esac $_G_match_lt_parse_options && _G_rc_lt_parse_options=: done if $_G_rc_lt_parse_options; then # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result fi $_G_rc_lt_parse_options } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs 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 BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer # -fuse-ld=* Linker select flags for GCC # -static-* direct GCC to link specific libraries statically # -fcilkplus Cilk Plus language extension features for C/C++ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: gwenhywfar-5.12.0/config.rpath0000755000175000017500000004364713142134462013227 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2007 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # 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. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix4* | aix5*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <gwenhywfar-config && \ echo 'dir="@prefix@"' >>gwenhywfar-config && \ cat gwenhywfar-config.in >>gwenhywfar-config && \ chmod a+x gwenhywfar-config pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gwenhywfar.pc cmakeconfigdir = $(libdir)/cmake/gwenhywfar-@GWENHYWFAR_VERSION_MAJOR@.@GWENHYWFAR_VERSION_MINOR@ cmakeconfig_DATA = gwenhywfar-config.cmake gwenhywfar-config-version.cmake CLEANFILES = gwenhywfar-config $(PACKAGE).tag listdoc.h DISTCLEANFILES = gwenhywfar-config.in distclean-local: distclean-local-check .PHONY: distclean-local distclean-local-check: rm -rf apidoc gwenhywfar5 if CROSS_COMPILING mklistdoc_preqreq = mklistdoc_exe = mklistdoc else mklistdoc_prereq = $(top_builddir)/admin/mklistdoc mklistdoc_exe = admin/mklistdoc endif listdoc.h: $(mklistdoc_prereq) $(mklistdoc_exe) -v -I $(top_srcdir)/src/base `find "$(top_builddir)/gwenhywfar5/gwenhywfar" -name "*.h" | LC_ALL=C sort` >$@ $(top_builddir)/admin/mklistdoc: $(MAKE) -C "$(top_builddir)/admin" mklistdoc srcdoc: Doxyfile listdoc.h doxygen $(PACKAGE).tag: Doxyfile listdoc.h doxygen install-srcdoc: $(PACKAGE).tag test -d "$(DESTDIR)@docpath@/$(PACKAGE)" || \ mkdir -p "$(DESTDIR)@docpath@/$(PACKAGE)" for f in apidoc/*; do \ cp -dR $$f "$(DESTDIR)@docpath@/$(PACKAGE)/"; \ done cp "$(PACKAGE).tag" "$(DESTDIR)@docpath@/" if test -x "$(DESTDIR)@docpath@/$(PACKAGE)/installdox"; then \ cd "$(DESTDIR)@docpath@/$(PACKAGE)" && \ ID_OPT="-q" ; \ for ff in ${DOXYGEN_TAGFILES}; do \ ID_OPT="$$ID_OPT -l `basename $$ff`@../`basename $$ff | $(SED) -e s/.tag//`";\ done ;\ ( cd "$(DESTDIR)@docpath@/$(PACKAGE)" && \ ./installdox -q $$ID_OPT \ ); \ fi rpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz # Rule for using the Inno Setup compiler. The path to iscc.exe is # set manually here for now and can be overridden if you set an # env variable with the same name. ISCC = "C:\Program Files\Inno Setup 5\iscc.exe" wintmpdir = distribution setup: gwenhywfar.iss mkdir -p $(wintmpdir) make prefix="`pwd`/$(wintmpdir)/usr" \ WIN_PATH_WINDOWS_MINGW="`pwd`/$(wintmpdir)/usr/windows" \ install \ && $(ISCC) gwenhywfar.iss \ && rm -rf $(wintmpdir) # Rule for only building the source rpm srpm: $(PACKAGE).spec dist rpmbuild="rpm" && \ if [ `rpm --version | awk '{ print $$3 }'` > /dev/null ]; then rpmbuild="rpmbuild"; fi && \ $$rpmbuild --nodeps -ts $(PACKAGE)-$(VERSION).tar.gz if IF_MAKE_I18N_FILES # We directly read that file list. For old make programs, you would # set this to an empty variable, because they are only needed by the # developers and release technicians. I18NFILES=$(shell cat $(srcdir)/i18nsources) DLGFILES=$(shell cat $(srcdir)/dlgsources) PDFILES=$(shell cat $(srcdir)/pdsources) # Current build rule: sources: rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources for d in $(SUBDIRS); do \ $(MAKE) -C $$d sources; \ done static-sources: rm -f $(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources for d in src plugins; do \ $(MAKE) -C $$d sources; \ done $(srcdir)/i18nsources $(srcdir)/dlgsources $(srcdir)/pdsources: $(MAKE) sources # Could also be solved this way: Read the I18NFILES variable from file #include $(srcdir)/i18nsources # (Needs the following build rule:) #sources: # rm -f $(srcdir)/i18nsources # make -C $(top_srcdir)/src sources # mv $(srcdir)/i18nsources $(srcdir)/i18nsources.tmp # echo "I18NFILES = \\" > $(srcdir)/i18nsources # $(SED) 's!\(^.*$$\)!$$(top_srcdir)/\1 \\!' \ # $(srcdir)/i18nsources.tmp >> $(srcdir)/i18nsources # echo '$$(top_srcdir)/config.h' >> $(srcdir)/i18nsources # rm -f $(srcdir)/i18nsources.tmp # make Makefile # The list of available languages (makes file name transformations much easier) ALL_LINGUAS = $(basename $(notdir $(shell ls $(srcdir)/po/*.po))) # For old make programs, the locales would directly be written here: #ALL_LINGUAS = de # List of po files. Only necessary in the dependency of the catalogs # rule. For old make programs, you would simpy set this to an empty # variable. I18NLINGUAS = $(foreach lang,$(ALL_LINGUAS),$(srcdir)/po/$(lang).po) # List of mo files. Only necessary for cleanup. For old make programs, # you would simply set this to an empty variable. I18NCATALOGS = $(foreach lang,$(ALL_LINGUAS),$(top_builddir)/po/$(lang).mo) MSGHACK="$(srcdir)/tools/msghack" $(srcdir)/po/$(PACKAGE).pot: i18nsources dlgsources pdsources $(I18NFILES) rm -f po/tmp* if test -n "$(I18NFILES)"; then \ cd $(srcdir); \ $(XGETTEXT) -C -c -ki18n -ktr2i18n -kI18N -kI18S\ -kI18N_NOOP -ktranslate -kaliasLocale \ -ktr -ktrUtf8 \ '--msgid-bugs-address=aqbanking-user@lists.aqbanking.de' \ -o po/tmppot \ $(I18NFILES) ; \ fi for i in $(DLGFILES); do \ cd $(srcdir); \ po4a-gettextize -f xml -m $$i -p po/tmppot1 -o attributes=text && \ $(MSGHACK) -o po/tmppot2 --append po/tmppot po/tmppot1 && \ mv po/tmppot2 po/tmppot; \ done for i in $(PDFILES); do \ po4a-gettextize -f xml -m $$i -p $(srcdir)/po/tmppot1 -o wrap \ -o translated=" " \ -o untranslated=" " \ && \ $(MSGHACK) -o $(srcdir)/po/tmppot2 --append $(srcdir)/po/tmppot $(srcdir)/po/tmppot1 && \ mv $(srcdir)/po/tmppot2 $(srcdir)/po/tmppot; \ done mv $(srcdir)/po/tmppot $(srcdir)/po/$(PACKAGE).pot rm -f $(srcdir)/po/tmppot1 # This rule is called automatically at install time. However, it is # necessary only for the translators, so maybe it shouldn't be called # at install time. merge: $(srcdir)/po/$(PACKAGE).pot @catalogs=$(I18NLINGUAS); \ for cat in $$catalogs; do \ echo msgmerge -o $$cat.new $$cat $(srcdir)/po/$(PACKAGE).pot ; \ msgmerge -o $$cat.new $$cat $(srcdir)/po/$(PACKAGE).pot ; \ if test -s $$cat.new; then \ grep -v "\"POT-Creation" $$cat.new > $$cat.new.2 ; \ grep -v "\"POT-Creation" $$cat >> $$cat.new.1; \ if diff $$cat.new.1 $$cat.new.2; then \ echo " $$cat unchanged; leaving existing po file untouched."; \ rm $$cat.new; \ else \ mv $$cat.new $$cat ; \ fi; \ rm -f $$cat.new.1 $$cat.new.2 ;\ fi ;\ done catalogs: $(I18NLINGUAS) @for i in $(ALL_LINGUAS); do \ filelingua=$(srcdir)/po/$$i.po; \ filecat=$(top_builddir)/po/$$i.mo; \ echo "Creating translation catalogs for language \"$$i\""; \ echo $(MSGFMT) -o $${filecat} $${filelingua} ; \ $(MSGFMT) -o $${filecat} $${filelingua} || touch $${filelingua}; \ done CLEANFILES += $(I18NCATALOGS) install-mo-catalogs: catalogs @for i in $(ALL_LINGUAS); do \ filecat=$(top_builddir)/po/$$i.mo; \ echo "Installing translation catalog for language \"$$i\""; \ $(mkinstalldirs) "$(DESTDIR)$(localedir)/$$i/LC_MESSAGES"; \ echo $(INSTALL_DATA) $${filecat} $(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \ $(INSTALL_DATA) $${filecat} $(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo; \ done uninstall-mo-catalogs: @$(NORMAL_UNINSTALL) @for i in $(ALL_LINGUAS); do \ echo " rm -f '$(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo'"; \ rm -f "$(DESTDIR)$(localedir)/$$i/LC_MESSAGES/$(PACKAGE).mo"; \ done install-data-local: install-mo-catalogs uninstall-local: uninstall-mo-catalogs endif format: find . -name '*.[c,h,cpp]' -exec $(ASTYLE) \ --style=stroustrup \ -s2 \ --min-conditional-indent=0 \ --indent-labels \ --max-continuation-indent=80 \ --pad-comma \ --pad-header \ --unpad-paren \ --align-pointer=name \ --break-closing-braces \ --break-one-line-headers \ --attach-return-type \ --convert-tabs \ --max-code-length=120 \ --break-after-logical \ --preserve-date \ --suffix=none \{\} \; cppcheck: for f in `find . -name \*.c -o -name \*.cpp`; do cppcheck $$f; done ChangeLog: if test -d .git; then \ git log --pretty="format:------------------------------------------------------------------%n%ai %an%n%s%n%b" -n 100 >ChangeLog ;\ else \ touch ChangeLog; \ fi dist-hook: rm -f ChangeLog 2>/dev/null $(MAKE) ChangeLog gwenhywfar-5.12.0/test-driver0000755000175000017500000001104213616550647013112 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2011-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. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>$log_file # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # 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: gwenhywfar-5.12.0/NEWS0000644000175000017500000004127313142134462011407 00000000000000 =========================================================================== gwenhywfar-3.7.0 (2009/01/22) =========================================================================== This release adds HTTP proxy support. Some bugs have been fixed and a tree template module (similar to GWEN_LIST but for trees) has been added. =========================================================================== gwenhywfar-3.5.2 (2008/11/08) =========================================================================== This release fixes a bug. It features improved error message (now indicating whether "Force SSLv3" should be enabled) and FreeBSD build fixes. =========================================================================== gwenhywfar-3.4.1 (2008/08/16) =========================================================================== This release fixes some problems with HTTP(s) connections and adds the command "setkey" to gct-tool (allowing to set number and version of a key). =========================================================================== gwenhywfar-3.4.0 (2008/08/11) =========================================================================== This release fixes some problems with AqHBCI, features improved handling of TLS-connections, implements basic thread sync mechanisms (MUTEX, SEMAPHORE) and provides improved support for WIN32 platforms. Work on a configuration manager framework (as will be needed by AqBanking soon) has begun. =========================================================================== gwenhywfar-3.3.5 (2008/07/08) =========================================================================== This release introduce a configure option for the buffer size default hard limit. =========================================================================== gwenhywfar-3.3.4 (2008/06/11) =========================================================================== This release fixes a bug in the CSV exporter. It also adds the gct-tool command "changepin". =========================================================================== gwenhywfar-3.3.3 (2008/06/06) =========================================================================== This release fixes some bugs. Support for non-interactive use of GWEN_GUI has been improved. =========================================================================== gwenhywfar-3.3.2 (2008/05/27) =========================================================================== This release fixes a bug in HTTP chunked download mode. =========================================================================== gwenhywfar-3.3.1 (2008/04/25) =========================================================================== This is a bugfix release. =========================================================================== gwenhywfar-3.3.0 (2008/04/22) =========================================================================== This release fixes some build system bugs and improves support for static linking =========================================================================== gwenhywfar-3.2.0 (2008/03/16) =========================================================================== This release fixes some important bugs and adds some crypto functions. Pin caching and SSL certificate handling is now available in cgui.{c,h}. =========================================================================== gwenhywfar-3.1.1 (2008/02/10) =========================================================================== This release fixes a bug in the OpenHBCI keyfile plugin and decreases the verbosity of the message engine. =========================================================================== gwenhywfar-3.1.0 (2008/01/25) =========================================================================== This release fixes some important bugs. =========================================================================== gwenhywfar-3.0.1 (2007/12/07) =========================================================================== This release fixes a bug in GWEN_Buffer_ReplaceBytes(). =========================================================================== gwenhywfar-3.0.0 (2007/11/22) =========================================================================== This is the first stable release of Gwenhywfar which no longer links against OpenSSL. OpenSSL is still used for one of the tools, but the library does not link against it. =========================================================================== gwenhywfar-2.9.15rc6 (2007/11/17) =========================================================================== This release simplifies WIN32 installations. =========================================================================== gwenhywfar-2.9.14rc5 (2007/11/16) =========================================================================== This release improves the TLS server code. It now allows Libchipcard4 to be used in slave mode. =========================================================================== gwenhywfar-2.9.13rc4 (2007/11/14) =========================================================================== This release improves the build system and adds German translations for formerly untranslated strings. =========================================================================== gwenhywfar-2.9.12rc3 (2007/11/13) =========================================================================== This release fixes a problem with some TLS servers. =========================================================================== gwenhywfar-2.9.11rc2 (2007/11/11) =========================================================================== This version fixes some bugs and problems. =========================================================================== gwenhywfar-2.9.10rc1 (2007/11/10) =========================================================================== This release fixes a bug in GWEN_InetSocket_Select(). =========================================================================== gwenhywfar-2.9.9beta (2007/11/07) =========================================================================== This is chiefly a bugfix release. =========================================================================== gwenhywfar-2.9.8beta (2007/11/03) =========================================================================== This release fixes some bugs. It also adds the command "setsignseq" to the gct-tool. =========================================================================== gwenhywfar-2.9.7beta (2007/10/31) =========================================================================== This release fixes some bugs with the OpenHBCI keyfile module. =========================================================================== gwenhywfar-2.9.6beta (2007/10/30) =========================================================================== This release fixes a few bugs. The gct-tool is now able to generate keys. =========================================================================== gwenhywfar-2.9.5beta (2007/10/28) =========================================================================== This release adds the command "update" to the gct-tool. This allows to convert ancient OpenHBCI keyfiles to a new format which can be used by AqHBCI without the help of OpenSSL. Gwen still DOES NOT link against OpenSSL, it's only the gct-tool which does. =========================================================================== gwenhywfar-2.9.4beta (2007/10/27) =========================================================================== This release very much improves handling of TLS connections, fixes some bugs and adds a local installation mode. Some modules which are no longer needed have been removed. =========================================================================== gwenhywfar-2.9.3beta (2007/10/24) =========================================================================== This is the first release which no longer requires OpenSSL. The project now uses Libgcrypt and GnuTLS for cryptographic functions. This is also the first version of the new generation which works on WIN32 platforms. It no longer requires to make assumptions about where it has been installed on WIN32, it finds all plugins relative to the location of the calling executable. =========================================================================== gwenhywfar-2.9.2beta (2007/09/11) =========================================================================== This release introduces a new request based io layer which replaces the former netlayer and buffered io modules. This release uses Libgcrypt and GNU-TLS instead of OpenSSL for new rewritten cryptographic module. The now deprecated netlayer and the old crypto modules are still shipped with this release because currently AqBanking still needs them. However, the next stable release wil not. =========================================================================== gwenhywfar-2.9.1beta (2007/05/14) =========================================================================== This release fixes a major bug in the console GUI code and a minor one in GWEN_Logger. =========================================================================== gwenhywfar-2.9.0beta (2007/04/03) =========================================================================== This is the first release of Gwenhywfar3. The main changes concern the new module GWEN_GUI. This is used by Gwenhywfar itself and depending projects for user interaction. The GWEN_DB code has been partly rewritten for speed optimisation. The names of types, macros and functions has been cleaned up to comply to the STYLES document. Some bugs have been fixed in the process. =========================================================================== gwenhywfar-2.5.0 (2006/12/25) =========================================================================== This release decreases the verbosity and makes gwenhywfar completely relocatable using binreloc. =========================================================================== gwenhywfar-2.4.1 (2006/09/26) =========================================================================== This release fixes some bugs, removes debugging messages and cleans up the API (longtime deprecated functions have been removed). Callbacks functions used widely in Gwenhywfar have been adapted to work on Windows as well. =========================================================================== gwenhywfar-2.4.0 (2006/08/25) =========================================================================== This version adds a simple signal/slot framework and fixes some bugs. =========================================================================== gwenhywfar-2.3.1 (2006/07/13) =========================================================================== This release adds GWEN_DBIO plugin which writes GWEN_DB's as XML files. =========================================================================== gwenhywfar-2.3.0 (2006/06/15) =========================================================================== This release fixes some bugs and introduces a new module for fast lookup of objects via integer ids. It also provides a storage module to be used by my next projects. =========================================================================== gwenhywfar-2.2.0 (2006/04/12) =========================================================================== This release includes a fix for SSL problems on MacOSX, introduces user and password fields to GWEN_URL, adds a GWEN_DBIO plugin for RFC822 headers (as used by AqMail) and adds some signedness fixes. =========================================================================== gwenhywfar-2.1.1 (2006/03/26) =========================================================================== This is just a maintenance release which fixes some minor bugs and compiles on sparc-solaris and amd64 with less warnings. =========================================================================== gwenhywfar-2.1.0 (2006/03/20) =========================================================================== This release fixes some bugs and very much improves the internal list code which results in speedup of XML file reading by factor 5-6. =========================================================================== gwenhywfar-2.0.0 (2006/02/27) =========================================================================== This release fixes the spurious signature error encountered with AqHBCI and improves the API documentation. =========================================================================== gwenhywfar-1.99.7 (2006/02/06) =========================================================================== The CryptToken framework now handles up to six keys per user, some memory leaks and some minor bugs have been fixed. =========================================================================== gwenhywfar-1.99.6 (2006/01/30) =========================================================================== The OpenHBCI CryptToken now reports a bad pin to the application (i.e. AqBanking is now able to intercept bad pins from these CryptTokens as well). =========================================================================== gwenhywfar-1.99.5 (2006/01/26) =========================================================================== This release fixes some bugs in HTTP code and working with crypt tokens is now safer. =========================================================================== gwenhywfar-1.99.4 (2006/01/17) =========================================================================== This release fixes some bugs in the build system (especially regarding GCC's new visibility feature). =========================================================================== gwenhywfar-1.99.3 (2006/01/11) =========================================================================== This release fixes some minor bugs and makes use of GCCs visibility features (thus removing about 700 symbols from the shared library). =========================================================================== gwenhywfar-1.99.2 (2005/12/15) =========================================================================== This release fixes some problems with the network code and Gnucash. =========================================================================== gwenhywfar-1.99.1 (2005/12/01) =========================================================================== This release chiefly fixes some bugs in network and XML code. It also prepares Gwenhywfar to be used in 64 bit environments. =========================================================================== gwenhywfar-1.99.0beta (2005/11/22) =========================================================================== This is the first release of the gwen2 series. It features a complete rewrite of the network code which fixes problems with some HBCI servers. Only the latest version of AqBanking works with this version of gwen. =========================================================================== gwenhywfar-1.19.0 (2005/10/22) =========================================================================== The changes in this release are as follows: Some problems in GWEN_CryptToken when keys smaller than 96 bytes are used were fixed (this allows AqBanking/AqHBCI to work with some banks again!). This version also fixes some bugs thus making network-timeout problems less likely to occurr. A request wrapper around existing IPC code was added. =========================================================================== gwenhywfar-1.15.0 (2005/08/11) =========================================================================== This release fixes some important bugs, enables the crypttoken code (used by AqHBCI), adds the tool gct-tool for admimistration of crypttoken, adds blowfish encryption, improves the waitcallback code and compiles warningless with gcc4. gwenhywfar-5.12.0/plugins/0000775000175000017500000000000014730345120012443 500000000000000gwenhywfar-5.12.0/plugins/configmgr/0000775000175000017500000000000014730345120014416 500000000000000gwenhywfar-5.12.0/plugins/configmgr/dir/0000775000175000017500000000000014730345120015174 500000000000000gwenhywfar-5.12.0/plugins/configmgr/dir/cfgdir_p.h0000666000175000017500000001276713551166433017071 00000000000000/*************************************************************************** begin : Sat Sep 27 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_CFGMGR_CFGDIR_P_H #define GWENHYWFAR_CFGMGR_CFGDIR_P_H #include #include typedef struct GWEN_CONFIGMGR_DIR GWEN_CONFIGMGR_DIR; struct GWEN_CONFIGMGR_DIR { char *folder; GWEN_FSLOCK_LIST *fileLocks; }; GWEN_CONFIGMGR *GWEN_ConfigMgrDir_Factory(GWEN_PLUGIN *pl, const char *url); GWENHYWFAR_EXPORT GWEN_PLUGIN *configmgr_dir_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); GWEN_CONFIGMGR *GWEN_ConfigMgrDir_new(const char *url); GWENHYWFAR_CB void GWEN_ConfigMgrDir_FreeData(void *bp, void *p); int GWENHYWFAR_CB GWEN_ConfigMgrDir_GetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb); int GWENHYWFAR_CB GWEN_ConfigMgrDir_SetGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db); int GWENHYWFAR_CB GWEN_ConfigMgrDir_HasGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName); int GWENHYWFAR_CB GWEN_ConfigMgrDir_LockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); int GWENHYWFAR_CB GWEN_ConfigMgrDir_UnlockGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); int GWENHYWFAR_CB GWEN_ConfigMgrDir_GetUniqueId(GWEN_CONFIGMGR *mgr, const char *groupName, char *buffer, uint32_t bufferLen); int GWENHYWFAR_CB GWEN_ConfigMgrDir_MkUniqueIdFromId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t uid, int doCheck, char *buffer, uint32_t bufferLen); int GWENHYWFAR_CB GWEN_ConfigMgrDir_DeleteGroup(GWEN_CONFIGMGR *mgr, const char *groupName, const char *subGroupName); int GWENHYWFAR_CB GWEN_ConfigMgrDir_ListGroups(GWEN_CONFIGMGR *mgr, GWEN_STRINGLIST *sl); int GWENHYWFAR_CB GWEN_ConfigMgrDir_ListSubGroups(GWEN_CONFIGMGR *mgr, const char *groupName, GWEN_STRINGLIST *sl); void GWEN_ConfigMgrDir_AddGroupDirName(GWEN_CONFIGMGR *cfg, const char *groupName, GWEN_BUFFER *nbuf); void GWEN_ConfigMgrDir_AddGroupFileName(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_BUFFER *nbuf); GWEN_FSLOCK *GWEN_ConfigMgrDir_FindLock(GWEN_CONFIGMGR *cfg, const char *fname); static int GWEN_ConfigMgrDir__GetUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t *pUniqueId); static int GWEN_ConfigMgrDir__UpdateLastUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t uid); #endif gwenhywfar-5.12.0/plugins/configmgr/dir/Makefile.am0000666000175000017500000000156213545472064017171 00000000000000EXTRA_DIST=dir.xml.in AM_CPPFLAGS= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ cfgmgrplugindir = $(gwenhywfar_plugindir)/configmgr noinst_HEADERS=cfgdir_p.h cfgmgrplugin_LTLIBRARIES=dir.la cfgmgrplugin_DATA=dir.xml dir_la_SOURCES=cfgdir.c dir_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la dir_la_LDFLAGS = -no-undefined $(STRIPALL) $(ressource_ldflags) \ -module -avoid-version sources: for f in $(dir_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(cfgmgrplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-5.12.0/plugins/configmgr/dir/Makefile.in0000664000175000017500000007033014730344661017175 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 = plugins/configmgr/dir ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = dir.xml CONFIG_CLEAN_VPATH_FILES = 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)$(cfgmgrplugindir)" \ "$(DESTDIR)$(cfgmgrplugindir)" LTLIBRARIES = $(cfgmgrplugin_LTLIBRARIES) dir_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_dir_la_OBJECTS = cfgdir.lo dir_la_OBJECTS = $(am_dir_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = dir_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(dir_la_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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/cfgdir.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(dir_la_SOURCES) DIST_SOURCES = $(dir_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(cfgmgrplugin_DATA) HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/dir.xml.in \ $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = dir.xml.in AM_CPPFLAGS = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ cfgmgrplugindir = $(gwenhywfar_plugindir)/configmgr noinst_HEADERS = cfgdir_p.h cfgmgrplugin_LTLIBRARIES = dir.la cfgmgrplugin_DATA = dir.xml dir_la_SOURCES = cfgdir.c dir_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la dir_la_LDFLAGS = -no-undefined $(STRIPALL) $(ressource_ldflags) \ -module -avoid-version all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu plugins/configmgr/dir/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/configmgr/dir/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): dir.xml: $(top_builddir)/config.status $(srcdir)/dir.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-cfgmgrpluginLTLIBRARIES: $(cfgmgrplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(cfgmgrplugin_LTLIBRARIES)'; test -n "$(cfgmgrplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(cfgmgrplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(cfgmgrplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(cfgmgrplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(cfgmgrplugindir)"; \ } uninstall-cfgmgrpluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(cfgmgrplugin_LTLIBRARIES)'; test -n "$(cfgmgrplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(cfgmgrplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(cfgmgrplugindir)/$$f"; \ done clean-cfgmgrpluginLTLIBRARIES: -test -z "$(cfgmgrplugin_LTLIBRARIES)" || rm -f $(cfgmgrplugin_LTLIBRARIES) @list='$(cfgmgrplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } dir.la: $(dir_la_OBJECTS) $(dir_la_DEPENDENCIES) $(EXTRA_dir_la_DEPENDENCIES) $(AM_V_CCLD)$(dir_la_LINK) -rpath $(cfgmgrplugindir) $(dir_la_OBJECTS) $(dir_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfgdir.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-cfgmgrpluginDATA: $(cfgmgrplugin_DATA) @$(NORMAL_INSTALL) @list='$(cfgmgrplugin_DATA)'; test -n "$(cfgmgrplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(cfgmgrplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(cfgmgrplugindir)" || 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)$(cfgmgrplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(cfgmgrplugindir)" || exit $$?; \ done uninstall-cfgmgrpluginDATA: @$(NORMAL_UNINSTALL) @list='$(cfgmgrplugin_DATA)'; test -n "$(cfgmgrplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(cfgmgrplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(cfgmgrplugindir)" "$(DESTDIR)$(cfgmgrplugindir)"; 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-cfgmgrpluginLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/cfgdir.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-cfgmgrpluginDATA \ install-cfgmgrpluginLTLIBRARIES 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 ./$(DEPDIR)/cfgdir.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-cfgmgrpluginDATA \ uninstall-cfgmgrpluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-cfgmgrpluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-cfgmgrpluginDATA install-cfgmgrpluginLTLIBRARIES \ 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-cfgmgrpluginDATA \ uninstall-cfgmgrpluginLTLIBRARIES .PRECIOUS: Makefile sources: for f in $(dir_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(cfgmgrplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< # 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: gwenhywfar-5.12.0/plugins/configmgr/dir/cfgdir.c0000666000175000017500000006046513552642560016544 00000000000000/*************************************************************************** begin : Sat Sep 27 2008 copyright : (C) 2008 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "cfgdir_p.h" #include #include #include #include #include #include #include #include #include GWEN_INHERIT(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR) GWEN_CONFIGMGR *GWEN_ConfigMgrDir_Factory(GWEN_UNUSED GWEN_PLUGIN *pl, const char *url) { GWEN_CONFIGMGR *cfg; cfg=GWEN_ConfigMgrDir_new(url); GWEN_ConfigMgr_SetGetGroupFn(cfg, GWEN_ConfigMgrDir_GetGroup); GWEN_ConfigMgr_SetSetGroupFn(cfg, GWEN_ConfigMgrDir_SetGroup); GWEN_ConfigMgr_SetHasGroupFn(cfg, GWEN_ConfigMgrDir_HasGroup); GWEN_ConfigMgr_SetLockGroupFn(cfg, GWEN_ConfigMgrDir_LockGroup); GWEN_ConfigMgr_SetUnlockGroupFn(cfg, GWEN_ConfigMgrDir_UnlockGroup); GWEN_ConfigMgr_SetGetUniqueIdFn(cfg, GWEN_ConfigMgrDir_GetUniqueId); GWEN_ConfigMgr_SetMkUniqueIdFromIdFn(cfg, GWEN_ConfigMgrDir_MkUniqueIdFromId); GWEN_ConfigMgr_SetDeleteGroupFn(cfg, GWEN_ConfigMgrDir_DeleteGroup); GWEN_ConfigMgr_SetListGroupsFn(cfg, GWEN_ConfigMgrDir_ListGroups); GWEN_ConfigMgr_SetListSubGroupsFn(cfg, GWEN_ConfigMgrDir_ListSubGroups); return cfg; } GWEN_PLUGIN *configmgr_dir_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName) { GWEN_PLUGIN *pl; pl=GWEN_ConfigMgr_Plugin_new(pm, modName, fileName); assert(pl); GWEN_ConfigMgr_Plugin_SetFactoryFn(pl, GWEN_ConfigMgrDir_Factory); return pl; } GWEN_CONFIGMGR *GWEN_ConfigMgrDir_new(const char *url) { GWEN_CONFIGMGR *cfg; GWEN_CONFIGMGR_DIR *xcfg; GWEN_URL *gurl; cfg=GWEN_ConfigMgr_new(url); GWEN_NEW_OBJECT(GWEN_CONFIGMGR_DIR, xcfg); GWEN_INHERIT_SETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg, xcfg, GWEN_ConfigMgrDir_FreeData); xcfg->fileLocks=GWEN_FSLock_List_new(); gurl=GWEN_Url_fromString(url); if (gurl) { const char *s; GWEN_BUFFER *nbuf; nbuf=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_Url_GetServer(gurl); if (s) GWEN_Buffer_AppendString(nbuf, s); s=GWEN_Url_GetPath(gurl); if (s) { /* Does this begin with a slash? If not, we add one, but only if this isn't a drive letter (for windows!) */ if (*s!='/' && *s!='\\' && !(isalpha(s[0]) && s[1] == ':' && (s[2] == '/' || s[2] == '\\'))) { GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(nbuf, s); } xcfg->folder=strdup(GWEN_Buffer_GetStart(nbuf)); GWEN_Url_free(gurl); GWEN_Buffer_free(nbuf); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Bad URL [%s]", url); GWEN_ConfigMgr_free(cfg); return NULL; } return cfg; } GWENHYWFAR_CB void GWEN_ConfigMgrDir_FreeData(GWEN_UNUSED void *bp, void *p) { GWEN_CONFIGMGR_DIR *xcfg; xcfg=(GWEN_CONFIGMGR_DIR *) p; if (GWEN_FSLock_List_GetCount(xcfg->fileLocks)) { GWEN_FSLOCK *lck; DBG_WARN(GWEN_LOGDOMAIN, "Some groups are still locked, unlocking"); lck=GWEN_FSLock_List_First(xcfg->fileLocks); while (lck) { GWEN_FSLOCK_RESULT res; res=GWEN_FSLock_Unlock(lck); if (res!=GWEN_FSLock_ResultOk) { DBG_INFO(GWEN_LOGDOMAIN, "Unable to unlock file [%s]: %d", GWEN_FSLock_GetName(lck), res); } lck=GWEN_FSLock_List_Next(lck); } } GWEN_FSLock_List_free(xcfg->fileLocks); free(xcfg->folder); GWEN_FREE_OBJECT(xcfg); } int GWEN_ConfigMgrDir__GetUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t *pUniqueId) { GWEN_CONFIGMGR_DIR *xcfg; GWEN_BUFFER *nbuf; uint32_t uniqueId=0; GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT res; FILE *f; int rv; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); assert(xcfg->folder); assert(groupName); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nbuf, xcfg->folder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); GWEN_Text_EscapeToBuffer(groupName, nbuf); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(nbuf, "uniqueid"); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } lck=GWEN_FSLock_new(GWEN_Buffer_GetStart(nbuf), GWEN_FSLock_TypeFile); res=GWEN_FSLock_Lock(lck, 60000, 0); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not lock group [%s]: %d", groupName, res); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } /* read last id */ f=fopen(GWEN_Buffer_GetStart(nbuf), "r"); if (f) { int i; if (1!=fscanf(f, "%d", &i)) i=0; uniqueId=i; fclose(f); } uniqueId++; f=fopen(GWEN_Buffer_GetStart(nbuf), "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s, \"w\"): %s", GWEN_Buffer_GetStart(nbuf), strerror(errno)); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } fprintf(f, "%d", (int)uniqueId); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s, \"w\"): %s", GWEN_Buffer_GetStart(nbuf), strerror(errno)); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); *pUniqueId=uniqueId; return 0; } int GWEN_ConfigMgrDir__UpdateLastUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t uid) { GWEN_CONFIGMGR_DIR *xcfg; GWEN_BUFFER *nbuf; uint32_t uniqueId=0; GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT res; FILE *f; int rv; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); assert(xcfg->folder); assert(groupName); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nbuf, xcfg->folder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); GWEN_Text_EscapeToBuffer(groupName, nbuf); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(nbuf, "uniqueid"); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } lck=GWEN_FSLock_new(GWEN_Buffer_GetStart(nbuf), GWEN_FSLock_TypeFile); res=GWEN_FSLock_Lock(lck, 60000, 0); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not lock group [%s]: %d", groupName, res); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } /* read last id */ f=fopen(GWEN_Buffer_GetStart(nbuf), "r"); if (f) { int i; if (1!=fscanf(f, "%d", &i)) i=0; uniqueId=i; fclose(f); } if (uid>uniqueId) { uniqueId=uid; f=fopen(GWEN_Buffer_GetStart(nbuf), "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s, \"w\"): %s", GWEN_Buffer_GetStart(nbuf), strerror(errno)); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } fprintf(f, "%d", (int)uniqueId); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s, \"w\"): %s", GWEN_Buffer_GetStart(nbuf), strerror(errno)); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } } GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return 0; } void GWEN_ConfigMgrDir_AddGroupDirName(GWEN_CONFIGMGR *cfg, const char *groupName, GWEN_BUFFER *nbuf) { GWEN_CONFIGMGR_DIR *xcfg; uint32_t pos; char *p; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); assert(xcfg->folder); assert(groupName); GWEN_Buffer_AppendString(nbuf, xcfg->folder); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); pos=GWEN_Buffer_GetPos(nbuf); GWEN_Text_EscapeToBuffer(groupName, nbuf); p=GWEN_Buffer_GetStart(nbuf)+pos; while (*p) { *p=tolower(*p); p++; } } void GWEN_ConfigMgrDir_AddGroupFileName(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_BUFFER *nbuf) { GWEN_CONFIGMGR_DIR *xcfg; uint32_t pos; char *p; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); assert(xcfg->folder); assert(groupName); assert(subGroupName); GWEN_Buffer_AppendString(nbuf, xcfg->folder); pos=GWEN_Buffer_GetPos(nbuf); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); GWEN_Text_EscapeToBuffer(groupName, nbuf); GWEN_Buffer_AppendString(nbuf, GWEN_DIR_SEPARATOR_S); GWEN_Text_EscapeToBuffer(subGroupName, nbuf); GWEN_Buffer_AppendString(nbuf, ".conf"); p=GWEN_Buffer_GetStart(nbuf)+pos; while (*p) { *p=tolower(*p); p++; } } GWEN_FSLOCK *GWEN_ConfigMgrDir_FindLock(GWEN_CONFIGMGR *cfg, const char *fname) { GWEN_CONFIGMGR_DIR *xcfg; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); if (GWEN_FSLock_List_GetCount(xcfg->fileLocks)) { GWEN_FSLOCK *lck; lck=GWEN_FSLock_List_First(xcfg->fileLocks); while (lck) { if (strcasecmp(GWEN_FSLock_GetName(lck), fname)==0) return lck; lck=GWEN_FSLock_List_Next(lck); } } return NULL; } int GWENHYWFAR_CB GWEN_ConfigMgrDir_GetGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_DB_NODE **pDb) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; GWEN_DB_NODE *db; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not access [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } db=GWEN_DB_Group_new(subGroupName); rv=GWEN_DB_ReadFile(db, GWEN_Buffer_GetStart(nbuf), GWEN_DB_FLAGS_DEFAULT | GWEN_PATH_FLAGS_CREATE_GROUP | GWEN_DB_FLAGS_ALLOW_EMPTY_STREAM); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not read [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_DB_Group_free(db); GWEN_Buffer_free(nbuf); return rv; } GWEN_Buffer_free(nbuf); *pDb=db; return 0; } int GWENHYWFAR_CB GWEN_ConfigMgrDir_SetGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName, GWEN_DB_NODE *db) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; GWEN_FSLOCK *lck; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not access [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } lck=GWEN_ConfigMgrDir_FindLock(cfg, GWEN_Buffer_GetStart(nbuf)); if (lck==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Group [%s/%s] is not locked", groupName, subGroupName); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } rv=GWEN_DB_WriteFile(db, GWEN_Buffer_GetStart(nbuf), GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not write [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } GWEN_Buffer_free(nbuf); return 0; } int GWENHYWFAR_CB GWEN_ConfigMgrDir_HasGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_NAMEMUSTEXIST | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not access [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } GWEN_Buffer_free(nbuf); return 0; } int GWENHYWFAR_CB GWEN_ConfigMgrDir_LockGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT res; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not access [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } lck=GWEN_ConfigMgrDir_FindLock(cfg, GWEN_Buffer_GetStart(nbuf)); if (lck) { DBG_ERROR(GWEN_LOGDOMAIN, "Group [%s/%s] is already locked", groupName, subGroupName); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } lck=GWEN_FSLock_new(GWEN_Buffer_GetStart(nbuf), GWEN_FSLock_TypeFile); res=GWEN_FSLock_Lock(lck, 60000, 0); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not lock group [%s/%s]: %d", groupName, subGroupName, res); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } GWEN_FSLock_List_Add(lck, xcfg->fileLocks); GWEN_Buffer_free(nbuf); return 0; } int GWENHYWFAR_CB GWEN_ConfigMgrDir_UnlockGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT res; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); lck=GWEN_ConfigMgrDir_FindLock(cfg, GWEN_Buffer_GetStart(nbuf)); if (lck==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Group [%s/%s] is not locked", groupName, subGroupName); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } res=GWEN_FSLock_Unlock(lck); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not unlock group [%s/%s]: %d", groupName, subGroupName, res); GWEN_FSLock_List_Del(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } GWEN_FSLock_List_Del(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return 0; } int GWENHYWFAR_CB GWEN_ConfigMgrDir_GetUniqueId(GWEN_CONFIGMGR *cfg, const char *groupName, char *buffer, uint32_t bufferLen) { GWEN_CONFIGMGR_DIR *xcfg; int rv; uint32_t uid; char ubuf[64]; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); rv=GWEN_ConfigMgrDir__GetUniqueId(cfg, groupName, &uid); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not create unique id (%d)", rv); return rv; } snprintf(ubuf, sizeof(ubuf)-1, "uid::%08x", uid); ubuf[sizeof(ubuf)-1]=0; /* return new id */ strncpy(buffer, ubuf, bufferLen-1); buffer[bufferLen-1]=0; return 0; } int GWENHYWFAR_CB GWEN_ConfigMgrDir_MkUniqueIdFromId(GWEN_CONFIGMGR *cfg, const char *groupName, uint32_t uid, int doCheck, char *buffer, uint32_t bufferLen) { GWEN_CONFIGMGR_DIR *xcfg; int rv; char ubuf[64]; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); rv=snprintf(ubuf, sizeof(ubuf)-1, "%08x", uid); if (rv>=sizeof(ubuf)-1) { DBG_ERROR(GWEN_LOGDOMAIN, "Id longer than %d (%d)? SNH!", (int)(sizeof(ubuf)-1), rv); return GWEN_ERROR_INTERNAL; } else if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error on snprintf: %d", rv); return GWEN_ERROR_INTERNAL; } ubuf[rv]=0; if (doCheck) { GWEN_BUFFER *nbuf; /* check whether that group already exists */ nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, ubuf, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_NAMEMUSTEXIST | GWEN_PATH_FLAGS_VARIABLE); if (rv>=0) { DBG_INFO(GWEN_LOGDOMAIN, "Path already exists [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } GWEN_Buffer_free(nbuf); /* update lastId if necessary */ rv=GWEN_ConfigMgrDir__UpdateLastUniqueId(cfg, groupName, uid); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not update unique id (%d)", rv); return rv; } } /* return new id */ strncpy(buffer, ubuf, bufferLen-1); buffer[bufferLen-1]=0; return 0; } int GWENHYWFAR_CB GWEN_ConfigMgrDir_DeleteGroup(GWEN_CONFIGMGR *cfg, const char *groupName, const char *subGroupName) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; GWEN_FSLOCK *lck; GWEN_FSLOCK_RESULT res; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupFileName(cfg, groupName, subGroupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_VARIABLE); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Could not access [%s]: %d", GWEN_Buffer_GetStart(nbuf), rv); GWEN_Buffer_free(nbuf); return rv; } lck=GWEN_ConfigMgrDir_FindLock(cfg, GWEN_Buffer_GetStart(nbuf)); if (lck) { DBG_ERROR(GWEN_LOGDOMAIN, "Group [%s/%s] is still locked", groupName, subGroupName); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } lck=GWEN_FSLock_new(GWEN_Buffer_GetStart(nbuf), GWEN_FSLock_TypeFile); res=GWEN_FSLock_Lock(lck, 60000, 0); if (res!=GWEN_FSLock_ResultOk) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not lock group [%s/%s]: %d", groupName, subGroupName, res); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return GWEN_ERROR_LOCK; } unlink(GWEN_Buffer_GetStart(nbuf)); GWEN_FSLock_Unlock(lck); GWEN_FSLock_free(lck); GWEN_Buffer_free(nbuf); return 0; } int GWENHYWFAR_CB GWEN_ConfigMgrDir_ListGroups(GWEN_CONFIGMGR *cfg, GWEN_STRINGLIST *sl) { GWEN_CONFIGMGR_DIR *xcfg; int rv; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); assert(xcfg->folder); rv=GWEN_Directory_GetDirEntries(xcfg->folder, sl, NULL); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWENHYWFAR_CB GWEN_ConfigMgrDir_ListSubGroups(GWEN_CONFIGMGR *cfg, const char *groupName, GWEN_STRINGLIST *sl) { GWEN_BUFFER *nbuf; GWEN_CONFIGMGR_DIR *xcfg; int rv; GWEN_STRINGLIST *rawsl; assert(cfg); xcfg=GWEN_INHERIT_GETDATA(GWEN_CONFIGMGR, GWEN_CONFIGMGR_DIR, cfg); assert(xcfg); nbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_ConfigMgrDir_AddGroupDirName(cfg, groupName, nbuf); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(nbuf), GWEN_PATH_FLAGS_CHECKROOT | GWEN_PATH_FLAGS_PATHMUSTEXIST | GWEN_PATH_FLAGS_NAMEMUSTEXIST); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Path not found (%d)", rv); GWEN_Buffer_free(nbuf); return 0; } rawsl=GWEN_StringList_new(); rv=GWEN_Directory_GetFileEntries(GWEN_Buffer_GetStart(nbuf), rawsl, "*.conf"); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_StringList_free(rawsl); GWEN_Buffer_free(nbuf); return rv; } else { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); se=GWEN_StringList_FirstEntry(rawsl); while (se) { char buffer[256]; char *p; strncpy(buffer, GWEN_StringListEntry_Data(se), sizeof(buffer)-1); buffer[sizeof(buffer)-1]=0; p=strrchr(buffer, '.'); if (p) { *p=0; GWEN_Text_UnescapeToBuffer(buffer, tbuf); GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(tbuf), 0, 1); GWEN_Buffer_Reset(tbuf); } se=GWEN_StringListEntry_Next(se); } GWEN_Buffer_free(tbuf); GWEN_StringList_free(rawsl); GWEN_Buffer_free(nbuf); return 0; } } gwenhywfar-5.12.0/plugins/configmgr/dir/dir.xml.in0000644000175000017500000000061713142134462017024 00000000000000 @GWENHYWFAR_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) ConfigManager implementation using files ConfigManager implementation using files. gwenhywfar-5.12.0/plugins/configmgr/Makefile.in0000664000175000017500000006024214730344661016420 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 = plugins/configmgr ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h 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 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ DIST_SUBDIRS = dir SUBDIRS = @gwenhywfar_plugins_cfgmgr_dirs@ 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) --gnu plugins/configmgr/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/configmgr/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 clean-libtool 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 mostlyclean-libtool 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 clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ 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 mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # 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: gwenhywfar-5.12.0/plugins/configmgr/Makefile.am0000644000175000017500000000020113142134462016362 00000000000000DIST_SUBDIRS=dir SUBDIRS=@gwenhywfar_plugins_cfgmgr_dirs@ sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-5.12.0/plugins/Makefile.in0000664000175000017500000006025014730344661014444 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 = plugins ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = dbio ct configmgr AM_CPPFLAGS = -I$(top_builddir)/gwenhywfar3 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) --gnu plugins/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 clean-libtool 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 mostlyclean-libtool 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 clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ 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 mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # 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: gwenhywfar-5.12.0/plugins/ct/0000775000175000017500000000000014730345120013051 500000000000000gwenhywfar-5.12.0/plugins/ct/ohbci/0000775000175000017500000000000014730345120014135 500000000000000gwenhywfar-5.12.0/plugins/ct/ohbci/Makefile.am0000666000175000017500000000161213545472064016126 00000000000000EXTRA_DIST = ressource.rc.in AM_CPPFLAGS= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser AM_CFLAGS=@PROFILING_CFLAGS@ crypttokenplugindir = $(gwenhywfar_plugindir)/ct noinst_HEADERS=ohbci_l.h ohbci_p.h crypttokenplugin_LTLIBRARIES=ohbci.la crypttokenplugin_DATA=ohbci.xml ohbci_la_SOURCES=ohbci.c ohbci_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la ohbci_la_LDFLAGS = -no-undefined $(STRIPALL) -module -avoid-version sources: for f in $(ohbci_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(crypttokenplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-5.12.0/plugins/ct/ohbci/Makefile.in0000664000175000017500000007115014730344661016137 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 = plugins/ct/ohbci ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = ohbci.xml ressource.rc CONFIG_CLEAN_VPATH_FILES = 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)$(crypttokenplugindir)" \ "$(DESTDIR)$(crypttokenplugindir)" LTLIBRARIES = $(crypttokenplugin_LTLIBRARIES) ohbci_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_ohbci_la_OBJECTS = ohbci.lo ohbci_la_OBJECTS = $(am_ohbci_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = ohbci_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(ohbci_la_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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/ohbci.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(ohbci_la_SOURCES) DIST_SOURCES = $(ohbci_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(crypttokenplugin_DATA) HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/ohbci.xml.in \ $(srcdir)/ressource.rc.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = ressource.rc.in AM_CPPFLAGS = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser AM_CFLAGS = @PROFILING_CFLAGS@ crypttokenplugindir = $(gwenhywfar_plugindir)/ct noinst_HEADERS = ohbci_l.h ohbci_p.h crypttokenplugin_LTLIBRARIES = ohbci.la crypttokenplugin_DATA = ohbci.xml ohbci_la_SOURCES = ohbci.c ohbci_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la ohbci_la_LDFLAGS = -no-undefined $(STRIPALL) -module -avoid-version all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu plugins/ct/ohbci/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/ct/ohbci/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): ohbci.xml: $(top_builddir)/config.status $(srcdir)/ohbci.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ressource.rc: $(top_builddir)/config.status $(srcdir)/ressource.rc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-crypttokenpluginLTLIBRARIES: $(crypttokenplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(crypttokenplugin_LTLIBRARIES)'; test -n "$(crypttokenplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(crypttokenplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(crypttokenplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(crypttokenplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(crypttokenplugindir)"; \ } uninstall-crypttokenpluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(crypttokenplugin_LTLIBRARIES)'; test -n "$(crypttokenplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(crypttokenplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(crypttokenplugindir)/$$f"; \ done clean-crypttokenpluginLTLIBRARIES: -test -z "$(crypttokenplugin_LTLIBRARIES)" || rm -f $(crypttokenplugin_LTLIBRARIES) @list='$(crypttokenplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } ohbci.la: $(ohbci_la_OBJECTS) $(ohbci_la_DEPENDENCIES) $(EXTRA_ohbci_la_DEPENDENCIES) $(AM_V_CCLD)$(ohbci_la_LINK) -rpath $(crypttokenplugindir) $(ohbci_la_OBJECTS) $(ohbci_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ohbci.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-crypttokenpluginDATA: $(crypttokenplugin_DATA) @$(NORMAL_INSTALL) @list='$(crypttokenplugin_DATA)'; test -n "$(crypttokenplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(crypttokenplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(crypttokenplugindir)" || 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)$(crypttokenplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(crypttokenplugindir)" || exit $$?; \ done uninstall-crypttokenpluginDATA: @$(NORMAL_UNINSTALL) @list='$(crypttokenplugin_DATA)'; test -n "$(crypttokenplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(crypttokenplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(crypttokenplugindir)" "$(DESTDIR)$(crypttokenplugindir)"; 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-crypttokenpluginLTLIBRARIES clean-generic \ clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/ohbci.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-crypttokenpluginDATA \ install-crypttokenpluginLTLIBRARIES 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 ./$(DEPDIR)/ohbci.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-crypttokenpluginDATA \ uninstall-crypttokenpluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-crypttokenpluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-crypttokenpluginDATA \ install-crypttokenpluginLTLIBRARIES 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am \ uninstall-crypttokenpluginDATA \ uninstall-crypttokenpluginLTLIBRARIES .PRECIOUS: Makefile sources: for f in $(ohbci_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(crypttokenplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< # 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: gwenhywfar-5.12.0/plugins/ct/ohbci/ohbci_l.h0000644000175000017500000000164513142134474015635 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: ohbci_l.h 794 2005-07-26 16:13:16Z aquamaniac $ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWEN_CRYPTTOKEN_OHBCI_L_H #define GWEN_CRYPTTOKEN_OHBCI_L_H #include #include /** @name Constructor And Destructor * */ /*@{*/ GWEN_CRYPT_TOKEN *GWEN_Crypt_TokenOHBCI_new(GWEN_PLUGIN_MANAGER *pm, const char *name); /*@}*/ #endif /* GWEN_CRYPTTOKEN_OHBCI_L_H */ gwenhywfar-5.12.0/plugins/ct/ohbci/ressource.rc.in0000644000175000017500000000661713142134462017033 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: ressource.rc.in 822 2005-08-04 08:11:04Z cstim $ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ /* Changes */ #include // Language: 407=DE, 409=US, 809=UK // German resources LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // Version VS_VERSION_INFO VERSIONINFO FILEVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ PRODUCTVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L // Windows NT FILETYPE 0x2L // DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040704b0" BEGIN //VALUE "Comments", "\0" VALUE "CompanyName", " Aquamaniac\0" VALUE "FileDescription", "Home banking library\0" VALUE "FileVersion", "v@GWENHYWFAR_VERSION_RELEASE_STRING@\0" VALUE "InternalName", "Gwenhywfar\0" VALUE "LegalCopyright", "Copyright © 2004 by Martin Preuss\0" VALUE "LegalTrademarks", "Aquamaniac\0" VALUE "OriginalFilename", "dbio.dll\0" //VALUE "PrivateBuild", "\0" VALUE "ProductName", "Gwenhywfar\0" VALUE "ProductVersion", "v@GWENHYWFAR_VERSION_FULL_STRING@\0" VALUE "Author", "Martin Preuss\0" VALUE "Email", "martin@libchipcard.de\0" VALUE "Homepage", "http://www.sf.net/projects/gwenhywfar\0" VALUE "Description", "Online banking\0" VALUE "License", "GPL\0" //VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x407, 1200 END END gwenhywfar-5.12.0/plugins/ct/ohbci/ohbci.xml.in0000644000175000017500000000075713142134462016300 00000000000000 @OHBCI_VERSION_STRING@ Martin Preuss (martin@libchipcard.de) OpenHBCI Keyfile Medium This plugins provides support for keyfiles created with OpenHBCI1 and OpenHBCI2. The file is encrypted with a password using the 3DES algorithm and it stores the private and public RSA keys. gwenhywfar-5.12.0/plugins/ct/ohbci/ohbci.c0000644000175000017500000024650113606364271015324 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /*#define DEBUG_OHBCI_MODULE*/ #include "ohbci_p.h" #include "i18n_l.h" #include #include #include #include #include #include #include #include /* DEBUG */ #include #include #include #include #include #include #include #include #include #include #include #ifdef OS_WIN32 # define ftruncate chsize #endif GWEN_INHERIT(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI) GWEN_PLUGIN *ct_ohbci_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName) { GWEN_PLUGIN *pl; pl=GWEN_Crypt_TokenOHBCI_Plugin_new(pm, modName, fileName); assert(pl); return pl; } GWEN_PLUGIN *GWEN_Crypt_TokenOHBCI_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName) { GWEN_PLUGIN *pl; pl=GWEN_Crypt_Token_Plugin_new(pm, GWEN_Crypt_Token_Device_File, modName, fileName); /* set virtual functions */ GWEN_Crypt_Token_Plugin_SetCreateTokenFn(pl, GWEN_Crypt_TokenOHBCI_Plugin_CreateToken); GWEN_Crypt_Token_Plugin_SetCheckTokenFn(pl, GWEN_Crypt_TokenOHBCI_Plugin_CheckToken); return pl; } GWEN_CRYPT_TOKEN *GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Plugin_CreateToken(GWEN_PLUGIN *pl, const char *name) { GWEN_PLUGIN_MANAGER *pm; GWEN_CRYPT_TOKEN *ct; assert(pl); pm=GWEN_Plugin_GetManager(pl); assert(pm); ct=GWEN_Crypt_TokenOHBCI_new(pm, name); assert(ct); return ct; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Plugin_CheckToken(GWEN_UNUSED GWEN_PLUGIN *pl, GWEN_BUFFER *name) { FILE *f; const char *p; char buffer[16]; int rv; if (GWEN_Buffer_GetUsedBytes(name)==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty name"); return GWEN_ERROR_BAD_NAME; } p=GWEN_Buffer_GetStart(name); if (access(p, F_OK)) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not exist", p); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, "File does not exist"); return GWEN_ERROR_BAD_NAME; } if (access(p, R_OK | W_OK)) { DBG_ERROR(GWEN_LOGDOMAIN, "File exists but I have no writes on it"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, "File exists but I have no writes on it"); return GWEN_ERROR_IO; } f=fopen(p, "rb"); if (!f) { DBG_ERROR(GWEN_LOGDOMAIN, "File exists, I have all rights but still can't open it"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "File exists, I have all rights but " "still can't open it"); return GWEN_ERROR_IO; } rv=fread(buffer, sizeof(buffer), 1, f); fclose(f); if (rv!=1) { DBG_INFO(GWEN_LOGDOMAIN, "This seems not to be an OpenHBCI keyfile"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Info, "This seems not to be an OpenHBCI keyfile"); return GWEN_ERROR_NOT_SUPPORTED; } if (rv!=1) { DBG_INFO(GWEN_LOGDOMAIN, "This seems not to be an OpenHBCI keyfile (bad size)"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "This seems not to be an OpenHBCI keyfile " "(bad size)"); return GWEN_ERROR_NOT_SUPPORTED; } if ((unsigned char)(buffer[0])==GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM1) { DBG_INFO(GWEN_LOGDOMAIN, "Old OpenHBCI file detected"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "Old OpenHBCI file detected"); return 0; } else if ((unsigned char)(buffer[0])==GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM2) { DBG_INFO(GWEN_LOGDOMAIN, "OpenHBCI file (<1.6) detected"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "OpenHBCI file (<1.6) detected"); return 0; } else if ((unsigned char)(buffer[0])==GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3) { if ((unsigned char)(buffer[3])==GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER && strncmp(buffer+6, GWEN_CRYPT_TOKEN_OHBCI_NAME, strlen(GWEN_CRYPT_TOKEN_OHBCI_NAME))==0) { DBG_INFO(GWEN_LOGDOMAIN, "New OpenHBCI file (>=1.6) detected"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "New OpenHBCI file (>=1.6) detected"); return 0; } } DBG_INFO(GWEN_LOGDOMAIN, "This seems not to be an OpenHBCI keyfile"); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Notice, "This seems not to be an OpenHBCI keyfile"); return GWEN_ERROR_NOT_SUPPORTED; } GWEN_CRYPT_TOKEN *GWEN_Crypt_TokenOHBCI_new(GWEN_UNUSED GWEN_PLUGIN_MANAGER *pm, const char *name) { GWEN_CRYPT_TOKEN *ct; GWEN_CRYPT_TOKEN_OHBCI *lct; ct=GWEN_Crypt_TokenFile_new("ohbci", name); GWEN_NEW_OBJECT(GWEN_CRYPT_TOKEN_OHBCI, lct); GWEN_INHERIT_SETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct, lct, GWEN_Crypt_TokenOHBCI_FreeData); lct->mediumTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3; lct->vminor=GWEN_CRYPT_TOKEN_OHBCI_VMINOR; lct->cryptoTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF; /* set virtual functions */ lct->openFn=GWEN_Crypt_Token_SetOpenFn(ct, GWEN_Crypt_TokenOHBCI_Open); lct->closeFn=GWEN_Crypt_Token_SetCloseFn(ct, GWEN_Crypt_TokenOHBCI_Close); lct->createFn=GWEN_Crypt_Token_SetCreateFn(ct, GWEN_Crypt_TokenOHBCI_Create); GWEN_Crypt_Token_SetChangePinFn(ct, GWEN_Crypt_TokenOHBCI_ChangePin); GWEN_Crypt_TokenFile_SetReadFn(ct, GWEN_Crypt_TokenOHBCI_Read); GWEN_Crypt_TokenFile_SetWriteFn(ct, GWEN_Crypt_TokenOHBCI_Write); return ct; } void GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_FreeData(GWEN_UNUSED void *bp, void *p) { GWEN_CRYPT_TOKEN_OHBCI *lct; lct=(GWEN_CRYPT_TOKEN_OHBCI *) p; memset(lct->password, 0, sizeof(lct->password)); GWEN_FREE_OBJECT(lct); } int GWEN_Crypt_TokenOHBCI__EnsurePassword(GWEN_CRYPT_TOKEN *ct, int trynum, int confirm, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); if (lct->passWordIsSet==0) { char password[64]; int rv; unsigned int pinLength=0; uint32_t flags; /* create key from password */ memset(lct->password, 0, sizeof(lct->password)); flags=0; if (trynum) flags|=GWEN_GUI_INPUT_FLAGS_RETRY; if (confirm) flags|=GWEN_GUI_INPUT_FLAGS_CONFIRM; rv=GWEN_Crypt_Token_GetPin(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, flags, (unsigned char *)password, GWEN_CRYPT_TOKEN_OHBCI_PINMINLENGTH, sizeof(password)-1, &pinLength, gid); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Error asking for PIN, aborting (%d)", rv); return rv; } if (strlen(password)cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT) { DBG_NOTICE(GWEN_LOGDOMAIN, "New OpenHBCI file detected"); rv=GWEN_Crypt_KeyDataFromText(password, (unsigned char *)lct->password, 24); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create key data from password (%d)", rv); return GWEN_ERROR_GENERIC; } } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD) { DBG_NOTICE(GWEN_LOGDOMAIN, "Old OpenHBCI file detected"); rv=GWEN_Gui_KeyDataFromText_OpenSSL(password, (unsigned char *)lct->password, 16); if (rv) { if (rv==GWEN_ERROR_NOT_IMPLEMENTED) { DBG_ERROR(GWEN_LOGDOMAIN, "OpenSSL-style password creation not supported with Libgcrypt!"); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create key data from password (%d)", rv); } return GWEN_ERROR_GENERIC; } } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF) { DBG_NOTICE(GWEN_LOGDOMAIN, "New OpenHBCI (1.6+) file detected"); /* same as above but for different key type */ rv=GWEN_Crypt_KeyDataFromText(password, (unsigned char *)lct->password, 16); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create key data from password (%d)", rv); return GWEN_ERROR_GENERIC; } } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR) { DBG_NOTICE(GWEN_LOGDOMAIN, "New OpenHBCI (1.8+) file detected"); strncpy(lct->password, password, sizeof(lct->password)-1); lct->password[sizeof(lct->password)-1]=0; } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected crypto tag %d", lct->cryptoTag); abort(); } lct->passWordIsSet=1; } return 0; } int GWEN_Crypt_TokenOHBCI__DecryptFile(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *fbuf, int trynum, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_CRYPT_KEY *key; int err; char password[64]; GWEN_BUFFER *rawbuf; uint32_t size; int rv; unsigned int pinLength=0; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); rv=GWEN_Crypt_TokenOHBCI__EnsurePassword(ct, trynum, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT) { key=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 24, (const uint8_t *)lct->password, 24); } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD) { key=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 16, (const uint8_t *)lct->password, 16); } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF) { key=GWEN_Crypt_KeyBlowFish_fromData(GWEN_Crypt_CryptMode_Cbc, 16, (const uint8_t *)lct->password, 16); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown crypt tag, should not occur"); abort(); } /* decrypt file */ DBG_INFO(GWEN_LOGDOMAIN, "Decrypting file"); size=GWEN_Buffer_GetUsedBytes(fbuf); rawbuf=GWEN_Buffer_new(0, size, 0, 1); GWEN_Buffer_Rewind(fbuf); err=GWEN_Crypt_Key_Decipher(key, (const uint8_t *)GWEN_Buffer_GetStart(fbuf), size, (uint8_t *)GWEN_Buffer_GetStart(rawbuf), &size); if (err) { DBG_INFO_ERR(GWEN_LOGDOMAIN, err); GWEN_Buffer_free(rawbuf); GWEN_Crypt_Key_free(key); if (pinLength) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum ?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char *)password, pinLength, 0, gid); memset(password, 0, sizeof(password)); lct->passWordIsSet=0; return GWEN_ERROR_BAD_PIN; } /* advance buffer pointers since we wrote directly to the buffer */ GWEN_Buffer_IncrementPos(rawbuf, size); GWEN_Buffer_AdjustUsedBytes(rawbuf); /* unpadd raw data */ DBG_INFO(GWEN_LOGDOMAIN, "Unpadding file"); if (GWEN_Padd_UnpaddWithAnsiX9_23(rawbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not unpadd keyfile, i.e. wrong PIN"); GWEN_Buffer_free(rawbuf); GWEN_Crypt_Key_free(key); /* TODO: Set Pin status */ lct->passWordIsSet=0; if (pinLength) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char *)password, pinLength, 0, gid); memset(password, 0, sizeof(password)); return GWEN_ERROR_BAD_PIN; } GWEN_Crypt_Key_free(key); /* parse raw data */ DBG_INFO(GWEN_LOGDOMAIN, "Parsing file"); GWEN_Buffer_Rewind(rawbuf); rv=GWEN_Crypt_TokenOHBCI__Decode(ct, rawbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(rawbuf); /* Set Pin status */ if (pinLength) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum ?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char *)password, pinLength, 0, gid); memset(password, 0, sizeof(password)); lct->passWordIsSet=0; return GWEN_ERROR_BAD_PIN; } GWEN_Buffer_free(rawbuf); /* Set Pin status */ if (pinLength) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char *)password, pinLength, 1, gid); memset(password, 0, sizeof(password)); return 0; } int GWEN_Crypt_TokenOHBCI__DecryptTresor(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *fbuf, int trynum, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_BUFFER *rawbuf; uint32_t size; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); rv=GWEN_Crypt_TokenOHBCI__EnsurePassword(ct, trynum, 0, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } size=GWEN_Buffer_GetUsedBytes(fbuf); rawbuf=GWEN_Buffer_new(0, size, 0, 1); GWEN_Buffer_Rewind(fbuf); rv=GWEN_SmallTresor_Decrypt((const uint8_t *) GWEN_Buffer_GetStart(fbuf), size, lct->password, rawbuf, GWEN_CRYPT_TOKEN_OHBCI_TRESOR_PWD_ITERATIONS, GWEN_CRYPT_TOKEN_OHBCI_TRESOR_CRYPT_ITERATIONS); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(rawbuf); if (lct->password[0]) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char *)lct->password, strlen(lct->password), 0, gid); memset(lct->password, 0, sizeof(lct->password)); lct->passWordIsSet=0; return GWEN_ERROR_BAD_PIN; } /* parse raw data */ DBG_INFO(GWEN_LOGDOMAIN, "Parsing file"); GWEN_Buffer_Rewind(rawbuf); rv=GWEN_Crypt_TokenOHBCI__Decode(ct, rawbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(rawbuf); /* Set Pin status */ if (lct->password[0]) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char *)lct->password, strlen(lct->password), 0, gid); memset(lct->password, 0, sizeof(lct->password)); lct->passWordIsSet=0; return GWEN_ERROR_BAD_PIN; } GWEN_Buffer_free(rawbuf); /* Set Pin status */ if (lct->password[0]) GWEN_Crypt_Token_SetPinStatus(ct, GWEN_Crypt_PinType_Access, GWEN_Crypt_PinEncoding_Ascii, (trynum?GWEN_GUI_INPUT_FLAGS_RETRY:0), (unsigned char *)lct->password, strlen(lct->password), 1, gid); return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Read(GWEN_CRYPT_TOKEN *ct, int fd, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_BUFFER *rbuf; GWEN_BUFFER *fbuf; unsigned char c; GWEN_TAG16 *tlv; int i; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); rbuf=GWEN_Buffer_new(0, 1024, 0, 1); /* read file into rbuf */ while (1) { char buffer[256]; int rv; rv=read(fd, buffer, sizeof(buffer)); if (rv==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "read: %s", strerror(errno)); return -1; } if (rv==0) break; GWEN_Buffer_AppendBytes(rbuf, buffer, rv); } if (GWEN_Buffer_GetUsedBytes(rbuf)<3) { DBG_ERROR(GWEN_LOGDOMAIN, "This seems not to be an OpenHBCI key file"); GWEN_Buffer_free(rbuf); return -1; } /* check whether this is a known OpenHBCI(2) keyfile */ GWEN_Buffer_Rewind(rbuf); c=*GWEN_Buffer_GetStart(rbuf); if (c!=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM1 && c!=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM2 && c!=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3) { DBG_ERROR(GWEN_LOGDOMAIN, "This seems not to be an OpenHBCI key file"); GWEN_Buffer_free(rbuf); return -1; } lct->mediumTag=c; lct->cryptoTag=0; tlv=GWEN_Tag16_fromBuffer(rbuf, 0); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad file data"); GWEN_Buffer_free(rbuf); return -1; } fbuf=GWEN_Buffer_new(0, GWEN_Tag16_GetTagLength(tlv), 0, 1); GWEN_Buffer_AppendBytes(fbuf, GWEN_Tag16_GetTagData(tlv), GWEN_Tag16_GetTagLength(tlv)); GWEN_Buffer_Rewind(fbuf); GWEN_Buffer_free(rbuf); GWEN_Tag16_free(tlv); /* now fbuf contains the data from the crypt TLV */ for (i=0;; i++) { int rv; if (i>GWEN_CRYPT_TOKEN_OHBCI_MAX_PIN_TRY) { DBG_ERROR(GWEN_LOGDOMAIN, "No valid PIN within %d tries, giving up", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Critical, I18N("No valid PIN (tried too often), " "aborting.")); GWEN_Buffer_free(fbuf); return GWEN_ERROR_ABORTED; } switch (lct->mediumTag) { case GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM1: lct->cryptoTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD; rv=GWEN_Crypt_TokenOHBCI__DecryptFile(ct, fbuf, i, gid); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM2: lct->cryptoTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT; rv=GWEN_Crypt_TokenOHBCI__DecryptFile(ct, fbuf, i, gid); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3: lct->cryptoTag=0; rv=GWEN_Crypt_TokenOHBCI__DecryptFile16(ct, fbuf, i, gid); break; default: rv = GWEN_ERROR_NOT_SUPPORTED; /* otherwise 'rv' might be uninitialized */ } if (rv==0) break; else { switch (rv) { case GWEN_ERROR_USER_ABORTED: DBG_INFO(GWEN_LOGDOMAIN, "Aborted by user"); GWEN_Buffer_free(fbuf); return rv; case GWEN_ERROR_BAD_PIN: DBG_ERROR(GWEN_LOGDOMAIN, "Bad pin."); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Critical, I18N("Bad PIN, will try again")); break; default: DBG_INFO(GWEN_LOGDOMAIN, "Other error, giving up"); GWEN_Buffer_free(fbuf); return rv; } } } /* for */ GWEN_Buffer_free(fbuf); lct->justCreated=0; return 0; } void GWEN_Crypt_TokenOHBCI__DecodeKey(GWEN_UNUSED GWEN_CRYPT_TOKEN *ct, GWEN_TAG16 *keyTlv, GWEN_DB_NODE *dbKeys, const char *keyName) { GWEN_BUFFER *dbuf; const char *p; int size; GWEN_DB_NODE *node; uint32_t flags; const char defaultExpo[3]= {0x01, 0x00, 0x01}; p=GWEN_Tag16_GetTagData(keyTlv); size=GWEN_Tag16_GetTagLength(keyTlv); if (size<2) { DBG_ERROR(GWEN_LOGDOMAIN, "Tag too small to contain any subtag"); return; } /* create static buffer */ dbuf=GWEN_Buffer_new((char *)p, size, size, 0); GWEN_Buffer_SubMode(dbuf, GWEN_BUFFER_MODE_DYNAMIC); node=GWEN_DB_GetGroup(dbKeys, GWEN_DB_FLAGS_DEFAULT, keyName); assert(node); /* preset */ GWEN_DB_SetCharValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "cryptAlgoId", "rsa"); GWEN_DB_SetIntValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "keySize", 96); GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/e", defaultExpo, sizeof(defaultExpo)); flags=0; GWEN_DB_SetIntValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "flags", flags); while (GWEN_Buffer_GetBytesLeft(dbuf)) { const char *pp; char *p; GWEN_TAG16 *tlv; unsigned int l; tlv=GWEN_Tag16_fromBuffer(dbuf, 0); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad file (no TLV)"); return; } p=0; pp=(const char *)GWEN_Tag16_GetTagData(tlv); l=GWEN_Tag16_GetTagLength(tlv); if (pp && l) { p=(char *)malloc(l+1); assert(p); memmove(p, pp, l); p[l]=0; } switch (GWEN_Tag16_GetTagType(tlv)) { case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISPUBLIC: /* ignore this tag, since it is buggy in OpenHBCI(2) */ break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISCRYPT: /* no longer supported since 1.8*/ break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_OWNER: GWEN_DB_SetCharValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyOwner", p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_VERSION: assert(p); GWEN_DB_SetIntValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyVersion", atoi(p)); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_NUMBER: assert(p); GWEN_DB_SetIntValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "keyNumber", atoi(p)); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_MODULUS: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/n", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_EXP_OLD: DBG_INFO(GWEN_LOGDOMAIN, "Ignoring old exponent (%d), keeping default", l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_EXP: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/e", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_N: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/n", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_P: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/p", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_Q: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/q", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_D: if (p && l) GWEN_DB_SetBinValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/d", p, l); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_LEN: if (p && l) { int i; /* fix for some versions which stored keysize*8 */ i=atoi(p); if (i>512) i/=8; GWEN_DB_SetIntValue(node, GWEN_DB_FLAGS_OVERWRITE_VARS, "keySize", i); } break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown tag %02x", GWEN_Tag16_GetTagType(tlv)); break; } /* switch */ GWEN_Tag16_free(tlv); free(p); } /* while */ GWEN_Buffer_free(dbuf); } int GWEN_Crypt_TokenOHBCI__Decode(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *dbuf) { GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_TAG16 *tlv; int rv; GWEN_DB_NODE *dbKeys; GWEN_DB_NODE *dbKey; GWEN_CRYPT_TOKEN_CONTEXT *fct; const char *peerId=0; uint32_t localSignSeq=0; uint32_t remoteSignSeq=0; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); tlv=GWEN_Tag16_fromBuffer(dbuf, 0); GWEN_Buffer_Rewind(dbuf); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't contain a TLV: Either bad pin or bad file"); return -1; } if (GWEN_Tag16_GetTagType(tlv)!=GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER && GWEN_Tag16_GetTagType(tlv)!=GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't start with version info or header."); GWEN_Tag16_free(tlv); return -1; } GWEN_Tag16_free(tlv); fct=GWEN_CTF_Context_new(); /* now parse it */ dbKeys=GWEN_DB_Group_new("keys"); while (GWEN_Buffer_GetBytesLeft(dbuf)) { int i; const char *pp; char *p; unsigned int l; tlv=GWEN_Tag16_fromBuffer(dbuf, 0); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't contain a TLV: Either bad pin or bad file"); GWEN_Crypt_Token_Context_free(fct); return GWEN_ERROR_BAD_PIN; } p=0; pp=(const char *)GWEN_Tag16_GetTagData(tlv); l=GWEN_Tag16_GetTagLength(tlv); if (pp && l) { p=(char *)malloc(l+1); assert(p); memmove(p, pp, l); p[l]=0; } switch (GWEN_Tag16_GetTagType(tlv)) { case GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR: assert(p); i=atoi(p); DBG_INFO(GWEN_LOGDOMAIN, "OHBCI: Major version: %d", i); if (i!=GWEN_CRYPT_TOKEN_OHBCI_VMAJOR) { DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported keyfile version (%d)", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, "Basically this file type is supported.\n" "However, the major versions do not match,\n" "so this particular version is not supported"); free(p); GWEN_Tag16_free(tlv); GWEN_Crypt_Token_Context_free(fct); return -1; } break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MINOR: assert(p); i=atoi(p); DBG_INFO(GWEN_LOGDOMAIN, "OHBCI: Minor version: %d", i); if (i>GWEN_CRYPT_TOKEN_OHBCI_VMINOR) { DBG_ERROR(GWEN_LOGDOMAIN, "Keyfile version is higher than mine (%d).\n", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, "This key file file has been created with a " "newer library version.\n"); free(p); GWEN_Tag16_free(tlv); GWEN_Crypt_Token_Context_free(fct); return GWEN_ERROR_NOT_SUPPORTED; } else if (ivminor=i; break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_SEQ: assert(p); localSignSeq=atoi(p); if (localSignSeq==0) localSignSeq=1; break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_ID: GWEN_Crypt_Token_Context_SetUserId(fct, p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_COUNTRY: /* ignore */ break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_CODE: GWEN_Crypt_Token_Context_SetServiceId(fct, p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_SYSTEMID: GWEN_Crypt_Token_Context_SetSystemId(fct, p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_ADDR: /* new in 1.4 */ GWEN_Crypt_Token_Context_SetAddress(fct, p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_PORT: /* new in 1.4 */ GWEN_Crypt_Token_Context_SetPort(fct, atoi(p)); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_REMOTE_SEQ: /* new in 1.4 */ remoteSignSeq=atoi(p); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBSIGNKEY: case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVSIGNKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "localSignKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBCRYPTKEY: case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVCRYPTKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "localCryptKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBSIGNKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "remoteSignKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBCRYPTKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "remoteCryptKey"); break; /* handled again since 1.8 */ case GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PUBSIGNKEY: case GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PRIVSIGNKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "tempLocalSignKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PUBCRYPTKEY: case GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PRIVCRYPTKEY: DBG_INFO(GWEN_LOGDOMAIN, "Ignoring temporary crypt keys"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVAUTHKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "localAuthKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBAUTHKEY: GWEN_Crypt_TokenOHBCI__DecodeKey(ct, tlv, dbKeys, "remoteAuthKey"); break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER: /* ignore header here */ break; default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown tag %02x", GWEN_Tag16_GetTagType(tlv)); break; } /* switch */ GWEN_Tag16_free(tlv); free(p); } /* while */ /* now check for keys */ rv=0; /* local sign key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "localSignKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 0); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0001, /* local sign key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Sign Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, localSignSeq); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_CTF_Context_SetLocalSignKeyInfo(fct, ki); /* set key */ if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) { DBG_INFO(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetLocalSignKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0001, /* local sign key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Sign Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_CTF_Context_SetLocalSignKeyInfo(fct, ki); } /* local crypt key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "localCryptKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 0); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0002, /* local crypt key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Crypt Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_CANDECIPHER); GWEN_CTF_Context_SetLocalCryptKeyInfo(fct, ki); /* set key */ GWEN_CTF_Context_SetLocalCryptKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0002, /* local crypt key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Crypt Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_CANDECIPHER); GWEN_CTF_Context_SetLocalCryptKeyInfo(fct, ki); } /* remote sign key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "remoteSignKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 1); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0003, /* remote sign key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Sign Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetSignCounter(ki, remoteSignSeq); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetRemoteSignKeyInfo(fct, ki); /* set key */ if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); GWEN_CTF_Context_SetRemoteSignKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0003, /* remote sign key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Sign Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetRemoteSignKeyInfo(fct, ki); } /* remote crypt key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "remoteCryptKey"); if (dbKey) { GWEN_CRYPT_KEY *key; peerId=GWEN_DB_GetCharValue(dbKey, "keyOwner", 0, NULL); if (peerId) { DBG_INFO(0, "Got Peer Id [%s]", peerId); } GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 1); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0004, /* remote crypt key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Crypt Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER); GWEN_CTF_Context_SetRemoteCryptKeyInfo(fct, ki); /* set key */ GWEN_CTF_Context_SetRemoteCryptKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0004, /* remote crypt key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Crypt Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER); GWEN_CTF_Context_SetRemoteCryptKeyInfo(fct, ki); } /* local auth key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "localAuthKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 0); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0005, /* local auth key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Auth Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetLocalAuthKeyInfo(fct, ki); /* set key */ if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) { DBG_INFO(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetLocalAuthKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0005, /* local auth key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Auth Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetLocalAuthKeyInfo(fct, ki); } /* remote auth key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "remoteAuthKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 1); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0006, /* remote auth key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Auth Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetRemoteAuthKeyInfo(fct, ki); /* set key */ if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) { DBG_INFO(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetRemoteAuthKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0006, /* remote auth key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Auth Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY); GWEN_CTF_Context_SetRemoteAuthKeyInfo(fct, ki); } /* temp local sign key */ dbKey=GWEN_DB_GetGroup(dbKeys, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "tempLocalSignKey"); if (dbKey) { GWEN_CRYPT_KEY *key; GWEN_DB_SetIntValue(dbKey, GWEN_DB_FLAGS_OVERWRITE_VARS, "rsa/isPublic", 0); key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (!key) { rv=-1; DBG_ERROR(GWEN_LOGDOMAIN, "Bad key format"); } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; uint8_t kbuf[GWEN_CRYPT_KEYRSA_MAX_KEYLENGTH]; uint32_t klen; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0007, /* temp local sign key */ GWEN_Crypt_Key_GetCryptAlgoId(key), GWEN_Crypt_Key_GetKeySize(key)); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Temporary Local Sign Key")); /* get modulus */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetModulus(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No modulus for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetModulus(ki, kbuf, klen); /* get exponent */ klen=sizeof(kbuf); rv=GWEN_Crypt_KeyRsa_GetExponent(key, kbuf, &klen); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "No exponent for key"); GWEN_Crypt_Token_KeyInfo_free(ki); GWEN_Crypt_Key_free(key); return rv; } GWEN_Crypt_Token_KeyInfo_SetExponent(ki, kbuf, klen); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(ki, GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(ki, GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASMODULUS | GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_CTF_Context_SetTempLocalSignKeyInfo(fct, ki); /* set key */ if (GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_DIRECT_SIGN) { DBG_INFO(GWEN_LOGDOMAIN, "Adding mode \"direct sign\" to key"); GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); } GWEN_CTF_Context_SetTempLocalSignKey(fct, key); } } else { GWEN_CRYPT_TOKEN_KEYINFO *ki; /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0007, /* temp local sign key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Temporary Local Sign Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN); GWEN_CTF_Context_SetTempLocalSignKeyInfo(fct, ki); } /* finalize user and file context */ GWEN_Crypt_Token_Context_SetId(fct, 1); /* only one user */ GWEN_Crypt_Token_Context_SetPeerId(fct, peerId); /* only one user */ GWEN_Crypt_Token_Context_SetSignKeyId(fct, 0x01); GWEN_Crypt_Token_Context_SetDecipherKeyId(fct, 0x02); GWEN_Crypt_Token_Context_SetVerifyKeyId(fct, 0x03); GWEN_Crypt_Token_Context_SetEncipherKeyId(fct, 0x04); GWEN_Crypt_Token_Context_SetAuthSignKeyId(fct, 0x05); GWEN_Crypt_Token_Context_SetAuthVerifyKeyId(fct, 0x06); GWEN_Crypt_Token_Context_SetTempSignKeyId(fct, 0x07); /* clear context list, add new context */ GWEN_Crypt_TokenFile_AddContext(ct, fct); GWEN_DB_Group_free(dbKeys); return rv; } int GWEN_Crypt_TokenOHBCI__DecryptFile16(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *dbuf, int tryNum, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_TAG16 *tlv; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); tlv=GWEN_Tag16_fromBuffer(dbuf, 0); GWEN_Buffer_Rewind(dbuf); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't contain a TLV: Either bad pin or bad file"); return GWEN_ERROR_BAD_PIN; } if (GWEN_Tag16_GetTagType(tlv)!=GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't start with header tag."); GWEN_Tag16_free(tlv); return GWEN_ERROR_GENERIC; } GWEN_Tag16_free(tlv); /* now parse it */ while (GWEN_Buffer_GetBytesLeft(dbuf)) { int i; const char *pp; char *p; unsigned int l; tlv=GWEN_Tag16_fromBuffer(dbuf, 0); if (!tlv) { DBG_ERROR(GWEN_LOGDOMAIN, "File doesn't contain a TLV: Either bad pin or bad file"); return GWEN_ERROR_BAD_PIN; } p=0; pp=(const char *)GWEN_Tag16_GetTagData(tlv); l=GWEN_Tag16_GetTagLength(tlv); if (pp && l) { p=(char *)malloc(l+1); assert(p); memmove(p, pp, l); p[l]=0; } switch (GWEN_Tag16_GetTagType(tlv)) { case GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER: if (strcasecmp(p, GWEN_CRYPT_TOKEN_OHBCI_NAME)!=0) { DBG_ERROR(GWEN_LOGDOMAIN, "Bad header (%s)", p); free(p); GWEN_Tag16_free(tlv); return -1; } break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR: i=atoi(p); if (i!=GWEN_CRYPT_TOKEN_OHBCI_VMAJOR) { DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported keyfile version (%d)", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, "Basically this file type is supported.\n" "However, the major versions do not match,\n" "so this particular version is not supported"); free(p); GWEN_Tag16_free(tlv); return -1; } break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MINOR: i=atoi(p); if (i>GWEN_CRYPT_TOKEN_OHBCI_VMINOR) { DBG_WARN(GWEN_LOGDOMAIN, "Keyfile version is higher than mine (%d).\n", i); GWEN_Gui_ProgressLog(0, GWEN_LoggerLevel_Warning, "This key file file has been created with a " "newer library version.\n"); free(p); GWEN_Tag16_free(tlv); return -1; } else if (ivminor=i; break; case GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD: case GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT: case GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF: { GWEN_BUFFER *fbuf; lct->cryptoTag=GWEN_Tag16_GetTagType(tlv); fbuf=GWEN_Buffer_new(0, GWEN_Tag16_GetTagLength(tlv), 0, 1); GWEN_Buffer_AppendBytes(fbuf, GWEN_Tag16_GetTagData(tlv), GWEN_Tag16_GetTagLength(tlv)); GWEN_Buffer_Rewind(fbuf); rv=GWEN_Crypt_TokenOHBCI__DecryptFile(ct, fbuf, tryNum, gid); GWEN_Buffer_free(fbuf); if (rv) { free(p); GWEN_Tag16_free(tlv); return rv; } break; } case GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR: { GWEN_BUFFER *fbuf; lct->cryptoTag=GWEN_Tag16_GetTagType(tlv); fbuf=GWEN_Buffer_new(0, GWEN_Tag16_GetTagLength(tlv), 0, 1); GWEN_Buffer_AppendBytes(fbuf, GWEN_Tag16_GetTagData(tlv), GWEN_Tag16_GetTagLength(tlv)); GWEN_Buffer_Rewind(fbuf); rv=GWEN_Crypt_TokenOHBCI__DecryptTresor(ct, fbuf, tryNum, gid); GWEN_Buffer_free(fbuf); if (rv) { free(p); GWEN_Tag16_free(tlv); return rv; } break; } default: DBG_WARN(GWEN_LOGDOMAIN, "Unknown tag %02x", GWEN_Tag16_GetTagType(tlv)); break; } /* switch */ GWEN_Tag16_free(tlv); free(p); } /* while */ return 0; } int GWEN_Crypt_TokenOHBCI__EncodeKey(const GWEN_CRYPT_KEY *key, GWEN_CRYPT_TOKEN_CONTEXT *fct, unsigned int tagType, int wantPublic, int isCrypt, GWEN_BUFFER *dbuf) { GWEN_DB_NODE *dbKey; int err; const void *p; unsigned int bs; char *pp; uint32_t pos; char numbuf[16]; if (!key) { DBG_INFO(GWEN_LOGDOMAIN, "No key"); return 0; } dbKey=GWEN_DB_Group_new("key"); err=GWEN_Crypt_KeyRsa_toDb(key, dbKey, wantPublic); if (err) { DBG_ERROR_ERR(GWEN_LOGDOMAIN, err); GWEN_DB_Group_free(dbKey); return err; } GWEN_Buffer_AppendByte(dbuf, tagType & 0xff); /* remember pos to insert size later */ pos=GWEN_Buffer_GetPos(dbuf); GWEN_Buffer_AppendBytes(dbuf, "00", 2); /* always write "NO" for "isPublic", since OpenHBCI always writes "NO" * due to a bug */ GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISPUBLIC, "NO", -1, dbuf); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISCRYPT, isCrypt?"YES":"NO", -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Key_GetKeyNumber(key)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_NUMBER, numbuf, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Key_GetKeyVersion(key)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_VERSION, numbuf, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Key_GetKeySize(key)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_LEN, numbuf, -1, dbuf); /* write key owner again */ if (tagType==GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBCRYPTKEY) { const char *s; s=GWEN_Crypt_Token_Context_GetPeerId(fct); if (s) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_OWNER, s, -1, dbuf); } p=GWEN_DB_GetBinValue(dbKey, "rsa/e", 0, 0, 0, &bs); if (p && bs) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_EXP, p, bs, dbuf); p=GWEN_DB_GetBinValue(dbKey, "rsa/n", 0, 0, 0, &bs); if (p && bs) { GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_MODULUS, p, bs, dbuf); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_N, p, bs, dbuf); } else { DBG_WARN(GWEN_LOGDOMAIN, "No modulus !"); } p=GWEN_DB_GetBinValue(dbKey, "rsa/p", 0, 0, 0, &bs); if (p && bs) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_P, p, bs, dbuf); p=GWEN_DB_GetBinValue(dbKey, "rsa/q", 0, 0, 0, &bs); if (p && bs) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_Q, p, bs, dbuf); p=GWEN_DB_GetBinValue(dbKey, "rsa/d", 0, 0, 0, &bs); if (p && bs) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_D, p, bs, dbuf); GWEN_DB_Group_free(dbKey); bs=(GWEN_Buffer_GetPos(dbuf)-pos)-2; pp=GWEN_Buffer_GetStart(dbuf)+pos; pp[0]=bs & 0xff; pp[1]=(bs>>8) & 0xff; return 0; } int GWEN_Crypt_TokenOHBCI_Encode(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *dbuf) { GWEN_CRYPT_TOKEN_OHBCI *lct; char numbuf[16]; const char *p; GWEN_CRYPT_TOKEN_CONTEXT *fct; GWEN_CRYPT_KEY *key; GWEN_CRYPT_TOKEN_KEYINFO *ki; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); /* get the only context */ fct=GWEN_Crypt_TokenFile_GetContext(ct, 0); if (!fct) { DBG_ERROR(GWEN_LOGDOMAIN, "Crypt token does not contain a file context"); return GWEN_ERROR_INVALID; } /* write header again */ GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER, GWEN_CRYPT_TOKEN_OHBCI_NAME, -1, dbuf); if (lct->mediumTag!=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3) { /* do not include version info here for ohbci files after 1.5 */ snprintf(numbuf, sizeof(numbuf), "%d", GWEN_CRYPT_TOKEN_OHBCI_VMAJOR); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR, numbuf, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_CRYPT_TOKEN_OHBCI_VMINOR); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MINOR, numbuf, -1, dbuf); } ki=GWEN_CTF_Context_GetLocalSignKeyInfo(fct); if (ki) { snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetSignCounter(ki)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_SEQ, numbuf, -1, dbuf); } key=GWEN_CTF_Context_GetLocalSignKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBSIGNKEY, 1, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVSIGNKEY, 0, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } key=GWEN_CTF_Context_GetLocalCryptKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBCRYPTKEY, 1, 1, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVCRYPTKEY, 0, 1, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } p=GWEN_Crypt_Token_Context_GetUserId(fct); if (p && *p) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_ID, p, -1, dbuf); key=GWEN_CTF_Context_GetRemoteSignKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBSIGNKEY, 1, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } key=GWEN_CTF_Context_GetRemoteCryptKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBCRYPTKEY, 1, 1, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } snprintf(numbuf, sizeof(numbuf), "%d", 280); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_COUNTRY, numbuf, -1, dbuf); p=GWEN_Crypt_Token_Context_GetServiceId(fct); if (p && *p) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_CODE, p, -1, dbuf); p=GWEN_Crypt_Token_Context_GetSystemId(fct); if (p && *p) GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_SYSTEMID, p, -1, dbuf); /* new in 1.4 */ p=GWEN_Crypt_Token_Context_GetAddress(fct); if (p && *p) { GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_ADDR, p, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_Context_GetPort(fct)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_PORT, numbuf, -1, dbuf); } /* new in 1.4 */ ki=GWEN_CTF_Context_GetRemoteSignKeyInfo(fct); if (ki) { snprintf(numbuf, sizeof(numbuf), "%d", GWEN_Crypt_Token_KeyInfo_GetSignCounter(ki)); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_REMOTE_SEQ, numbuf, -1, dbuf); } /* new in 1.7 */ key=GWEN_CTF_Context_GetLocalAuthKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVAUTHKEY, 0, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } key=GWEN_CTF_Context_GetRemoteAuthKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBAUTHKEY, 1, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } /* new in 1.8 */ ki=GWEN_CTF_Context_GetTempLocalSignKeyInfo(fct); key=GWEN_CTF_Context_GetTempLocalSignKey(fct); if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PUBSIGNKEY, 1, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } if (GWEN_Crypt_TokenOHBCI__EncodeKey(key, fct, GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PRIVSIGNKEY, 0, 0, dbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key"); return -1; } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Write(GWEN_CRYPT_TOKEN *ct, int fd, GWEN_UNUSED int cre, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; int rv; GWEN_BUFFER *fbuf; GWEN_BUFFER *rawbuf; char *p; unsigned int bs; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); if (!GWEN_Crypt_Token_GetTokenName(ct)) { DBG_ERROR(GWEN_LOGDOMAIN, "No medium name given"); return -1; } /* maybe update key file */ if ((GWEN_Crypt_Token_GetModes(ct) & GWEN_CRYPT_TOKEN_MODE_ALLOW_UPDATE) && ((lct->mediumTag!=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3) || (lct->cryptoTag!=GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR))) { DBG_WARN(GWEN_LOGDOMAIN, "Updating ancient key file to new one"); GWEN_Gui_ProgressLog(gid, GWEN_LoggerLevel_Warning, I18N("Updating ancient key file to new one")); lct->passWordIsSet=0; lct->mediumTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3; lct->cryptoTag=GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR; } /* create raw data */ rawbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Crypt_TokenOHBCI_Encode(ct, rawbuf); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode key file (%d)", rv); return -1; } #ifdef DEBUG_OHBCI_MODULE if (1) { FILE *f; f=fopen("encoded.medium", "w+b"); if (f) { if (1!=fwrite(GWEN_Buffer_GetStart(rawbuf), GWEN_Buffer_GetUsedBytes(rawbuf), 1, f)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not save encoded file."); } if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not close encoded file."); } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Could not open encoded file."); } } #endif /* create key from password */ rv=GWEN_Crypt_TokenOHBCI__EnsurePassword(ct, 0, 1 /* always let user confirm new password on write */, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(rawbuf); return rv; } if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR) { /* encrypt file */ bs=GWEN_Buffer_GetUsedBytes(rawbuf); GWEN_Buffer_Rewind(rawbuf); fbuf=GWEN_Buffer_new(0, bs+128, 0, 1); GWEN_Buffer_ReserveBytes(fbuf, 4); rv=GWEN_SmallTresor_Encrypt((const uint8_t *)GWEN_Buffer_GetStart(rawbuf), bs, lct->password, fbuf, GWEN_CRYPT_TOKEN_OHBCI_TRESOR_PWD_ITERATIONS, GWEN_CRYPT_TOKEN_OHBCI_TRESOR_CRYPT_ITERATIONS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not encode keyfile"); GWEN_Buffer_free(fbuf); GWEN_Buffer_free(rawbuf); return GWEN_ERROR_GENERIC; } GWEN_Buffer_free(rawbuf); } else { GWEN_CRYPT_KEY *key; if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT) { key=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 24, (const uint8_t *)lct->password, 24); } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD) { key=GWEN_Crypt_KeyDes3K_fromData(GWEN_Crypt_CryptMode_Cbc, 16, (const uint8_t *)lct->password, 16); } else if (lct->cryptoTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF) { key=GWEN_Crypt_KeyBlowFish_fromData(GWEN_Crypt_CryptMode_Cbc, 16, (const uint8_t *)lct->password, 16); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown crypt tag, should not occur"); abort(); } if (!key) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not create key"); GWEN_Buffer_free(rawbuf); return GWEN_ERROR_GENERIC; } /* padd raw data */ if (GWEN_Padd_PaddWithAnsiX9_23(rawbuf)) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not padd keyfile"); GWEN_Crypt_Key_free(key); GWEN_Buffer_free(rawbuf); return GWEN_ERROR_GENERIC; } /* encrypt file */ bs=GWEN_Buffer_GetUsedBytes(rawbuf); GWEN_Buffer_Rewind(rawbuf); fbuf=GWEN_Buffer_new(0, bs+128, 0, 1); GWEN_Buffer_ReserveBytes(fbuf, 4); rv=GWEN_Crypt_Key_Encipher(key, (const uint8_t *)GWEN_Buffer_GetStart(rawbuf), bs, (uint8_t *)GWEN_Buffer_GetStart(fbuf), &bs); GWEN_Buffer_free(rawbuf); GWEN_Crypt_Key_free(key); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(fbuf); return rv; } GWEN_Buffer_IncrementPos(fbuf, bs); GWEN_Buffer_AdjustUsedBytes(fbuf); } /* insert crypto tag and make it own the content of fbuf */ GWEN_Buffer_Rewind(fbuf); bs=GWEN_Buffer_GetUsedBytes(fbuf); GWEN_Buffer_InsertBytes(fbuf, "000", 3); p=GWEN_Buffer_GetStart(fbuf); p[0]=(unsigned char)(lct->cryptoTag); p[1]=(unsigned char)(bs & 0xff); p[2]=(unsigned char)((bs>>8) & 0xff); /* for new-typ media create envelope */ if (lct->mediumTag==GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3) { char numbuf[16]; GWEN_BUFFER *dbuf; /* this is a new medium type, create envelope */ dbuf=GWEN_Buffer_new(0, 2048, 0, 1); /* prepare container tag */ GWEN_Buffer_AppendBytes(dbuf, "000", 3); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER, GWEN_CRYPT_TOKEN_OHBCI_NAME, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_CRYPT_TOKEN_OHBCI_VMAJOR); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR, numbuf, -1, dbuf); snprintf(numbuf, sizeof(numbuf), "%d", GWEN_CRYPT_TOKEN_OHBCI_VMINOR); GWEN_Tag16_DirectlyToBuffer(GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MINOR, numbuf, -1, dbuf); /* write complete medium into new tag */ GWEN_Buffer_AppendBytes(dbuf, GWEN_Buffer_GetStart(fbuf), GWEN_Buffer_GetUsedBytes(fbuf)); p=GWEN_Buffer_GetStart(dbuf); bs=GWEN_Buffer_GetUsedBytes(dbuf)-3; /* subtract medium tag bytes */ p[0]=(unsigned char)(lct->mediumTag); p[1]=(unsigned char)(bs & 0xff); p[2]=(unsigned char)((bs>>8) & 0xff); /* swap buffers */ GWEN_Buffer_free(fbuf); fbuf=dbuf; GWEN_Buffer_Rewind(fbuf); } if (ftruncate(fd, 0)==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "ftruncate(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); GWEN_Buffer_free(fbuf); return GWEN_ERROR_GENERIC; } p=GWEN_Buffer_GetStart(fbuf); bs=GWEN_Buffer_GetUsedBytes(fbuf); while (bs) { ssize_t rv; rv=write(fd, p, bs); if (rv==-1) { if (errno!=EINTR) { DBG_ERROR(GWEN_LOGDOMAIN, "write(%s): %s", GWEN_Crypt_Token_GetTokenName(ct), strerror(errno)); GWEN_Buffer_free(fbuf); return GWEN_ERROR_GENERIC; } } else if (rv==0) break; else { p+=rv; bs-=rv; } } /* while */ GWEN_Buffer_free(fbuf); lct->justCreated=0; return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_ChangePin(GWEN_CRYPT_TOKEN *ct, GWEN_UNUSED int admin, GWEN_UNUSED uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); /* just reset the password so it will be asked for upon write */ lct->passWordIsSet=0; memset(lct->password, 0, sizeof(lct->password)); return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; GWEN_CRYPT_TOKEN_CONTEXT *fct; GWEN_CRYPT_TOKEN_KEYINFO *ki; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); lct->justCreated=1; fct=GWEN_CTF_Context_new(); /* create user and file context */ GWEN_Crypt_Token_Context_SetId(fct, 1); /* only one user */ GWEN_Crypt_Token_Context_SetSignKeyId(fct, 0x01); GWEN_Crypt_Token_Context_SetDecipherKeyId(fct, 0x02); GWEN_Crypt_Token_Context_SetVerifyKeyId(fct, 0x03); GWEN_Crypt_Token_Context_SetEncipherKeyId(fct, 0x04); GWEN_Crypt_Token_Context_SetAuthSignKeyId(fct, 0x05); GWEN_Crypt_Token_Context_SetAuthVerifyKeyId(fct, 0x06); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0001, /* local sign key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Sign Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetLocalSignKeyInfo(fct, ki); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0002, /* local crypt key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Crypt Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_CANDECIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetLocalCryptKeyInfo(fct, ki); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0003, /* remote sign key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Sign Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetRemoteSignKeyInfo(fct, ki); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0004, /* remote crypt key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Crypt Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANENCIPHER | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetRemoteCryptKeyInfo(fct, ki); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0005, /* local auth key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANSIGN | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetLocalAuthKeyInfo(fct, ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Local Auth Key")); /* create key info */ ki=GWEN_Crypt_Token_KeyInfo_new(0x0006, /* remote auth key */ GWEN_Crypt_CryptAlgoId_Rsa, 96); assert(ki); GWEN_Crypt_Token_KeyInfo_SetKeyDescr(ki, I18N("Remote Auth Key")); GWEN_Crypt_Token_KeyInfo_AddFlags(ki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASACTIONFLAGS | GWEN_CRYPT_TOKEN_KEYFLAGS_CANVERIFY | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION | GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_CTF_Context_SetRemoteAuthKeyInfo(fct, ki); /* add context */ GWEN_Crypt_TokenFile_AddContext(ct, fct); assert(lct->createFn); rv=lct->createFn(ct, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Open(GWEN_CRYPT_TOKEN *ct, int manage, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); assert(lct->openFn); rv=lct->openFn(ct, manage, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return rv; } return 0; } int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid) { GWEN_CRYPT_TOKEN_OHBCI *lct; int rv; assert(ct); lct=GWEN_INHERIT_GETDATA(GWEN_CRYPT_TOKEN, GWEN_CRYPT_TOKEN_OHBCI, ct); assert(lct); assert(lct->closeFn); rv=lct->closeFn(ct, abandon, gid); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return rv; } memset(lct->password, 0, sizeof(lct->password)); lct->passWordIsSet=0; return 0; } gwenhywfar-5.12.0/plugins/ct/ohbci/ohbci_p.h0000644000175000017500000002043013142134474015632 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef AH_MEDIUM_OHBCI_P_H #define AH_MEDIUM_OHBCI_P_H #define GWEN_CRYPT_TOKEN_OHBCI_NAME "OHBCI" #define GWEN_CRYPT_TOKEN_OHBCI_VMAJOR 1 #define GWEN_CRYPT_TOKEN_OHBCI_VMINOR 8 #define GWEN_CRYPT_TOKEN_OHBCI_PINMINLENGTH 4 /* temporary, should be 5 or more */ #define GWEN_CRYPT_TOKEN_OHBCI_MAX_PIN_TRY 10 #define GWEN_CRYPT_TOKEN_OHBCI_TRESOR_PWD_ITERATIONS 1469 #define GWEN_CRYPT_TOKEN_OHBCI_TRESOR_CRYPT_ITERATIONS 365 /* new in 1.6 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM1 (unsigned char)0xc1 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM2 (unsigned char)0xc2 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3 (unsigned char)0xc3 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_OLD GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM1 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM2 /* new in 1.6 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_BF GWEN_CRYPT_TOKEN_OHBCI_TAG_MEDIUM3 /* new in 1.8 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_CRYPT_TRESOR (unsigned char)0xc4 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MAJOR (unsigned char)0x02 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_VERSION_MINOR (unsigned char)0x03 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_SEQ (unsigned char)0x04 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBSIGNKEY (unsigned char)0xc5 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVSIGNKEY (unsigned char)0xc6 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PUBCRYPTKEY (unsigned char)0xc7 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVCRYPTKEY (unsigned char)0xc8 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_ID (unsigned char)0x09 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBSIGNKEY (unsigned char)0xca #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBCRYPTKEY (unsigned char)0xcb #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_COUNTRY (unsigned char)0x0c #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_CODE (unsigned char)0x0d #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_SYSTEMID (unsigned char)0x0e /* temporary keys (reintroduced in version 1.8) */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PUBSIGNKEY (unsigned char)0xcf #define GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PRIVSIGNKEY (unsigned char)0xd0 /* temporary keys (new in version 1.1, ignored in later versions) */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PUBCRYPTKEY (unsigned char)0xd1 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_TEMP_PRIVCRYPTKEY (unsigned char)0xd2 /* new in version 1.4 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_ADDR (unsigned char)0xd3 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_SERVER_PORT (unsigned char)0xd4 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_REMOTE_SEQ (unsigned char)0xd5 /* new in version 1.6 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_HEADER (unsigned char)0x16 /* new in version 1.7 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_USER_PRIVAUTHKEY (unsigned char)0xd6 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_INST_PUBAUTHKEY (unsigned char)0xd7 /* keydata */ /* ignored */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISPUBLIC (unsigned char) 0x01 /* ignored since 1.8 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_ISCRYPT (unsigned char) 0x02 /* fixed in 1.5: fixes a bug in old OpenHBCI which included escape chars */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_OWNER (unsigned char) 0x03 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_VERSION (unsigned char) 0x04 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_NUMBER (unsigned char) 0x05 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_MODULUS (unsigned char) 0x06 /* ignored */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_EXP_OLD (unsigned char) 0x07 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_N (unsigned char) 0x08 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_P (unsigned char) 0x09 #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_Q (unsigned char) 0x0a /* ignored since 1.8 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_DMP1 (unsigned char) 0x0b /* ignored since 1.8 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_DMQ1 (unsigned char) 0x0c /* ignored since 1.8 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_IQMP (unsigned char) 0x0d #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_D (unsigned char) 0x0e /* new in version 1.3 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_EXP (unsigned char) 0x0f /* new in version 1.7 */ #define GWEN_CRYPT_TOKEN_OHBCI_TAG_KEY_LEN (unsigned char) 0x10 #include "ohbci_l.h" #include #include #include #include #include #include #include GWENHYWFAR_EXPORT GWEN_PLUGIN *ct_ohbci_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); GWEN_PLUGIN *GWEN_Crypt_TokenOHBCI_Plugin_new(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); GWEN_CRYPT_TOKEN *GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Plugin_CreateToken(GWEN_PLUGIN *pl, const char *name); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Plugin_CheckToken(GWEN_PLUGIN *pl, GWEN_BUFFER *name); typedef struct GWEN_CRYPT_TOKEN_OHBCI GWEN_CRYPT_TOKEN_OHBCI; struct GWEN_CRYPT_TOKEN_OHBCI { GWEN_CRYPT_TOKEN_OPEN_FN openFn; GWEN_CRYPT_TOKEN_CREATE_FN createFn; GWEN_CRYPT_TOKEN_CLOSE_FN closeFn; unsigned int mediumTag; unsigned int cryptoTag; unsigned int vminor; char password[64]; int passWordIsSet; int justCreated; }; void GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_FreeData(void *bp, void *p); int GWEN_Crypt_TokenOHBCI__DecryptFile(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *fbuf, int trynum, uint32_t gid); int GWEN_Crypt_TokenOHBCI__DecryptFile16(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *fbuf, int trynum, uint32_t gid); int GWEN_Crypt_TokenOHBCI__DecryptTresor(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *fbuf, int trynum, uint32_t gid); void GWEN_Crypt_TokenOHBCI__DecodeKey(GWEN_CRYPT_TOKEN *ct, GWEN_TAG16 *keyTlv, GWEN_DB_NODE *dbKeys, const char *keyName); int GWEN_Crypt_TokenOHBCI__Decode(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *dbuf); int GWEN_Crypt_TokenOHBCI__EncodeKey(const GWEN_CRYPT_KEY *key, GWEN_CRYPT_TOKEN_CONTEXT *fct, unsigned int tagType, int wantPublic, int isCrypt, GWEN_BUFFER *dbuf); int GWEN_Crypt_TokenOHBCI_Encode(GWEN_CRYPT_TOKEN *ct, GWEN_BUFFER *dbuf); int GWEN_Crypt_TokenOHBCI__EnsurePassword(GWEN_CRYPT_TOKEN *ct, int trynum, int twice, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Create(GWEN_CRYPT_TOKEN *ct, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Open(GWEN_CRYPT_TOKEN *ct, int manage, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Close(GWEN_CRYPT_TOKEN *ct, int abandon, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Write(GWEN_CRYPT_TOKEN *ct, int fd, int cre, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_Read(GWEN_CRYPT_TOKEN *ct, int fd, uint32_t gid); int GWENHYWFAR_CB GWEN_Crypt_TokenOHBCI_ChangePin(GWEN_CRYPT_TOKEN *ct, int admin, uint32_t gid); #endif /* GWEN_CRYPT_TOKEN_OHBCI_P_H */ gwenhywfar-5.12.0/plugins/ct/Makefile.in0000664000175000017500000006021314730344661015051 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 = plugins/ct ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h 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 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ DIST_SUBDIRS = ohbci SUBDIRS = @gwenhywfar_plugins_ct_dirs@ 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) --gnu plugins/ct/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/ct/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 clean-libtool 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 mostlyclean-libtool 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 clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ 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 mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # 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: gwenhywfar-5.12.0/plugins/ct/Makefile.am0000644000175000017500000000017713142134462015031 00000000000000DIST_SUBDIRS=ohbci SUBDIRS=@gwenhywfar_plugins_ct_dirs@ sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-5.12.0/plugins/Makefile.am0000666000175000017500000000021413545472064014431 00000000000000SUBDIRS=dbio ct configmgr AM_CPPFLAGS= -I$(top_builddir)/gwenhywfar3 sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-5.12.0/plugins/dbio/0000775000175000017500000000000014730345120013360 500000000000000gwenhywfar-5.12.0/plugins/dbio/README0000644000175000017500000000016713142134462014163 00000000000000 This folder contains DBIO plugins. These are plugins that import data into a GWEN_DB or exports them from a GWEN_DB. gwenhywfar-5.12.0/plugins/dbio/olddb/0000775000175000017500000000000014730345120014444 500000000000000gwenhywfar-5.12.0/plugins/dbio/olddb/ressource.rc.in0000644000175000017500000000647713142134462017346 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #include // Language: 407=DE, 409=US, 809=UK // German resources LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // Version VS_VERSION_INFO VERSIONINFO FILEVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ PRODUCTVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L // Windows NT FILETYPE 0x2L // DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040704b0" BEGIN //VALUE "Comments", "\0" VALUE "CompanyName", " Aquamaniac\0" VALUE "FileDescription", "Multi purpose library\0" VALUE "FileVersion", "v@GWENHYWFAR_VERSION_RELEASE_STRING@\0" VALUE "InternalName", "Gwenhywfar\0" VALUE "LegalCopyright", "Copyright © 2003 by Martin Preuss\0" VALUE "LegalTrademarks", "Aquamaniac\0" VALUE "OriginalFilename", "olddb.DLL\0" //VALUE "PrivateBuild", "\0" VALUE "ProductName", "Gwenhywfar\0" VALUE "ProductVersion", "v@GWENHYWFAR_VERSION_FULL_STRING@\0" VALUE "Author", "Martin Preuss\0" VALUE "Email", "martin@libchipcard.de\0" VALUE "Homepage", "http://gwenhywfar.sf.net/\0" VALUE "Description", "OldDB Plugin\0" VALUE "License", "LGPL\0" //VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x407, 1200 END END gwenhywfar-5.12.0/plugins/dbio/olddb/olddb_p.h0000644000175000017500000000514413142134474016146 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Oct 30 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PLUGIN_OLDDB_H #define GWENHYWFAR_PLUGIN_OLDDB_H #include #include #include #define GWEN_DBIO_OLDDB_MAXVALUE_LEN (16*1024) GWENHYWFAR_EXPORT GWEN_PLUGIN *dbio_olddb_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); static int GWEN_DBIO_OldDb_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static int GWEN_DBIO_OldDb_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_OldDb_CheckFile(GWEN_DBIO *dbio, const char *fname); #endif gwenhywfar-5.12.0/plugins/dbio/olddb/olddb.xml.in0000644000175000017500000000061013142134462016573 00000000000000 @GWENHYWFAR_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Importer for OpenHBCI1 This plugin imports data from an old OpenHBCI1-style file. gwenhywfar-5.12.0/plugins/dbio/olddb/olddb.c0000666000175000017500000002352613606364151015634 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Thu Oct 30 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "olddb_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* We need a printf format specifier for "size_t" but * does not have one. So in this one single exception we define our * own, inspired from here: * https://stackoverflow.com/questions/44382862/how-to-printf-a-size-t-without-warning-in-mingw-w64-gcc-7-1 */ #ifdef _WIN32 # ifdef _WIN64 # define PRI_SIZET PRIu64 # else # define PRI_SIZET PRIu32 # endif #else # define PRI_SIZET "zd" #endif GWEN_DB_NODE *GWEN_DBIO_OldDb__ParseLine(GWEN_DB_NODE *root, GWEN_DB_NODE *group, const char *s, uint32_t mode) { char name[256]; char *np; char *p; const char *g; int i; int quotes; int esc; int firstval; GWEN_BUFFER *vbuf=NULL; assert(s); name[0]=0; /* check for group definition */ g=s; while (*g && (unsigned char)(*g)<33) g++; if (*g=='[') { /* ok, parse group name */ GWEN_DB_NODE *grp; s=g; s++; while (*s && (unsigned char)(*s)<33) s++; p=name; i=sizeof(name)-1; while ((unsigned char)(*s)>31 && i && *s!=']' && *s!='#') { *p=*s; p++; s++; } /* while */ if (!i) { DBG_ERROR(0, "Groupname is too long (limit is %" PRI_SIZET " chars)", sizeof(name)-1); return 0; } if (*s!=']') { DBG_ERROR(0, "\"]\" expected"); return 0; } *p=0; DBG_VERBOUS(0, "Selecting group \"%s\"", name); grp=GWEN_DB_GetGroup(root, mode, name); if (!grp) { DBG_DEBUG(0, "Group \"%s\" is not available", name); return 0; } return grp; } /* get name */ while (*s && (unsigned char)(*s)<33) s++; i=sizeof(name)-1; p=name; while ((unsigned char)(*s)>31 && i-- && *s!='=' && *s!='#') { *p=*s; p++; s++; } /* while */ if (!i) { DBG_ERROR(0, "Name is too long (limit is %" PRI_SIZET " chars)", sizeof(name)-1); return 0; } *p=0; np=name; /* post process name */ i=strlen(name)-1; while (i>=0) { if ((unsigned char)(name[i])<33) name[i]=0; else break; i--; } i=strlen(name); if (i>1) { if (name[i-1]=='"' && name[0]=='"') { name[i-1]=0; np++; } } if ((unsigned char)(*s)<31 || *s=='#') { DBG_VERBOUS(0, "Empty line"); return group; } /* get equation mark */ if (*s!='=') { DBG_ERROR(0, "\"=\" expected"); return 0; } s++; if (strlen(np)==0) { DBG_ERROR(0, "Variable name must not be empty"); return 0; } DBG_VERBOUS(0, "Creating variable \"%s\"", np); firstval=1; /* read komma separated values */ vbuf=GWEN_Buffer_new(0, 64, 0, 1); while ((unsigned char)(*s)>31) { char *vp; /* skip komma that may occur */ while (*s && (unsigned char)(*s)<33) s++; if (*s==0) { break; } if (*s==',') { if (firstval) { DBG_ERROR(0, "Unexpected comma"); GWEN_Buffer_free(vbuf); return 0; } s++; } else { if (!firstval) { DBG_ERROR(0, "Comma expected"); GWEN_Buffer_free(vbuf); return 0; } } /* get value */ while (*s && (unsigned char)(*s)<33) s++; /* copy value */ quotes=0; esc=0; i=GWEN_DBIO_OLDDB_MAXVALUE_LEN-1; while ((unsigned char)(*s)>31 && i) { if (esc) { GWEN_Buffer_AppendByte(vbuf, *s); i--; esc=0; } else { if (*s=='\\') esc=1; else if (*s=='"') { quotes++; if (quotes==2) { s++; break; } } else if (*s=='#' && !(quotes&1)) break; else if (*s==',' && !(quotes&1)) break; else { GWEN_Buffer_AppendByte(vbuf, *s); i--; } } s++; } /* while */ if (!i) { DBG_ERROR(0, "Value is too long (limit is %d chars)", GWEN_DBIO_OLDDB_MAXVALUE_LEN-1); GWEN_Buffer_free(vbuf); return 0; } if (quotes&1) { DBG_ERROR(0, "Unbalanced quotation marks"); GWEN_Buffer_free(vbuf); return 0; } if (esc) DBG_WARN(0, "Backslash at the end of the line"); *p=0; vp=GWEN_Buffer_GetStart(vbuf); /* post process value */ if (quotes==0) { i=GWEN_Buffer_GetUsedBytes(vbuf); if (i) { i--; while (i>=0) { if ((unsigned char)(vp[i])<33) vp[i]=0; else break; i--; } } i=strlen(vp); if (i>1) { if (vp[i-1]=='"' && vp[0]=='"') { vp[i-1]=0; vp++; } } } /* create value, append it */ DBG_VERBOUS(0, " Creating value \"%s\"", vp); GWEN_DB_SetCharValue(group, mode, np, vp); GWEN_Buffer_Reset(vbuf); if (*s=='#') break; firstval=0; } /* while (reading values) */ GWEN_Buffer_free(vbuf); return group; } int GWEN_DBIO_OldDb_Import(GWEN_UNUSED GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_UNUSED GWEN_DB_NODE *cfg, uint32_t flags) { GWEN_DB_NODE *curr; int ln; int gerr; GWEN_BUFFER *lbuffer; GWEN_FAST_BUFFER *fb; assert(data); fb=GWEN_FastBuffer_new(512, sio); lbuffer=GWEN_Buffer_new(0, 256, 0, 1); curr=data; ln=1; for (;;) { GWEN_Buffer_Reset(lbuffer); gerr=GWEN_FastBuffer_ReadLineToBuffer(fb, lbuffer); if (gerr) { GWEN_Buffer_free(lbuffer); if (gerr==GWEN_ERROR_EOF && ln) { GWEN_FastBuffer_free(fb); return 0; } else { DBG_ERROR_ERR(0, gerr); return gerr; } } curr=GWEN_DBIO_OldDb__ParseLine(data, curr, GWEN_Buffer_GetStart(lbuffer), flags); if (!curr) { DBG_ERROR(0, "Error in input stream (line %d)", ln); GWEN_Buffer_free(lbuffer); GWEN_FastBuffer_free(fb); return GWEN_ERROR_BAD_DATA; } ln++; } /* while */ } int GWEN_DBIO_OldDb_Export(GWEN_UNUSED GWEN_DBIO *dbio, GWEN_UNUSED GWEN_SYNCIO *sio, GWEN_UNUSED GWEN_DB_NODE *data, GWEN_UNUSED GWEN_DB_NODE *cfg, GWEN_UNUSED uint32_t flags) { DBG_ERROR(GWEN_LOGDOMAIN, "Export function not supported"); return GWEN_ERROR_GENERIC; } GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_OldDb_CheckFile(GWEN_DBIO *dbio, const char *fname) { int rv; GWEN_SYNCIO *sio; GWEN_DB_NODE *dbTmp; GWEN_DB_NODE *dbCfg; sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultNotOk; } dbTmp=GWEN_DB_Group_new("tmp"); dbCfg=GWEN_DB_Group_new("cfg"); rv=GWEN_DBIO_OldDb_Import(dbio, sio, dbTmp, dbCfg, GWEN_DB_FLAGS_DEFAULT); GWEN_DB_Group_free(dbCfg); GWEN_DB_Group_free(dbTmp); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); if (rv) { return GWEN_DBIO_CheckFileResultNotOk; } return GWEN_DBIO_CheckFileResultUnknown; } GWEN_DBIO *GWEN_DBIO_OldDb_Factory(GWEN_UNUSED GWEN_PLUGIN *pl) { GWEN_DBIO *dbio; dbio=GWEN_DBIO_new("OldDb", "Imports and exports Old OpenHBCI data"); GWEN_DBIO_SetImportFn(dbio, GWEN_DBIO_OldDb_Import); GWEN_DBIO_SetExportFn(dbio, GWEN_DBIO_OldDb_Export); GWEN_DBIO_SetCheckFileFn(dbio, GWEN_DBIO_OldDb_CheckFile); return dbio; } GWEN_PLUGIN *dbio_olddb_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName) { GWEN_PLUGIN *pl; pl=GWEN_DBIO_Plugin_new(pm, modName, fileName); assert(pl); GWEN_DBIO_Plugin_SetFactoryFn(pl, GWEN_DBIO_OldDb_Factory); return pl; } gwenhywfar-5.12.0/plugins/dbio/olddb/Makefile.am0000666000175000017500000000154513545472064016442 00000000000000EXTRA_DIST=ressource.rc.in AM_CPPFLAGS= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio noinst_HEADERS=olddb_p.h dbioplugin_LTLIBRARIES=olddb.la dbioplugin_DATA=olddb.xml olddb_la_SOURCES=olddb.c olddb_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la olddb_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 sources: for f in $(olddb_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-5.12.0/plugins/dbio/olddb/Makefile.in0000664000175000017500000007045214730344661016452 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 = plugins/dbio/olddb ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = olddb.xml ressource.rc CONFIG_CLEAN_VPATH_FILES = 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)$(dbioplugindir)" \ "$(DESTDIR)$(dbioplugindir)" LTLIBRARIES = $(dbioplugin_LTLIBRARIES) olddb_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_olddb_la_OBJECTS = olddb.lo olddb_la_OBJECTS = $(am_olddb_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = olddb_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(olddb_la_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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/olddb.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(olddb_la_SOURCES) DIST_SOURCES = $(olddb_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dbioplugin_DATA) HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/olddb.xml.in \ $(srcdir)/ressource.rc.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = ressource.rc.in AM_CPPFLAGS = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio noinst_HEADERS = olddb_p.h dbioplugin_LTLIBRARIES = olddb.la dbioplugin_DATA = olddb.xml olddb_la_SOURCES = olddb.c olddb_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la olddb_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu plugins/dbio/olddb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/dbio/olddb/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): olddb.xml: $(top_builddir)/config.status $(srcdir)/olddb.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ressource.rc: $(top_builddir)/config.status $(srcdir)/ressource.rc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-dbiopluginLTLIBRARIES: $(dbioplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(dbioplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(dbioplugindir)"; \ } uninstall-dbiopluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(dbioplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(dbioplugindir)/$$f"; \ done clean-dbiopluginLTLIBRARIES: -test -z "$(dbioplugin_LTLIBRARIES)" || rm -f $(dbioplugin_LTLIBRARIES) @list='$(dbioplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } olddb.la: $(olddb_la_OBJECTS) $(olddb_la_DEPENDENCIES) $(EXTRA_olddb_la_DEPENDENCIES) $(AM_V_CCLD)$(olddb_la_LINK) -rpath $(dbioplugindir) $(olddb_la_OBJECTS) $(olddb_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/olddb.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dbiopluginDATA: $(dbioplugin_DATA) @$(NORMAL_INSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || 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)$(dbioplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbioplugindir)" || exit $$?; \ done uninstall-dbiopluginDATA: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dbioplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dbioplugindir)" "$(DESTDIR)$(dbioplugindir)"; 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-dbiopluginLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/olddb.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dbiopluginDATA install-dbiopluginLTLIBRARIES 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 ./$(DEPDIR)/olddb.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dbiopluginDATA uninstall-dbiopluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dbiopluginDATA \ install-dbiopluginLTLIBRARIES 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-dbiopluginDATA \ uninstall-dbiopluginLTLIBRARIES .PRECIOUS: Makefile sources: for f in $(olddb_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< # 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: gwenhywfar-5.12.0/plugins/dbio/csv/0000775000175000017500000000000014730345120014153 500000000000000gwenhywfar-5.12.0/plugins/dbio/csv/csv.xml.in0000644000175000017500000000062213142134462016014 00000000000000 @GWENHYWFAR_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Exporter for CSV This plugin exports data to a CSV file according to a given configuration. gwenhywfar-5.12.0/plugins/dbio/csv/ressource.rc.in0000644000175000017500000000647313142134462017051 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Wed Mar 27 2002 copyright : (C) 2002 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #include // Language: 407=DE, 409=US, 809=UK // German resources LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // Version VS_VERSION_INFO VERSIONINFO FILEVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ PRODUCTVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L // Windows NT FILETYPE 0x2L // DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040704b0" BEGIN //VALUE "Comments", "\0" VALUE "CompanyName", " Aquamaniac\0" VALUE "FileDescription", "Multi purpose library\0" VALUE "FileVersion", "v@GWENHYWFAR_VERSION_RELEASE_STRING@\0" VALUE "InternalName", "Gwenhywfar\0" VALUE "LegalCopyright", "Copyright © 2003 by Martin Preuss\0" VALUE "LegalTrademarks", "Aquamaniac\0" VALUE "OriginalFilename", "CSV.DLL\0" //VALUE "PrivateBuild", "\0" VALUE "ProductName", "Gwenhywfar\0" VALUE "ProductVersion", "v@GWENHYWFAR_VERSION_FULL_STRING@\0" VALUE "Author", "Martin Preuss\0" VALUE "Email", "martin@libchipcard.de\0" VALUE "Homepage", "http://gwenhywfar.sf.net/\0" VALUE "Description", "CSV Plugin\0" VALUE "License", "LGPL\0" //VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x407, 1200 END END gwenhywfar-5.12.0/plugins/dbio/csv/README0000644000175000017500000000307513142134462014757 00000000000000 CSV Plugin ========== This plugin can be used to export a GWEN_DB to a CSV stream. CSV is a very old format which allows to transfer data between data base programs. This plugin uses a special configuration GWEN_DB which tells it which column of a line is to contain which variable from the DB. That configuation is most likely loaded from a configuration file. Below is an example of such a file (taken from AqMoney2): -----------------------------------------------------------------------X8 # this file contains the description of a CSV format when exporting # transactions # if 1 then values are quoted quote="1" # if 1 then a title line will be written containing the names of each # column title="1" # special values are "TAB" and "SPACE" delimiter=";" # this is the group name looked for in the given data to GWEN_DBIO_Export # if not given then all groups match #group="transaction" # this group contains the definition for each column # each variable in this group has its number as name # you can use index variables in the names (using square brackets) # the value of each of these variables is the name of a variable to be looked # up in the data given to GWEN_DBIO_Export columns { 1="jobid" 2="ouraccount/bankCode" 3="ouraccount/accountId" 4="otheraccount/bankCode" 5="otheraccount/accountId" 6="date" 7="valutadate" 8="value/value" 9="value/currency" 10="othername[0]" 11="othername[1]" 12="purpose[0]" 13="purpose[1]" 14="purpose[2]" 15="purpose[3]" } # columns -----------------------------------------------------------------------X8 gwenhywfar-5.12.0/plugins/dbio/csv/csv.c0000664000175000017500000004540114156464753015056 00000000000000/*************************************************************************** begin : Thu Oct 30 2003 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* disable DBG_DEBUG() and DBG_VERBOUS() */ #define DISABLE_DEBUGLOG #include #include #include #include #include #include #include #include #include #include #include #include #include GWENHYWFAR_EXPORT GWEN_PLUGIN *dbio_csv_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); static GWEN_DBIO *_csvFactory(GWEN_PLUGIN *pl); static int _csvExport(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static int _csvImport(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static GWEN_DBIO_CHECKFILE_RESULT _csvCheckFile(GWEN_DBIO *dbio, const char *fname); static void _stringListToDb(GWEN_STRINGLIST *sl, GWEN_DB_NODE *colgr, GWEN_DB_NODE *dbData); static GWEN_STRINGLIST *_splitFixedWithStringIntoStringlist(const char *s, int condense, GWEN_DB_NODE *cfg); static int _getNameAndIndex(const char *name, char *buffer, unsigned int size); static int _readCsvLine(GWEN_FAST_BUFFER *fb, GWEN_STRINGLIST *sl); GWEN_DBIO *_csvFactory(GWEN_UNUSED GWEN_PLUGIN *pl) { GWEN_DBIO *dbio; dbio=GWEN_DBIO_new("csv", "Imports and exports CSV data"); GWEN_DBIO_SetImportFn(dbio, _csvImport); GWEN_DBIO_SetExportFn(dbio, _csvExport); GWEN_DBIO_SetCheckFileFn(dbio, _csvCheckFile); return dbio; } GWEN_PLUGIN *dbio_csv_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName) { GWEN_PLUGIN *pl; pl=GWEN_DBIO_Plugin_new(pm, modName, fileName); assert(pl); GWEN_DBIO_Plugin_SetFactoryFn(pl, _csvFactory); return pl; } int _csvExport(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, GWEN_UNUSED uint32_t flags) { GWEN_DB_NODE *colgr; GWEN_DB_NODE *n; int delimiter; int quote; const char *p; const char *groupName; int err; unsigned int column; int title; GWEN_FAST_BUFFER *fb; assert(dbio); assert(sio); assert(cfg); assert(data); fb=GWEN_FastBuffer_new(512, sio); /* get general configuration */ colgr=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "columns"); if (!colgr) { DBG_ERROR(0, "Error in configuration: No columns specified"); GWEN_FastBuffer_free(fb); return GWEN_ERROR_INVALID; } p=GWEN_DB_GetCharValue(cfg, "delimiter", 0, ";"); if (strcasecmp(p, "TAB")==0) delimiter=9; else if (strcasecmp(p, "SPACE")==0) delimiter=32; else delimiter=p[0]; quote=GWEN_DB_GetIntValue(cfg, "quote", 0, 1); groupName=GWEN_DB_GetCharValue(cfg, "group", 0, ""); title=GWEN_DB_GetIntValue(cfg, "title", 0, 1); if (title) { /* write title */ for (column=1; ; column++) { int idx; char namebuffer[64]; char numbuffer[16]; char *np; /* create name for column */ GWEN_Text_NumToString(column, numbuffer, sizeof(numbuffer), 0); p=GWEN_DB_GetCharValue(colgr, numbuffer, 0, 0); if (!p) { /* no value. finished */ GWEN_FASTBUFFER_WRITELINE(fb, err, ""); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", err); GWEN_FastBuffer_free(fb); return err; } DBG_VERBOUS(GWEN_LOGDOMAIN, "No colums left, line finished"); break; } /* break down to name and index */ idx=_getNameAndIndex(p, namebuffer, sizeof(namebuffer)); if (idx==-1) { DBG_INFO(0, "Error in configuration: Bad name for column %d", column); GWEN_FastBuffer_free(fb); return GWEN_ERROR_GENERIC; } /* add idx to name, if not 0 */ if (idx) { GWEN_Text_NumToString(idx, numbuffer, sizeof(numbuffer), 0); if (strlen(namebuffer)+strlen(numbuffer)+1>=sizeof(namebuffer)) { DBG_ERROR(0, "Internal: namebuffer too small"); GWEN_FastBuffer_free(fb); return -1; } strcat(namebuffer, numbuffer); } /* convert slashes to underscores */ np=namebuffer; while (*np) { if (*np=='/') *np='_'; np++; } if (column!=1) { /* write delimiter */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, delimiter); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if not first column */ if (quote) { /* write quotation mark */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if quote */ /* write value */ GWEN_FASTBUFFER_WRITEFORCED(fb, err, namebuffer, -1); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } if (quote) { /* write quotation mark */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if quote */ } /* for */ } /* if title */ n=GWEN_DB_GetFirstGroup(data); while (n) { if (*groupName==0 || strcasecmp(groupName, GWEN_DB_GroupName(n))==0) { for (column=1; ; column++) { int idx; char namebuffer[64]; char numbuffer[16]; GWEN_DB_NODE_TYPE vt; char valbuffer[64]; int iv; /* create name for column */ GWEN_Text_NumToString(column, numbuffer, sizeof(numbuffer), 0); p=GWEN_DB_GetCharValue(colgr, numbuffer, 0, 0); if (!p) { /* no value. finished */ GWEN_FASTBUFFER_WRITELINE(fb, err, ""); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } DBG_VERBOUS(GWEN_LOGDOMAIN, "No colums left, line finished"); break; } /* break down to name and index */ idx=_getNameAndIndex(p, namebuffer, sizeof(namebuffer)); if (idx==-1) { DBG_INFO(GWEN_LOGDOMAIN, "Error in configuration: Bad name for column %d", column); GWEN_FastBuffer_free(fb); return GWEN_ERROR_GENERIC; } /* get data */ DBG_VERBOUS(GWEN_LOGDOMAIN, "Checking value of %s[%d]", namebuffer, idx); if (GWEN_DB_VariableExists(n, namebuffer)) { vt=GWEN_DB_GetValueTypeByPath(n, namebuffer, idx); switch (vt) { case GWEN_DB_NodeType_ValueChar: p=GWEN_DB_GetCharValue(n, namebuffer, idx, ""); break; case GWEN_DB_NodeType_ValueInt: iv=GWEN_DB_GetIntValue(n, namebuffer, idx, 0); snprintf(valbuffer, sizeof(valbuffer), "%d", iv); p=valbuffer; break; default: DBG_DEBUG(GWEN_LOGDOMAIN, "Unhandled value type %d", vt); p=""; } } else p=""; if (column!=1) { /* write delimiter */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, delimiter); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if not first column */ if (quote) { /* write quotation mark */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if quote */ /* write value */ GWEN_FASTBUFFER_WRITEFORCED(fb, err, p, -1); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } if (quote) { /* write quotation mark */ GWEN_FASTBUFFER_WRITEBYTE(fb, err, '\"'); if (err<0) { DBG_INFO(0, "Called from here"); GWEN_FastBuffer_free(fb); return err; } } /* if quote */ } /* for */ } /* if group name matches */ n=GWEN_DB_GetNextGroup(n); } /* while n */ /* flush */ GWEN_FASTBUFFER_FLUSH(fb, err); if (err<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", err); GWEN_FastBuffer_free(fb); return err; } GWEN_FastBuffer_free(fb); return 0; } int _csvImport(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, GWEN_UNUSED uint32_t flags) { GWEN_DB_NODE *colgr; int delimiter; /*int quote;*/ const char *p; const char *groupName; int err; int title; GWEN_BUFFER *lbuffer; char delimiters[2]; int lines; int ignoreLines; int fixedWidth; int condense; GWEN_FAST_BUFFER *fb; assert(dbio); assert(sio); assert(cfg); assert(data); fb=GWEN_FastBuffer_new(512, sio); /* get general configuration */ colgr=GWEN_DB_GetGroup(cfg, GWEN_PATH_FLAGS_NAMEMUSTEXIST, "columns"); if (!colgr) { DBG_ERROR(0, "Error in configuration: No columns specified"); GWEN_FastBuffer_free(fb); return GWEN_ERROR_INVALID; } p=GWEN_DB_GetCharValue(cfg, "delimiter", 0, ";"); if (strcasecmp(p, "TAB")==0) delimiter=9; else if (strcasecmp(p, "SPACE")==0) delimiter=32; else delimiter=p[0]; delimiters[0]=delimiter; delimiters[1]=0; /*quote=GWEN_DB_GetIntValue(cfg, "quote", 0, 1);*/ fixedWidth=GWEN_DB_GetIntValue(cfg, "fixedWidth", 0, 0); condense=GWEN_DB_GetIntValue(cfg, "condense", 0, 0); groupName=GWEN_DB_GetCharValue(cfg, "group", 0, "line"); title=GWEN_DB_GetIntValue(cfg, "title", 0, 1); ignoreLines=GWEN_DB_GetIntValue(cfg, "ignoreLines", 0, 0); if (title) ignoreLines++; lbuffer=GWEN_Buffer_new(0, 256, 0, 1); lines=0; for (;;) { const char *s; /* read line */ DBG_DEBUG(GWEN_LOGDOMAIN, "Reading line %d", lines); GWEN_Buffer_Reset(lbuffer); err=GWEN_FastBuffer_ReadLineToBuffer(fb, lbuffer); if (err<0) { if (err==GWEN_ERROR_EOF) { DBG_VERBOUS(GWEN_LOGDOMAIN, "EOF met"); break; } else { DBG_ERROR_ERR(GWEN_LOGDOMAIN, err); GWEN_Buffer_free(lbuffer); GWEN_FastBuffer_free(fb); return err; } } if (linesleft) w=left; if (w<1) break; t=(char *)malloc(w+1); memmove(t, s, w); t[w]=0; if (condense) { int j; for (j=w-1; j>=0; j--) { if ((unsigned char)(t[j])>32) { break; } t[j]=0; } } /* take over new string */ GWEN_StringList_AppendString(sl, t, 1, 0); s+=w; lpos+=w; } if (GWEN_StringList_Count(sl)==0) { GWEN_StringList_free(sl); return NULL; } return sl; } void _stringListToDb(GWEN_STRINGLIST *sl, GWEN_DB_NODE *colgr, GWEN_DB_NODE *dbData) { GWEN_STRINGLISTENTRY *se; int col; /* store columns to db */ se=GWEN_StringList_FirstEntry(sl); col=1; while (se) { char nbuff[16]; const char *vcol; const char *sColumn; DBG_DEBUG(GWEN_LOGDOMAIN, "Handling column %d", col); nbuff[0]=0; snprintf(nbuff, sizeof(nbuff)-1, "%i", col); nbuff[sizeof(nbuff)-1]=0; sColumn=GWEN_StringListEntry_Data(se); vcol=GWEN_DB_GetCharValue(colgr, nbuff, 0, 0); if (vcol) { const char *bracket; GWEN_BUFFER *vname; bracket=strchr(vcol, '['); if (bracket) { /* copy column name without index */ vname=GWEN_Buffer_new(0, bracket-vcol+1, 0, 1); GWEN_Buffer_AppendBytes(vname, vcol, bracket-vcol); vcol=GWEN_Buffer_GetStart(vname); } else vname=0; GWEN_DB_SetCharValue(dbData, GWEN_DB_FLAGS_DEFAULT, vcol, sColumn); GWEN_Buffer_free(vname); } else { GWEN_DB_NODE *dbSubFields; dbSubFields=GWEN_DB_GetGroup(colgr, GWEN_PATH_FLAGS_NAMEMUSTEXIST, nbuff); if (dbSubFields) { GWEN_STRINGLIST *slSubFields; const char *delimiter; delimiter=GWEN_DB_GetCharValue(dbSubFields, "delimiter", 0, "/"); slSubFields=GWEN_StringList_fromString2(sColumn, delimiter, 0, GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS | GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS | GWEN_TEXT_FLAGS_NULL_IS_DELIMITER | GWEN_TEXT_FLAGS_DEL_QUOTES); if (slSubFields) { _stringListToDb(slSubFields, dbSubFields, dbData); /* recursion */ GWEN_StringList_free(slSubFields); } } } se=GWEN_StringListEntry_Next(se); col++; } /* while */ } /* only used by _csvCheckFile(), not for actual import! */ int _readCsvLine(GWEN_FAST_BUFFER *fb, GWEN_STRINGLIST *sl) { int err; const char *delimiters=";\t,"; GWEN_BUFFER *lbuffer; GWEN_BUFFER *wbuffer; int rv; const char *s; assert(fb); /* read line */ lbuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_Reset(lbuffer); err=GWEN_FastBuffer_ReadLineToBuffer(fb, lbuffer); if (err<0) { DBG_ERROR_ERR(GWEN_LOGDOMAIN, err); GWEN_Buffer_free(lbuffer); return err; } /* read columns */ wbuffer=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_Buffer_GetStart(lbuffer); while (*s) { rv=GWEN_Text_GetWordToBuffer(s, delimiters, wbuffer, GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS | GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS | GWEN_TEXT_FLAGS_NULL_IS_DELIMITER | GWEN_TEXT_FLAGS_DEL_QUOTES, &s); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(wbuffer); GWEN_Buffer_free(lbuffer); return rv; } GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(wbuffer), 0, 0); GWEN_Buffer_Reset(wbuffer); if (*s) { if (strchr(delimiters, *s)) s++; } } /* while */ GWEN_Buffer_free(wbuffer); GWEN_Buffer_free(lbuffer); return 0; } int _getNameAndIndex(const char *name, char *buffer, unsigned int size) { unsigned int i; int rv; i=0; rv=0; /* read and copy name */ while (name[i] && name[i]!='[' && i=size) { DBG_INFO(0, "Name too long (%d>=%d)", i, size); return -1; } buffer[i]=0; /* read and copy index, if any */ if (name[i]=='[') { char numbuffer[16]; unsigned int j; j=0; i++; while (name[i] && name[i]!=']' && j=sizeof(numbuffer)) { DBG_INFO(0, "Index number too long (%u>=%d)", j, (int)(sizeof(numbuffer))); return -1; } numbuffer[j]=0; rv=atoi(numbuffer); } return rv; } gwenhywfar-5.12.0/plugins/dbio/csv/Makefile.am0000664000175000017500000000153014144206312016124 00000000000000EXTRA_DIST=README ressource.rc.in AM_CPPFLAGS= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio # noinst_HEADERS= dbioplugin_LTLIBRARIES=csv.la dbioplugin_DATA=csv.xml csv_la_SOURCES=csv.c csv_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la csv_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 sources: for f in $(csv_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-5.12.0/plugins/dbio/csv/Makefile.in0000664000175000017500000007025714730344661016164 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 = plugins/dbio/csv ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h CONFIG_CLEAN_FILES = csv.xml ressource.rc CONFIG_CLEAN_VPATH_FILES = 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)$(dbioplugindir)" \ "$(DESTDIR)$(dbioplugindir)" LTLIBRARIES = $(dbioplugin_LTLIBRARIES) csv_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_csv_la_OBJECTS = csv.lo csv_la_OBJECTS = $(am_csv_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = csv_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(csv_la_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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/csv.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(csv_la_SOURCES) DIST_SOURCES = $(csv_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dbioplugin_DATA) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/csv.xml.in \ $(srcdir)/ressource.rc.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = README ressource.rc.in AM_CPPFLAGS = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio # noinst_HEADERS= dbioplugin_LTLIBRARIES = csv.la dbioplugin_DATA = csv.xml csv_la_SOURCES = csv.c csv_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la csv_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu plugins/dbio/csv/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/dbio/csv/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): csv.xml: $(top_builddir)/config.status $(srcdir)/csv.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ressource.rc: $(top_builddir)/config.status $(srcdir)/ressource.rc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-dbiopluginLTLIBRARIES: $(dbioplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(dbioplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(dbioplugindir)"; \ } uninstall-dbiopluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(dbioplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(dbioplugindir)/$$f"; \ done clean-dbiopluginLTLIBRARIES: -test -z "$(dbioplugin_LTLIBRARIES)" || rm -f $(dbioplugin_LTLIBRARIES) @list='$(dbioplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } csv.la: $(csv_la_OBJECTS) $(csv_la_DEPENDENCIES) $(EXTRA_csv_la_DEPENDENCIES) $(AM_V_CCLD)$(csv_la_LINK) -rpath $(dbioplugindir) $(csv_la_OBJECTS) $(csv_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csv.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dbiopluginDATA: $(dbioplugin_DATA) @$(NORMAL_INSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || 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)$(dbioplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbioplugindir)" || exit $$?; \ done uninstall-dbiopluginDATA: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dbioplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) installdirs: for dir in "$(DESTDIR)$(dbioplugindir)" "$(DESTDIR)$(dbioplugindir)"; 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-dbiopluginLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/csv.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dbiopluginDATA install-dbiopluginLTLIBRARIES 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 ./$(DEPDIR)/csv.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dbiopluginDATA uninstall-dbiopluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dbiopluginDATA \ install-dbiopluginLTLIBRARIES 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-dbiopluginDATA \ uninstall-dbiopluginLTLIBRARIES .PRECIOUS: Makefile sources: for f in $(csv_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< # 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: gwenhywfar-5.12.0/plugins/dbio/Makefile.am0000644000175000017500000000023613142134462015334 00000000000000DIST_SUBDIRS=csv olddb xmldb SUBDIRS=@gwenhywfar_plugins_dbio_dirs@ EXTRA_DIST=README sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-5.12.0/plugins/dbio/Makefile.in0000664000175000017500000006027014730344661015363 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 = plugins/dbio ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h 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 am__DIST_COMMON = $(srcdir)/Makefile.in README 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ DIST_SUBDIRS = csv olddb xmldb SUBDIRS = @gwenhywfar_plugins_dbio_dirs@ EXTRA_DIST = README 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) --gnu plugins/dbio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/dbio/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 clean-libtool 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 mostlyclean-libtool 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 clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ 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 mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # 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: gwenhywfar-5.12.0/plugins/dbio/xmldb/0000775000175000017500000000000014730345120014466 500000000000000gwenhywfar-5.12.0/plugins/dbio/xmldb/xmldb.xml.in0000644000175000017500000000056113142134462016644 00000000000000 @GWENHYWFAR_VERSION_STRING@ Martin Preuss(martin@libchipcard.de) Importer for XML This plugin imports data from an XML file. gwenhywfar-5.12.0/plugins/dbio/xmldb/Makefile.in0000664000175000017500000007047014730344661016474 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 = plugins/dbio/xmldb ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = xmldb.xml ressource.rc CONFIG_CLEAN_VPATH_FILES = 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)$(dbioplugindir)" \ "$(DESTDIR)$(dbioplugindir)" LTLIBRARIES = $(dbioplugin_LTLIBRARIES) xmldb_la_DEPENDENCIES = $(top_builddir)/src/libgwenhywfar.la am_xmldb_la_OBJECTS = xmldb.lo xmldb_la_OBJECTS = $(am_xmldb_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = xmldb_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(xmldb_la_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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/xmldb.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(xmldb_la_SOURCES) DIST_SOURCES = $(xmldb_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dbioplugin_DATA) HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/ressource.rc.in \ $(srcdir)/xmldb.xml.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ EXTRA_DIST = ressource.rc.in README AM_CPPFLAGS = -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio noinst_HEADERS = xmldb_p.h dbioplugin_LTLIBRARIES = xmldb.la dbioplugin_DATA = xmldb.xml xmldb_la_SOURCES = xmldb.c xmldb_la_LIBADD = $(top_builddir)/src/libgwenhywfar.la xmldb_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu plugins/dbio/xmldb/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu plugins/dbio/xmldb/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): xmldb.xml: $(top_builddir)/config.status $(srcdir)/xmldb.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ ressource.rc: $(top_builddir)/config.status $(srcdir)/ressource.rc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-dbiopluginLTLIBRARIES: $(dbioplugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(dbioplugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(dbioplugindir)"; \ } uninstall-dbiopluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_LTLIBRARIES)'; test -n "$(dbioplugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(dbioplugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(dbioplugindir)/$$f"; \ done clean-dbiopluginLTLIBRARIES: -test -z "$(dbioplugin_LTLIBRARIES)" || rm -f $(dbioplugin_LTLIBRARIES) @list='$(dbioplugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } xmldb.la: $(xmldb_la_OBJECTS) $(xmldb_la_DEPENDENCIES) $(EXTRA_xmldb_la_DEPENDENCIES) $(AM_V_CCLD)$(xmldb_la_LINK) -rpath $(dbioplugindir) $(xmldb_la_OBJECTS) $(xmldb_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xmldb.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dbiopluginDATA: $(dbioplugin_DATA) @$(NORMAL_INSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dbioplugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dbioplugindir)" || 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)$(dbioplugindir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dbioplugindir)" || exit $$?; \ done uninstall-dbiopluginDATA: @$(NORMAL_UNINSTALL) @list='$(dbioplugin_DATA)'; test -n "$(dbioplugindir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(dbioplugindir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(dbioplugindir)" "$(DESTDIR)$(dbioplugindir)"; 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-dbiopluginLTLIBRARIES clean-generic clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/xmldb.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dbiopluginDATA install-dbiopluginLTLIBRARIES 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 ./$(DEPDIR)/xmldb.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dbiopluginDATA uninstall-dbiopluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-dbiopluginLTLIBRARIES clean-generic clean-libtool \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dbiopluginDATA \ install-dbiopluginLTLIBRARIES 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-dbiopluginDATA \ uninstall-dbiopluginLTLIBRARIES .PRECIOUS: Makefile sources: for f in $(xmldb_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< # 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: gwenhywfar-5.12.0/plugins/dbio/xmldb/Makefile.am0000666000175000017500000000155413545472064016464 00000000000000EXTRA_DIST=ressource.rc.in README AM_CPPFLAGS= -I$(gwenhywfar_symlinkdir) \ -I$(top_srcdir)/src/base \ -I$(top_srcdir)/src/crypt \ -I$(top_srcdir)/src/io \ -I$(top_srcdir)/src/ipc \ -I$(top_srcdir)/src/net2 \ -I$(top_srcdir)/src/os \ -I$(top_srcdir)/src/parser @all_includes@ dbioplugindir = $(gwenhywfar_plugindir)/dbio noinst_HEADERS=xmldb_p.h dbioplugin_LTLIBRARIES=xmldb.la dbioplugin_DATA=xmldb.xml xmldb_la_SOURCES=xmldb.c xmldb_la_LIBADD=$(top_builddir)/src/libgwenhywfar.la xmldb_la_LDFLAGS = -no-undefined $(STRIPALL) \ -module -version-info 0:1:0 sources: for f in $(xmldb_la_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for f in $(dbioplugin_DATA); do \ echo $(subdir)/$$f >>$(top_srcdir)/pdsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done ressource.o: ressource.rc $(RC) -o $@ $< gwenhywfar-5.12.0/plugins/dbio/xmldb/README0000644000175000017500000000075313142134462015272 00000000000000 This plugin reads/writes GWEN_DBs as XML files. It knows the following parameters: char rootElement ---------------- When exporting: This is the name of the root XML element when saving a GWEN_DB. If omitted then the name of the GWEN_DB group is used. When importing: This is the name of the expected root element of the XML file. When omitted then the root element may have any name, otherwise an error is returned when then name of the root node does not match the value given here. gwenhywfar-5.12.0/plugins/dbio/xmldb/xmldb_p.h0000644000175000017500000000732013142134474016210 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: olddb_p.h 609 2004-11-26 20:39:52Z aquamaniac $ begin : Thu Oct 30 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifndef GWENHYWFAR_PLUGIN_XMLDB_H #define GWENHYWFAR_PLUGIN_XMLDB_H #include #include #include GWENHYWFAR_EXPORT GWEN_PLUGIN *dbio_xmldb_factory(GWEN_PLUGIN_MANAGER *pm, const char *modName, const char *fileName); static int GWEN_DBIO_XmlDb_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static int GWEN_DBIO_XmlDb_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags); static GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_XmlDb_CheckFile(GWEN_DBIO *dbio, const char *fname); static int GWEN_DBIO__XmlDb_ImportGroup(GWEN_DBIO *dbio, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, GWEN_XMLNODE *node); static void GWEN_DBIO__XmlDb_ReadDataTags(GWEN_XMLNODE *node, GWEN_BUFFER *buf); static int GWEN_DBIO__XmlDb_ImportVar(GWEN_DBIO *dbio, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, GWEN_XMLNODE *node); static int GWEN_DBIO_XmlDb__ExportVar(GWEN_DBIO *dbio, GWEN_DB_NODE *data, GWEN_XMLNODE *node); static int GWEN_DBIO_XmlDb__ExportGroup(GWEN_DBIO *dbio, GWEN_DB_NODE *data, GWEN_XMLNODE *node, const char *newName); #endif gwenhywfar-5.12.0/plugins/dbio/xmldb/xmldb.c0000644000175000017500000003707313606364204015675 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: xmldb.c 1020 2006-03-26 17:16:05Z aquamaniac $ begin : Thu Oct 30 2003 copyright : (C) 2003 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * * * This library is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or (at your option) any later version. * * * * This library is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * * Lesser General Public License for more details. * * * * You should have received a copy of the GNU Lesser General Public * * License along with this library; if not, write to the Free Software * * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * * MA 02111-1307 USA * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "xmldb_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include int GWEN_DBIO__XmlDb_ImportGroup(GWEN_DBIO *dbio, uint32_t flags, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; assert(node); n=GWEN_XMLNode_GetFirstTag(node); while (n) { const char *tname; const char *s; tname=GWEN_XMLNode_GetData(n); assert(tname && *tname); s=GWEN_XMLNode_GetProperty(n, "type", 0); if (s) { if (strcasecmp(s, "group")==0) { GWEN_DB_NODE *db; int rv; db=GWEN_DB_GetGroup(data, flags, tname); if (db==0) { DBG_INFO(GWEN_LOGDOMAIN, "here"); return GWEN_ERROR_INVALID; } rv=GWEN_DBIO__XmlDb_ImportGroup(dbio, flags, db, cfg, n); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } else if (strcasecmp(s, "var")==0) { int rv; rv=GWEN_DBIO__XmlDb_ImportVar(dbio, flags, data, cfg, n); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unexpected type \"%s\"", s); return GWEN_ERROR_INVALID; } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } void GWEN_DBIO__XmlDb_ReadDataTags(GWEN_XMLNODE *node, GWEN_BUFFER *buf) { GWEN_XMLNODE *ndata; GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); ndata=GWEN_XMLNode_GetFirstData(node); while (ndata) { const char *s; s=GWEN_XMLNode_GetData(ndata); if (s) { if (GWEN_Buffer_GetUsedBytes(tbuf)) GWEN_Buffer_AppendByte(tbuf, ' '); GWEN_Buffer_AppendString(tbuf, s); } ndata=GWEN_XMLNode_GetNextData(node); } rv=GWEN_Text_UnescapeXmlToBuffer(GWEN_Buffer_GetStart(tbuf), buf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } GWEN_Buffer_free(tbuf); } int GWEN_DBIO__XmlDb_ImportVar(GWEN_UNUSED GWEN_DBIO *dbio, uint32_t flags, GWEN_DB_NODE *data, GWEN_UNUSED GWEN_DB_NODE *cfg, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; const char *vname; GWEN_BUFFER *tbuf; assert(node); vname=GWEN_XMLNode_GetData(node); assert(vname && *vname); tbuf=GWEN_Buffer_new(0, 256, 0, 1); n=GWEN_XMLNode_FindFirstTag(node, "value", 0, 0); while (n) { const char *s; const char *d; int rv; GWEN_DBIO__XmlDb_ReadDataTags(n, tbuf); d=GWEN_Buffer_GetStart(tbuf); if (*d) { s=GWEN_XMLNode_GetData(n); assert(s && *s); s=GWEN_XMLNode_GetProperty(n, "type", 0); if (s) { if (strcasecmp(s, "char")==0) { rv=GWEN_DB_SetCharValue(data, flags, vname, d); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } else if (strcasecmp(s, "int")==0) { int val; if (1!=sscanf(d, "%i", &val)) { DBG_INFO(GWEN_LOGDOMAIN, "Non-integer value [%s]", d); GWEN_Buffer_free(tbuf); return GWEN_ERROR_INVALID; } rv=GWEN_DB_SetIntValue(data, flags, vname, val); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } else if (strcasecmp(s, "bin")==0) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Text_FromHexBuffer(d, xbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(xbuf); GWEN_Buffer_free(tbuf); return rv; } rv=GWEN_DB_SetBinValue(data, flags, vname, GWEN_Buffer_GetStart(xbuf), GWEN_Buffer_GetUsedBytes(xbuf)); GWEN_Buffer_free(xbuf); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unhandled value type \"%s\"", s); GWEN_Buffer_free(tbuf); return GWEN_ERROR_INVALID; } } } else { DBG_DEBUG(GWEN_LOGDOMAIN, "Empty value"); } GWEN_Buffer_Reset(tbuf); n=GWEN_XMLNode_FindNextTag(n, "value", 0, 0); } GWEN_Buffer_free(tbuf); return 0; } int GWEN_DBIO_XmlDb_Import(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, uint32_t flags) { int rv; GWEN_XMLNODE *root; GWEN_XMLNODE *n; const char *rootName=0; GWEN_XML_CONTEXT *ctx; assert(data); if (cfg) rootName=GWEN_DB_GetCharValue(cfg, "rootElement", 0, 0); root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); ctx=GWEN_XmlCtxStore_new(root, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS); rv=GWEN_XMLContext_ReadFromIo(ctx, sio); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XmlCtx_free(ctx); GWEN_XMLNode_free(root); return rv; } GWEN_XmlCtx_free(ctx); if (rootName) { n=GWEN_XMLNode_FindFirstTag(root, rootName, 0, 0); if (!n) { DBG_ERROR(GWEN_LOGDOMAIN, "Root node in XML file is not \"%s\"", rootName); GWEN_XMLNode_free(root); return GWEN_ERROR_BAD_DATA; } } else { n=GWEN_XMLNode_GetFirstTag(root); if (!n) { DBG_ERROR(GWEN_LOGDOMAIN, "No root node in XML file"); GWEN_XMLNode_free(root); return GWEN_ERROR_BAD_DATA; } } rv=GWEN_DBIO__XmlDb_ImportGroup(dbio, flags, data, cfg, n); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(root); return rv; } GWEN_XMLNode_free(root); return 0; } int GWEN_DBIO_XmlDb__ExportGroup(GWEN_DBIO *dbio, GWEN_DB_NODE *data, GWEN_XMLNODE *node, const char *newName) { const char *s; GWEN_XMLNODE *n; GWEN_DB_NODE *dbT; int rv; if (newName) s=newName; else s=GWEN_DB_GroupName(data); assert(s && *s); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, s); GWEN_XMLNode_SetProperty(n, "type", "group"); GWEN_XMLNode_AddChild(node, n); /* store variables */ dbT=GWEN_DB_GetFirstVar(data); while (dbT) { if (!(GWEN_DB_GetNodeFlags(dbT) & GWEN_DB_NODE_FLAGS_VOLATILE)) { rv=GWEN_DBIO_XmlDb__ExportVar(dbio, dbT, n); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } dbT=GWEN_DB_GetNextVar(dbT); } /* store groups */ dbT=GWEN_DB_GetFirstGroup(data); while (dbT) { if (!(GWEN_DB_GetNodeFlags(dbT) & GWEN_DB_NODE_FLAGS_VOLATILE)) { rv=GWEN_DBIO_XmlDb__ExportGroup(dbio, dbT, n, 0); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } dbT=GWEN_DB_GetNextGroup(dbT); } return 0; } int GWEN_DBIO_XmlDb__ExportVar(GWEN_UNUSED GWEN_DBIO *dbio, GWEN_DB_NODE *data, GWEN_XMLNODE *node) { const char *s; GWEN_XMLNODE *n; GWEN_DB_NODE *dbT; int rv; s=GWEN_DB_VariableName(data); assert(s && *s); n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, s); GWEN_XMLNode_SetProperty(n, "type", "var"); GWEN_XMLNode_AddChild(node, n); /* store variables */ dbT=GWEN_DB_GetFirstValue(data); while (dbT) { if (!(GWEN_DB_GetNodeFlags(dbT) & GWEN_DB_NODE_FLAGS_VOLATILE)) { GWEN_DB_NODE_TYPE vt; GWEN_XMLNODE *vn; vt=GWEN_DB_GetValueType(dbT); switch (vt) { case GWEN_DB_NodeType_ValueChar: s=GWEN_DB_GetCharValueFromNode(dbT); if (s && *s) { GWEN_XMLNODE *dn; GWEN_BUFFER *tbuf; vn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "value"); GWEN_XMLNode_SetProperty(vn, "type", "char"); GWEN_XMLNode_AddChild(n, vn); tbuf=GWEN_Buffer_new(0, 64, 0, 1); rv=GWEN_Text_EscapeXmlToBuffer(s, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } dn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); GWEN_XMLNode_AddChild(vn, dn); } break; case GWEN_DB_NodeType_ValueInt: { char nbuf[32]; GWEN_XMLNODE *dn; snprintf(nbuf, sizeof(nbuf), "%i", GWEN_DB_GetIntValueFromNode(dbT)); vn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "value"); GWEN_XMLNode_SetProperty(vn, "type", "int"); GWEN_XMLNode_AddChild(n, vn); dn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, nbuf); GWEN_XMLNode_AddChild(vn, dn); break; } case GWEN_DB_NodeType_ValueBin: { const void *vp; unsigned int vsize; vp=GWEN_DB_GetBinValueFromNode(dbT, &vsize); if (vp && vsize) { GWEN_BUFFER *bbuf; GWEN_XMLNODE *dn; bbuf=GWEN_Buffer_new(0, vsize*2, 0, 1); rv=GWEN_Text_ToHexBuffer((const char *)vp, vsize, bbuf, 0, 0, 0); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(bbuf); return rv; } vn=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "value"); GWEN_XMLNode_SetProperty(vn, "type", "bin"); GWEN_XMLNode_AddChild(n, vn); dn=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, GWEN_Buffer_GetStart(bbuf)); GWEN_Buffer_free(bbuf); GWEN_XMLNode_AddChild(vn, dn); } break; } case GWEN_DB_NodeType_ValuePtr: DBG_DEBUG(GWEN_LOGDOMAIN, "Not storing pointer value"); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported variable type %d", vt); return GWEN_ERROR_INVALID; } } /* if non-volatile */ dbT=GWEN_DB_GetNextValue(dbT); } return 0; } int GWEN_DBIO_XmlDb_Export(GWEN_DBIO *dbio, GWEN_SYNCIO *sio, GWEN_DB_NODE *data, GWEN_DB_NODE *cfg, GWEN_UNUSED uint32_t flags) { GWEN_XMLNODE *root; GWEN_XMLNODE *nh; int rv; const char *rootName=0; GWEN_XML_CONTEXT *ctx; if (cfg) rootName=GWEN_DB_GetCharValue(cfg, "rootElement", 0, 0); root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); nh=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "?xml"); GWEN_XMLNode_SetProperty(nh, "version", "1.0"); GWEN_XMLNode_SetProperty(nh, "encoding", "utf-8"); GWEN_XMLNode_AddHeader(root, nh); rv=GWEN_DBIO_XmlDb__ExportGroup(dbio, data, root, rootName); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XMLNode_free(root); return rv; } ctx=GWEN_XmlCtxStore_new(root, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_HEADERS); rv=GWEN_XMLNode_WriteToStream(root, ctx, sio); if (rv) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_XmlCtx_free(ctx); GWEN_XMLNode_free(root); return rv; } GWEN_XmlCtx_free(ctx); GWEN_XMLNode_free(root); return 0; } GWEN_DBIO_CHECKFILE_RESULT GWEN_DBIO_XmlDb_CheckFile(GWEN_DBIO *dbio, const char *fname) { GWEN_SYNCIO *sio; int rv; uint8_t tbuf[256]; assert(dbio); assert(fname); sio=GWEN_SyncIo_File_new(fname, GWEN_SyncIo_File_CreationMode_OpenExisting); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultNotOk; } rv=GWEN_SyncIo_Read(sio, tbuf, sizeof(tbuf)-1); if (rv<1) { DBG_INFO(GWEN_LOGDOMAIN, "File \"%s\" is not supported by this plugin", fname); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return GWEN_DBIO_CheckFileResultNotOk; } tbuf[rv-1]=0; if (-1!=GWEN_Text_ComparePattern((const char *) tbuf, "* // Language: 407=DE, 409=US, 809=UK // German resources LANGUAGE LANG_GERMAN, SUBLANG_GERMAN #pragma code_page(1252) // AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA // Version VS_VERSION_INFO VERSIONINFO FILEVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ PRODUCTVERSION @GWENHYWFAR_VERSION_MAJOR@, @GWENHYWFAR_VERSION_MINOR@, @GWENHYWFAR_VERSION_PATCHLEVEL@, @GWENHYWFAR_VERSION_BUILD@ FILEFLAGSMASK 0x3fL FILEFLAGS 0x0L FILEOS 0x40004L // Windows NT FILETYPE 0x2L // DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040704b0" BEGIN //VALUE "Comments", "\0" VALUE "CompanyName", " Aquamaniac\0" VALUE "FileDescription", "Multi purpose library\0" VALUE "FileVersion", "v@GWENHYWFAR_VERSION_RELEASE_STRING@\0" VALUE "InternalName", "Gwenhywfar\0" VALUE "LegalCopyright", "Copyright © 2003 by Martin Preuss\0" VALUE "LegalTrademarks", "Aquamaniac\0" VALUE "OriginalFilename", "xmldb.DLL\0" //VALUE "PrivateBuild", "\0" VALUE "ProductName", "Gwenhywfar\0" VALUE "ProductVersion", "v@GWENHYWFAR_VERSION_FULL_STRING@\0" VALUE "Author", "Martin Preuss\0" VALUE "Email", "martin@libchipcard.de\0" VALUE "Homepage", "http://gwenhywfar.sf.net/\0" VALUE "Description", "OldDB Plugin\0" VALUE "License", "LGPL\0" //VALUE "SpecialBuild", "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x407, 1200 END END gwenhywfar-5.12.0/gwenhywfar.spec.in0000644000175000017500000000422313142134462014344 00000000000000# norootforbuild # neededforbuild gettext gettext-devel gcc openssl-devel openssl %define name @PACKAGE@ %define version @VERSION@ %define rpm_cxxflags \"-O2 -march=i486 -mcpu=i586\" %define rpm_cflags \"-O2 -march=i486 -mcpu=i586\" %define dist @aq_distrib_name@ %define disttag @aq_distrib_tag@ %define distver @aq_distrib_version@ # Note: There is not yet a special symbol for the rpm release # version. We set it to one here. %define release 1.%{disttag}%{distver} Summary: A multi-platform helper library for other libraries Name: %{name} Version: %{version} Release: %{release} Source: http://download.sourceforge.net/gwenhywfar/%{name}-%{version}.tar.gz Group: System Environment/Libraries License: LGPL Packager: Martin Preuss URL: http://sourceforge.net/projects/gwenhywfar BuildRoot: %{_tmppath}/%{name}-%{version}-root BuildRequires: openssl-devel gettext Prereq: /sbin/ldconfig %description This is Gwenhywfar, a multi-platform helper library for networking and security applications and libraries. It is heavily used by libchipcard www.libchipcard.de and AqBanking/AqHBCI, the German online banking libraries. %package devel Summary: Gwenhywfar development kit Group: Development/Libraries Requires: %{name} = %{version}-%{release} %description devel This package contains gwenhywfar-config and header files for writing and compiling programs using Gwenhywfar. %prep %setup -q %build %configure --disable-static --with-openssl-libs=%{_libdir} make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %post /sbin/ldconfig %postun /sbin/ldconfig %files %defattr(-,root,root) %doc AUTHORS README COPYING ChangeLog %{_libdir}/*.so.* %{_libdir}/%{name} %{_datadir}/locale/*/LC_MESSAGES/gwenhywfar.mo %{_bindir}/gct-tool %{_datadir}/gwenhywfar/*.crt %files devel %defattr(-,root,root) %{_bindir}/gwenhywfar-config %{_bindir}/xmlmerge %{_bindir}/mklistdoc %{_bindir}/typemaker %{_includedir}/gwenhywfar3 %{_libdir}/*.so %{_libdir}/*.la #%{_libdir}/*.a %{_datadir}/aclocal/gwenhywfar.m4 %{_libdir}/pkgconfig/gwenhywfar.pc %changelog gwenhywfar-5.12.0/config.sub0000755000175000017500000010645013244306071012672 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: gwenhywfar-5.12.0/gwenhywfar-config-version.cmake.in0000644000175000017500000000050013142134462017412 00000000000000set(PACKAGE_VERSION "@GWENHYWFAR_VERSION_STRING@") if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}" ) set(PACKAGE_VERSION_COMPATIBLE FALSE) else() set(PACKAGE_VERSION_COMPATIBLE TRUE) if( "${PACKAGE_FIND_VERSION}" STREQUAL "${PACKAGE_VERSION}") set(PACKAGE_VERSION_EXACT TRUE) endif() endif() gwenhywfar-5.12.0/compile0000755000175000017500000001632713616550647012305 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: gwenhywfar-5.12.0/AUTHORS0000644000175000017500000000026713142134462011756 00000000000000Martin Preuss Special thanks to Christian Stimming for keeping the tarball and RPMs in Bristol fashion and for making gwenhywfar available on WIN32 platforms. gwenhywfar-5.12.0/Makefile.cvs0000664000175000017500000001374314464665502013161 00000000000000 #MY_CFLAGS=-W -pedantic -std=c99 -ggdb -Wall -O -ggdb MY_CFLAGS=-ggdb -Wall -O0 WIN32_INSTALL_DIR=/home/martin/install/win32 all_warnings=\ -Wextra -Wall -Waddress \ -Waggregate-return -Warray-bounds \ -Wchar-subscripts -Wclobbered -Wcomment \ -Wcoverage-mismatch -Wno-deprecated-declarations -Wdisabled-optimization \ -Wempty-body -Wno-endif-labels -Wformat \ -Wno-format-extra-args -Wformat-security \ -Wformat-y2k -Wignored-qualifiers -Wimplicit -Wimplicit-function-declaration \ -Wimplicit-int -Wimport -Wno-import -Winit-self -Winline \ -Wno-int-to-pointer-cast -Winvalid-pch \ -Wunsafe-loop-optimizations -Wlogical-op -Wlong-long -Wmain -Wmissing-braces \ -Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs \ -Wmissing-noreturn -Wno-multichar -Wnonnull -Wno-overflow -Woverlength-strings \ -Wparentheses -Wpointer-arith -Wno-pointer-to-int-cast -Wno-variadic-macros \ -Wredundant-decls -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare \ -Wstack-protector -Wstrict-aliasing \ -Wswitch -Wswitch-default \ -Wtrigraphs -Wtype-limits -Wundef -Wuninitialized -Wunknown-pragmas \ -Wno-pragmas -Wunused -Wunused-function -Wunused-label \ -Wunused-parameter -Wunused-value -Wunused-variable \ -Wvla -Wvolatile-register-var -Wwrite-strings # -Wcast-qual -Wfloat-equal -Wswitch-enum -Wformat-nonliteral -Wformat=2 //disable this for now c_warnings=\ -Wbad-function-cast -Wmissing-parameter-type \ -Wnested-externs -Wstringop-overflow=2 \ -Wdeclaration-after-statement -Wpointer-sign \ -Wunused-parameter # disable this for now # -Wc++-compat -Wmissing-declarations cplusplus_warnings=\ -Wc++0x-compat -Wno-invalid-offsetof WIN32_OPTIONS=\ --host=i586-mingw32msvc \ --target=i586-mingw32msvc \ --enable-version-specific-runtime-libs \ --with-gcc \ --with-gnu-ld \ --without-x \ --enable-threads=win32 \ --disable-win32-registry MINGW32_PREFIX=/usr/i586-mingw32msvc default: all dist: COPY=--copy dist: all touch stamp-h.in ./configure make dist cvsclean:: automake --include-deps autoconf touch stamp-h.in rm -f `find . -name \*~` rm -Rf apidoc all: libtoolize -f --automake $(COPY) aclocal -I ./m4 autoheader if test ! -f i18nsources; then echo > i18nsources; fi automake -f --add-missing $(COPY) autoconf local: PREFIX=/usr/local local: all ./configure --prefix=$(PREFIX) mp: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf CXXFLAGS="-O0 -ggdb -Wall $(cplusplus_warnings)" \ CFLAGS="-O0 -ggdb -Wall $(c_warnings)" \ ./configure \ INSTALL="/usr/bin/install -p" \ --with-guis="gtk3 fox16 qt5" \ --disable-static \ --enable-full-doc \ --enable-testcode \ --prefix=/usr/local \ --with-qt5-qmake="/usr/lib/x86_64-linux-gnu/qt5/bin/qmake" \ --with-libxml2-code=yes mp-test: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf CXXFLAGS="-O0 -ggdb -Wall $(cplusplus_warnings)" \ CFLAGS="-O0 -ggdb -Wall $(c_warnings)" \ ./configure \ INSTALL="/usr/bin/install -p" \ --with-guis="gtk3 fox16 qt5" \ --disable-static \ --enable-full-doc \ --enable-testcode \ --prefix=/usr/local \ --with-qt5-qmake="/usr/lib/x86_64-linux-gnu/qt5/bin/qmake" \ --with-libxml2-code=yes \ --enable-testcode mp-werror: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf CXXFLAGS="-O0 -ggdb -Wall $(cplusplus_warnings)" \ CFLAGS="-O0 -ggdb -Wall $(all_warnings) $(c_warnings)" \ ./configure \ INSTALL="/usr/bin/install -p" \ --with-guis="gtk2 gtk3 fox16 qt5" \ --disable-static \ --enable-full-doc \ --enable-testcode \ --prefix=/usr/local \ --with-qt5-qmake="/usr/lib/x86_64-linux-gnu/qt5/bin/qmake" mp-opt: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf CXXFLAGS="-O3 -ggdb -Wall $(cplusplus_warnings)" CFLAGS="-O3 -ggdb -Wall" ./configure \ INSTALL="/usr/bin/install -p" \ --with-guis="gtk2 gtk3 fox16" \ --disable-static \ --enable-full-doc \ --prefix=/usr/local \ --with-qt5-qmake="/usr/lib/x86_64-linux-gnu/qt5/bin/qmake" clang: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf CC=clang CXX=clang CXXFLAGS="-O0 -ggdb -Wall $(cplusplus_warnings)" CFLAGS="-O0 -ggdb -Wall" ./configure INSTALL="/usr/bin/install -p" --with-guis="gtk2 fox16 qt4" --disable-static --enable-full-doc mp-priv: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf CFLAGS="$(MY_CFLAGS)" CXXFLAGS="-ggdb -Wall" ./configure INSTALL="/usr/bin/install -p" --disable-static --prefix=/opt/devel/4 --enable-full-doc mp-darwin: CFLAGS="-I/sw/include -ggdb -Wall" LDFLAGS="-L/sw/lib" ./configure mp-w32: libtoolize -f --automake aclocal -I ./m4 autoheader automake --add-missing autoconf PATH="$(MINGW32_PREFIX)/bin:$(PATH)" \ PKG_CONFIG_PATH=$(WIN32_INSTALL_DIR)/lib/pkgconfig \ CFLAGS="$(MY_CFLAGS) -I$(WIN32_INSTALL_DIR)/include -L$(WIN32_INSTALL_DIR)/lib" CXXFLAGS="-ggdb -Wall -I$(WIN32_INSTALL_DIR)/include -L$(WIN32_INSTALL_DIR)/lib" \ DLLTOOL=i586-mingw32msvc-dlltool \ OBJDUMP=i586-mingw32msvc-objdump \ LD=i586-mingw32msvc-ld \ AR=i586-mingw32msvc-ar \ NM=i586-mingw32msvc-nm \ RANLIB=i586-mingw32msvc-ranlib \ STRIP=i586-mingw32msvc-strip \ STRIPPROG=i586-mingw32msvc-strip \ AS=i586-mingw32msvc-as \ RC=i586-mingw32msvc-windres \ ./configure \ --prefix=$(WIN32_INSTALL_DIR) $(WIN32_OPTIONS) \ --enable-release \ --disable-binreloc \ --with-openssl-includes=$(WIN32_INSTALL_DIR)/include \ --with-openssl-libs=$(WIN32_INSTALL_DIR)/lib \ --with-libgcrypt-prefix=$(WIN32_INSTALL_DIR) \ --with-libgnutls-prefix=$(WIN32_INSTALL_DIR) \ --with-fox-includes=$(WIN32_INSTALL_DIR)/include/fox-1.6 \ --disable-qt3 \ --disable-qt4 \ --with-guis=fox16 \ --with-fox-libs="-L$(WIN32_INSTALL_DIR)/lib -lFOX-1.6" \ git-log: git log --pretty="format:%ad %an%n%s%n%b" --since="2008-08-16" >git.log gwenhywfar-5.12.0/COPYING0000644000175000017500000006157114611216116011745 00000000000000 Gwenhywfar is licensed under the GNU LGPL (see below) with this exception: As the copyright holder of Gwenhywfar, Martin Preuss grants the following license exception: Martin Preuss explicitly allows the compilation and distribution of Gwenhywfar with the OpenSSL Toolkit. No developer is required to provide this exception in a derived work. The file src/os/portable_endian.h has been placed into public domain by its author Mathias Panzenböck (copied from https://gist.github.com/panzi/6856583). License Texts ============= src/os/portable_endian.h ------------------------ // "License": Public Domain // I, Mathias Panzenböck, place this file hereby into the public domain. Use it at your own risk for whatever you like. // In case there are jurisdictions that don't support putting things in the public domain you can also consider it to // be "dual licensed" under the BSD, MIT and Apache licenses, if you want to. This code is trivial anyway. Consider it // an example on how to get the endian conversion functions on different platforms. GNU LGPL -------- GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS gwenhywfar-5.12.0/gwenhywfar.spec0000664000175000017500000000415014730344673013753 00000000000000# norootforbuild # neededforbuild gettext gettext-devel gcc openssl-devel openssl %define name gwenhywfar %define version 5.12.0 %define rpm_cxxflags \"-O2 -march=i486 -mcpu=i586\" %define rpm_cflags \"-O2 -march=i486 -mcpu=i586\" %define dist Ubuntu %define disttag ubuntu %define distver # Note: There is not yet a special symbol for the rpm release # version. We set it to one here. %define release 1.%{disttag}%{distver} Summary: A multi-platform helper library for other libraries Name: %{name} Version: %{version} Release: %{release} Source: http://download.sourceforge.net/gwenhywfar/%{name}-%{version}.tar.gz Group: System Environment/Libraries License: LGPL Packager: Martin Preuss URL: http://sourceforge.net/projects/gwenhywfar BuildRoot: %{_tmppath}/%{name}-%{version}-root BuildRequires: openssl-devel gettext Prereq: /sbin/ldconfig %description This is Gwenhywfar, a multi-platform helper library for networking and security applications and libraries. It is heavily used by libchipcard www.libchipcard.de and AqBanking/AqHBCI, the German online banking libraries. %package devel Summary: Gwenhywfar development kit Group: Development/Libraries Requires: %{name} = %{version}-%{release} %description devel This package contains gwenhywfar-config and header files for writing and compiling programs using Gwenhywfar. %prep %setup -q %build %configure --disable-static --with-openssl-libs=%{_libdir} make %install [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT make DESTDIR=$RPM_BUILD_ROOT install %clean [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT %post /sbin/ldconfig %postun /sbin/ldconfig %files %defattr(-,root,root) %doc AUTHORS README COPYING ChangeLog %{_libdir}/*.so.* %{_libdir}/%{name} %{_datadir}/locale/*/LC_MESSAGES/gwenhywfar.mo %{_bindir}/gct-tool %{_datadir}/gwenhywfar/*.crt %files devel %defattr(-,root,root) %{_bindir}/gwenhywfar-config %{_bindir}/xmlmerge %{_bindir}/mklistdoc %{_bindir}/typemaker %{_includedir}/gwenhywfar3 %{_libdir}/*.so %{_libdir}/*.la #%{_libdir}/*.a %{_datadir}/aclocal/gwenhywfar.m4 %{_libdir}/pkgconfig/gwenhywfar.pc %changelog gwenhywfar-5.12.0/README.SOLARIS0000644000175000017500000000103313142134462012671 00000000000000 Currently Solaris does not handle the "__attribute__ ((constructor))" entries in C files as it seems, so in your programs on Solaris you will have to call GWEN_Init() yourself before doing anything else... If programs linked against libgwenhywfar complain about unavailable libraries upon start (most likely they mention OpenSSL) you should try this: LD_LIBRARY_PATH="/usr/local/ssl/lib:/usr/local/lib" YOURPROGRAM The LD_LIBRARY_PATH variable tells the Solaris linker where to search for libraries in addition to the system folders. gwenhywfar-5.12.0/config.h.in0000664000175000017500000002275114730345004012735 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Include pthread support for binary relocation? */ #undef BR_PTHREAD /* if DLL is to be built */ #undef BUILDING_DLL /* if gwen gui for fox16 is built */ #undef BUILD_GUI_FOX16 /* if gwen gui for gtk2 is built */ #undef BUILD_GUI_GTK2 /* if gwen gui for gtk3 is built */ #undef BUILD_GUI_GTK3 /* if gwen gui for qt4 is built */ #undef BUILD_GUI_QT4 /* Define to 1 if the `closedir' function returns void instead of `int'. */ #undef CLOSEDIR_VOID /* Define if you want debugging code enabled. */ #undef DEBUG /* Use binary relocation? */ #undef ENABLE_BINRELOC /* whether local install is wanted */ #undef ENABLE_LOCAL_INSTALL /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* visibility */ #undef GCC_WITH_VISIBILITY_ATTRIBUTE /* whether to enable test code */ #undef GWENHYWFAR_ENABLE_TESTCODE /* whether gwen is a subproject */ #undef GWENHYWFAR_IS_SUBPROJECT /* whether to run network-dependent checks during build */ #undef GWENHYWFAR_SKIP_NETWORK_CHECKS /* build */ #undef GWENHYWFAR_VERSION_BUILD /* full version string */ #undef GWENHYWFAR_VERSION_FULL_STRING /* major version */ #undef GWENHYWFAR_VERSION_MAJOR /* minor version */ #undef GWENHYWFAR_VERSION_MINOR /* patchlevel */ #undef GWENHYWFAR_VERSION_PATCHLEVEL /* version string */ #undef GWENHYWFAR_VERSION_STRING /* tag */ #undef GWENHYWFAR_VERSION_TAG /* plugin availability */ #undef GWENHYWFAR_WITH_PLUGIN_CFGMGR_DIR /* plugin availability */ #undef GWENHYWFAR_WITH_PLUGIN_CT_OHBCI /* plugin availability */ #undef GWENHYWFAR_WITH_PLUGIN_DBIO_CSV /* plugin availability */ #undef GWENHYWFAR_WITH_PLUGIN_DBIO_OLDDB /* plugin availability */ #undef GWENHYWFAR_WITH_PLUGIN_DBIO_XMLDB /* if libxml2-code is wanted */ #undef GWEN_COMPILE_LIBXML2_CODE /* if memory debugging is wanted */ #undef GWEN_MEMORY_DEBUG /* whether system-wide trusted certificates should be set */ #undef GWEN_TLS_USE_SYSTEM_CERTIFICATES /* Define to 1 if you have the `alarm' function. */ #undef HAVE_ALARM /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* 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 GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `sigprocmask', and to 0 if you don't. */ #undef HAVE_DECL_SIGPROCMASK /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_ENDIAN_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* whether FOX is available */ #undef HAVE_FOX /* Define to 1 if you have the `gethostbyaddr' function. */ #undef HAVE_GETHOSTBYADDR /* Define to 1 if you have the `gethostbyname' function. */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the `getpid' function. */ #undef HAVE_GETPID /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* whether I18N is available */ #undef HAVE_I18N /* Defined if libiconv is available */ #undef HAVE_ICONV /* Define to 1 if you have the header file. */ #undef HAVE_ICONV_H /* Define to 1 if you have the `inet_ntoa' function. */ #undef HAVE_INET_NTOA /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `isascii' function. */ #undef HAVE_ISASCII /* Define to 1 if you have the header file. */ #undef HAVE_LANGINFO_H /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Define to 1 if you have the `pthread' library (-lpthread). */ #undef HAVE_LIBPTHREAD /* Define to 1 if you have the header file. */ #undef HAVE_LOCALCHARSET_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Defined if OpenSSL is available */ #undef HAVE_OPENSSL /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT /* whether Qt4 is available */ #undef HAVE_QT4 /* Define to 1 if you have the `random' function. */ #undef HAVE_RANDOM /* Define to 1 if you have the header file. */ #undef HAVE_REGEX_H /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the header file. */ #undef HAVE_SIGNAL_H /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the `srandom' function. */ #undef HAVE_SRANDOM /* 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 `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* 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 `symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the header file. */ #undef HAVE_SYSLOG_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_DIR_H /* Define to 1 if you have the header file, and it defines `DIR'. */ #undef HAVE_SYS_NDIR_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_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_TIME_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_SYS_WAIT_H /* Define to 1 if you have the header file. */ #undef HAVE_TERMIOS_H /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Required version of Libgcrypt */ #undef NEED_LIBGCRYPT_VERSION /* Define if variadic macros should be disabled */ #undef NO_VARIADIC_MACROS /* if BeOS is used */ #undef OS_BEOS /* if Apple Darwin is used */ #undef OS_DARWIN /* if FreeBSD is used */ #undef OS_FREEBSD /* if linux is used */ #undef OS_LINUX /* host system */ #undef OS_NAME /* if NetBSD is used */ #undef OS_NETBSD /* if OpenBSD is used */ #undef OS_OPENBSD /* if PalmOS is used */ #undef OS_PALMOS /* if this is a POSIX system */ #undef OS_POSIX /* host system */ #undef OS_SHORTNAME /* if Solaris is used */ #undef OS_SOLARIS /* system type */ #undef OS_TYPE /* if WIN32 is used */ #undef OS_WIN32 /* 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 necessary symbol if this constant uses a non-standard name on your system. */ #undef PTHREAD_CREATE_JOINABLE /* Disable the cast from QString to const char. */ #undef QT_NO_ASCII_CAST /* Define to the type of arg 1 for `select'. */ #undef SELECT_TYPE_ARG1 /* Define to the type of args 2, 3 and 4 for `select'. */ #undef SELECT_TYPE_ARG234 /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to 1 if your declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Version number of package */ #undef VERSION /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING /* Define to empty if `const' does not conform to ANSI C. */ #undef const gwenhywfar-5.12.0/tools/0000775000175000017500000000000014730345121012123 500000000000000gwenhywfar-5.12.0/tools/gsa/0000775000175000017500000000000014730345121012675 500000000000000gwenhywfar-5.12.0/tools/gsa/create.c0000644000175000017500000000534413142134476014235 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int createArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); sr=GWEN_Sar_new(); rv=GWEN_Sar_CreateArchive(sr, aname); if (rv<0) { fprintf(stderr, "ERROR: Error creating archive (%d)\n", rv); return 2; } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } gwenhywfar-5.12.0/tools/gsa/Makefile.am0000664000175000017500000000111414460564441014656 00000000000000AM_CPPFLAGS= -I$(top_builddir) -I$(top_srcdir) -I$(gwenhywfar_symlinkdir) -I$(top_srcdir)/src/base #EXTRA_DIST= bin_PROGRAMS=gsa noinst_HEADERS=\ globals.h gsa_SOURCES=\ add.c \ create.c \ check.c \ extract.c \ list.c \ mkkey.c \ rfi.c \ sign.c \ verify.c \ main.c gsa_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) if IS_WINDOWS gsa_LDFLAGS=-mconsole gsa_LDADD+=$(PROG_LIBRARIES) endif sources: for f in $(gsa_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-5.12.0/tools/gsa/check.c0000644000175000017500000000656713142134476014057 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int checkArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { const GWEN_SAR_FILEHEADER_LIST *fhl; fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while (fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); rv=GWEN_Sar_CheckFile(sr, fh); if (rv<0) fprintf(stdout, "%s: CRC error (%d)\n", s?s:"(noname)", rv); else fprintf(stdout, "%s: Ok\n", s?s:"(noname)"); fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } } gwenhywfar-5.12.0/tools/gsa/mkkey.c0000644000175000017500000000632413142134476014111 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int mkArchiveKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *keyFile; GWEN_DB_NODE *dbKey; GWEN_CRYPT_KEY *pubKey; GWEN_CRYPT_KEY *privKey; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "keyfile", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "keyfile", /* long option */ "Specify the keyfile to use", /* short description */ "Specify the keyfile to use" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyFile=GWEN_DB_GetCharValue(db, "keyFile", 0, NULL); assert(keyFile); /* create key */ rv=GWEN_Crypt_KeyRsa_GeneratePair(512, 1, &pubKey, &privKey); if (rv<0) { fprintf(stderr, "ERROR: Error generating key pair (%d)\n", rv); return rv; } dbKey=GWEN_DB_Group_new("keyfile"); rv=GWEN_Crypt_KeyRsa_toDb(privKey, dbKey, 0); if (rv<0) { fprintf(stderr, "ERROR: Error encoding keyfile [%s] (%d)\n", keyFile, rv); return 2; } rv=GWEN_DB_WriteFile(dbKey, keyFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Error writing keyfile [%s] (%d)\n", keyFile, rv); return 2; } GWEN_DB_Group_free(dbKey); GWEN_Crypt_Key_free(privKey); GWEN_Crypt_Key_free(pubKey); return 0; } gwenhywfar-5.12.0/tools/gsa/extract.c0000644000175000017500000001011413142134476014433 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int extractArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; int verbosity; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "verbosity", /* name */ 0, /* minnum */ 10, /* maxnum */ "v", /* short option */ NULL, /* long option */ "set verbosity", /* short description */ "set verbosity" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); verbosity=GWEN_DB_GetIntValue(db, "verbosity", 0, 0); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { const GWEN_SAR_FILEHEADER_LIST *fhl; fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while (fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); if (s && *s) { rv=GWEN_Sar_ExtractFile(sr, fh); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return rv; } if (verbosity>0) { fprintf(stdout, "extracted \"%s\"\n", s); } } fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } } gwenhywfar-5.12.0/tools/gsa/add.c0000644000175000017500000001706614633114437013527 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include #include #include #include #include static int addToList(const char *fname, int recursive, GWEN_STRINGLIST *sl) { struct stat st; int rv; /* stat file to be added */ //#if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED #if ((_BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L) && !defined(__MINGW32__)) || defined(OS_DARWIN) rv=lstat(fname, &st); #else rv=stat(fname, &st); #endif if (rv) { DBG_ERROR(GSA_LOGDOMAIN, "stat(%s): %d (%s)", fname, errno, strerror(errno)); fprintf(stderr, "Ignoring file \"%s\"\n", fname); } else { /* always append this entry */ GWEN_StringList_AppendString(sl, fname, 0, 1); if (recursive && S_ISDIR(st.st_mode)) { GWEN_STRINGLIST *sll; GWEN_STRINGLISTENTRY *se; GWEN_DIRECTORY *d; int rv; char buffer[256]; GWEN_BUFFER *tbuf; uint32_t pos; /* add entries */ sll=GWEN_StringList_new(); d=GWEN_Directory_new(); rv=GWEN_Directory_Open(d, fname); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Directory_free(d); GWEN_StringList_free(sll); return rv; } while (0==GWEN_Directory_Read(d, buffer, sizeof(buffer))) { if (strcmp(buffer, ".")!=0 && strcmp(buffer, "..")!=0) GWEN_StringList_AppendString(sll, buffer, 0, 1); } GWEN_Directory_Close(d); GWEN_Directory_free(d); /* recurse */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, fname); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); pos=GWEN_Buffer_GetPos(tbuf); se=GWEN_StringList_FirstEntry(sll); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); rv=addToList(GWEN_Buffer_GetStart(tbuf), recursive, sl); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); GWEN_StringList_free(sll); return rv; } } GWEN_Buffer_Crop(tbuf, 0, pos); se=GWEN_StringListEntry_Next(se); } /* while se */ GWEN_Buffer_free(tbuf); GWEN_StringList_free(sll); } /* if dir and recursive */ } /* if stat was ok */ return 0; } int add2Archive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; int recursive; int verbosity; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "recursive", /* name */ 0, /* minnum */ 1, /* maxnum */ "r", /* short option */ "recursive", /* long option */ "add folders recursively", /* short description */ "add folders recursively" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "verbosity", /* name */ 0, /* minnum */ 10, /* maxnum */ "v", /* short option */ NULL, /* long option */ "set verbosity", /* short description */ "set verbosity" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); recursive=GWEN_DB_GetIntValue(db, "recursive", 0, 0); verbosity=GWEN_DB_GetIntValue(db, "verbosity", 0, 0); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ|GWEN_SYNCIO_FILE_FLAGS_WRITE); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { int i; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; sl=GWEN_StringList_new(); for (i=0; ; i++) { const char *fname; fname=GWEN_DB_GetCharValue(db, "params", i, 0); if (fname && *fname) { rv=addToList(fname, recursive, sl); if (rv<0) { fprintf(stderr, "ERROR: Error adding entry \"%s\" to archive \"%s\" (%d)\n", fname, aname, rv); GWEN_StringList_free(sl); return 2; } } else break; } se=GWEN_StringList_FirstEntry(sl); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { rv=GWEN_Sar_AddFile(sr, s); if (rv<0) { fprintf(stderr, "ERROR: Error adding file \"%s\" to archive \"%s\" (%d)\n", s, aname, rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } if (verbosity>0) { fprintf(stdout, "added \"%s\"\n", s); } } se=GWEN_StringListEntry_Next(se); } /* while se */ GWEN_StringList_free(sl); rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } } gwenhywfar-5.12.0/tools/gsa/Makefile.in0000664000175000017500000006717114730344662014707 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@ bin_PROGRAMS = gsa$(EXEEXT) @IS_WINDOWS_TRUE@am__append_1 = $(PROG_LIBRARIES) subdir = tools/gsa ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_gsa_OBJECTS = add.$(OBJEXT) create.$(OBJEXT) check.$(OBJEXT) \ extract.$(OBJEXT) list.$(OBJEXT) mkkey.$(OBJEXT) rfi.$(OBJEXT) \ sign.$(OBJEXT) verify.$(OBJEXT) main.$(OBJEXT) gsa_OBJECTS = $(am_gsa_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) gsa_DEPENDENCIES = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = gsa_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(gsa_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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/add.Po ./$(DEPDIR)/check.Po \ ./$(DEPDIR)/create.Po ./$(DEPDIR)/extract.Po \ ./$(DEPDIR)/list.Po ./$(DEPDIR)/main.Po ./$(DEPDIR)/mkkey.Po \ ./$(DEPDIR)/rfi.Po ./$(DEPDIR)/sign.Po ./$(DEPDIR)/verify.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(gsa_SOURCES) DIST_SOURCES = $(gsa_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) -I$(gwenhywfar_symlinkdir) -I$(top_srcdir)/src/base noinst_HEADERS = \ globals.h gsa_SOURCES = \ add.c \ create.c \ check.c \ extract.c \ list.c \ mkkey.c \ rfi.c \ sign.c \ verify.c \ main.c gsa_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__append_1) @IS_WINDOWS_TRUE@gsa_LDFLAGS = -mconsole all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/gsa/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gsa/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-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 \ || test -f $$p1 \ ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gsa$(EXEEXT): $(gsa_OBJECTS) $(gsa_DEPENDENCIES) $(EXTRA_gsa_DEPENDENCIES) @rm -f gsa$(EXEEXT) $(AM_V_CCLD)$(gsa_LINK) $(gsa_OBJECTS) $(gsa_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/add.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/check.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extract.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mkkey.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rfi.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sign.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verify.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; 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-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/add.Po -rm -f ./$(DEPDIR)/check.Po -rm -f ./$(DEPDIR)/create.Po -rm -f ./$(DEPDIR)/extract.Po -rm -f ./$(DEPDIR)/list.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/mkkey.Po -rm -f ./$(DEPDIR)/rfi.Po -rm -f ./$(DEPDIR)/sign.Po -rm -f ./$(DEPDIR)/verify.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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-binPROGRAMS 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 ./$(DEPDIR)/add.Po -rm -f ./$(DEPDIR)/check.Po -rm -f ./$(DEPDIR)/create.Po -rm -f ./$(DEPDIR)/extract.Po -rm -f ./$(DEPDIR)/list.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/mkkey.Po -rm -f ./$(DEPDIR)/rfi.Po -rm -f ./$(DEPDIR)/sign.Po -rm -f ./$(DEPDIR)/verify.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile sources: for f in $(gsa_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # 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: gwenhywfar-5.12.0/tools/gsa/main.c0000664000175000017500000001306114460564441013716 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define GSA_IS_EXPERIMENTAL #define DEBUG_GSA_TOOL */ #include #include #include "funcs.h" #include "globals.h" int readFile(const char *fname, GWEN_BUFFER *dbuf) { FILE *f; f=fopen(fname, "rb"); if (f) { while (!feof(f)) { uint32_t l; ssize_t s; char *p; GWEN_Buffer_AllocRoom(dbuf, 1024); l=GWEN_Buffer_GetMaxUnsegmentedWrite(dbuf); p=GWEN_Buffer_GetPosPointer(dbuf); s=fread(p, 1, l, f); if (s==0) break; if (s==(ssize_t)-1) { DBG_INFO(GWEN_LOGDOMAIN, "fread(%s): %s", fname, strerror(errno)); fclose(f); return GWEN_ERROR_IO; } GWEN_Buffer_IncrementPos(dbuf, s); GWEN_Buffer_AdjustUsedBytes(dbuf); } fclose(f); return 0; } else { DBG_INFO(GWEN_LOGDOMAIN, "fopen(%s): %s", fname, strerror(errno)); return GWEN_ERROR_IO; } } int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; int err; GWEN_GUI *gui; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; const GWEN_FUNCS funcs[]= { GWEN_FUNCS_ENTRY_DB_NODE_ARGS_HELP("create", createArchive, I18N("This command creates an archive file")), GWEN_FUNCS_ENTRY_DB_NODE_ARGS_HELP("add", add2Archive, I18N("Add files and folders to an archive file")), GWEN_FUNCS_ENTRY_DB_NODE_ARGS_HELP("list", listArchive, I18N("List files and folders in an archive file")), GWEN_FUNCS_ENTRY_DB_NODE_ARGS_HELP("check", checkArchive, I18N("Check integrity of files and folders in an archive file")), GWEN_FUNCS_ENTRY_DB_NODE_ARGS("extract", extractArchive), GWEN_FUNCS_ENTRY_DB_NODE_ARGS("sign", signArchive), GWEN_FUNCS_ENTRY_DB_NODE_ARGS("verify", verifyArchive), GWEN_FUNCS_ENTRY_DB_NODE_ARGS("mkkey", mkArchiveKey), GWEN_FUNCS_ENTRY_DB_NODE_ARGS("rfi", releaseFillIn), GWEN_FUNCS_ENTRY_END(), }; const GWEN_FUNCS *func; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_Open(GSA_LOGDOMAIN, "gsa", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(GSA_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); #ifdef GSA_IS_EXPERIMENTAL fprintf(stderr, "\n"); fprintf(stderr, "\n"); fprintf(stderr, "=================== WARNING ===================\n"); fprintf(stderr, "This tool is still EXPERIMENTAL !!!\n"); fprintf(stderr, "Please DON'T USE it with your data files !\n"); fprintf(stderr, "===============================================\n"); fprintf(stderr, "\n"); fprintf(stderr, "\n"); #endif db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("GWEN's Simple Archiver")); GWEN_Buffer_AppendString(ubuf, " (Gwenhywfar v" GWENHYWFAR_VERSION_FULL_STRING ")\n"); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); fprintf(stderr, "%s\n", I18N("\nCommands:\n\n")); GWEN_Funcs_Usage_With_Help(funcs); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); return 1; } func=GWEN_Funcs_Find(funcs, cmd); if (func!=NULL) { rv=GWEN_Funcs_Call_DB_NODE_Args(func, db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; } gwenhywfar-5.12.0/tools/gsa/rfi.c0000644000175000017500000001455613142134476013557 00000000000000/*************************************************************************** begin : Mon Jun 27 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int releaseFillIn(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *name; const char *arch; const char *sys; const char *inFile; const char *clFile; const char *outFile; const char *url; int vMajor; int vMinor; int vPatchLevel; int vBuild; int maturityLevel; GWEN_DB_NODE *dbVersion; int rv; GWEN_BUFFER *cbuf; char ubuf[512]; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "infile", /* name */ 1, /* minnum */ 1, /* maxnum */ "i", /* short option */ "infile", /* long option */ "Specify the input version file", /* short description */ "Specify the input version file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "changeLogFile", /* name */ 1, /* minnum */ 1, /* maxnum */ "c", /* short option */ "changelog", /* long option */ "Specify the changelog file", /* short description */ "Specify the changelog file" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "url", /* name */ 1, /* minnum */ 1, /* maxnum */ "u", /* short option */ "url", /* long option */ "Specify the URL of the update server", /* short description */ "Specify the URL of the update server" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "outfile", /* name */ 1, /* minnum */ 1, /* maxnum */ "o", /* short option */ "outfile", /* long option */ "Specify the output version file", /* short description */ "Specify the output version file" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } inFile=GWEN_DB_GetCharValue(db, "infile", 0, NULL); assert(inFile); clFile=GWEN_DB_GetCharValue(db, "changeLogFile", 0, NULL); assert(clFile); outFile=GWEN_DB_GetCharValue(db, "outfile", 0, NULL); assert(outFile); url=GWEN_DB_GetCharValue(db, "url", 0, NULL); assert(url); /* read changelog file */ cbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=readFile(clFile, cbuf); if (rv<0) { fprintf(stderr, "ERROR: Could not read changelog file [%s] (%d)\n", clFile, rv); return 2; } /* read version file */ dbVersion=GWEN_DB_Group_new("version"); rv=GWEN_DB_ReadFile(dbVersion, inFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Could not read file [%s] (%d)\n", inFile, rv); return 2; } name=GWEN_DB_GetCharValue(dbVersion, "name", 0, NULL); if (!(name && *name)) { fprintf(stderr, "Missing name in version file.\n"); return 2; } arch=GWEN_DB_GetCharValue(dbVersion, "architecture", 0, NULL); if (!(arch && *arch)) { fprintf(stderr, "Missing architecture in version file.\n"); return 2; } sys=GWEN_DB_GetCharValue(dbVersion, "system", 0, NULL); if (!(sys && *sys)) { fprintf(stderr, "Missing system in version file.\n"); return 2; } vMajor=GWEN_DB_GetIntValue(dbVersion, "versionMajor", 0, 0); vMinor=GWEN_DB_GetIntValue(dbVersion, "versionMinor", 0, 0); vPatchLevel=GWEN_DB_GetIntValue(dbVersion, "versionPatchLevel", 0, 0); vBuild=GWEN_DB_GetIntValue(dbVersion, "versionBuild", 0, 0); maturityLevel=GWEN_DB_GetIntValue(dbVersion, "maturityLevel", 0, 0); /* create URL entry */ snprintf(ubuf, sizeof(ubuf)-1, "%s/%s-%s-%s-%d.%d.%d.%d-%d.sar.gz", url, name, sys, arch, vMajor, vMinor, vPatchLevel, vBuild, maturityLevel); ubuf[sizeof(ubuf)-1]=0; GWEN_DB_SetCharValue(dbVersion, GWEN_DB_FLAGS_OVERWRITE_VARS, "url", ubuf); /* create changelog entry */ GWEN_DB_SetCharValue(dbVersion, GWEN_DB_FLAGS_OVERWRITE_VARS, "changeLog", GWEN_Buffer_GetStart(cbuf)); GWEN_Buffer_free(cbuf); /* write version file back */ rv=GWEN_DB_WriteFile(dbVersion, outFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Could not write file [%s] (%d)\n", outFile, rv); return 2; } return 0; } gwenhywfar-5.12.0/tools/gsa/verify.c0000644000175000017500000001211013142134476014263 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int verifyArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; const char *keyFile; const char *signer; GWEN_DB_NODE *dbKey; GWEN_CRYPT_KEY *key; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "keyfile", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "keyfile", /* long option */ "Specify the keyfile to use", /* short description */ "Specify the keyfile to use" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "signer", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "signer", /* long option */ "Specify the signer", /* short description */ "Specify the signer" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); keyFile=GWEN_DB_GetCharValue(db, "keyFile", 0, NULL); assert(keyFile); signer=GWEN_DB_GetCharValue(db, "Signer", 0, "Signer"); dbKey=GWEN_DB_Group_new("keyfile"); rv=GWEN_DB_ReadFile(dbKey, keyFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Error reading keyfile [%s] (%d)\n", keyFile, rv); return 2; } key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (key==NULL) { fprintf(stderr, "ERROR: Error decoding keyfile [%s] (%d)\n", keyFile, rv); return 2; } GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { GWEN_CRYPTMGR *cm; cm=GWEN_CryptMgrKeys_new(NULL, NULL, signer, key, 1); /* verify */ rv=GWEN_Sar_Verify(sr, cm); if (rv<0) { fprintf(stderr, "ERROR: Error verifying archive (%d)\n", rv); GWEN_CryptMgr_free(cm); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } GWEN_CryptMgr_free(cm); /* close archive */ rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } fprintf(stdout, "Signature is valid.\n"); return 0; } } gwenhywfar-5.12.0/tools/gsa/sign.c0000644000175000017500000001205713142134476013731 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int signArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; const char *keyFile; const char *signer; GWEN_DB_NODE *dbKey; GWEN_CRYPT_KEY *key; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "keyfile", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "keyfile", /* long option */ "Specify the keyfile to use", /* short description */ "Specify the keyfile to use" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "signer", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "signer", /* long option */ "Specify the signer", /* short description */ "Specify the signer" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); keyFile=GWEN_DB_GetCharValue(db, "keyFile", 0, NULL); assert(keyFile); signer=GWEN_DB_GetCharValue(db, "signer", 0, "Signer"); dbKey=GWEN_DB_Group_new("keyfile"); rv=GWEN_DB_ReadFile(dbKey, keyFile, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Error reading keyfile [%s] (%d)\n", keyFile, rv); return 2; } key=GWEN_Crypt_KeyRsa_fromDb(dbKey); if (key==NULL) { fprintf(stderr, "ERROR: Error decoding keyfile [%s] (%d)\n", keyFile, rv); return 2; } GWEN_Crypt_KeyRsa_AddFlags(key, GWEN_CRYPT_KEYRSA_FLAGS_DIRECTSIGN); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ|GWEN_SYNCIO_FILE_FLAGS_WRITE); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { GWEN_CRYPTMGR *cm; cm=GWEN_CryptMgrKeys_new(signer, key, NULL, NULL, 1); /* sign */ rv=GWEN_Sar_Sign(sr, cm); if (rv<0) { fprintf(stderr, "ERROR: Error signing archive (%d)\n", rv); GWEN_CryptMgr_free(cm); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } GWEN_CryptMgr_free(cm); /* close archive */ rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); GWEN_Sar_CloseArchive(sr, 1); GWEN_Sar_free(sr); return 2; } return 0; } } gwenhywfar-5.12.0/tools/gsa/list.c0000644000175000017500000000634613142134476013750 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int listArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *aname; GWEN_SAR *sr; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "archive", /* name */ 1, /* minnum */ 1, /* maxnum */ "a", /* short option */ "archive", /* long option */ "Specify the archive file name", /* short description */ "Specify the archive file name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } aname=GWEN_DB_GetCharValue(db, "archive", 0, NULL); assert(aname); sr=GWEN_Sar_new(); rv=GWEN_Sar_OpenArchive(sr, aname, GWEN_SyncIo_File_CreationMode_OpenExisting, GWEN_SYNCIO_FILE_FLAGS_READ); if (rv<0) { fprintf(stderr, "ERROR: Error opening archive (%d)\n", rv); return 2; } else { const GWEN_SAR_FILEHEADER_LIST *fhl; fhl=GWEN_Sar_GetHeaders(sr); if (fhl) { const GWEN_SAR_FILEHEADER *fh; fh=GWEN_SarFileHeader_List_First(fhl); while (fh) { const char *s; s=GWEN_SarFileHeader_GetPath(fh); fprintf(stdout, "%s\n", s?s:"(noname)"); fh=GWEN_SarFileHeader_List_Next(fh); } } rv=GWEN_Sar_CloseArchive(sr, 0); if (rv<0) { fprintf(stderr, "ERROR: Error closing archive (%d)\n", rv); return 2; } return 0; } } gwenhywfar-5.12.0/tools/gsa/globals.h0000644000175000017500000000273213142134464014415 00000000000000/*************************************************************************** begin : Sat Jun 25 2011 copyright : (C) 2011 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GSA_GLOBALS_H #define GSA_GLOBALS_H #include #include #include #include #include #include #include #include #include #include #include #define GSA_LOGDOMAIN "gsa" #include "src/base/i18n_l.h" int readFile(const char *fname, GWEN_BUFFER *dbuf); int createArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int checkArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int listArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int add2Archive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int extractArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int mkArchiveKey(GWEN_DB_NODE *dbArgs, int argc, char **argv); int signArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int verifyArchive(GWEN_DB_NODE *dbArgs, int argc, char **argv); int releaseFillIn(GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif /* GSA_GLOBALS_H */ gwenhywfar-5.12.0/tools/gwenbuild/0000775000175000017500000000000014730345122014104 500000000000000gwenhywfar-5.12.0/tools/gwenbuild/README0000664000175000017500000001332514606206641014714 00000000000000 GwenBuild ========= GwenBuild is yet another build system. "autotools" (automake, autoconf) are really cool and they work in almost every case as expected. However, they are extremely slow which is a problem with larger projects containing many source files and convenience libraries. Also, they are hard to debug if you encounter unusual problems, e.g. in AqBanking we have the problem that sometimes not all sources/convenience libraries are correctly rebuilt after source code changes and up to now I have no idea why that is. A nice solution would be to switch to "cmake", especially when using their build target "ninja" which is astonishingly fast. "cmake" is quite easy to setup for simple projects, however, it is not that easy to change larger projects to use it. Also, there is quite a steep learning curve. "meson" is another good alternative since it also uses "ninja" and is therefore also extremely fast. But I wasn't able to adapt my projects to use "meson" because some features I needed for e.g. AqFinance or AqBanking required a version of "meson" newer than what is provided by the distribution I'm currently working with. Out of curiosity "gwenbuild" was started. I wanted to see how fast a build system can be and how hard it would be to write one. Gwenbuild is a tool inside the library gwenhywfar, which is a base library for all my projects. Therefore it is always available in the required version for depending projects. Gwenhywfar itself will not be ported to use this build system to avoid the hen-and-egg-problem. The following major goals were identified before development started: - needs to be much faster than autotools/make - needs to provide library, header and function search functions - needs to be able to generate a "config.h" file - needs to be able to rewrite files by replacing placeholders in source files (like "sed" does in ./configure) - needs to be simple to setup - needs to have support for typemaker2 source files - needs to allow out-of-source build - should be easy to extend - should handle dependency trees QuickStart for Users -------------------- - create a new folder in which to build, there: - "gwbuild PATH_TO_SOURCE_FOLDER" - "gwbuild -p" - "gwbuild -B tm2builder" (sometimes needed explicitly) - "gwbuild -jMAX_NUMBER_OF_PARALLEL_JOBS" After changing source files only the last step needs to be repeated. QuickStart for Development -------------------------- - builder (modules which generate commands to compile or link source files) are defined in XML files in "builders/" (see *.gwb files). - new builders should be added in file "gwenbuild.c" in functions "_genBuilderForSourceFile()" and "_genBuilderForTarget()" at the bottom of that file. Current Status -------------- gwenbuild is now able to compile C and C++ files, link shared libraries and temporary convenience libraries and generate source files from typemaker2 type description files. It also handles dependencies and custom build commands (like for XML merge) can now be defined which can also use gwenbuild's dependency handling. It can build using multiple processes in parallel. Compiling and linking AqBanking using 14 processes in parallel takes about 9 secs on my machine now. How it Works Internally ------------------------ The first step is to setup the build environment. The user changes into an empty folder outside the source tree (or into a folder inside it like "build") and runs "gwbuild -s SRCFOLDER". In this run gwenbuild reads the 0BUILD files in the top source folder and all other 0BUILD files referred to inside the 0BUILD file(s) and collects all the info about targets and object files etc. From this run a "BuildContext" is generated. This structure contains a list of commands needed to compile and link the files of the project. This structure has no further knowledge of the generated project other than which files to compile/link and how the files of the project depend on each other. This build context is then used in the subsequent steps of the gwenbuild process like in "gwbuild -p" (prepare) and "gwbuild -b" (build). The last step usually is to install the generated files using "gwbuild -i". This step only reads a file containing the list of files to install and copies the files from the given list to their specified destinations. This step also has no knowledge of the project to build, it simply works on the install file list. Adding New Source File or Target Types -------------------------------------- - types/gwenbuild.c: - _genBuilderForSourceFile() - _genBuilderForTarget() - builders/posix, builders/windows: - add a *.gwb file for the new builder type Some notes to myself ==================== https://docencia.ac.upc.edu/FIB/USO/Bibliografia/unix-c-libraries.html Build dependecies: cc -E -I INCLUDE_FOLDER -M -MF DEPOUTFILE SRCFILE or $(CC) $(CFLAGS) -MM *.c > Makefile.deps # shared lib: gcc -shared -nostdlib -o libaqdiagram.so aqdiagram.o -lgwenhywfar -lgmp -Wl,--whole-archive draw/libaqdg_draw.a TODO: - eventuell Builder_AddCmds und angleichen (verwenden von GWEN_DB wie bei ) -> commandsFromXml() - commands - cppcheck -s setup build environment -p run preparation commands (needed e.g. if typemaker2 is used) -b build targets -i install files -c cleanup; delete generated files -r repeat setup command using the same arguments given to last setup -Oname=value specify options (can occur multiple times) -Bname Only run commands for the given build (mostly used with 'tm2builder') -Lname Set loglevel (debug, info, notice, warn, error) -Cname Crosscompile for given environment (e-g- 'x86_64-w64-mingw32') -jvalue Use the given number of parallel process for building gwenhywfar-5.12.0/tools/gwenbuild/utils.c0000664000175000017500000005357514642065262015355 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "utils.h" #include #include #include #include #include #include #include #include #include #include #include static GWB_KEYVALUEPAIR_LIST *_generateInstallList(const GWB_FILE_LIST2 *fileList, const char *initialSourceDir); static int _filesChanged(const char *fileName, GWEN_STRINGLIST *slFileNameList); static GWEN_STRINGLIST *_readBuildFileList(const char *fileName); static void _writeProjectNameAndVersionToXml(const GWB_PROJECT *project, GWEN_XMLNODE *xmlNode); static int _readIntUntilPointOrHyphen(const char **ptrToStringPtr); static int _readAndStoreNextVersionPart(const char **s, GWEN_DB_NODE *db, const char *varNamePrefix, const char *varName); static int _copyLink(const char *sSrcPath, const char *sDestPath, const struct stat *st); static int _copyRegFile(const char *sSrcPath, const char *sDestPath, const struct stat *st); int GWB_Utils_WriteProjectFileList(const GWB_PROJECT *project, const char *fileName) { GWB_FILE_LIST2 *fileList; fileList=GWB_Project_GetFileList(project); if (fileList) { GWEN_XMLNODE *xmlNode; GWEN_XMLNODE *xmlFileList; int rv; xmlNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlFileList=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "FileList"); GWB_File_List2_WriteXml(fileList, xmlFileList, "file"); GWEN_XMLNode_AddChild(xmlNode, xmlFileList); rv=GWEN_XMLNode_WriteFile(xmlNode, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); GWEN_XMLNode_free(xmlNode); if (rv<0) { DBG_ERROR(NULL, "Error writing FileList to file \"%s\" (%d)", fileName, rv); return rv; } } return 0; } GWB_FILE_LIST2 *GWB_Utils_ReadFileList2(const char *fileName) { GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlFileList; int rv; xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(xmlRoot, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_ERROR(NULL, "Error reading build file list from \"%s\"", fileName); GWEN_XMLNode_free(xmlRoot); return NULL; } xmlFileList=GWEN_XMLNode_FindFirstTag(xmlRoot, "FileList", NULL, NULL); if (xmlFileList) { GWB_FILE_LIST2 *fileList; fileList=GWB_File_List2_new(); GWB_File_List2_ReadXml(xmlFileList, "file", fileList); if (GWB_File_List2_GetSize(fileList)==0) { GWB_File_List2_free(fileList); GWEN_XMLNode_free(xmlRoot); return NULL; } return fileList; } GWEN_XMLNode_free(xmlRoot); return NULL; } int GWB_Utils_WriteBuildFileList(const GWENBUILD *gwenbuild, const char *fileName) { GWEN_STRINGLIST *sl; sl=GWBUILD_GetBuildFilenameList(gwenbuild); if (sl) { GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlFileList; GWEN_STRINGLISTENTRY *se; int rv; xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlFileList=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "BuildFiles"); GWEN_XMLNode_AddChild(xmlRoot, xmlFileList); se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { GWEN_XMLNODE *xmlFile; GWEN_XMLNODE *xmlFileName; xmlFile=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "File"); xmlFileName=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, s); GWEN_XMLNode_AddChild(xmlFile, xmlFileName); GWEN_XMLNode_AddChild(xmlFileList, xmlFile); } se=GWEN_StringListEntry_Next(se); } rv=GWEN_XMLNode_WriteFile(xmlRoot, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); GWEN_XMLNode_free(xmlRoot); if (rv<0) { DBG_ERROR(NULL, "Error writing build file list to file \"%s\" (%d)", fileName, rv); return rv; } } return 0; } int GWB_Utils_WriteInstallFileList(const GWB_PROJECT *project, const char *fileName) { GWB_KEYVALUEPAIR_LIST *genFileList; const char *initialSourceDir; initialSourceDir=GWB_Context_GetInitialSourceDir(GWB_Project_GetRootContext(project)); genFileList=_generateInstallList(GWB_Project_GetFileList(project), initialSourceDir); if (genFileList) { GWB_KEYVALUEPAIR *kvp; GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlFileList; int rv; xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlFileList=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "InstallFiles"); GWEN_XMLNode_AddChild(xmlRoot, xmlFileList); kvp=GWB_KeyValuePair_List_First(genFileList); while(kvp) { const char *sDestPath; const char *sSrcPath; sDestPath=GWB_KeyValuePair_GetKey(kvp); sSrcPath=GWB_KeyValuePair_GetValue(kvp); if (sDestPath && sSrcPath) { GWEN_XMLNODE *xmlFile; xmlFile=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "InstallFile"); GWEN_XMLNode_SetCharValue(xmlFile, "destination", sDestPath); GWEN_XMLNode_SetCharValue(xmlFile, "source", sSrcPath); GWEN_XMLNode_AddChild(xmlFileList, xmlFile); } kvp=GWB_KeyValuePair_List_Next(kvp); } rv=GWEN_XMLNode_WriteFile(xmlRoot, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); GWEN_XMLNode_free(xmlRoot); if (rv<0) { DBG_ERROR(NULL, "Error writing build file list to file \"%s\" (%d)", fileName, rv); return rv; } } return 0; } GWB_KEYVALUEPAIR_LIST *GWB_Utils_ReadInstallFileList(const char *fileName) { GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlFileList; int rv; xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(xmlRoot, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_ERROR(NULL, "Error reading build file list from \"%s\"", fileName); GWEN_XMLNode_free(xmlRoot); return NULL; } xmlFileList=GWEN_XMLNode_FindFirstTag(xmlRoot, "InstallFiles", NULL, NULL); if (xmlFileList) { GWB_KEYVALUEPAIR_LIST *kvpList; GWEN_XMLNODE *xmlFile; kvpList=GWB_KeyValuePair_List_new(); xmlFile=GWEN_XMLNode_FindFirstTag(xmlFileList, "InstallFile", NULL, NULL); while(xmlFile) { GWB_KEYVALUEPAIR *kvp; const char *sDestPath; const char *sSrcPath; sDestPath=GWEN_XMLNode_GetCharValue(xmlFile, "destination", NULL); sSrcPath=GWEN_XMLNode_GetCharValue(xmlFile, "source", NULL); kvp=GWB_KeyValuePair_new(sDestPath, sSrcPath); GWB_KeyValuePair_List_Add(kvp, kvpList); xmlFile=GWEN_XMLNode_FindNextTag(xmlFile, "InstallFile", NULL, NULL); } GWEN_XMLNode_free(xmlRoot); if (GWB_KeyValuePair_List_GetCount(kvpList)==0) { GWB_KeyValuePair_List_free(kvpList); return NULL; } return kvpList; } GWEN_XMLNode_free(xmlRoot); return NULL; } GWB_KEYVALUEPAIR_LIST *_generateInstallList(const GWB_FILE_LIST2 *fileList, const char *initialSourceDir) { if (fileList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; GWB_KEYVALUEPAIR_LIST *kvpList; GWEN_BUFFER *keyBuf; GWEN_BUFFER *valueBuf; keyBuf=GWEN_Buffer_new(0, 256, 0, 1); valueBuf=GWEN_Buffer_new(0, 256, 0, 1); kvpList=GWB_KeyValuePair_List_new(); file=GWB_File_List2Iterator_Data(it); while(file) { if (GWB_File_GetFlags(file) & GWB_FILE_FLAGS_INSTALL) { const char *s; GWB_KEYVALUEPAIR *kvp; s=GWB_File_GetInstallPath(file); if (s && *s) { const char *destFileName; destFileName=GWB_File_GetInstallName(file); if (!(destFileName && *destFileName)) destFileName=GWB_File_GetName(file); GWEN_Buffer_AppendString(keyBuf, s); GWEN_Buffer_AppendString(keyBuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(keyBuf, destFileName); GWB_File_WriteFileNameToTopBuildDirString(file, initialSourceDir, valueBuf); kvp=GWB_KeyValuePair_new(GWEN_Buffer_GetStart(keyBuf), GWEN_Buffer_GetStart(valueBuf)); GWB_KeyValuePair_List_Add(kvp, kvpList); GWEN_Buffer_Reset(valueBuf); GWEN_Buffer_Reset(keyBuf); } } file=GWB_File_List2Iterator_Next(it); } GWEN_Buffer_free(valueBuf); GWEN_Buffer_free(keyBuf); GWB_File_List2Iterator_free(it); if (GWB_KeyValuePair_List_GetCount(kvpList)==0) { GWB_KeyValuePair_List_free(kvpList); return NULL; } return kvpList; } } return NULL; } int GWB_Utils_BuildFilesChanged(const char *fileName) { GWEN_STRINGLIST *slFileNameList; slFileNameList=_readBuildFileList(fileName); if (slFileNameList) { if (_filesChanged(fileName, slFileNameList)) { GWEN_StringList_free(slFileNameList); return 1; } GWEN_StringList_free(slFileNameList); } return 0; } int _filesChanged(const char *fileName, GWEN_STRINGLIST *slFileNameList) { time_t mtSourceFile; GWEN_STRINGLISTENTRY *se; mtSourceFile=GWBUILD_GetModificationTimeOfFile(fileName); if (mtSourceFile==(time_t) 0) { DBG_INFO(NULL, "here"); return 1; /* assume changed */ } se=GWEN_StringList_FirstEntry(slFileNameList); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { time_t mt; mt=GWBUILD_GetModificationTimeOfFile(s); if (mt!=(time_t) 0) { if (difftime(mt, mtSourceFile)>0) { DBG_ERROR(NULL, "File \"%s\" changed.", s); return 1; } } } se=GWEN_StringListEntry_Next(se); } DBG_DEBUG(NULL, "Files unchanged since last setup."); return 0; } GWEN_STRINGLIST *_readBuildFileList(const char *fileName) { GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlFileList; int rv; xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(xmlRoot, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_ERROR(NULL, "Error reading build file list from \"%s\"", fileName); GWEN_XMLNode_free(xmlRoot); return NULL; } xmlFileList=GWEN_XMLNode_FindFirstTag(xmlRoot, "BuildFiles", NULL, NULL); if (xmlFileList) { GWEN_STRINGLIST *sl; GWEN_XMLNODE *xmlFile; sl=GWEN_StringList_new(); xmlFile=GWEN_XMLNode_FindFirstTag(xmlFileList, "File", NULL, NULL); while(xmlFile) { GWEN_XMLNODE *xmlFileName; xmlFileName=GWEN_XMLNode_GetFirstData(xmlFile); if (xmlFileName) { const char *s; s=GWEN_XMLNode_GetData(xmlFileName); if (s && *s) GWEN_StringList_AppendString(sl, s, 0, 1); } xmlFile=GWEN_XMLNode_FindNextTag(xmlFile, "File", NULL, NULL); } if (GWEN_StringList_Count(sl)==0) { GWEN_StringList_free(sl); GWEN_XMLNode_free(xmlRoot); return NULL; } GWEN_XMLNode_free(xmlRoot); return sl; } GWEN_XMLNode_free(xmlRoot); return NULL; } int GWB_Utils_WriteProjectToFile(const GWB_PROJECT *project, const char *fileName) { GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlProject; int rv; xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlProject=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Project"); GWB_Project_toXml(project, xmlProject); GWEN_XMLNode_AddChild(xmlRoot, xmlProject); rv=GWEN_XMLNode_WriteFile(xmlRoot, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); GWEN_XMLNode_free(xmlRoot); if (rv<0) { DBG_ERROR(NULL, "Error writing project to file \"%s\" (%d)", fileName, rv); return rv; } return 0; } int GWB_Utils_WriteContextTreeToFile(const GWB_CONTEXT *ctx, const char *fileName) { GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlContext; int rv; xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlContext=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "ContextTree"); GWB_Context_toXml(ctx, xmlContext, 1); GWEN_XMLNode_AddChild(xmlRoot, xmlContext); rv=GWEN_XMLNode_WriteFile(xmlRoot, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); GWEN_XMLNode_free(xmlRoot); if (rv<0) { DBG_ERROR(NULL, "Error writing context tree to file \"%s\" (%d)", fileName, rv); return rv; } return 0; } int GWB_Utils_CopyFile(const char *sSrcPath, const char *sDestPath) { int rv; struct stat st; //#if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED #if ((_BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L) && !defined(__MINGW32__)) || defined(OS_DARWIN) rv=lstat(sSrcPath, &st); #else rv=stat(sSrcPath, &st); #endif if (rv == -1) { DBG_ERROR(NULL, "ERROR: stat(%s): %s", sSrcPath, strerror(errno)); return GWEN_ERROR_GENERIC; } #if ((_BSD_SOURCE || _XOPEN_SOURCE >= 500 || (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) || _POSIX_C_SOURCE >= 200112L) && !defined(__MINGW32__)) || defined(OS_DARWIN) if ((st.st_mode & S_IFMT)==S_IFLNK) { rv=_copyLink(sSrcPath, sDestPath, &st); if (rv<0) { DBG_ERROR(NULL, "ERROR: symlink(%s): %s", sSrcPath, strerror(errno)); return GWEN_ERROR_GENERIC; } } else #endif if ((st.st_mode & S_IFMT)==S_IFREG) { rv=_copyRegFile(sSrcPath, sDestPath, &st); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } else { DBG_ERROR(NULL, "Unhandled file type \"%s\"", sSrcPath); } return 0; } int _copyLink(const char *sSrcPath, const char *sDestPath, const struct stat *st) { char *symlinkbuf; int bufSizeNeeded; int rv; /* copy symlink */ if (st->st_size==0) bufSizeNeeded=256; else bufSizeNeeded=st->st_size+1; symlinkbuf=(char*) malloc(bufSizeNeeded); assert(symlinkbuf); rv=readlink(sSrcPath, symlinkbuf, bufSizeNeeded); /* doesn't add '0'!! */ if (rv==-1) { DBG_ERROR(NULL, "ERROR: readlink(%s): %s", sSrcPath, strerror(errno)); free(symlinkbuf); return GWEN_ERROR_GENERIC; } else if (rv==bufSizeNeeded) { DBG_ERROR(NULL, "Buffer too small (%d)", bufSizeNeeded); free(symlinkbuf); return GWEN_ERROR_GENERIC; } symlinkbuf[rv]=0; rv=GWEN_Directory_GetPath(sDestPath, GWEN_DIR_FLAGS_PUBLIC_PATH | GWEN_DIR_FLAGS_PUBLIC_NAME | GWEN_PATH_FLAGS_VARIABLE| GWEN_PATH_FLAGS_CHECKROOT); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); free(symlinkbuf); return rv; } unlink(sDestPath); rv=symlink(symlinkbuf, sDestPath); if (rv==-1) { DBG_ERROR(NULL, "ERROR: symlink(%s): %s", sSrcPath, strerror(errno)); free(symlinkbuf); return GWEN_ERROR_GENERIC; } return 0; } int _copyRegFile(const char *sSrcPath, const char *sDestPath, const struct stat *st) { mode_t newMode=0; int rv; rv=GWEN_Directory_GetPath(sDestPath, GWEN_DIR_FLAGS_PUBLIC_PATH | GWEN_DIR_FLAGS_PUBLIC_NAME | GWEN_PATH_FLAGS_VARIABLE| GWEN_PATH_FLAGS_CHECKROOT); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } rv=GWEN_SyncIo_Helper_CopyFile(sSrcPath, sDestPath); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } newMode=S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH; if (st->st_mode & S_IXUSR) newMode|=S_IXUSR|S_IXGRP|S_IXOTH; rv=chmod(sDestPath, newMode); if (rv<0) { DBG_ERROR(NULL, "ERROR: chmod(%s): %s", sSrcPath, strerror(errno)); return rv; } return 0; } int GWB_Utils_WriteProjectInfoToFile(const GWB_PROJECT *project, const char *fileName) { GWB_CONTEXT *rootContext; GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlProject; const char *initialSourceDir; int rv; rootContext=GWB_Project_GetRootContext(project); initialSourceDir=GWB_Context_GetInitialSourceDir(rootContext); xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlProject=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "ProjectInfo"); if (initialSourceDir && *initialSourceDir) GWEN_XMLNode_SetCharValue(xmlProject, "initialSourceDir", initialSourceDir); _writeProjectNameAndVersionToXml(project, xmlProject); GWEN_XMLNode_AddChild(xmlRoot, xmlProject); rv=GWEN_XMLNode_WriteFile(xmlRoot, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); GWEN_XMLNode_free(xmlRoot); if (rv<0) { DBG_ERROR(NULL, "Error writing project to file \"%s\" (%d)", fileName, rv); return rv; } return 0; } void _writeProjectNameAndVersionToXml(const GWB_PROJECT *project, GWEN_XMLNODE *xmlNode) { const char *s; s=GWB_Project_GetProjectName(project); if (s) GWEN_XMLNode_SetCharValue(xmlNode, "projectName", s); GWEN_XMLNode_SetIntValue(xmlNode, "versionMajor", GWB_Project_GetVersionMajor(project)); GWEN_XMLNode_SetIntValue(xmlNode, "versionMinor", GWB_Project_GetVersionMinor(project)); GWEN_XMLNode_SetIntValue(xmlNode, "versionPatchlevel", GWB_Project_GetVersionPatchlevel(project)); GWEN_XMLNode_SetIntValue(xmlNode, "versionBuild", GWB_Project_GetVersionBuild(project)); s=GWB_Project_GetVersionTag(project); if (s) GWEN_XMLNode_SetCharValue(xmlNode, "versionTag", s); } GWEN_XMLNODE *GWB_Utils_ReadProjectInfoFromFile(const char *fileName) { GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlProjectInfo; int rv; xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(xmlRoot, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_ERROR(NULL, "Error reading project info from \"%s\"", fileName); GWEN_XMLNode_free(xmlRoot); return NULL; } xmlProjectInfo=GWEN_XMLNode_FindFirstTag(xmlRoot, "ProjectInfo", NULL, NULL); if (xmlProjectInfo) { GWEN_XMLNode_UnlinkChild(xmlRoot, xmlProjectInfo); GWEN_XMLNode_free(xmlRoot); return xmlProjectInfo; } GWEN_XMLNode_free(xmlRoot); return NULL; } int GWB_Utils_VersionStringToDb(GWEN_DB_NODE *db, const char *prefix, const char *s) { const char *p; int rv; p=s; while(*p && *p<33) s++; if (isdigit(*p)) { rv=_readAndStoreNextVersionPart(&p, db, prefix, "vmajor"); if (rv<0) { DBG_ERROR(NULL, "Invalid version spec \"%s\"", s); return rv; } } if (*p=='.') { rv=_readAndStoreNextVersionPart(&p, db, prefix, "vminor"); if (rv<0) { DBG_ERROR(NULL, "Invalid version spec \"%s\"", s); return rv; } } if (*p=='.') { rv=_readAndStoreNextVersionPart(&p, db, prefix, "vpatchlevel"); if (rv<0) { DBG_ERROR(NULL, "Invalid version spec \"%s\"", s); return rv; } } if (*p=='.') { rv=_readAndStoreNextVersionPart(&p, db, prefix, "vbuild"); if (rv<0) { DBG_ERROR(NULL, "Invalid version spec \"%s\"", s); return rv; } } if (*p=='-') { p++; if (prefix && *prefix) { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, prefix); GWEN_Buffer_AppendString(buf, "vtag"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(buf), p); GWEN_Buffer_free(buf); } else GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "vtag", p); } return 0; } int _readAndStoreNextVersionPart(const char **s, GWEN_DB_NODE *db, const char *varNamePrefix, const char *varName) { const char *p; int rv; p=*s; if (*p=='.') p++; rv=_readIntUntilPointOrHyphen(&p); if (rv<0) { DBG_ERROR(NULL, "Invalid version spec \"%s\"", *s); return GWEN_ERROR_GENERIC; } if (varNamePrefix && *varNamePrefix) { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, varNamePrefix); GWEN_Buffer_AppendString(buf, varName); GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(buf), rv); GWEN_Buffer_free(buf); } else GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, varName, rv); *s=p; return 0; } int GWB_Utils_VersionStringToInt(const char *s) { const char *p; unsigned int vmajor=0; unsigned int vminor=0; unsigned int vpatchlevel=0; unsigned int vbuild=0; int rv; p=s; while(*p && *p<33) s++; if (isdigit(*p)) { rv=_readIntUntilPointOrHyphen(&p); if (rv<0) { DBG_ERROR(NULL, "Invalid version spec \"%s\"", s); return GWEN_ERROR_GENERIC; } vmajor=rv & 0xff; } if (*p=='.') { p++; rv=_readIntUntilPointOrHyphen(&p); if (rv<0) { DBG_ERROR(NULL, "Invalid version spec \"%s\"", s); return GWEN_ERROR_GENERIC; } vminor=rv & 0xff; } if (*p=='.') { p++; rv=_readIntUntilPointOrHyphen(&p); if (rv<0) { DBG_ERROR(NULL, "Invalid version spec \"%s\"", s); return GWEN_ERROR_GENERIC; } vpatchlevel=rv & 0xff; } if (*p=='.') { p++; rv=_readIntUntilPointOrHyphen(&p); if (rv<0) { DBG_ERROR(NULL, "Invalid version spec \"%s\"", s); return GWEN_ERROR_GENERIC; } vbuild=rv & 0xff; } return (int) ((vmajor<<24)+(vminor<<16)+(vpatchlevel<<8)+vbuild); } int _readIntUntilPointOrHyphen(const char **s) { int i=0; const char *p; p=*s; while(*p && *p!='.' && *p!='-') { int c; c=(*p)-'0'; if (c<0 || c>9) { DBG_ERROR(NULL, "Invalid version string \"%s\"", *s); return GWEN_ERROR_GENERIC; } i=(i*10)+c; p++; } *s=p; return i; } void GWB_Utils_VersionToDbVar(GWEN_DB_NODE *db, const char *dbVarName, int vmajor, int vminor, int vpatchlevel, int vbuild, const char *vtag) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); if (vbuild>0) GWEN_Buffer_AppendArgs(dbuf, "%d.%d.%d.%d", vmajor, vminor, vpatchlevel, vbuild); else GWEN_Buffer_AppendArgs(dbuf, "%d.%d.%d", vmajor, vminor, vpatchlevel); if (vtag && *vtag) { GWEN_Buffer_AppendString(dbuf, "-"); GWEN_Buffer_AppendArgs(dbuf, "%s", vtag); } GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, dbVarName, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } gwenhywfar-5.12.0/tools/gwenbuild/parser/0000775000175000017500000000000014730345122015400 500000000000000gwenhywfar-5.12.0/tools/gwenbuild/parser/p_project.h0000664000175000017500000000124114116666046017465 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_PROJECT_H #define GWBUILD_PARSER_PROJECT_H #include "gwenbuild/types/project.h" #include int GWB_ParseProject(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); #endif gwenhywfar-5.12.0/tools/gwenbuild/parser/p_checkprogs.h0000664000175000017500000000125214116666046020151 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_CHECKPROGS_H #define GWBUILD_PARSER_CHECKPROGS_H #include "gwenbuild/types/project.h" #include int GWB_ParseCheckProgs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); #endif gwenhywfar-5.12.0/tools/gwenbuild/parser/p_buildfiles.h0000664000175000017500000000125214116666046020143 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_BUILDFILES_H #define GWBUILD_PARSER_BUILDFILES_H #include "gwenbuild/types/project.h" #include int GWB_ParseBuildFiles(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); #endif gwenhywfar-5.12.0/tools/gwenbuild/parser/p_checkfunctions.c0000664000175000017500000000760114460564441021024 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/p_checkfunctions.h" #include "gwenbuild/parser/parser.h" #include "gwenbuild/tools/trylink.h" #include #include static int _checkFunction(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *fnName); static void _setVarFunctionExists(GWEN_DB_NODE *db, const char *header, int exists); static void _setDefineFunctionExists(GWB_PROJECT *project, const char *header); static void _toUpperAndReplacePointWithUnderscore(char *ptr); static void _replacePointWithUnderscore(char *ptr); int GWB_ParseCheckFunctions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; GWEN_STRINGLIST *fileNameList; rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } fileNameList=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), xmlNode, 1); if (fileNameList) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(fileNameList); while(se) { const char *sFileName; sFileName=GWEN_StringListEntry_Data(se); if (sFileName && *sFileName) { rv=_checkFunction(project, currentContext, sFileName); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_StringList_free(fileNameList); return rv; } } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(fileNameList); } return 0; } int _checkFunction(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *fnName) { GWEN_BUFFER *codeBuf; int rv; codeBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(codeBuf, "int %s(void);\n", fnName); GWEN_Buffer_AppendArgs(codeBuf, "int main(int argc, char **argv) {return %s();}", fnName); rv=GWB_Tools_TryLink(currentContext, GWEN_Buffer_GetStart(codeBuf), NULL); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(codeBuf); return rv; } _setVarFunctionExists(GWB_Context_GetVars(currentContext), fnName, (rv==0)?1:0); if (rv==0) _setDefineFunctionExists(project, fnName); return 0; } void _setVarFunctionExists(GWEN_DB_NODE *db, const char *header, int exists) { GWEN_BUFFER *nameBuf; fprintf(stdout, " function %s: %s\n", header, exists?"found":"not found"); nameBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nameBuf, header); _replacePointWithUnderscore(GWEN_Buffer_GetStart(nameBuf)); GWB_Parser_SetItemValue(db, GWEN_Buffer_GetStart(nameBuf), "_EXISTS", exists?"TRUE":"FALSE"); GWEN_Buffer_free(nameBuf); } void _setDefineFunctionExists(GWB_PROJECT *project, const char *header) { GWEN_BUFFER *nameBuf; nameBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nameBuf, "HAVE_"); GWEN_Buffer_AppendString(nameBuf, header); _toUpperAndReplacePointWithUnderscore(GWEN_Buffer_GetStart(nameBuf)); GWB_Project_SetDefine(project, GWEN_Buffer_GetStart(nameBuf), "1"); GWEN_Buffer_free(nameBuf); } void _toUpperAndReplacePointWithUnderscore(char *ptr) { while(ptr && *ptr) { if (*ptr<32) *ptr=32; else if (*ptr=='.' || *ptr=='/') *ptr='_'; else *ptr=toupper(*ptr); ptr++; } } void _replacePointWithUnderscore(char *ptr) { while(ptr && *ptr) { if (*ptr<32) *ptr=32; else if (*ptr=='.' || *ptr=='/') *ptr='_'; ptr++; } } gwenhywfar-5.12.0/tools/gwenbuild/parser/p_checklibs.c0000664000175000017500000000737714116666046017761 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/p_checkheaders.h" #include "gwenbuild/parser/parser.h" #include "gwenbuild/tools/trylink.h" #include static int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseLib(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static GWEN_BUFFER *_createTestCodeForLib(const char *fnName); int GWB_ParseCheckLibs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; rv=_parseChildNodes(project, currentContext, xmlNode); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(xmlNode); while (n) { const char *name; name=GWEN_XMLNode_GetData(n); if (name && *name) { int rv; DBG_DEBUG(NULL, "Handling element \"%s\"", name); if (strcasecmp(name, "lib")==0) rv=_parseLib(project, currentContext, n); else { DBG_INFO(NULL, "Element not handled"); rv=0; } if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error in element \"%s\", aborting", name); return rv; } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int _parseLib(GWEN_UNUSED GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; const char *sId; const char *sName; const char *sFunction; GWEN_DB_NODE *db; db=GWB_Context_GetVars(currentContext); rv=GWEN_XMLNode_ExpandProperties(xmlNode, db); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } sId=GWEN_XMLNode_GetProperty(xmlNode, "id", NULL); if (!(sId && *sId)) { DBG_ERROR(NULL, "Dependency has no id"); return GWEN_ERROR_GENERIC; } sName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(sName && *sName)) { DBG_ERROR(NULL, "Dependency has no name"); return GWEN_ERROR_GENERIC; } sFunction=GWEN_XMLNode_GetProperty(xmlNode, "function", NULL); if (sFunction && *sFunction) { GWEN_BUFFER *codeBuf; codeBuf=_createTestCodeForLib(sFunction); rv=GWB_Tools_TryLink(currentContext, GWEN_Buffer_GetStart(codeBuf), sName); GWEN_Buffer_free(codeBuf); } else rv=GWB_Tools_TryLink(currentContext, "int main(int argc, char **argv) {return 0;}", sName); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } else if (rv==0) { GWEN_BUFFER *dbuf; GWB_Parser_SetItemValue(db, sId, "_EXISTS", "TRUE"); dbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dbuf, "-l"); GWEN_Buffer_AppendString(dbuf, sId); GWB_Parser_SetItemValue(db, sId, "_LIBS", GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); fprintf(stdout, " lib %s: found\n", sName); } else { GWB_Parser_SetItemValue(GWB_Context_GetVars(currentContext), sId, "_EXISTS", "FALSE"); fprintf(stdout, " lib %s: not found\n", sName); } return 0; } GWEN_BUFFER *_createTestCodeForLib(const char *fnName) { GWEN_BUFFER *codeBuf; codeBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(codeBuf, "int %s(void);\n", fnName); GWEN_Buffer_AppendArgs(codeBuf, "int main(int argc, char **argv) {return %s();}", fnName); return codeBuf; } gwenhywfar-5.12.0/tools/gwenbuild/parser/p_checkheaders.c0000664000175000017500000000754414460564441020435 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/p_checkheaders.h" #include "gwenbuild/parser/parser.h" #include "gwenbuild/tools/trycompile.h" #include #include static int _checkHeader(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *header); static void _setVarHeaderExists(GWEN_DB_NODE *db, const char *header, int exists); static void _setDefineHeaderExists(GWB_PROJECT *project, const char *header); static void _toUpperAndReplacePointWithUnderscore(char *ptr); static void _replacePointWithUnderscore(char *ptr); int GWB_ParseCheckHeaders(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; GWEN_STRINGLIST *fileNameList; rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } fileNameList=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), xmlNode, 1); if (fileNameList) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(fileNameList); while(se) { const char *sFileName; sFileName=GWEN_StringListEntry_Data(se); if (sFileName && *sFileName) { rv=_checkHeader(project, currentContext, sFileName); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_StringList_free(fileNameList); return rv; } } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(fileNameList); } return 0; } int _checkHeader(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *header) { GWEN_BUFFER *codeBuf; int rv; codeBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(codeBuf, "#include <%s>\n", header); GWEN_Buffer_AppendString(codeBuf, "int main(int argc, char **argv) { return 0;};\n"); rv=GWB_Tools_TryCompile(currentContext, GWEN_Buffer_GetStart(codeBuf)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(codeBuf); return rv; } _setVarHeaderExists(GWB_Context_GetVars(currentContext), header, (rv==0)?1:0); if (rv==0) _setDefineHeaderExists(project, header); return 0; } void _setVarHeaderExists(GWEN_DB_NODE *db, const char *header, int exists) { GWEN_BUFFER *nameBuf; fprintf(stdout, " header %s: %s\n", header, exists?"found":"not found"); nameBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nameBuf, header); _replacePointWithUnderscore(GWEN_Buffer_GetStart(nameBuf)); GWB_Parser_SetItemValue(db, GWEN_Buffer_GetStart(nameBuf), "_EXISTS", exists?"TRUE":"FALSE"); GWEN_Buffer_free(nameBuf); } void _setDefineHeaderExists(GWB_PROJECT *project, const char *header) { GWEN_BUFFER *nameBuf; nameBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nameBuf, "HAVE_"); GWEN_Buffer_AppendString(nameBuf, header); _toUpperAndReplacePointWithUnderscore(GWEN_Buffer_GetStart(nameBuf)); GWB_Project_SetDefine(project, GWEN_Buffer_GetStart(nameBuf), "1"); GWEN_Buffer_free(nameBuf); } void _toUpperAndReplacePointWithUnderscore(char *ptr) { while(ptr && *ptr) { if (*ptr<32) *ptr=32; else if (*ptr=='.' || *ptr=='/') *ptr='_'; else *ptr=toupper(*ptr); ptr++; } } void _replacePointWithUnderscore(char *ptr) { while(ptr && *ptr) { if (*ptr<32) *ptr=32; else if (*ptr=='.' || *ptr=='/') *ptr='_'; ptr++; } } gwenhywfar-5.12.0/tools/gwenbuild/parser/p_options.c0000664000175000017500000002011014465133070017472 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/p_options.h" #include "gwenbuild/parser/parser.h" #include "gwenbuild/types/option.h" #include #include #include int _checkAgainstGivenOption(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWB_OPTION *option); int _checkStringOption(GWB_OPTION *option, GWB_CONTEXT *currentContext, const char *givenValue); int _checkStringListOption(GWB_PROJECT *project, GWB_OPTION *option, GWB_CONTEXT *currentContext, const char *givenValue); int GWB_ParseOption(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { const char *sId; int otype; GWB_OPTION *option; const char *s; GWEN_XMLNODE *n; int rv; rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } sId=GWEN_XMLNode_GetProperty(xmlNode, "id", NULL); if (!(sId && *sId)) { DBG_ERROR(NULL, "Option has no id"); GWEN_XMLNode_Dump(xmlNode, 2); return GWEN_ERROR_GENERIC; } otype=GWB_OptionType_fromString(GWEN_XMLNode_GetProperty(xmlNode, "type", "string")); if (!(otype>GWB_OptionType_None)) { DBG_ERROR(NULL, "Invalid option type (id=%s)", sId); GWEN_XMLNode_Dump(xmlNode, 2); return GWEN_ERROR_GENERIC; } option=GWB_Option_new(sId); GWB_Option_SetOptionType(option, otype); if (1) { GWEN_BUFFER *buf; buf=GWB_Parser_ReadNamedXmlDataIntoBufferAndExpand(GWB_Context_GetVars(currentContext), xmlNode, "default"); if (buf) { if (GWEN_Buffer_GetUsedBytes(buf)) GWB_Option_SetDefaultValue(option, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } } s=GWEN_XMLNode_GetProperty(xmlNode, "definePrefix", NULL); if (s) GWB_Option_SetDefinePrefix(option, s); s=GWEN_XMLNode_GetCharValue(xmlNode, "choices", NULL); if (s) { GWEN_STRINGLIST *sl; sl=GWEN_StringList_fromString2(s, " ", 1, GWEN_TEXT_FLAGS_DEL_QUOTES | GWEN_TEXT_FLAGS_CHECK_BACKSLASH); if (sl) { GWEN_StringList_AppendStringList(GWB_Option_GetChoiceList(option), sl, 1); GWEN_StringList_free(sl); } } /* entries can be used for string values to define a name which contains multiple strings. * An example from AqBanking: * * * * Here "all" can be given as alias for "aqhbci aqofxconnect aqebics aqpaypal aqnone" so that the user can * just specify "-O backends=all" to include all backends instead of having to specify every single one. */ n=GWEN_XMLNode_FindFirstTag(xmlNode, "alias", NULL, NULL); while(n) { const char *sName; GWEN_BUFFER *valueBuffer; sName=GWEN_XMLNode_GetProperty(n, "name", NULL); valueBuffer=GWB_Parser_ReadXmlDataIntoBufferAndExpand(GWB_Context_GetVars(currentContext), n); if (valueBuffer) { GWB_Option_AddAlias(option, sName, GWEN_Buffer_GetStart(valueBuffer)); GWEN_Buffer_free(valueBuffer); } n=GWEN_XMLNode_FindNextTag(n, "alias", NULL, NULL); } _checkAgainstGivenOption(project, currentContext, option); GWB_Project_AddOption(project, option); return 0; } int _checkAgainstGivenOption(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWB_OPTION *option) { const char *optionId; GWB_KEYVALUEPAIR *kvp; const char *givenValue=NULL; optionId=GWB_Option_GetId(option); kvp=GWB_KeyValuePair_List_GetFirstByKey(GWB_Project_GetGivenOptionList(project), optionId); if (kvp) givenValue=GWB_KeyValuePair_GetValue(kvp); if (givenValue==NULL) givenValue=GWB_Option_GetDefaultValue(option); if (givenValue) { int rv=GWEN_ERROR_GENERIC; switch(GWB_Option_GetOptionType(option)) { case GWB_OptionType_Unknown: case GWB_OptionType_None: DBG_ERROR(NULL, "Bad option type in option %s", optionId); rv=GWEN_ERROR_GENERIC; break; case GWB_OptionType_String: rv=_checkStringOption(option, currentContext, givenValue); break; case GWB_OptionType_StringList: rv=_checkStringListOption(project, option, currentContext, givenValue); break; } if (rv<0) return rv; } if (kvp) { GWB_KeyValuePair_List_Del(kvp); GWB_KeyValuePair_free(kvp); } return 0; } int _checkStringOption(GWB_OPTION *option, GWB_CONTEXT *currentContext, const char *givenValue) { const char *optionId; optionId=GWB_Option_GetId(option); fprintf(stdout, " option %s: ", optionId); if (givenValue) { const char *s; GWEN_BUFFER *nameBuffer; s=GWB_Option_GetAlias(option, givenValue); if (s==NULL) s=givenValue; if (!GWB_Option_IsValidChoice(option, s)) { DBG_ERROR(NULL, "Value \"%s\" (given value \"%s\") is not a valid choice for option \"%s\"", s, givenValue, optionId); return GWEN_ERROR_INVALID; } nameBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nameBuffer, "option_"); GWEN_Buffer_AppendString(nameBuffer, optionId); GWEN_DB_SetCharValue(GWB_Context_GetVars(currentContext), GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(nameBuffer), s); GWEN_Buffer_free(nameBuffer); fprintf(stdout, "%s\n", s); } return 0; } int _checkStringListOption(GWB_PROJECT *project, GWB_OPTION *option, GWB_CONTEXT *currentContext, const char *givenValue) { const char *optionId; const char *definePrefix; optionId=GWB_Option_GetId(option); definePrefix=GWB_Option_GetDefinePrefix(option); fprintf(stdout, " option %s: ", optionId); if (givenValue) { const char *s; GWEN_STRINGLIST *sl; s=GWB_Option_GetAlias(option, givenValue); if (s==NULL) s=givenValue; sl=GWEN_StringList_fromString2(s, " ", 1, GWEN_TEXT_FLAGS_DEL_QUOTES | GWEN_TEXT_FLAGS_CHECK_BACKSLASH); if (sl) { GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *nameBuffer; nameBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nameBuffer, "option_"); GWEN_Buffer_AppendString(nameBuffer, optionId); se=GWEN_StringList_FirstEntry(sl); while(se) { const char *sCurrentGivenValue; sCurrentGivenValue=GWEN_StringListEntry_Data(se); if (sCurrentGivenValue) { if (!GWB_Option_IsValidChoice(option, sCurrentGivenValue)) { DBG_ERROR(NULL, "Value \"%s\" is not a valid choice for option \"%s\"", sCurrentGivenValue, optionId); GWEN_Buffer_free(nameBuffer); GWEN_StringList_free(sl); return GWEN_ERROR_INVALID; } GWEN_DB_SetCharValue(GWB_Context_GetVars(currentContext), 0, GWEN_Buffer_GetStart(nameBuffer), sCurrentGivenValue); fprintf(stdout, "%s ", sCurrentGivenValue); if (definePrefix) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_AppendString(dbuf, definePrefix); s=sCurrentGivenValue; while(*s) GWEN_Buffer_AppendByte(dbuf, toupper(*(s++))); GWB_Project_SetDefine(project, GWEN_Buffer_GetStart(dbuf), "1"); GWEN_Buffer_free(dbuf); } } se=GWEN_StringListEntry_Next(se); } /* while */ GWEN_Buffer_free(nameBuffer); GWEN_StringList_free(sl); } /* if sl */ } /* if givenValue */ fprintf(stdout, "\n"); return 0; } gwenhywfar-5.12.0/tools/gwenbuild/parser/parser.c0000664000175000017500000007607514460564441017006 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/parser.h" #include "gwenbuild/parser/p_project.h" #include "gwenbuild/utils.h" #include #include #include #include #include #include #include #include #include #include #include /* for stat, chmod */ #include #include static GWEN_BUFFER *_getSourcePathForFileName(const GWB_CONTEXT *currentContext, const char *fileName); static void _addBuildFileNameToGwBuild(GWENBUILD *gwbuild, const GWB_CONTEXT *currentContext, const char *fileName); static int _getAndCheckRequiredGwenVersion(GWEN_XMLNODE *xmlGwbuildNode); static int _parseSubdir(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *sFolder, GWB_PARSER_PARSE_ELEMENT_FN fn); static int _parseSetVar(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseIfVarMatches(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn); static int _parseIfNotVarMatches(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn); static int _parseIfVarHasValue(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn); static int _parseIfNotVarHasValue(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn); static int _varHasValue(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseWriteFile(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _readModifyWriteFile(GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbContextVars, const char *sSourceFile, const char *sDestFile); static void _appendVarValue(GWEN_DB_NODE *db, const char *name, const char *newValue); static int _getFilePermissions(const char *fname); static int _setFilePermissions(const char *fname, int perms); GWB_PROJECT *GWB_Parser_ReadBuildTree(GWENBUILD *gwbuild, GWB_CONTEXT *currentContext, const char *srcDir, GWB_KEYVALUEPAIR_LIST *givenOptionList) { GWEN_XMLNODE *xmlNewFile; GWEN_XMLNODE *xmlProject; GWB_PROJECT *project; GWB_FILE *file; GWEN_DB_NODE *db; int rv; GWB_Context_SetInitialSourceDir(currentContext, srcDir); GWB_Context_SetTopSourceDir(currentContext, srcDir); GWB_Context_SetCurrentSourceDir(currentContext, srcDir); db=GWB_Context_GetVars(currentContext); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "topbuilddir", "."); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "topsrcdir", srcDir); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "builddir", "."); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "srcdir", srcDir); xmlNewFile=GWB_Parser_ReadBuildFile(gwbuild, currentContext, GWB_PARSER_FILENAME); if (xmlNewFile==NULL) { DBG_ERROR(NULL, "No valid node found in build file of folder \"%s\"", srcDir); return NULL; } xmlProject=GWEN_XMLNode_FindFirstTag(xmlNewFile, "project", NULL, NULL); if (xmlProject==NULL) { DBG_ERROR(NULL, "No project node found in build file of folder \"%s\"", srcDir); GWEN_XMLNode_free(xmlNewFile); return NULL; } project=GWB_Project_new(gwbuild, currentContext); file=GWB_File_List2_GetOrCreateFile(GWB_Project_GetFileList(project), GWB_Context_GetCurrentRelativeDir(currentContext), GWB_PARSER_FILENAME); GWB_File_AddFlags(file, GWB_FILE_FLAGS_DIST); if (givenOptionList) GWB_Project_SetGivenOptionList(project, givenOptionList); rv=GWB_ParseProject(project, currentContext, xmlProject); if (rv<0) { DBG_ERROR(NULL, "Error parsing build tree in folder \"%s\"", srcDir); GWB_Project_free(project); GWEN_XMLNode_free(xmlNewFile); return NULL; } GWEN_XMLNode_free(xmlNewFile); return project; } GWB_CONTEXT *GWB_Parser_CopyContextForSubdir(const GWB_CONTEXT *sourceContext, const char *folder) { GWB_CONTEXT *newContext; GWEN_DB_NODE *db; newContext=GWB_Context_dup(sourceContext); GWB_Context_AddCurrentRelativeDir(newContext, folder); GWB_Context_InsertTopBuildDir(newContext, ".."); GWB_Context_InsertTopSourceDir(newContext, ".."); GWB_Context_AddCurrentBuildDir(newContext, folder); GWB_Context_InsertCurrentSourceDir(newContext, ".."); GWB_Context_AddCurrentSourceDir(newContext, folder); GWB_Context_ClearSourceFileList2(newContext); GWB_Context_ClearIncludeList(newContext); GWB_Context_ClearDefineList(newContext); db=GWB_Context_GetVars(newContext); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "topbuilddir", GWB_Context_GetTopBuildDir(newContext)); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "topsrcdir", GWB_Context_GetTopSourceDir(newContext)); //GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "builddir", GWB_Context_GetCurrentBuildDir(newContext)); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "builddir", "."); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "srcdir", GWB_Context_GetCurrentSourceDir(newContext)); GWEN_DB_DeleteGroup(db, "local"); return newContext; } GWB_CONTEXT *GWB_Parser_CopyContextForTarget(const GWB_CONTEXT *sourceContext) { GWB_CONTEXT *newContext; newContext=GWB_Context_dup(sourceContext); GWB_Context_ClearSourceFileList2(newContext); GWB_Context_ClearIncludeList(newContext); GWB_Context_ClearDefineList(newContext); return newContext; } GWEN_XMLNODE *GWB_Parser_ReadBuildFile(GWENBUILD *gwbuild, const GWB_CONTEXT *currentContext, const char *fileName) { GWEN_BUFFER *fileNameBuf; int rv; GWEN_XMLNODE *xmlDocNode; GWEN_XMLNODE *xmlGwbuildNode; fileNameBuf=_getSourcePathForFileName(currentContext, fileName); xmlDocNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); DBG_DEBUG(NULL, "Reading file %s", GWEN_Buffer_GetStart(fileNameBuf)); rv=GWEN_XML_ReadFile(xmlDocNode, GWEN_Buffer_GetStart(fileNameBuf), GWEN_XML_FLAGS_DEFAULT); if (rv<0) { DBG_ERROR(NULL, "Error in XML file \"%s\" (%d)", GWEN_Buffer_GetStart(fileNameBuf), rv); GWEN_Buffer_free(fileNameBuf); return NULL; } xmlGwbuildNode=GWEN_XMLNode_FindFirstTag(xmlDocNode, "gwbuild", NULL, NULL); if (xmlGwbuildNode==NULL) { DBG_ERROR(NULL, "File \"%s\" does not contain an \"gwbuild\" element", GWEN_Buffer_GetStart(fileNameBuf)); GWEN_XMLNode_free(xmlDocNode); GWEN_Buffer_free(fileNameBuf); return NULL; } rv=_getAndCheckRequiredGwenVersion(xmlGwbuildNode); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_XMLNode_free(xmlDocNode); GWEN_Buffer_free(fileNameBuf); return NULL; } _addBuildFileNameToGwBuild(gwbuild, currentContext, fileName); GWEN_XMLNode_UnlinkChild(xmlDocNode, xmlGwbuildNode); GWEN_XMLNode_free(xmlDocNode); GWEN_Buffer_free(fileNameBuf); return xmlGwbuildNode; } GWEN_BUFFER *_getSourcePathForFileName(const GWB_CONTEXT *currentContext, const char *fileName) { GWEN_BUFFER *fileNameBuf; const char *s; fileNameBuf=GWEN_Buffer_new(0, 256, 0, 1); s=GWB_Context_GetCurrentSourceDir(currentContext); if (s && *s) { GWEN_Buffer_AppendString(fileNameBuf, s); GWEN_Buffer_AppendString(fileNameBuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(fileNameBuf, fileName); return fileNameBuf; } void _addBuildFileNameToGwBuild(GWENBUILD *gwbuild, const GWB_CONTEXT *currentContext, const char *fileName) { GWEN_BUFFER *buildFilenameBuffer; const char *buildDir; const char *initialSourceDir; initialSourceDir=GWB_Context_GetInitialSourceDir(currentContext); buildDir=GWB_Context_GetCurrentBuildDir(currentContext); buildFilenameBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buildFilenameBuffer, initialSourceDir); if (buildDir) { GWEN_Buffer_AppendString(buildFilenameBuffer, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(buildFilenameBuffer, buildDir); } GWEN_Buffer_AppendString(buildFilenameBuffer, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(buildFilenameBuffer, fileName); GWBUILD_AddBuildFilename(gwbuild, GWEN_Buffer_GetStart(buildFilenameBuffer)); GWEN_Buffer_free(buildFilenameBuffer); } int _getAndCheckRequiredGwenVersion(GWEN_XMLNODE *xmlGwbuildNode) { const char *s; s=GWEN_XMLNode_GetProperty(xmlGwbuildNode, "requiredVersion", NULL); if (s && *s) { int vRequired; int vCurrent; vCurrent=(int) ((GWENHYWFAR_VERSION_MAJOR<<24)+ (GWENHYWFAR_VERSION_MINOR<<16)+ (GWENHYWFAR_VERSION_PATCHLEVEL<<8)+ (GWENHYWFAR_VERSION_BUILD)); vRequired=GWB_Utils_VersionStringToInt(s); if (vRequired<0) { DBG_ERROR(NULL, "Invalid required version \"%s\"", s); return GWEN_ERROR_GENERIC; } if (vCurrent"); return GWEN_ERROR_GENERIC; } if (GWEN_XMLNode_GetProperty(xmlNode, "value", NULL)) { DBG_WARN(NULL, "%s: Please dont use property \"value\", just store the value between and ", sName); } sMode=GWEN_XMLNode_GetProperty(xmlNode, "mode", "replace"); buf=GWB_Parser_ReadXmlDataIntoBufferAndExpand(GWB_Context_GetVars(currentContext), xmlNode); if (buf && GWEN_Buffer_GetUsedBytes(buf)) { if (strcasecmp(sMode, "replace")==0) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, sName, GWEN_Buffer_GetStart(buf)); else if (strcasecmp(sMode, "add")==0) GWEN_DB_SetCharValue(db, 0, sName, GWEN_Buffer_GetStart(buf)); else if (strcasecmp(sMode, "append")==0) _appendVarValue(db, sName, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } else { if (strcasecmp(sMode, "replace")==0) { GWEN_DB_DeleteVar(db, sName); } } return 0; } int _parseIfVarMatches(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWB_PARSER_PARSE_ELEMENT_FN fn) { const char *sName; const char *sPattern; const char *sValueInDb; GWEN_DB_NODE *db; GWEN_XMLNODE *xmlThen; GWEN_XMLNODE *xmlElse; int rv; xmlThen=GWEN_XMLNode_FindFirstTag(xmlNode, "then", NULL, NULL); xmlElse=GWEN_XMLNode_FindFirstTag(xmlNode, "else", NULL, NULL); db=GWB_Context_GetVars(currentContext); sName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(sName && *sName)) { DBG_ERROR(NULL, "No name for "); return GWEN_ERROR_GENERIC; } sPattern=GWEN_XMLNode_GetProperty(xmlNode, "value", NULL); if (!(sPattern && *sPattern)) { DBG_ERROR(NULL, "No value for "); return GWEN_ERROR_GENERIC; } sValueInDb=GWEN_DB_GetCharValue(db, sName, 0, NULL); if (!(sValueInDb && *sValueInDb)) { DBG_ERROR(NULL, "No value for \"%s\" in db for ", sName); return GWEN_ERROR_GENERIC; } if (-1!=GWEN_Text_ComparePattern(sValueInDb, sPattern, 0)) { rv=fn(project, currentContext, xmlThen?xmlThen:xmlNode); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } else { if (xmlElse) { rv=fn(project, currentContext, xmlElse); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } } return 0; } int _parseIfNotVarMatches(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWB_PARSER_PARSE_ELEMENT_FN fn) { const char *sName; const char *sPattern; const char *sValueInDb; GWEN_DB_NODE *db; GWEN_XMLNODE *xmlThen; GWEN_XMLNODE *xmlElse; int rv; xmlThen=GWEN_XMLNode_FindFirstTag(xmlNode, "then", NULL, NULL); xmlElse=GWEN_XMLNode_FindFirstTag(xmlNode, "else", NULL, NULL); db=GWB_Context_GetVars(currentContext); sName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(sName && *sName)) { DBG_ERROR(NULL, "No name for "); return GWEN_ERROR_GENERIC; } sPattern=GWEN_XMLNode_GetProperty(xmlNode, "value", NULL); if (!(sPattern && *sPattern)) { DBG_ERROR(NULL, "No value for "); return GWEN_ERROR_GENERIC; } sValueInDb=GWEN_DB_GetCharValue(db, sName, 0, NULL); if (!(sValueInDb && *sValueInDb)) { DBG_ERROR(NULL, "No value for \"%s\" in db for ", sName); return GWEN_ERROR_GENERIC; } if (-1==GWEN_Text_ComparePattern(sValueInDb, sPattern, 0)) { rv=fn(project, currentContext, xmlThen?xmlThen:xmlNode); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } else { if (xmlElse) { rv=fn(project, currentContext, xmlElse); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } } return 0; } int _parseIfVarHasValue(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWB_PARSER_PARSE_ELEMENT_FN fn) { int rv; GWEN_XMLNODE *xmlThen; GWEN_XMLNODE *xmlElse; xmlThen=GWEN_XMLNode_FindFirstTag(xmlNode, "then", NULL, NULL); xmlElse=GWEN_XMLNode_FindFirstTag(xmlNode, "else", NULL, NULL); rv=_varHasValue(currentContext, xmlNode); if (rv<0) return rv; if (rv) { return fn(project, currentContext, xmlThen?xmlThen:xmlNode); } else { if (xmlElse) return fn(project, currentContext, xmlElse); } return 0; } int _parseIfNotVarHasValue(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWB_PARSER_PARSE_ELEMENT_FN fn) { int rv; GWEN_XMLNODE *xmlThen; GWEN_XMLNODE *xmlElse; xmlThen=GWEN_XMLNode_FindFirstTag(xmlNode, "then", NULL, NULL); xmlElse=GWEN_XMLNode_FindFirstTag(xmlNode, "else", NULL, NULL); rv=_varHasValue(currentContext, xmlNode); if (rv<0) return rv; if (rv==0) { return fn(project, currentContext, xmlThen?xmlThen:xmlNode); } else { if (xmlElse) return fn(project, currentContext, xmlElse); } return 0; } int _varHasValue(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { const char *sName; const char *sPattern; GWEN_DB_NODE *db; int i; db=GWB_Context_GetVars(currentContext); sName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(sName && *sName)) { DBG_ERROR(NULL, "No name for "); return GWEN_ERROR_GENERIC; } sPattern=GWEN_XMLNode_GetProperty(xmlNode, "value", NULL); if (!(sPattern && *sPattern)) { DBG_ERROR(NULL, "No value for "); return GWEN_ERROR_GENERIC; } for (i=0; i<100; i++) { const char *sValueInDb; sValueInDb=GWEN_DB_GetCharValue(db, sName, i, NULL); if (!sValueInDb) break; if (-1!=GWEN_Text_ComparePattern(sValueInDb, sPattern, 0)) return 1; } return 0; } int _parseWriteFile(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { const char *fileName; GWEN_BUFFER *fileNameBuffer; GWB_FILE *file; const char *installPath; int rv; rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } fileName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(fileName && *fileName)) { DBG_ERROR(NULL, "No name for "); return GWEN_ERROR_GENERIC; } installPath=GWEN_XMLNode_GetProperty(xmlNode, "install", NULL); fileNameBuffer=_getSourcePathForFileName(currentContext, fileName); GWEN_Buffer_AppendString(fileNameBuffer, ".in"); rv=_readModifyWriteFile(xmlNode, GWB_Context_GetVars(currentContext), GWEN_Buffer_GetStart(fileNameBuffer), fileName); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(fileNameBuffer); return rv; } /* add output file */ file=GWB_File_List2_GetOrCreateFile(GWB_Project_GetFileList(project), GWB_Context_GetCurrentRelativeDir(currentContext), fileName); GWB_File_AddFlags(file, GWB_FILE_FLAGS_GENERATED); if (installPath && *installPath) { GWB_File_AddFlags(file, GWB_FILE_FLAGS_INSTALL); GWB_File_SetInstallPath(file, installPath); } /* add input file */ GWEN_Buffer_Reset(fileNameBuffer); GWEN_Buffer_AppendString(fileNameBuffer, fileName); GWEN_Buffer_AppendString(fileNameBuffer, ".in"); file=GWB_File_List2_GetOrCreateFile(GWB_Project_GetFileList(project), GWB_Context_GetCurrentRelativeDir(currentContext), GWEN_Buffer_GetStart(fileNameBuffer)); GWB_File_AddFlags(file, GWB_FILE_FLAGS_DIST); GWEN_Buffer_free(fileNameBuffer); return 0; } int _readModifyWriteFile(GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbContextVars, const char *sSourceFile, const char *sDestFile) { const char *fileName; GWEN_BUFFER *fileBufferIn; GWEN_BUFFER *fileBufferOut; int sourceFilePerms; int rv; fileName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(fileName && *fileName)) { DBG_ERROR(NULL, "No name for "); return GWEN_ERROR_GENERIC; } rv=_getFilePermissions(sSourceFile); if (rv<0) { DBG_ERROR(NULL, "Could not read permissions for \"%s\" (%d)", sSourceFile, rv); return rv; } sourceFilePerms=rv; fileBufferIn=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Helper_ReadFile(sSourceFile, fileBufferIn); if (rv<0) { DBG_ERROR(NULL, "Could not read \"%s\" (%d)", sSourceFile, rv); GWEN_Buffer_free(fileBufferIn); return rv; } fileBufferOut=GWEN_Buffer_new(0, 256, 0, 1); rv=GWB_Parser_ReplaceVarsBetweenAtSigns(GWEN_Buffer_GetStart(fileBufferIn), fileBufferOut, dbContextVars); GWEN_Buffer_free(fileBufferIn); if (rv<0) { DBG_ERROR(NULL, "Error translating content of file \"%s\" (%d)", sSourceFile, rv); GWEN_Buffer_free(fileBufferOut); return rv; } unlink(sDestFile); rv=GWEN_SyncIo_Helper_WriteFile(sDestFile, (const uint8_t*)GWEN_Buffer_GetStart(fileBufferOut), GWEN_Buffer_GetUsedBytes(fileBufferOut)); GWEN_Buffer_free(fileBufferOut); if (rv<0) { DBG_ERROR(NULL, "Could not write \"%s\" (%d)", sDestFile, rv); return rv; } rv=_setFilePermissions(sDestFile, sourceFilePerms); if (rv<0) { DBG_ERROR(NULL, "Could not set perms for \"%s\" (%d)", sDestFile, rv); return rv; } return 0; } int _getFilePermissions(const char *fname) { struct stat st; int rv; #if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED rv=lstat(fname, &st); #else rv=stat(fname, &st); #endif if (rv == -1) { DBG_ERROR(NULL, "Error on stat(\"%s\"): %d (%s)", fname, errno, strerror(errno)); return GWEN_ERROR_IO; } return (int)((st.st_mode & ~S_IFMT)); } int _setFilePermissions(const char *fname, int perms) { if (chmod(fname, perms) == -1) { DBG_ERROR(NULL, "Error on chmod(\"%s\"): %d (%s)", fname, errno, strerror(errno)); return GWEN_ERROR_IO; } return 0; } void _appendVarValue(GWEN_DB_NODE *db, const char *name, const char *newValue) { const char *s; s=GWEN_DB_GetCharValue(db, name, 0, NULL); if (s && *s) { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(buf, s); GWEN_Buffer_AppendString(buf, " "); GWEN_Buffer_AppendString(buf, newValue); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, name, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } else GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, name, newValue); } void GWB_Parser_SetItemValue(GWEN_DB_NODE *db, const char *sId, const char *suffix, const char *value) { GWEN_BUFFER *varNameBuffer; varNameBuffer=GWEN_Buffer_new(0, 64, 0, 1); GWEN_Buffer_AppendString(varNameBuffer, sId); GWEN_Buffer_AppendString(varNameBuffer, suffix); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(varNameBuffer), value); GWEN_Buffer_free(varNameBuffer); } int GWB_Parser_ReplaceVarsBetweenAtSigns(const char *s, GWEN_BUFFER *dbuf, GWEN_DB_NODE *db) { const char *p; #if 0 DBG_ERROR(NULL, "Using vars:"); GWEN_DB_Dump(db, 2); #endif p=s; while (*p) { if (*p=='@') { p++; if (*p=='@') GWEN_Buffer_AppendByte(dbuf, '@'); else if (!isalpha(*p)) { GWEN_Buffer_AppendByte(dbuf, '@'); GWEN_Buffer_AppendByte(dbuf, *p); } else { const char *pStart; pStart=p; while (*p && *p!='@' && (isalnum(*p) || *p=='_')) p++; if (*p=='@') { int len; char *rawName; const char *value; len=p-pStart; if (len<1) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty variable name in code"); return GWEN_ERROR_BAD_DATA; } rawName=(char *) malloc(len+1); assert(rawName); memmove(rawName, pStart, len); rawName[len]=0; /*DBG_ERROR(NULL, "Setting data from variable \"%s\"", rawName);*/ value=GWEN_DB_GetCharValue(db, rawName, 0, NULL); if (value) GWEN_Buffer_AppendString(dbuf, value); else { DBG_WARN(NULL, "Warning: Empty value for DB var \"%s\"", rawName); } free(rawName); } else { DBG_INFO(GWEN_LOGDOMAIN, "Not interpreting at sign as start of variable name, adding to output."); p=pStart; GWEN_Buffer_AppendByte(dbuf, '@'); GWEN_Buffer_AppendByte(dbuf, *p); } } p++; } else { GWEN_Buffer_AppendByte(dbuf, *p); p++; } } return 0; } int GWB_Parser_ParseWellKnownElements(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn) { const char *name; name=GWEN_XMLNode_GetData(n); if (name && *name) { int rv; DBG_DEBUG(NULL, "Handling element \"%s\"", name); if (strcasecmp(name, "writeFile")==0) rv=_parseWriteFile(project, currentContext, n); else if (strcasecmp(name, "setVar")==0) rv=_parseSetVar(currentContext, n); else if (strcasecmp(name, "ifVarMatches")==0) rv=_parseIfVarMatches(project, currentContext, n, fn); else if (strcasecmp(name, "ifNotVarMatches")==0) rv=_parseIfNotVarMatches(project, currentContext, n, fn); else if (strcasecmp(name, "ifVarHasValue")==0) rv=_parseIfVarHasValue(project, currentContext, n, fn); else if (strcasecmp(name, "ifNotVarHasValue")==0) rv=_parseIfNotVarHasValue(project, currentContext, n, fn); else { DBG_DEBUG(NULL, "Element not handled here, ignoring"); rv=1; } if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error in element \"%s\", aborting", name); return rv; } } return 0; } int GWB_Parser_ParseSourcesOrHeaders(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, /*int alwaysDist, int isSource,*/ uint32_t fileFlags, const char *defaultTypeName, const char *defaultBuilder) { uint32_t flags=0; int rv; const char *s; const char *installPath; const char *fileType; const char *currentFolder; const char *builder; GWEN_STRINGLIST *fileNameList; rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } currentFolder=GWB_Context_GetCurrentRelativeDir(currentContext); fileType=GWEN_XMLNode_GetProperty(xmlNode, "type", defaultTypeName); builder=GWEN_XMLNode_GetProperty(xmlNode, "builder", defaultBuilder); installPath=GWEN_XMLNode_GetProperty(xmlNode, "install", NULL); if (installPath && *installPath) flags|=GWB_FILE_FLAGS_INSTALL; s=GWEN_XMLNode_GetProperty(xmlNode, "generated", "FALSE"); if (s && *s && (strcasecmp(s, "true")==0 || strcasecmp(s, "yes")==0)) flags|=GWB_FILE_FLAGS_GENERATED; s=GWEN_XMLNode_GetProperty(xmlNode, "dist", (fileFlags & GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST)?"TRUE":"FALSE"); if (s && *s && (strcasecmp(s, "true")==0 || strcasecmp(s, "yes")==0)) flags|=GWB_FILE_FLAGS_DIST; fileNameList=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), xmlNode, 1); if (fileNameList) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(fileNameList); while(se) { const char *sFileName; sFileName=GWEN_StringListEntry_Data(se); if (sFileName && *sFileName) { GWB_FILE *file; file=GWB_File_List2_GetOrCreateFile(GWB_Project_GetFileList(project), currentFolder, sFileName); GWB_File_AddFlags(file, flags); if (installPath) GWB_File_SetInstallPath(file, installPath); if (fileType) GWB_File_SetFileType(file, fileType); if (builder) GWB_File_SetBuilder(file, builder); if (fileFlags & GWB_PARSER_SRCFILEFLAGS_ISSOURCE) GWB_Context_AddSourceFile(currentContext, file); } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(fileNameList); } return 0; } GWB_TARGET *GWB_Parser_AddTargetForSourceFile(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWBUILD_TARGETTYPE targetType, const char *fileName, const char *fileType, const char *builderName, const char *installPath) { GWB_TARGET *target; GWB_CONTEXT *newContext; GWB_FILE *file; const char *currentFolder; currentFolder=GWB_Context_GetCurrentRelativeDir(currentContext); target=GWB_Target_new(project); GWB_Target_SetName(target, fileName); GWB_Target_SetId(target, fileName); GWB_Target_SetTargetType(target, targetType); newContext=GWB_Parser_CopyContextForTarget(currentContext); GWB_Context_SetCurrentTarget(newContext, target); GWB_Target_SetContext(target, newContext); GWB_Project_AddTarget(project, target); GWB_Context_Tree2_AddChild(currentContext, newContext); file=GWB_File_List2_GetOrCreateFile(GWB_Project_GetFileList(project), currentFolder, fileName); GWB_File_AddFlags(file, GWB_FILE_FLAGS_DIST); GWB_File_SetFileType(file, fileType); GWB_File_SetBuilder(file, builderName); if (installPath && *installPath) GWB_Target_SetInstallPath(target, installPath); GWB_Context_AddSourceFile(newContext, file); return target; } gwenhywfar-5.12.0/tools/gwenbuild/parser/p_target.c0000664000175000017500000002411114460564441017277 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/p_target.h" #include "gwenbuild/parser/p_buildfiles.h" #include "gwenbuild/parser/parser.h" #include "gwenbuild/types/builder_be.h" #include #include static GWB_TARGET *_readTarget(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseUsedTargets(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseIncludes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseLibraries(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseDefines(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); int GWB_ParseTarget(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; GWB_TARGET *target; GWB_CONTEXT *newContext; rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } target=_readTarget(project, currentContext, xmlNode); if (target==NULL) { DBG_INFO(NULL, "No target created"); return GWEN_ERROR_GENERIC; } newContext=GWB_Parser_CopyContextForTarget(currentContext); GWB_Context_SetCurrentTarget(newContext, target); GWB_Target_SetContext(target, newContext); rv=_parseChildNodes(project, newContext, xmlNode); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWB_Context_free(newContext); GWB_Target_free(target); return rv; } GWB_Project_AddTarget(project, target); GWB_Context_Tree2_AddChild(currentContext, newContext); return 0; } GWB_TARGET *_readTarget(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWB_TARGET *target; const char *s; GWBUILD_TARGETTYPE targetType; uint32_t flags=GWEN_DB_FLAGS_OVERWRITE_VARS; GWEN_DB_NODE *db; target=GWB_Target_new(project); s=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(s && *s)) { DBG_ERROR(NULL, "Target has no name"); return NULL; } GWB_Target_SetName(target, s); GWB_Target_SetId(target, s); s=GWEN_XMLNode_GetProperty(xmlNode, "id", NULL); if (s && *s) GWB_Target_SetId(target, s); s=GWEN_XMLNode_GetProperty(xmlNode, "type", NULL); if (!(s && *s)) { DBG_ERROR(NULL, "Target has no type"); GWB_Target_free(target); return NULL; } targetType=GWBUILD_TargetType_fromString(s); if (targetType==GWBUILD_TargetType_Invalid) { DBG_ERROR(NULL, "Bad target type \"%s\"", s?s:""); GWB_Target_free(target); return NULL; } GWB_Target_SetTargetType(target, targetType); s=GWEN_XMLNode_GetProperty(xmlNode, "install", NULL); GWB_Target_SetInstallPath(target, s); GWB_Target_SetSoVersion(target, GWEN_XMLNode_GetIntProperty(xmlNode, "so_current", 0), GWEN_XMLNode_GetIntProperty(xmlNode, "so_age", 0), GWEN_XMLNode_GetIntProperty(xmlNode, "so_revision", 0)); db=GWB_Context_GetVars(currentContext); GWEN_DB_SetCharValue(db, flags, "target_name", GWB_Target_GetName(target)); GWEN_DB_SetCharValueFromInt(db, flags, "target_so_current", GWB_Target_GetSoVersionCurrent(target)); GWEN_DB_SetCharValueFromInt(db, flags, "target_so_age", GWB_Target_GetSoVersionAge(target)); GWEN_DB_SetCharValueFromInt(db, flags, "target_so_revision", GWB_Target_GetSoVersionRevision(target)); GWEN_DB_SetCharValueFromInt(db, flags, "target_so_effective", GWB_Target_GetSoVersionCurrent(target)-GWB_Target_GetSoVersionAge(target)); return target; } int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(xmlNode); while (n) { const char *name; name=GWEN_XMLNode_GetData(n); if (name && *name) { int rv; DBG_DEBUG(NULL, "Handling element \"%s\"", name); if (strcasecmp(name, "subdirs")==0) rv=GWB_Parser_ParseSubdirs(project, currentContext, n, _parseChildNodes); else if (strcasecmp(name, "sources")==0) rv=GWB_Parser_ParseSourcesOrHeaders(project, currentContext, n, GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST | GWB_PARSER_SRCFILEFLAGS_ISSOURCE, NULL, NULL); else if (strcasecmp(name, "headers")==0) rv=GWB_Parser_ParseSourcesOrHeaders(project, currentContext, n, GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST, NULL, NULL); else if (strcasecmp(name, "data")==0) rv=GWB_Parser_ParseSourcesOrHeaders(project, currentContext, n, GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST, NULL, NULL); else if (strcasecmp(name, "extradist")==0) rv=GWB_Parser_ParseSourcesOrHeaders(project, currentContext, n, GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST, NULL, NULL); else if (strcasecmp(name, "useTargets")==0) rv=_parseUsedTargets(currentContext, n); else if (strcasecmp(name, "includes")==0) rv=_parseIncludes(currentContext, n); else if (strcasecmp(name, "define")==0) rv=_parseDefines(currentContext, n); else if (strcasecmp(name, "libraries")==0) rv=_parseLibraries(currentContext, n); else if (strcasecmp(name, "target")==0) rv=GWB_ParseTarget(project, currentContext, n); else if (strcasecmp(name, "buildFiles")==0) rv=GWB_ParseBuildFiles(project, currentContext, n); else rv=GWB_Parser_ParseWellKnownElements(project, currentContext, n, _parseChildNodes); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error in element \"%s\", aborting", name); return rv; } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int _parseUsedTargets(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWB_TARGET *target; int rv; GWEN_STRINGLIST *targetNameList; target=GWB_Context_GetCurrentTarget(currentContext); if (target==NULL) { DBG_ERROR(NULL, "No target in current context, SNH!"); return GWEN_ERROR_INTERNAL; } rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } targetNameList=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), xmlNode, 1); if (targetNameList) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(targetNameList); while(se) { const char *sTargetName; sTargetName=GWEN_StringListEntry_Data(se); if (sTargetName && *sTargetName) GWB_Target_AddUsedTargetName(target, sTargetName); se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(targetNameList); } return 0; } int _parseIncludes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWB_TARGET *target; int rv; const char *builderType; GWEN_STRINGLIST *entryList; target=GWB_Context_GetCurrentTarget(currentContext); if (target==NULL) { DBG_ERROR(NULL, "No target in current context, SNH!"); return GWEN_ERROR_INTERNAL; } rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } builderType=GWEN_XMLNode_GetProperty(xmlNode, "type", "c"); entryList=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), xmlNode, 0); if (entryList) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(entryList); while(se) { const char *sEntry; sEntry=GWEN_StringListEntry_Data(se); if (sEntry && *sEntry) GWB_Context_AddInclude(currentContext, builderType, sEntry); se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(entryList); } return 0; } int _parseDefines(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; const char *varName; const char *value; const char *quoted; rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } quoted=GWEN_XMLNode_GetProperty(xmlNode, "quoted", "FALSE"); varName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); value=GWEN_XMLNode_GetProperty(xmlNode, "value", NULL); if (!(varName && *varName)) { DBG_ERROR(NULL, "Missing variable name in DEFINE"); return GWEN_ERROR_GENERIC; } if (quoted && strcasecmp(quoted, "TRUE")==0) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dbuf, "\\\""); if (value && *value) GWEN_Buffer_AppendString(dbuf, value); GWEN_Buffer_AppendString(dbuf, "\\\""); GWB_Context_SetDefine(currentContext, varName, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } else { GWB_Context_SetDefine(currentContext, varName, value); } return 0; } int _parseLibraries(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWB_TARGET *target; int rv; GWEN_STRINGLIST *entryList; target=GWB_Context_GetCurrentTarget(currentContext); if (target==NULL) { DBG_ERROR(NULL, "No target in current context, SNH!"); return GWEN_ERROR_INTERNAL; } rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } entryList=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), xmlNode, 1); if (entryList) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(entryList); while(se) { const char *sEntry; sEntry=GWEN_StringListEntry_Data(se); if (sEntry && *sEntry) GWB_Target_AddUsedLibraryName(target, sEntry); se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(entryList); } return 0; } gwenhywfar-5.12.0/tools/gwenbuild/parser/p_dependencies.c0000664000175000017500000002345614465133476020457 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/p_dependencies.h" #include "gwenbuild/parser/parser.h" #include #include #include #include #include #include static int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseDep(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _checkVersion(GWEN_DB_NODE *db, const char *sId, const char *sName, const char *sMinVersion, const char *sMaxVersion); static int _retrieveCflags(GWEN_DB_NODE *db, const char *sId, const char *sName); static int _retrieveLdflags(GWEN_DB_NODE *db, const char *sId, const char *sName); static int _callPkgConfig(GWEN_DB_NODE *db, const char *sId, const char *sName, const char *suffix, const char *args); static void _replaceControlCharsWithBlanks(char *ptr); static int _retrieveVariables(GWB_CONTEXT *currentContext, GWEN_DB_NODE *db, const char *sId, const char *sName, GWEN_XMLNODE *xmlNode); static int _retrieveVariable(GWEN_DB_NODE *db, const char *sId, const char *sName, const char *variableName); int GWB_ParseDependencies(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; rv=_parseChildNodes(project, currentContext, xmlNode); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(xmlNode); while (n) { const char *name; name=GWEN_XMLNode_GetData(n); if (name && *name) { int rv; DBG_DEBUG(NULL, "Handling element \"%s\"", name); if (strcasecmp(name, "subdirs")==0) rv=GWB_Parser_ParseSubdirs(project, currentContext, n, _parseChildNodes); else if (strcasecmp(name, "dep")==0) rv=_parseDep(currentContext, n); else rv=GWB_Parser_ParseWellKnownElements(project, currentContext, n, _parseChildNodes); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error in element \"%s\", aborting", name); return rv; } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int _parseDep(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; const char *s; const char *sId; const char *sName; const char *sMinVersion; const char *sMaxVersion; int required; rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } sId=GWEN_XMLNode_GetProperty(xmlNode, "prefix", NULL); if (!(sId && *sId)) sId=GWEN_XMLNode_GetProperty(xmlNode, "id", NULL); sName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(sName && *sName)) { DBG_ERROR(NULL, "Dependency has no name"); return GWEN_ERROR_GENERIC; } if (!(sId && *sId)) /* use name if no id/prefix given */ sId=sName; s=GWEN_XMLNode_GetProperty(xmlNode, "required", "FALSE"); required=(strcasecmp(s, "TRUE")==0)?1:0; sMinVersion=GWEN_XMLNode_GetProperty(xmlNode, "minversion", NULL); sMaxVersion=GWEN_XMLNode_GetProperty(xmlNode, "maxversion", NULL); rv=_checkVersion(GWB_Context_GetVars(currentContext), sId, sName, sMinVersion, sMaxVersion); if (rv==0) { GWEN_XMLNODE *n; rv=_retrieveCflags(GWB_Context_GetVars(currentContext), sId, sName); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } rv=_retrieveLdflags(GWB_Context_GetVars(currentContext), sId, sName); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } n=GWEN_XMLNode_FindFirstTag(xmlNode, "variables", NULL, NULL); if (n) { rv=_retrieveVariables(currentContext, GWB_Context_GetVars(currentContext), sId, sName, n); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } } else if (rv==GWEN_ERROR_NOT_FOUND) { if (required) { DBG_ERROR(NULL, "Dependency \"%s\" not found but required", sName); return rv; } } else { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } int _retrieveVariables(GWB_CONTEXT *currentContext, GWEN_DB_NODE *db, const char *sId, const char *sName, GWEN_XMLNODE *xmlNode) { GWEN_STRINGLIST *slVariables; slVariables=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), xmlNode, 1); if (slVariables) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(slVariables); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { int rv; rv=_retrieveVariable(db, sId, sName, s); if (rv<0) { DBG_ERROR(NULL, "Error retrieving variable \"%s\" for dependency \"%s\"", s, sId); GWEN_StringList_free(slVariables); return rv; } } se=GWEN_StringListEntry_Next(se); } } return 0; } int _checkVersion(GWEN_DB_NODE *db, const char *sId, const char *sName, const char *sMinVersion, const char *sMaxVersion) { GWEN_BUFFER *argBuffer; GWEN_BUFFER *stdOutBuffer; GWEN_BUFFER *stdErrBuffer; int rv; stdOutBuffer=GWEN_Buffer_new(0, 256, 0, 1); stdErrBuffer=GWEN_Buffer_new(0, 256, 0, 1); argBuffer=GWEN_Buffer_new(0, 256, 0, 1); if (sMinVersion) { GWEN_Buffer_AppendString(argBuffer, " --atleast-version="); GWEN_Buffer_AppendString(argBuffer, sMinVersion); GWEN_Buffer_AppendString(argBuffer, " "); } if (sMaxVersion) { GWEN_Buffer_AppendString(argBuffer, " --max-version="); GWEN_Buffer_AppendString(argBuffer, sMaxVersion); GWEN_Buffer_AppendString(argBuffer, " "); } GWEN_Buffer_AppendString(argBuffer, sName); DBG_DEBUG(NULL, "Running command with args: [%s]", GWEN_Buffer_GetStart(argBuffer)); rv=GWEN_Process_RunCommandWaitAndGather("pkg-config", GWEN_Buffer_GetStart(argBuffer), stdOutBuffer, stdErrBuffer); if (rv<0) { DBG_ERROR(NULL, "Error running pkg-config (%d)", rv); GWEN_Buffer_free(argBuffer); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); return rv; } GWEN_Buffer_free(argBuffer); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); GWB_Parser_SetItemValue(db, sId, "_EXISTS", (rv==0)?"TRUE":"FALSE"); fprintf(stdout, " dep %s: %s\n", sId, (rv==0)?"found":"not found"); return (rv==0)?0:GWEN_ERROR_NOT_FOUND; } int _retrieveCflags(GWEN_DB_NODE *db, const char *sId, const char *sName) { int rv; rv=_callPkgConfig(db, sId, sName, "_CFLAGS", "--cflags"); if (rv<0) { DBG_ERROR(NULL, "Error running pkg-config (%d)", rv); return rv; } return 0; } int _retrieveLdflags(GWEN_DB_NODE *db, const char *sId, const char *sName) { int rv; rv=_callPkgConfig(db, sId, sName, "_LIBS", "--libs"); if (rv<0) { DBG_ERROR(NULL, "Error running pkg-config (%d)", rv); return rv; } return 0; } int _retrieveVariable(GWEN_DB_NODE *db, const char *sId, const char *sName, const char *variableName) { int rv; GWEN_BUFFER *varArgBuffer; GWEN_BUFFER *varSuffixBuffer; const char *s; varArgBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(varArgBuffer, "--variable="); GWEN_Buffer_AppendString(varArgBuffer, variableName); varSuffixBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(varSuffixBuffer, "_"); s=variableName; while(*s) GWEN_Buffer_AppendByte(varSuffixBuffer, toupper(*(s++))); rv=_callPkgConfig(db, sId, sName, GWEN_Buffer_GetStart(varSuffixBuffer), GWEN_Buffer_GetStart(varArgBuffer)); GWEN_Buffer_free(varSuffixBuffer); GWEN_Buffer_free(varArgBuffer); if (rv<0) { DBG_ERROR(NULL, "Error running pkg-config (%d)", rv); return rv; } return 0; } int _callPkgConfig(GWEN_DB_NODE *db, const char *sId, const char *sName, const char *suffix, const char *args) { GWEN_BUFFER *argBuffer; GWEN_BUFFER *stdOutBuffer; GWEN_BUFFER *stdErrBuffer; int rv; stdOutBuffer=GWEN_Buffer_new(0, 256, 0, 1); stdErrBuffer=GWEN_Buffer_new(0, 256, 0, 1); argBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(argBuffer, args); GWEN_Buffer_AppendString(argBuffer, " "); GWEN_Buffer_AppendString(argBuffer, sName); DBG_DEBUG(NULL, "Running command with args: [%s]", GWEN_Buffer_GetStart(argBuffer)); rv=GWEN_Process_RunCommandWaitAndGather("pkg-config", GWEN_Buffer_GetStart(argBuffer), stdOutBuffer, stdErrBuffer); if (rv<0) { DBG_ERROR(NULL, "Error running pkg-config (%d)", rv); GWEN_Buffer_free(argBuffer); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); return rv; } GWEN_Buffer_free(argBuffer); _replaceControlCharsWithBlanks(GWEN_Buffer_GetStart(stdOutBuffer)); GWEN_Text_CondenseBuffer(stdOutBuffer); GWB_Parser_SetItemValue(db, sId, suffix, GWEN_Buffer_GetStart(stdOutBuffer)); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); return 0; } void _replaceControlCharsWithBlanks(char *ptr) { while(ptr && *ptr) { if (*ptr<32) *ptr=32; ptr++; } } gwenhywfar-5.12.0/tools/gwenbuild/parser/p_checkcompiler.h0000664000175000017500000000126314116666046020633 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_CHECKCOMPILER_H #define GWBUILD_PARSER_CHECKCOMPILER_H #include "gwenbuild/types/project.h" #include int GWB_ParseCheckCompiler(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); #endif gwenhywfar-5.12.0/tools/gwenbuild/parser/Makefile.in0000664000175000017500000006426114730344662017406 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 = tools/gwenbuild/parser ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgwb_parser_la_LIBADD = am_libgwb_parser_la_OBJECTS = parser.lo p_buildfiles.lo p_project.lo \ p_checkfunctions.lo p_checkheaders.lo p_checklibs.lo \ p_checkprogs.lo p_checkcompiler.lo p_dependencies.lo \ p_options.lo p_target.lo libgwb_parser_la_OBJECTS = $(am_libgwb_parser_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/p_buildfiles.Plo \ ./$(DEPDIR)/p_checkcompiler.Plo \ ./$(DEPDIR)/p_checkfunctions.Plo \ ./$(DEPDIR)/p_checkheaders.Plo ./$(DEPDIR)/p_checklibs.Plo \ ./$(DEPDIR)/p_checkprogs.Plo ./$(DEPDIR)/p_dependencies.Plo \ ./$(DEPDIR)/p_options.Plo ./$(DEPDIR)/p_project.Plo \ ./$(DEPDIR)/p_target.Plo ./$(DEPDIR)/parser.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(libgwb_parser_la_SOURCES) DIST_SOURCES = $(libgwb_parser_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = @all_includes@ -I$(top_builddir) -I../ -I../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) noinst_LTLIBRARIES = libgwb_parser.la libgwb_parser_la_SOURCES = \ parser.c \ p_buildfiles.c \ p_project.c \ p_checkfunctions.c \ p_checkheaders.c \ p_checklibs.c \ p_checkprogs.c \ p_checkcompiler.c \ p_dependencies.c \ p_options.c \ p_target.c noinst_HEADERS = \ parser.h \ p_buildfiles.h \ p_checkfunctions.h \ p_checkheaders.h \ p_checklibs.h \ p_checkcompiler.h \ p_checkprogs.h \ p_dependencies.h \ p_options.h \ p_project.h \ p_target.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/gwenbuild/parser/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gwenbuild/parser/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): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwb_parser.la: $(libgwb_parser_la_OBJECTS) $(libgwb_parser_la_DEPENDENCIES) $(EXTRA_libgwb_parser_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgwb_parser_la_OBJECTS) $(libgwb_parser_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_buildfiles.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_checkcompiler.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_checkfunctions.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_checkheaders.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_checklibs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_checkprogs.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_dependencies.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_options.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_project.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_target.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) 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 clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/p_buildfiles.Plo -rm -f ./$(DEPDIR)/p_checkcompiler.Plo -rm -f ./$(DEPDIR)/p_checkfunctions.Plo -rm -f ./$(DEPDIR)/p_checkheaders.Plo -rm -f ./$(DEPDIR)/p_checklibs.Plo -rm -f ./$(DEPDIR)/p_checkprogs.Plo -rm -f ./$(DEPDIR)/p_dependencies.Plo -rm -f ./$(DEPDIR)/p_options.Plo -rm -f ./$(DEPDIR)/p_project.Plo -rm -f ./$(DEPDIR)/p_target.Plo -rm -f ./$(DEPDIR)/parser.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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 ./$(DEPDIR)/p_buildfiles.Plo -rm -f ./$(DEPDIR)/p_checkcompiler.Plo -rm -f ./$(DEPDIR)/p_checkfunctions.Plo -rm -f ./$(DEPDIR)/p_checkheaders.Plo -rm -f ./$(DEPDIR)/p_checklibs.Plo -rm -f ./$(DEPDIR)/p_checkprogs.Plo -rm -f ./$(DEPDIR)/p_dependencies.Plo -rm -f ./$(DEPDIR)/p_options.Plo -rm -f ./$(DEPDIR)/p_project.Plo -rm -f ./$(DEPDIR)/p_target.Plo -rm -f ./$(DEPDIR)/parser.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool 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 maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool 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: gwenhywfar-5.12.0/tools/gwenbuild/parser/p_checklibs.h0000664000175000017500000000124714116666046017754 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_CHECKLIBS_H #define GWBUILD_PARSER_CHECKLIBS_H #include "gwenbuild/types/project.h" #include int GWB_ParseCheckLibs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); #endif gwenhywfar-5.12.0/tools/gwenbuild/parser/p_checkheaders.h0000664000175000017500000000126014116666046020431 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_CHECKHEADERS_H #define GWBUILD_PARSER_CHECKHEADERS_H #include "gwenbuild/types/project.h" #include int GWB_ParseCheckHeaders(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); #endif gwenhywfar-5.12.0/tools/gwenbuild/parser/p_options.h0000664000175000017500000000124014116666046017511 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_OPTIONS_H #define GWBUILD_PARSER_OPTIONS_H #include "gwenbuild/types/project.h" #include int GWB_ParseOption(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); #endif gwenhywfar-5.12.0/tools/gwenbuild/parser/p_buildfiles.c0000664000175000017500000003177014144206312020131 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/p_buildfiles.h" #include "gwenbuild/parser/parser.h" #include "gwenbuild/types/builder_be.h" #include #include static GWB_BUILD_CMD *_parseBuildCmd(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static GWB_BUILD_SUBCMD *_parseSubCmd(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd); static GWEN_DB_NODE *_prepareCmdDb(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext); static void _parseAndSetBuildMessage(GWB_BUILD_SUBCMD *buildSubCmd, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd); static int _parseBuildInputFiles(GWB_BUILD_CMD *bcmd, GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseBuildOutputFiles(GWB_BUILD_CMD *bcmd, GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static GWB_BUILD_SUBCMD *_parseBuildCommand(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd); static int _readFileList(GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbVars, const char *sCurrentRelativeDir, GWB_FILE_LIST2 *projectFileList, GWB_FILE_LIST2 *targetFileList, uint32_t flagsToAdd); static int _readFilesFromDataNode(GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbVars, const char *sCurrentRelativeDir, GWB_FILE_LIST2 *projectFileList, GWB_FILE_LIST2 *targetFileList, uint32_t flagsToAdd); static int _readFileListFromTagNode(GWEN_XMLNODE *xmlNode, const GWB_FILE_LIST2 *projectFileList, GWB_FILE_LIST2 *targetFileList); static void _addFilePathsToDb(GWB_CONTEXT *currentContext, const GWB_FILE_LIST2 *fileList, GWEN_DB_NODE *db, const char *varName); int GWB_ParseBuildFiles(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWB_TARGET *target; GWB_BUILD_CMD *bcmd; GWB_BUILD_SUBCMD *buildSubCmd; GWEN_DB_NODE *dbForCmd; target=GWB_Context_GetCurrentTarget(currentContext); bcmd=_parseBuildCmd(project, currentContext, xmlNode); if (bcmd==NULL) { DBG_INFO(NULL, "here"); return GWEN_ERROR_GENERIC; } dbForCmd=_prepareCmdDb(bcmd, currentContext); if (dbForCmd==NULL) { DBG_INFO(NULL, "here"); GWB_BuildCmd_free(bcmd); return GWEN_ERROR_GENERIC; } buildSubCmd=_parseSubCmd(bcmd, currentContext, xmlNode, dbForCmd); if (buildSubCmd==NULL) { DBG_INFO(NULL, "here"); GWEN_DB_Group_free(dbForCmd); GWB_BuildCmd_free(bcmd); return GWEN_ERROR_GENERIC; } _parseAndSetBuildMessage(buildSubCmd, xmlNode, dbForCmd); GWB_BuildCmd_AddBuildCommand(bcmd, buildSubCmd); if (target) GWB_Target_AddExplicitBuild(target, bcmd); else GWB_Project_AddExplicitBuild(project, bcmd); GWEN_DB_Group_free(dbForCmd); return 0; } GWB_BUILD_CMD *_parseBuildCmd(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *n; GWB_BUILD_CMD *bcmd; int rv; const char *s; bcmd=GWB_BuildCmd_new(); GWB_BuildCmd_SetFolder(bcmd, GWB_Context_GetCurrentRelativeDir(currentContext)); s=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (s && *s) GWB_BuildCmd_SetBuilderName(bcmd, s); s=GWEN_XMLNode_GetProperty(xmlNode, "auto", "TRUE"); if (s && *s && 0==strcasecmp(s, "TRUE")) GWB_BuildCmd_AddFlags(bcmd, GWB_BUILD_CMD_FLAGS_AUTO); n=GWEN_XMLNode_FindFirstTag(xmlNode, "input", NULL, NULL); if (n) { rv=_parseBuildInputFiles(bcmd, project, currentContext, n); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWB_BuildCmd_free(bcmd); return NULL; } } n=GWEN_XMLNode_FindFirstTag(xmlNode, "output", NULL, NULL); if (n) { rv=_parseBuildOutputFiles(bcmd, project, currentContext, n); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWB_BuildCmd_free(bcmd); return NULL; } } return bcmd; } GWEN_DB_NODE *_prepareCmdDb(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext) { GWEN_DB_NODE *dbForCmd; dbForCmd=GWEN_DB_Group_new("dbForCmd"); _addFilePathsToDb(currentContext, GWB_BuildCmd_GetInFileList2(bcmd), dbForCmd, "INPUT"); _addFilePathsToDb(currentContext, GWB_BuildCmd_GetOutFileList2(bcmd), dbForCmd, "OUTPUT"); return dbForCmd; } GWB_BUILD_SUBCMD *_parseSubCmd(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(xmlNode, "cmd", NULL, NULL); if (n) { GWB_BUILD_SUBCMD *buildSubCmd; const char *s; buildSubCmd=_parseBuildCommand(bcmd, currentContext, n, dbForCmd); if (buildSubCmd==NULL) { DBG_ERROR(NULL, "here"); return NULL; } s=GWEN_XMLNode_GetProperty(n, "deleteOutFileFirst", "FALSE"); if (s && strcasecmp(s, "TRUE")==0) GWB_BuildCmd_AddFlags(bcmd, GWB_BUILD_CMD_FLAGS_DEL_OUTFILES); return buildSubCmd; } return 0; } void _parseAndSetBuildMessage(GWB_BUILD_SUBCMD *buildSubCmd, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(xmlNode, "buildMessage", NULL, NULL); if (n) { GWEN_BUFFER *dbuf; dbuf=GWB_Parser_ReadXmlDataIntoBufferAndExpand(dbForCmd, n); if (dbuf) { GWB_BuildSubCmd_SetBuildMessage(buildSubCmd, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } } } int _parseBuildInputFiles(GWB_BUILD_CMD *bcmd, GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; rv=_readFileList(xmlNode, GWB_Context_GetVars(currentContext), GWB_Context_GetCurrentRelativeDir(currentContext), GWB_Project_GetFileList(project), GWB_BuildCmd_GetInFileList2(bcmd), 0); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } int _parseBuildOutputFiles(GWB_BUILD_CMD *bcmd, GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; rv=_readFileList(xmlNode, GWB_Context_GetVars(currentContext), GWB_Context_GetCurrentRelativeDir(currentContext), GWB_Project_GetFileList(project), GWB_BuildCmd_GetOutFileList2(bcmd), GWB_FILE_FLAGS_GENERATED); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } GWB_BUILD_SUBCMD *_parseBuildCommand(GWB_BUILD_CMD *bcmd, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbForCmd) { GWEN_BUFFER *dbuf; const char *toolName; GWB_BUILD_SUBCMD *buildSubCmd; const char *s; int rv; rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return NULL; } toolName=GWEN_XMLNode_GetProperty(xmlNode, "tool", NULL); if (!(toolName && *toolName)) { DBG_ERROR(NULL, "No tool in "); return NULL; } dbuf=GWB_Parser_ReadXmlDataIntoBufferAndExpand(dbForCmd, xmlNode); buildSubCmd=GWB_BuildSubCmd_new(); GWB_BuildSubCmd_SetCommand(buildSubCmd, toolName); if (dbuf) { GWB_BuildSubCmd_SetArguments(buildSubCmd, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } s=GWEN_XMLNode_GetProperty(xmlNode, "checkDates", "TRUE"); if (s && strcasecmp(s, "TRUE")==0) GWB_BuildCmd_AddFlags(bcmd, GWB_BUILD_CMD_FLAGS_CHECK_DATES); return buildSubCmd; } int _readFileList(GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbVars, const char *sCurrentRelativeDir, GWB_FILE_LIST2 *projectFileList, GWB_FILE_LIST2 *targetFileList, uint32_t flagsToAdd) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetChild(xmlNode); while(n) { GWEN_XMLNODE_TYPE tt; int rv; tt=GWEN_XMLNode_GetType(n); if (tt==GWEN_XMLNodeTypeTag) rv=_readFileListFromTagNode(n, projectFileList, targetFileList); else if (tt==GWEN_XMLNodeTypeData) rv=_readFilesFromDataNode(n, dbVars, sCurrentRelativeDir, projectFileList, targetFileList, flagsToAdd); else rv=0; if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } n=GWEN_XMLNode_Next(n); } return 0; } int _readFilesFromDataNode(GWEN_XMLNODE *xmlNode, GWEN_DB_NODE *dbVars, const char *sCurrentRelativeDir, GWB_FILE_LIST2 *projectFileList, GWB_FILE_LIST2 *targetFileList, uint32_t flagsToAdd) { const char *s; s=GWEN_XMLNode_GetData(xmlNode); if (s && *s) { int rv; GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_DB_ReplaceVars(dbVars, s, buf); if(rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(buf); return rv; } if (GWEN_Buffer_GetUsedBytes(buf)) { GWEN_STRINGLIST *sl; sl=GWEN_StringList_fromString(GWEN_Buffer_GetStart(buf), " ", 1); if (sl==NULL) { DBG_ERROR(NULL, "Could not generate string list from data [%s]", GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); return GWEN_ERROR_GENERIC; } GWBUILD_AddFilesFromStringList(projectFileList, sCurrentRelativeDir, sl, targetFileList, flagsToAdd, 0); GWEN_StringList_free(sl); } GWEN_Buffer_free(buf); } return 0; } int _readFileListFromTagNode(GWEN_XMLNODE *xmlNode, const GWB_FILE_LIST2 *projectFileList, GWB_FILE_LIST2 *targetFileList) { const char *tagName; tagName=GWEN_XMLNode_GetData(xmlNode); if (tagName && *tagName && strcasecmp(tagName, "files")==0) { int index; const char *pattern; pattern=GWEN_XMLNode_GetProperty(xmlNode, "match", NULL); index=GWEN_XMLNode_GetIntProperty(xmlNode, "index", -1); if (index>=0) { GWB_FILE *file; file=GWB_File_List2_GetAt(projectFileList, index); if (file) GWB_File_List2_PushBack(targetFileList, file); } else { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(projectFileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { const char *fname; fname=GWB_File_GetName(file); if (fname) { if (pattern==NULL || -1!=GWEN_Text_ComparePattern(fname, pattern, 0)) GWB_File_List2_PushBack(targetFileList, file); } file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } return 0; } else { DBG_ERROR(NULL, "Unknown tag name \"%s\"", tagName); return GWEN_ERROR_GENERIC; } } void _addFilePathsToDb(GWB_CONTEXT *currentContext, const GWB_FILE_LIST2 *fileList, GWEN_DB_NODE *db, const char *varName) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { const GWB_FILE *file; GWEN_BUFFER *fbuf; fbuf=GWEN_Buffer_new(0, 256, 0, 1); file=GWB_File_List2Iterator_Data(it); while(file) { const char *folder; int useBuildDir; useBuildDir=GWB_File_GetFlags(file) & GWB_FILE_FLAGS_GENERATED; folder=GWB_File_GetFolder(file); GWB_Builder_AddRelativeFolderToBuffer(currentContext, folder, useBuildDir, fbuf); if (GWEN_Buffer_GetUsedBytes(fbuf)) GWEN_Buffer_AppendString(fbuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(fbuf, GWB_File_GetName(file)); GWEN_DB_SetCharValue(db, 0, varName, GWEN_Buffer_GetStart(fbuf)); GWEN_Buffer_Reset(fbuf); file=GWB_File_List2Iterator_Next(it); } GWEN_Buffer_free(fbuf); GWB_File_List2Iterator_free(it); } } gwenhywfar-5.12.0/tools/gwenbuild/parser/p_checkfunctions.h0000664000175000017500000000126614116666046021034 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_CHECKFUNCTIONS_H #define GWBUILD_PARSER_CHECKFUNCTIONS_H #include "gwenbuild/types/project.h" #include int GWB_ParseCheckFunctions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); #endif gwenhywfar-5.12.0/tools/gwenbuild/parser/p_checkprogs.c0000664000175000017500000001235614460564441020151 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/p_checkheaders.h" #include "gwenbuild/parser/parser.h" #include #include static int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseProg(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _determineProgPath(GWEN_DB_NODE *db, const char *sCmd, const char *sId, const GWEN_STRINGLIST *slAltNames, const GWEN_STRINGLIST *slPaths); static int _determineNamePath(GWEN_DB_NODE *db, const char *sCmd, const char *sId, const GWEN_STRINGLIST *slPaths); int GWB_ParseCheckProgs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; rv=_parseChildNodes(project, currentContext, xmlNode); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(xmlNode); while (n) { const char *name; name=GWEN_XMLNode_GetData(n); if (name && *name) { int rv; DBG_DEBUG(NULL, "Handling element \"%s\"", name); if (strcasecmp(name, "prog")==0) rv=_parseProg(project, currentContext, n); else { DBG_INFO(NULL, "Element not handled"); rv=0; } if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error in element \"%s\", aborting", name); return rv; } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int _parseProg(GWEN_UNUSED GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; const char *sCmd; const char *sId; GWEN_XMLNODE *n; GWEN_DB_NODE *db; GWEN_STRINGLIST *slAltNames=NULL; GWEN_STRINGLIST *slPaths=NULL; db=GWB_Context_GetVars(currentContext); rv=GWEN_XMLNode_ExpandProperties(xmlNode, db); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } sCmd=GWEN_XMLNode_GetProperty(xmlNode, "cmd", NULL); if (!(sCmd && *sCmd)) { DBG_ERROR(NULL, "No cmd in "); return GWEN_ERROR_GENERIC; } sId=GWEN_XMLNode_GetProperty(xmlNode, "id", NULL); if (!(sId && *sId)) { DBG_ERROR(NULL, "No id in "); return GWEN_ERROR_GENERIC; } n=GWEN_XMLNode_FindFirstTag(xmlNode, "alternativeNames", NULL, NULL); if (n) slAltNames=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), n, 1); n=GWEN_XMLNode_FindFirstTag(xmlNode, "paths", NULL, NULL); if (n) slPaths=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), n, 1); else { slPaths=GWBUILD_GetPathFromEnvironment(); if (slPaths==NULL) slPaths=GWEN_StringList_fromString("/usr/local/bin:/usr/bin:/bin", ": ", 0); } rv=_determineProgPath(GWB_Context_GetVars(currentContext), sCmd, sId, slAltNames, slPaths); if (rv==1) { GWB_Parser_SetItemValue(db, sId, "_EXISTS", "TRUE"); fprintf(stdout, " prog %s: found\n", sCmd); } else { GWB_Parser_SetItemValue(GWB_Context_GetVars(currentContext), sId, "_EXISTS", "FALSE"); fprintf(stdout, " prog %s: not found\n", sCmd); } return 0; } /* Result <0: ERROR, ==0: Not found, >0; Found */ int _determineProgPath(GWEN_DB_NODE *db, const char *sCmd, const char *sId, const GWEN_STRINGLIST *slAltNames, const GWEN_STRINGLIST *slPaths) { int rv; rv=_determineNamePath(db, sCmd, sId, slPaths); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } else if (rv==1) { DBG_DEBUG(NULL, "Found path for prog \"%s\"", sCmd); return 1; } else { if (slAltNames) { const GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(slAltNames); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { rv=_determineNamePath(db, sCmd, sId, slPaths); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } else if (rv>0) { DBG_DEBUG(NULL, "Found path for prog \"%s\"", sCmd); return 1; } } se=GWEN_StringListEntry_Next(se); } } } return 0; } /* Result <0: ERROR, ==0: Not found, >0; Found */ int _determineNamePath(GWEN_DB_NODE *db, const char *sCmd, const char *sId, const GWEN_STRINGLIST *slPaths) { GWEN_BUFFER *dbuf; int rv; dbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(slPaths, sCmd, dbuf); if (rv<0) { if (rv==GWEN_ERROR_NOT_FOUND) { DBG_DEBUG(NULL, "Command \"%s\" not found", sCmd); GWEN_Buffer_free(dbuf); return 0; } else { DBG_DEBUG(NULL, "ERROR on GWEN_Directory_FindFileInPaths(\"%s\"): %d", sCmd, rv); GWEN_Buffer_free(dbuf); return rv; } } GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, sId, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); return 1; } gwenhywfar-5.12.0/tools/gwenbuild/parser/p_project.c0000664000175000017500000003464714460564441017476 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/p_project.h" #include "gwenbuild/parser/p_buildfiles.h" #include "gwenbuild/parser/p_checkfunctions.h" #include "gwenbuild/parser/p_checkheaders.h" #include "gwenbuild/parser/p_checklibs.h" #include "gwenbuild/parser/p_checkcompiler.h" #include "gwenbuild/parser/p_checkprogs.h" #include "gwenbuild/parser/p_dependencies.h" #include "gwenbuild/parser/p_options.h" #include "gwenbuild/parser/p_target.h" #include "gwenbuild/utils.h" #include "gwenbuild/parser/parser.h" #include #include static int _parseVersions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _writeConfigH(const GWB_PROJECT *project); static int _parseDefine(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseI18n(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static void _addTargetForLanguage(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *sLanguage, const char *installPath); static int _setProjectVersionFromString(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, const char *sVersionString); static void _setProjectVersionFromProjectAttributes(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, GWEN_XMLNODE *xmlNode); static void _writeProjectVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars); static void _writeProjectSoVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars); int GWB_ParseProject(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { const char *s; int rv; GWEN_DB_NODE *db; uint32_t flags=GWEN_DB_FLAGS_OVERWRITE_VARS; db=GWB_Context_GetVars(currentContext); s=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(s && *s)) { DBG_ERROR(NULL, "Project has no name"); return GWEN_ERROR_BAD_DATA; } GWB_Project_SetProjectName(project, s); GWEN_DB_SetCharValue(db, flags, "PACKAGE", s); GWB_Project_SetDefineQuoted(project, "PACKAGE", s); s=GWEN_XMLNode_GetProperty(xmlNode, "write_config_h", "TRUE"); if (s && strcasecmp(s, "TRUE")==0) GWB_Project_AddFlags(project, GWB_PROJECT_FLAGS_CONFIG_H); rv=_parseVersions(project, currentContext, xmlNode); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } rv=_parseChildNodes(project, currentContext, xmlNode); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } if (GWB_Project_GetFlags(project) & GWB_PROJECT_FLAGS_CONFIG_H) { int rv; rv=_writeConfigH(project); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error writing config.h, aborting"); return rv; } } return 0; } int _parseVersions(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { const char *s; int rv; GWEN_DB_NODE *dbContextVars; dbContextVars=GWB_Context_GetVars(currentContext); s=GWEN_XMLNode_GetProperty(xmlNode, "version", NULL); if (s && *s) { rv=_setProjectVersionFromString(project, dbContextVars, s); if (rv<0) { DBG_ERROR(NULL, "here (%d)", rv); return GWEN_ERROR_BAD_DATA; } } else _setProjectVersionFromProjectAttributes(project, dbContextVars, xmlNode); _writeProjectVersionToContextDbVars(project, dbContextVars); GWB_Project_SetSoVersion(project, GWEN_XMLNode_GetIntProperty(xmlNode, "so_current", 0), GWEN_XMLNode_GetIntProperty(xmlNode, "so_age", 0), GWEN_XMLNode_GetIntProperty(xmlNode, "so_revision", 0)); _writeProjectSoVersionToContextDbVars(project, dbContextVars); s=GWEN_DB_GetCharValue(dbContextVars, "project_version", 0, NULL); if (s && *s) { GWB_Project_SetDefineQuoted(project, "VERSION", s); } return 0; } void _writeProjectVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars) { const uint32_t flags=GWEN_DB_FLAGS_OVERWRITE_VARS; const char *s; GWEN_DB_SetCharValue(dbContextVars, flags, "project_name", GWB_Project_GetProjectName(project)); GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_vmajor", GWB_Project_GetVersionMajor(project)); GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_vminor", GWB_Project_GetVersionMinor(project)); GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_vpatchlevel", GWB_Project_GetVersionPatchlevel(project)); GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_vbuild", GWB_Project_GetVersionBuild(project)); s=GWB_Project_GetVersionTag(project); if (s && *s) GWEN_DB_SetCharValue(dbContextVars, flags, "project_vtag", s); s=GWEN_DB_GetCharValue(dbContextVars, "project_version", 0, NULL); if (s && *s) { GWEN_DB_SetCharValue(dbContextVars, flags, "VERSION", s); } } void _writeProjectSoVersionToContextDbVars(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars) { const uint32_t flags=GWEN_DB_FLAGS_OVERWRITE_VARS; GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_so_current", GWB_Project_GetSoVersionCurrent(project)); GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_so_age", GWB_Project_GetSoVersionAge(project)); GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_so_revision", GWB_Project_GetSoVersionRevision(project)); GWEN_DB_SetCharValueFromInt(dbContextVars, flags, "project_so_effective", GWB_Project_GetSoVersionCurrent(project)-GWB_Project_GetSoVersionAge(project)); } int _setProjectVersionFromString(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, const char *sVersionString) { int rv; const uint32_t flags=GWEN_DB_FLAGS_OVERWRITE_VARS; GWEN_DB_NODE *versionDb; GWEN_DB_SetCharValue(dbContextVars, flags, "project_version", sVersionString); versionDb=GWEN_DB_Group_new("versionDb"); rv=GWB_Utils_VersionStringToDb(versionDb, NULL, sVersionString); if (rv<0) { DBG_ERROR(NULL, "Invalid version string [%s]", sVersionString); GWEN_DB_Group_free(versionDb); return GWEN_ERROR_BAD_DATA; } GWB_Project_SetVersion(project, GWEN_DB_GetIntValue(versionDb, "vmajor", 0, 0), GWEN_DB_GetIntValue(versionDb, "vminor", 0, 0), GWEN_DB_GetIntValue(versionDb, "vpatchlevel", 0, 0), GWEN_DB_GetIntValue(versionDb, "vbuild", 0, 0), GWEN_DB_GetCharValue(versionDb, "vtag", 0, NULL)); GWEN_DB_Group_free(versionDb); return 0; } void _setProjectVersionFromProjectAttributes(GWB_PROJECT *project, GWEN_DB_NODE *dbContextVars, GWEN_XMLNODE *xmlNode) { GWB_Project_SetVersion(project, GWEN_XMLNode_GetIntProperty(xmlNode, "vmajor", 0), GWEN_XMLNode_GetIntProperty(xmlNode, "vminor", 0), GWEN_XMLNode_GetIntProperty(xmlNode, "vpatchlevel", 0), GWEN_XMLNode_GetIntProperty(xmlNode, "vbuild", 0), GWEN_XMLNode_GetProperty(xmlNode, "vtag", NULL)); GWB_Utils_VersionToDbVar(dbContextVars, "project_version", GWB_Project_GetVersionMajor(project), GWB_Project_GetVersionMinor(project), GWB_Project_GetVersionPatchlevel(project), GWB_Project_GetVersionBuild(project), GWB_Project_GetVersionTag(project)); } int _parseChildNodes(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(xmlNode); while (n) { const char *name; DBG_DEBUG(NULL, "- Reading child node"); name=GWEN_XMLNode_GetData(n); if (name && *name) { int rv; DBG_DEBUG(NULL, "Handling element \"%s\"", name); if (strcasecmp(name, "option")==0) rv=GWB_ParseOption(project, currentContext, n); else if (strcasecmp(name, "dependencies")==0) rv=GWB_ParseDependencies(project, currentContext, n); else if (strcasecmp(name, "checkheaders")==0) rv=GWB_ParseCheckHeaders(project, currentContext, n); else if (strcasecmp(name, "checkfunctions")==0) rv=GWB_ParseCheckFunctions(project, currentContext, n); else if (strcasecmp(name, "checklibs")==0) rv=GWB_ParseCheckLibs(project, currentContext, n); else if (strcasecmp(name, "checkprogs")==0) rv=GWB_ParseCheckProgs(project, currentContext, n); else if (strcasecmp(name, "checkCompiler")==0) rv=GWB_ParseCheckCompiler(project, currentContext, n); else if (strcasecmp(name, "target")==0) rv=GWB_ParseTarget(project, currentContext, n); else if (strcasecmp(name, "define")==0) rv=_parseDefine(project, currentContext, n); else if (strcasecmp(name, "i18n")==0) rv=_parseI18n(project, currentContext, n); else if (strcasecmp(name, "buildFiles")==0) rv=GWB_ParseBuildFiles(project, currentContext, n); else if (strcasecmp(name, "extradist")==0) rv=GWB_Parser_ParseSourcesOrHeaders(project, currentContext, n, GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST, NULL, NULL); else if (strcasecmp(name, "data")==0) rv=GWB_Parser_ParseSourcesOrHeaders(project, currentContext, n, GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST, NULL, NULL); else if (strcasecmp(name, "i18n")==0) rv=GWB_Parser_ParseSourcesOrHeaders(project, currentContext, n, GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST, "po", "msgfmt"); else if (strcasecmp(name, "subdirs")==0) rv=GWB_Parser_ParseSubdirs(project, currentContext, n, _parseChildNodes); else rv=GWB_Parser_ParseWellKnownElements(project, currentContext, n, _parseChildNodes); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error in element \"%s\", aborting", name); return rv; } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int _writeConfigH(const GWB_PROJECT *project) { GWB_KEYVALUEPAIR_LIST *defineList; GWEN_BUFFER *fileBuffer; int rv; defineList=GWB_Project_GetDefineList(project); fileBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fileBuffer, "/* config.h generated by gwenbuild */\n\n"); if (defineList) GWB_KeyValuePair_List_WriteAllPairsToBuffer(defineList, "#define ", " ", "\n", fileBuffer); GWEN_Buffer_AppendString(fileBuffer, "\n"); unlink("config.h"); rv=GWEN_SyncIo_Helper_WriteFile("config.h", (const uint8_t*)GWEN_Buffer_GetStart(fileBuffer), GWEN_Buffer_GetUsedBytes(fileBuffer)); if (rv<0) { DBG_ERROR(NULL, "Could not write \"config.h\" (%d)", rv); GWEN_Buffer_free(fileBuffer); return rv; } GWEN_Buffer_free(fileBuffer); return 0; } int _parseDefine(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; const char *varName; const char *value; const char *quoted; rv=GWEN_XMLNode_ExpandProperties(xmlNode, GWB_Context_GetVars(currentContext)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } quoted=GWEN_XMLNode_GetProperty(xmlNode, "quoted", "FALSE"); varName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); value=GWEN_XMLNode_GetProperty(xmlNode, "value", NULL); if (!(varName && *varName)) { DBG_ERROR(NULL, "Missing variable name in DEFINE"); return GWEN_ERROR_GENERIC; } if (quoted && strcasecmp(quoted, "TRUE")==0) GWB_Project_SetDefineQuoted(project, varName, value); else GWB_Project_SetDefine(project, varName, value); return 0; } int _parseI18n(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { if (GWEN_DB_GetCharValue(GWB_Context_GetVars(currentContext), "GWBUILD_TOOL_MSGFMT", 0, NULL)) { GWEN_STRINGLIST *sl; const char *installPath; installPath=GWEN_XMLNode_GetProperty(xmlNode, "install", NULL); sl=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(currentContext), xmlNode, 1); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { fprintf(stderr, "Adding language catalog \"%s\"\n", s); _addTargetForLanguage(project, currentContext, s, installPath); } se=GWEN_StringListEntry_Next(se); } } } else { DBG_WARN(NULL, "Tool msgfmt missing, not creating language catalogs"); } return 0; } void _addTargetForLanguage(GWB_PROJECT *project, GWB_CONTEXT *currentContext, const char *sLanguage, const char *installPath) { GWEN_BUFFER *fileNameBuffer; GWEN_BUFFER *installPathBuffer=NULL; GWB_TARGET *target; fileNameBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fileNameBuffer, sLanguage); GWEN_Buffer_AppendString(fileNameBuffer, ".po"); if (!(installPath && *installPath)) installPath=GWEN_DB_GetCharValue(GWB_Context_GetVars(currentContext), "localedir", 0, NULL); if (installPath && *installPath) { installPathBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(installPathBuffer, installPath); GWEN_Buffer_AppendString(installPathBuffer, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(installPathBuffer, sLanguage); GWEN_Buffer_AppendString(installPathBuffer, GWEN_DIR_SEPARATOR_S "LC_MESSAGES"); } target=GWB_Parser_AddTargetForSourceFile(project, currentContext, GWBUILD_TargetType_I18nCatalog, GWEN_Buffer_GetStart(fileNameBuffer), "po", "msgfmt", installPathBuffer?GWEN_Buffer_GetStart(installPathBuffer):NULL); GWEN_Buffer_Reset(fileNameBuffer); GWEN_Buffer_AppendString(fileNameBuffer, GWB_Project_GetProjectName(project)); GWEN_Buffer_AppendString(fileNameBuffer, ".mo"); GWB_Target_SetInstallName(target, GWEN_Buffer_GetStart(fileNameBuffer)); GWEN_Buffer_free(installPathBuffer); GWEN_Buffer_free(fileNameBuffer); } gwenhywfar-5.12.0/tools/gwenbuild/parser/p_dependencies.h0000664000175000017500000000126014116666046020446 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_DEPENDENCIES_H #define GWBUILD_PARSER_DEPENDENCIES_H #include "gwenbuild/types/project.h" #include int GWB_ParseDependencies(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); #endif gwenhywfar-5.12.0/tools/gwenbuild/parser/Makefile.am0000664000175000017500000000107714125675316017372 00000000000000INCLUDES=@all_includes@ -I$(top_builddir) -I../ -I../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) noinst_LTLIBRARIES=libgwb_parser.la libgwb_parser_la_SOURCES=\ parser.c \ p_buildfiles.c \ p_project.c \ p_checkfunctions.c \ p_checkheaders.c \ p_checklibs.c \ p_checkprogs.c \ p_checkcompiler.c \ p_dependencies.c \ p_options.c \ p_target.c noinst_HEADERS=\ parser.h \ p_buildfiles.h \ p_checkfunctions.h \ p_checkheaders.h \ p_checklibs.h \ p_checkcompiler.h \ p_checkprogs.h \ p_dependencies.h \ p_options.h \ p_project.h \ p_target.h gwenhywfar-5.12.0/tools/gwenbuild/parser/p_checkcompiler.c0000664000175000017500000000542114116666046020626 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/p_checkcompiler.h" #include "gwenbuild/parser/parser.h" #include "gwenbuild/tools/trycompile.h" #include #include static int _parseChildNodes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); static int _parseArg(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); int GWB_ParseCheckCompiler(GWEN_UNUSED GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; rv=_parseChildNodes(currentContext, xmlNode); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } int _parseChildNodes(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(xmlNode); while (n) { const char *name; name=GWEN_XMLNode_GetData(n); if (name && *name) { int rv; DBG_DEBUG(NULL, "Handling element \"%s\"", name); if (strcasecmp(name, "arg")==0) rv=_parseArg(currentContext, n); else { DBG_INFO(NULL, "Element not handled"); rv=0; } if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error in element \"%s\", aborting", name); return rv; } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int _parseArg(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode) { int rv; const char *sName; GWEN_DB_NODE *db; GWEN_BUFFER *argsBuffer; db=GWB_Context_GetVars(currentContext); rv=GWEN_XMLNode_ExpandProperties(xmlNode, db); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } sName=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(sName && *sName)) { DBG_ERROR(NULL, "Dependency has no name"); return GWEN_ERROR_GENERIC; } argsBuffer=GWB_Parser_ReadXmlDataIntoBufferAndExpand(GWB_Context_GetVars(currentContext), xmlNode); if (argsBuffer) { rv=GWB_Tools_CheckCompilerArgs(currentContext, GWEN_Buffer_GetStart(argsBuffer)); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } else if (rv==0) { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, sName, "TRUE"); fprintf(stdout, " compiler args %s: TRUE\n", sName); } else { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, sName, "FALSE"); fprintf(stdout, " compiler args %s: FALSE\n", sName); } } return 0; } gwenhywfar-5.12.0/tools/gwenbuild/parser/parser.h0000664000175000017500000000656514460564441017010 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_H #define GWBUILD_PARSER_H #include "gwenbuild/types/context.h" #include "gwenbuild/types/project.h" #include #include #include #define GWB_PARSER_FILENAME "0BUILD" #define GWB_PARSER_SRCFILEFLAGS_ALWAYSDIST 0x00000001 #define GWB_PARSER_SRCFILEFLAGS_ISSOURCE 0x00000002 GWB_PROJECT *GWB_Parser_ReadBuildTree(GWENBUILD *gwbuild, GWB_CONTEXT *currentContext, const char *srcDir, GWB_KEYVALUEPAIR_LIST *givenOptionList); GWB_CONTEXT *GWB_Parser_CopyContextForSubdir(const GWB_CONTEXT *sourceContext, const char *folder); GWB_CONTEXT *GWB_Parser_CopyContextForTarget(const GWB_CONTEXT *sourceContext); GWEN_XMLNODE *GWB_Parser_ReadBuildFile(GWENBUILD *gwbuild, const GWB_CONTEXT *currentContext, const char *fileName); GWEN_STRINGLIST *GWB_Parser_ReadXmlDataIntoStringList(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode, int ignoreDupes); GWEN_BUFFER *GWB_Parser_ReadXmlDataIntoBufferAndExpand(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode); GWEN_BUFFER *GWB_Parser_ReadNamedXmlDataIntoBufferAndExpand(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode, const char *elem); typedef int (*GWB_PARSER_PARSE_ELEMENT_FN)(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); int GWB_Parser_ParseWellKnownElements(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *n, GWB_PARSER_PARSE_ELEMENT_FN fn); int GWB_Parser_ParseSubdirs(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, GWB_PARSER_PARSE_ELEMENT_FN fn); //int GWB_Parser_ParseSetVar(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); int GWB_Parser_ParseWriteFile(GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); int GWB_Parser_ParseSourcesOrHeaders(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode, /*int alwaysDist, int isSource*/ uint32_t fileFlags, const char *defaultTypeName, const char *defaultBuilder); void GWB_Parser_SetItemValue(GWEN_DB_NODE *db, const char *sId, const char *suffix, const char *value); int GWB_Parser_ReplaceVarsBetweenAtSigns(const char *s, GWEN_BUFFER *dbuf, GWEN_DB_NODE *db); GWB_TARGET *GWB_Parser_AddTargetForSourceFile(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWBUILD_TARGETTYPE targetType, const char *fileName, const char *fileType, const char *builderName, const char *installPath); #endif gwenhywfar-5.12.0/tools/gwenbuild/parser/p_target.h0000664000175000017500000000123614116666046017311 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PARSER_TARGET_H #define GWBUILD_PARSER_TARGET_H #include "gwenbuild/types/project.h" #include int GWB_ParseTarget(GWB_PROJECT *project, GWB_CONTEXT *currentContext, GWEN_XMLNODE *xmlNode); #endif gwenhywfar-5.12.0/tools/gwenbuild/c_install.c0000664000175000017500000000363614144206312016144 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "c_install.h" #include "utils.h" #include "gwenbuild/filenames.h" #include #include int GWB_InstallFiles(const char *fileName, const char *destDir) { GWB_KEYVALUEPAIR_LIST *kvpList; GWB_KEYVALUEPAIR *kvp; GWEN_BUFFER *destPathBuf; kvpList=GWB_Utils_ReadInstallFileList(fileName); if (kvpList==NULL) { DBG_ERROR(NULL, "Error reading install file list (file \"%s\")", fileName); return GWEN_ERROR_GENERIC; } destPathBuf=GWEN_Buffer_new(0, 256, 0, 1); kvp=GWB_KeyValuePair_List_First(kvpList); while(kvp) { const char *sDestPath; const char *sSrcPath; int rv; sDestPath=GWB_KeyValuePair_GetKey(kvp); sSrcPath=GWB_KeyValuePair_GetValue(kvp); if (destDir) { GWEN_Buffer_AppendString(destPathBuf, destDir); GWEN_Buffer_AppendString(destPathBuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(destPathBuf, sDestPath); sDestPath=GWEN_Buffer_GetStart(destPathBuf); } fprintf(stdout, "Installing file '%s'\n", sSrcPath); rv=GWB_Utils_CopyFile(sSrcPath, sDestPath); if (rv<0) { fprintf(stderr, "ERROR: Error installing file \"%s\"\n", sSrcPath); GWEN_Buffer_free(destPathBuf); GWB_KeyValuePair_List_free(kvpList); return 2; } GWEN_Buffer_Reset(destPathBuf); kvp=GWB_KeyValuePair_List_Next(kvp); } GWEN_Buffer_free(destPathBuf); GWB_KeyValuePair_List_free(kvpList); return 0; } gwenhywfar-5.12.0/tools/gwenbuild/builders/0000775000175000017500000000000014730345122015715 500000000000000gwenhywfar-5.12.0/tools/gwenbuild/builders/README0000664000175000017500000000017614116666046016532 00000000000000 target_so_version_effective target_so_version_age target_so_version_revision target_name cflags ldflags cc ar ranlib ld gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/0000775000175000017500000000000014730345122017057 500000000000000gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/app.gwb0000664000175000017500000000153614116666046020276 00000000000000 object *.o $(target_name)$(exeext) -fPIC $(local/ldflags) -o Linking '$(target_name)$(exeext)' gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/msgfmt.gwb0000664000175000017500000000142614144206312020774 00000000000000 po *.po $(firstInputFileNoExt).mo -c -o Generating language catalog '$(firstInputFileNoExt).mo' gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/sharedlib.gwb0000664000175000017500000000572714633110451021445 00000000000000 object *.o lib$(target_name).so.$(target_so_effective).$(target_so_age).$(target_so_revision) lib$(target_name).so.$(target_so_effective) lib$(target_name).so -L$(folder) -l$(target_name) -shared -fPIC -Wl,-no-undefined -Wl,-soname,lib$(target_name).so.$(target_so_effective) $(ldflags) $(local/ldflags) -o -Wl,--whole-archive -Wl,--no-whole-archive Linking 'lib$(target_name).so.$(target_so_effective).$(target_so_age).$(target_so_revision)' -s lib$(target_name).so.$(target_so_effective).$(target_so_age).$(target_so_revision) lib$(target_name).so.$(target_so_effective) Creating symbolic link 'lib$(target_name).so.$(target_so_effective)' -s lib$(target_name).so.$(target_so_effective).$(target_so_age).$(target_so_revision) lib$(target_name).so Creating symbolic link 'lib$(target_name).so' -d lib$(target_name).so.$(target_so_effective).$(target_so_age).$(target_so_revision) lib$(target_name).so.$(target_so_effective) / gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/staticlib.gwb0000664000175000017500000000234314116666046021471 00000000000000 object *.o lib$(target_name).a -l$(target_name) Trc Linking 'lib$(target_name).a' $(GWBUILD_TOOL_AR) Finally linking 'lib$(target_name).a' Indexing 'lib$(target_name).a' gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/cxxapp.gwb0000664000175000017500000000155514116666046021022 00000000000000 object *.o $(target_name)$(exeext) -fPIC $(ldflags) $(local/ldflags) -o Linking '$(target_name)$(exeext)' gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/cbuilder.gwb0000664000175000017500000000331114116666046021300 00000000000000 c *.c $(firstInputFileNoExt).o $(firstInputFileNoExt).d -c -fPIC -DPIC $(cflags) $(local/cflags) -MM -o Creating depfile for '$(firstInputFile)' -c -fPIC -DPIC $(cflags) $(local/cflags) -o Compiling '$(firstInputFile)' gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/tm2builder.gwb0000664000175000017500000000265114116666046021566 00000000000000 tm2 *.t2d *.xml $(firstInputFileNoExt).c $(firstInputFileNoExt).h $(firstInputFileNoExt)_p.h $(tm2flags) Generating sources from '$(firstInputFile)' $(tm2flags) --defs-only Generating type definitions from '$(firstInputFile)' gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/cxxbuilder.gwb0000664000175000017500000000334014116666046021662 00000000000000 cxx *.cpp $(firstInputFileNoExt).o $(firstInputFileNoExt).d -c -fPIC -DPIC $(cxxflags) $(local/cxxflags) -MM -o Creating depfile for '$(firstInputFile)' -c -fPIC -DPIC $(cflags) $(local/cflags) -o CXX-Compiling '$(firstInputFile)' gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/avrhexfile.gwb0000664000175000017500000000176014460564441021650 00000000000000 avrasm *.asm $(target_name).hex $(target_name).list $(target_name).map -o -l -m Assembling '$(target_name).hex' gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/Makefile.in0000664000175000017500000005072314730344662021063 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 = tools/gwenbuild/builders/posix ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_builderdata_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h 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)$(builderdatadir)" DATA = $(dist_builderdata_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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ builderdatadir = $(datadir)/gwenhywfar/gwenbuild/builders/posix dist_builderdata_DATA = \ app.gwb \ avrhexfile.gwb \ cxxapp.gwb \ cbuilder.gwb \ cxxbuilder.gwb \ module.gwb \ msgfmt.gwb \ sharedlib.gwb \ staticlib.gwb \ tmplib.gwb \ tm2builder.gwb 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) --gnu tools/gwenbuild/builders/posix/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gwenbuild/builders/posix/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_builderdataDATA: $(dist_builderdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_builderdata_DATA)'; test -n "$(builderdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(builderdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(builderdatadir)" || 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)$(builderdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(builderdatadir)" || exit $$?; \ done uninstall-dist_builderdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_builderdata_DATA)'; test -n "$(builderdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(builderdatadir)'; $(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)$(builderdatadir)"; 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 clean-libtool 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-dist_builderdataDATA 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 mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_builderdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_builderdataDATA 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 \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_builderdataDATA .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: gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/module.gwb0000664000175000017500000000236614116666046021005 00000000000000 object *.o $(target_name).so -L$(folder) -l$(target_name) -shared -fPIC -Wl,-no-undefined $(ldflags) $(local/ldflags) -o -Wl,--whole-archive -Wl,--no-whole-archive Linking '$(target_name).so' gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/tmplib.gwb0000664000175000017500000000173414127633412020776 00000000000000 object *.o lib$(target_name).a -l$(target_name) Trc Linking 'lib$(target_name).a' Indexing 'lib$(target_name).a' gwenhywfar-5.12.0/tools/gwenbuild/builders/posix/Makefile.am0000664000175000017500000000041514460564441021042 00000000000000 builderdatadir=$(datadir)/gwenhywfar/gwenbuild/builders/posix dist_builderdata_DATA=\ app.gwb \ avrhexfile.gwb \ cxxapp.gwb \ cbuilder.gwb \ cxxbuilder.gwb \ module.gwb \ msgfmt.gwb \ sharedlib.gwb \ staticlib.gwb \ tmplib.gwb \ tm2builder.gwb gwenhywfar-5.12.0/tools/gwenbuild/builders/Makefile.in0000664000175000017500000007061414730344662017722 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 = tools/gwenbuild/builders ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgwb_builders_la_LIBADD = am_libgwb_builders_la_OBJECTS = genericbuilder.lo gbuilderdescr.lo libgwb_builders_la_OBJECTS = $(am_libgwb_builders_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/gbuilderdescr.Plo \ ./$(DEPDIR)/genericbuilder.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(libgwb_builders_la_SOURCES) DIST_SOURCES = $(libgwb_builders_la_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 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 \ 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 $(top_srcdir)/depcomp README 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DBUILDERDATADIR=\"$(datadir)/gwenhywfar/gwenbuild/builders\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = posix windows INCLUDES = @all_includes@ -I$(top_builddir) -I../ -I../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) noinst_LTLIBRARIES = libgwb_builders.la libgwb_builders_la_SOURCES = \ genericbuilder.c \ gbuilderdescr.c noinst_HEADERS = \ genericbuilder.h \ genericbuilder_p.h \ gbuilderdescr.h \ gbuilderdescr_p.h all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/gwenbuild/builders/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gwenbuild/builders/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): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwb_builders.la: $(libgwb_builders_la_OBJECTS) $(libgwb_builders_la_DEPENDENCIES) $(EXTRA_libgwb_builders_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgwb_builders_la_OBJECTS) $(libgwb_builders_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gbuilderdescr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genericbuilder.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 $(LTLIBRARIES) $(HEADERS) 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 clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/gbuilderdescr.Plo -rm -f ./$(DEPDIR)/genericbuilder.Plo -rm -f Makefile distclean-am: clean-am distclean-compile 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 ./$(DEPDIR)/gbuilderdescr.Plo -rm -f ./$(DEPDIR)/genericbuilder.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool 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 \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ 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-compile mostlyclean-generic \ mostlyclean-libtool 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: gwenhywfar-5.12.0/tools/gwenbuild/builders/genericbuilder.h0000664000175000017500000000143414116666046021004 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDERS_GENERIC_H #define GWBUILD_BUILDERS_GENERIC_H #include "gwenbuild/types/builder.h" #include GWB_BUILDER *GWB_GenericBuilder_Factory(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *builderName); GWB_BUILDER *GWB_GenericBuilder_new(GWENBUILD *gwenbuild, GWB_CONTEXT *context, GWEN_XMLNODE *xmlDescr); #endif gwenhywfar-5.12.0/tools/gwenbuild/builders/gbuilderdescr.c0000664000175000017500000001161114460564441020626 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/builders/gbuilderdescr_p.h" #include "gwenbuild/parser/parser.h" #include #include #include #include GWEN_LIST_FUNCTIONS(GWB_GBUILDER_DESCR, GWB_GBuilderDescr) static void _readSettingsFromXml(GWB_GBUILDER_DESCR *descr); GWB_GBUILDER_DESCR *_readFromFile(const char *fileName); GWB_GBUILDER_DESCR *GWB_GBuilderDescr_new(GWEN_XMLNODE *xmlNode) { GWB_GBUILDER_DESCR *descr; const char *s; s=GWEN_XMLNode_GetProperty(xmlNode, "name", NULL); if (!(s && *s)) { DBG_ERROR(NULL, "No builder name in XML builder description"); return NULL; } GWEN_NEW_OBJECT(GWB_GBUILDER_DESCR, descr); GWEN_LIST_INIT(GWB_GBUILDER_DESCR, descr); descr->builderName=strdup(s); descr->xmlDescr=xmlNode; _readSettingsFromXml(descr); return descr; } void _readSettingsFromXml(GWB_GBUILDER_DESCR *descr) { GWEN_XMLNODE *nInputFiles; nInputFiles=GWEN_XMLNode_FindFirstTag(descr->xmlDescr, "inputFiles", NULL, NULL); if (nInputFiles) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(nInputFiles, "acceptedInputTypes", NULL, NULL); if (n) descr->acceptedInputTypes=GWB_Parser_ReadXmlDataIntoStringList(NULL, n, 1); n=GWEN_XMLNode_FindFirstTag(nInputFiles, "acceptedInputFiles", NULL, NULL); if (n) descr->acceptedInputExt=GWB_Parser_ReadXmlDataIntoStringList(NULL, n, 1); } } void GWB_GBuilderDescr_free(GWB_GBUILDER_DESCR *descr) { if (descr) { GWEN_LIST_FINI(GWB_GBUILDER_DESCR, descr); free(descr->builderName); GWEN_XMLNode_free(descr->xmlDescr); GWEN_StringList_free(descr->acceptedInputTypes); GWEN_StringList_free(descr->acceptedInputExt); GWEN_FREE_OBJECT(descr); } } const char *GWB_GBuilderDescr_GetBuilderName(const GWB_GBUILDER_DESCR *descr) { return descr->builderName; } GWEN_XMLNODE *GWB_GBuilderDescr_GetXmlDescr(const GWB_GBUILDER_DESCR *descr) { return descr->xmlDescr; } GWEN_STRINGLIST *GWB_GBuilderDescr_GetAcceptedInputTypes(const GWB_GBUILDER_DESCR *descr) { return descr->acceptedInputTypes; } GWEN_STRINGLIST *GWB_GBuilderDescr_GetAcceptedInputExt(const GWB_GBUILDER_DESCR *descr) { return descr->acceptedInputExt; } GWB_GBUILDER_DESCR *_readFromFile(const char *fileName) { GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlDescr; GWB_GBUILDER_DESCR *descr; int rv; xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(xmlRoot, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_ERROR(NULL, "No builder description found in file \"%s\" (%d)", fileName, rv); return NULL; } xmlDescr=GWEN_XMLNode_FindFirstTag(xmlRoot, "GwenBuilder", NULL, NULL); if (xmlDescr==NULL) { DBG_ERROR(NULL, "No element found in file \"%s\"", fileName); GWEN_XMLNode_free(xmlRoot); return NULL; } GWEN_XMLNode_UnlinkChild(xmlRoot, xmlDescr); GWEN_XMLNode_free(xmlRoot); descr=GWB_GBuilderDescr_new(xmlDescr); if (descr==NULL) { DBG_ERROR(NULL, "Error in file \"%s\"", fileName); GWEN_XMLNode_free(xmlDescr); return NULL; } return descr; } GWB_GBUILDER_DESCR_LIST *GWB_GBuilderDescr_ReadAll(const char *folder) { GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; GWB_GBUILDER_DESCR_LIST *descrList; int rv; sl=GWEN_StringList_new(); rv=GWEN_Directory_GetMatchingFilesRecursively(folder, sl, "*.gwb"); if (rv<0) { DBG_ERROR(NULL, "here (%d)", rv); GWEN_StringList_free(sl); return NULL; } descrList=GWB_GBuilderDescr_List_new(); se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { GWB_GBUILDER_DESCR *descr; DBG_INFO(NULL, "Reading builder descr file \"%s\"", s); descr=_readFromFile(s); if (descr==NULL) { DBG_ERROR(NULL, "Error reading description from file \"%s\", ignoring", s); } else GWB_GBuilderDescr_List_Add(descr, descrList); } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); return descrList; } GWB_GBUILDER_DESCR *GWB_GBuilderDescr_List_GetByName(const GWB_GBUILDER_DESCR_LIST *descrList, const char *name) { GWB_GBUILDER_DESCR *descr; descr=GWB_GBuilderDescr_List_First(descrList); while(descr) { if (descr->builderName && strcasecmp(descr->builderName, name)==0) return descr; descr=GWB_GBuilderDescr_List_Next(descr); } return NULL; } gwenhywfar-5.12.0/tools/gwenbuild/builders/Makefile.am0000664000175000017500000000062414144206312017667 00000000000000SUBDIRS=posix windows INCLUDES=@all_includes@ -I$(top_builddir) -I../ -I../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) DEFS=-DBUILDERDATADIR=\"$(datadir)/gwenhywfar/gwenbuild/builders\" noinst_LTLIBRARIES=libgwb_builders.la libgwb_builders_la_SOURCES=\ genericbuilder.c \ gbuilderdescr.c noinst_HEADERS=\ genericbuilder.h \ genericbuilder_p.h \ gbuilderdescr.h \ gbuilderdescr_p.h gwenhywfar-5.12.0/tools/gwenbuild/builders/gbuilderdescr_p.h0000664000175000017500000000155214116666046021157 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_GBUILDER_DESCR_P_H #define GWBUILD_GBUILDER_DESCR_P_H #include "gwenbuild/builders/gbuilderdescr.h" #include #include typedef struct GWB_GBUILDER_DESCR GWB_GBUILDER_DESCR; struct GWB_GBUILDER_DESCR { GWEN_LIST_ELEMENT(GWB_GBUILDER_DESCR) char *builderName; GWEN_XMLNODE *xmlDescr; GWEN_STRINGLIST *acceptedInputTypes; GWEN_STRINGLIST *acceptedInputExt; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/0000775000175000017500000000000014730345122017407 500000000000000gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/Makefile.in0000664000175000017500000005067114730344662021415 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 = tools/gwenbuild/builders/windows ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_builderdata_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h 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)$(builderdatadir)" DATA = $(dist_builderdata_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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ builderdatadir = $(datadir)/gwenhywfar/gwenbuild/builders/windows dist_builderdata_DATA = \ app.gwb \ cxxapp.gwb \ cbuilder.gwb \ cxxbuilder.gwb \ module.gwb \ sharedlib.gwb \ staticlib.gwb \ tmplib.gwb \ tm2builder.gwb 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) --gnu tools/gwenbuild/builders/windows/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gwenbuild/builders/windows/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_builderdataDATA: $(dist_builderdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_builderdata_DATA)'; test -n "$(builderdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(builderdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(builderdatadir)" || 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)$(builderdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(builderdatadir)" || exit $$?; \ done uninstall-dist_builderdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_builderdata_DATA)'; test -n "$(builderdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(builderdatadir)'; $(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)$(builderdatadir)"; 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 clean-libtool 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-dist_builderdataDATA 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 mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_builderdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_builderdataDATA 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 \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_builderdataDATA .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: gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/cxxbuilder.gwb0000664000175000017500000000334014116666046022212 00000000000000 cxx *.cpp $(firstInputFileNoExt).o $(firstInputFileNoExt).d -c -fPIC -DPIC $(cxxflags) $(local/cxxflags) -MM -o Creating depfile for '$(firstInputFile)' -c -fPIC -DPIC $(cflags) $(local/cflags) -o CXX-Compiling '$(firstInputFile)' gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/app.gwb0000664000175000017500000000152414116666046020623 00000000000000 object *.o $(target_name).exe -fPIC $(local/ldflags) -o Linking '$(target_name).exe' gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/Makefile.am0000664000175000017500000000035414116666046021376 00000000000000 builderdatadir=$(datadir)/gwenhywfar/gwenbuild/builders/windows dist_builderdata_DATA=\ app.gwb \ cxxapp.gwb \ cbuilder.gwb \ cxxbuilder.gwb \ module.gwb \ sharedlib.gwb \ staticlib.gwb \ tmplib.gwb \ tm2builder.gwb gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/cxxapp.gwb0000664000175000017500000000154214116666046021346 00000000000000 object *.o $(target_name)$(exeext) -fPIC $(local/ldflags) -o Linking '$(target_name)$(exeext)' gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/cbuilder.gwb0000664000175000017500000000331114116666046021630 00000000000000 c *.c $(firstInputFileNoExt).o $(firstInputFileNoExt).d -c -fPIC -DPIC $(cflags) $(local/cflags) -MM -o Creating depfile for '$(firstInputFile)' -c -fPIC -DPIC $(cflags) $(local/cflags) -o Compiling '$(firstInputFile)' gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/module.gwb0000664000175000017500000000235314116666046021331 00000000000000 object *.o $(target_name).so -L$(folder) -l$(target_name) -shared -fPIC -Wl,-no-undefined $(local/ldflags) -o -Wl,--whole-archive -Wl,--no-whole-archive Linking '$(target_name).so' gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/tm2builder.gwb0000664000175000017500000000265114116666046022116 00000000000000 tm2 *.t2d *.xml $(firstInputFileNoExt).c $(firstInputFileNoExt).h $(firstInputFileNoExt)_p.h $(tm2flags) Generating sources from '$(firstInputFile)' $(tm2flags) --defs-only Generating type definitions from '$(firstInputFile)' gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/staticlib.gwb0000664000175000017500000000174114116666046022022 00000000000000 object *.o lib$(target_name).a -l$(target_name) Trc Linking 'lib$(target_name).a' Indexing 'lib$(target_name).a' gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/sharedlib.gwb0000664000175000017500000000252314116666046022000 00000000000000 object *.o lib$(target_name)-$(target_so_effective).dll -L$(folder) -l$(target_name)-$(target_so_effective) -shared -fPIC -Wl,-no-undefined -Wl,-soname,lib$(target_name)-$(target_so_effective).dll $(local/ldflags) -o -Wl,--whole-archive -Wl,--no-whole-archive Linking 'lib$(target_name)-$(target_so_effective).dll' gwenhywfar-5.12.0/tools/gwenbuild/builders/windows/tmplib.gwb0000664000175000017500000000173414116666046021335 00000000000000 object *.o lib$(target_name).a -l$(target_name) Trc Linking 'lib$(target_name).a' Indexing 'lib$(target_name).a' gwenhywfar-5.12.0/tools/gwenbuild/builders/gbuilderdescr.h0000664000175000017500000000256614116666046020646 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_GBUILDER_DESCR_H #define GWBUILD_GBUILDER_DESCR_H #include #include #include #include typedef struct GWB_GBUILDER_DESCR GWB_GBUILDER_DESCR; GWEN_LIST_FUNCTION_DEFS(GWB_GBUILDER_DESCR, GWB_GBuilderDescr) GWB_GBUILDER_DESCR *GWB_GBuilderDescr_new(GWEN_XMLNODE *xmlNode); void GWB_GBuilderDescr_free(GWB_GBUILDER_DESCR *descr); const char *GWB_GBuilderDescr_GetBuilderName(const GWB_GBUILDER_DESCR *descr); GWEN_XMLNODE *GWB_GBuilderDescr_GetXmlDescr(const GWB_GBUILDER_DESCR *descr); GWEN_STRINGLIST *GWB_GBuilderDescr_GetAcceptedInputTypes(const GWB_GBUILDER_DESCR *descr); GWEN_STRINGLIST *GWB_GBuilderDescr_GetAcceptedInputExt(const GWB_GBUILDER_DESCR *descr); GWB_GBUILDER_DESCR_LIST *GWB_GBuilderDescr_ReadAll(const char *folder); GWB_GBUILDER_DESCR *GWB_GBuilderDescr_List_GetByName(const GWB_GBUILDER_DESCR_LIST *descrList, const char *name); #endif gwenhywfar-5.12.0/tools/gwenbuild/builders/genericbuilder_p.h0000664000175000017500000000163514116666046021326 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDERS_GENERIC_P_H #define GWBUILD_BUILDERS_GENERIC_P_H #include "gwenbuild/builders/genericbuilder.h" #include #include typedef struct GWB_BUILDER_GENERIC GWB_BUILDER_GENERIC; struct GWB_BUILDER_GENERIC { char *builderName; char *toolName; GWEN_DB_NODE *dbVars; GWEN_XMLNODE *xmlDescr; int maxInputFiles; GWEN_STRINGLIST *acceptedInputTypes; GWEN_STRINGLIST *acceptedInputExt; char *outFileType; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/builders/genericbuilder.c0000664000175000017500000006657514460564441021016 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/builders/genericbuilder_p.h" #include "gwenbuild/types/builder_be.h" #include "gwenbuild/parser/parser.h" #include #include #include #include GWEN_INHERIT(GWB_BUILDER, GWB_BUILDER_GENERIC); static void GWENHYWFAR_CB _freeData(void *bp, void *p); static void _readMainSettingsFromXml(GWB_BUILDER *builder); static void _setupVariables(GWB_BUILDER *builder); static void _setupAfterAddingFirstInputFile(GWB_BUILDER *builder); static void _setupOutFiles(GWB_BUILDER *builder); static void _setupTargetLinkSpec(GWB_BUILDER *builder); static GWB_FILE *_parseOutFile(GWB_BUILDER *builder, GWB_PROJECT *project, GWB_TARGET *target, GWEN_XMLNODE *nFile, const char *folder); static GWEN_BUFFER *_readXmlDataIntoBufferAndExpand(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode); static int _isAcceptableInput(GWB_BUILDER *builder, const GWB_FILE *file); static void _addSourceFile(GWB_BUILDER *builder, GWB_FILE *f); static int _addBuildCmd(GWB_BUILDER *builder, GWB_BUILD_CONTEXT *bctx); static void _addBuildCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd); static void _addPrepareCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd); static void _addCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, const char *groupName, GWB_BUILD_SUBCMD_LIST *cmdList); static GWB_BUILD_SUBCMD *_readSubCmd(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *n); static void _readDepFile(GWB_BUILDER *builder, GWB_BUILD_SUBCMD *cmd, GWEN_XMLNODE *xmlNode); static GWEN_BUFFER *_readMainFilename(GWB_CONTEXT *context, GWEN_XMLNODE *xmlFile, GWB_FILE_LIST2 *filesList); static void _readBuildMessage(GWB_BUILDER *builder, GWB_BUILD_SUBCMD *cmd, GWEN_XMLNODE *xmlNode); static GWEN_BUFFER *_readArgs(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode); static void _readArgsLoop(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *nArgs, GWEN_BUFFER *argsBuffer); static void _readArgsFixed(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer); static void _readArgsInputFiles(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer); static void _readArgsOutputFiles(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer); static void _readArgsLibraries(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer); static void _readArgsIncludes(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer); static void _readArgsDefines(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer); static void _readArgsUsedSubTargets(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer); static void _readArgsIfHasUsedSubTargets(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer); static void _readArgsIfHasLibraries(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer); static void _readArgsHaveConfigH(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer); static void _addMatchingFiles(GWB_BUILDER *builder, GWB_FILE_LIST2 *filesList, const char *pattern, int addAbs, GWEN_BUFFER *argsBuffer); static void _addStringListToBuffer(GWEN_STRINGLIST *sl, GWEN_BUFFER *argsBuffer); GWB_BUILDER *GWB_GenericBuilder_Factory(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *builderName) { GWB_BUILDER *builder; GWEN_BUFFER *nameBuf; GWEN_XMLNODE *xmlRoot; GWEN_XMLNODE *xmlDescr; int rv; nameBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nameBuf, BUILDERDATADIR GWEN_DIR_SEPARATOR_S); if (GWBUILD_GetTargetIsWindows(gwenbuild)) GWEN_Buffer_AppendString(nameBuf, "windows"); else GWEN_Buffer_AppendString(nameBuf, "posix"); GWEN_Buffer_AppendString(nameBuf, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(nameBuf, builderName); GWEN_Buffer_AppendString(nameBuf, ".gwb"); xmlRoot=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(xmlRoot, GWEN_Buffer_GetStart(nameBuf), GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_ERROR(NULL, "No description for builder type \"%s\" found (%d, tried \"%s\")", builderName, rv, GWEN_Buffer_GetStart(nameBuf)); GWEN_Buffer_free(nameBuf); return NULL; } xmlDescr=GWEN_XMLNode_FindFirstTag(xmlRoot, "GwenBuilder", NULL, NULL); if (xmlDescr==NULL) { DBG_ERROR(NULL, "No element found in file \"%s\"", GWEN_Buffer_GetStart(nameBuf)); GWEN_XMLNode_free(xmlRoot); GWEN_Buffer_free(nameBuf); return NULL; } GWEN_XMLNode_UnlinkChild(xmlRoot, xmlDescr); GWEN_XMLNode_free(xmlRoot); builder=GWB_GenericBuilder_new(gwenbuild, context, xmlDescr); if (builder==NULL) { DBG_ERROR(NULL, "Error in file \"%s\"", GWEN_Buffer_GetStart(nameBuf)); GWEN_XMLNode_free(xmlDescr); GWEN_Buffer_free(nameBuf); return NULL; } GWEN_Buffer_free(nameBuf); return builder; } GWB_BUILDER *GWB_GenericBuilder_new(GWENBUILD *gwenbuild, GWB_CONTEXT *context, GWEN_XMLNODE *xmlDescr) { GWB_BUILDER *builder; GWB_BUILDER_GENERIC *xbuilder; const char *s; s=GWEN_XMLNode_GetProperty(xmlDescr, "name", NULL); if (!(s && *s)) { DBG_ERROR(NULL, "No builder name in XML builder description"); return NULL; } builder=GWB_Builder_new(gwenbuild, context, s); GWEN_NEW_OBJECT(GWB_BUILDER_GENERIC, xbuilder); GWEN_INHERIT_SETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder, xbuilder, _freeData); xbuilder->builderName=strdup(s); xbuilder->dbVars=GWEN_DB_Group_new("vars"); xbuilder->xmlDescr=xmlDescr; GWB_Builder_SetIsAcceptableInputFn(builder, _isAcceptableInput); GWB_Builder_SetAddSourceFileFn(builder, _addSourceFile); GWB_Builder_SetAddBuildCmdFn(builder, _addBuildCmd); _readMainSettingsFromXml(builder); _setupVariables(builder); return builder; } void GWENHYWFAR_CB _freeData(GWEN_UNUSED void *bp, void *p) { GWB_BUILDER_GENERIC *xbuilder; xbuilder=(GWB_BUILDER_GENERIC*) p; GWEN_DB_Group_free(xbuilder->dbVars); GWEN_XMLNode_free(xbuilder->xmlDescr); free(xbuilder->toolName); free(xbuilder->builderName); GWEN_FREE_OBJECT(xbuilder); } void _readMainSettingsFromXml(GWB_BUILDER *builder) { GWB_BUILDER_GENERIC *xbuilder; GWB_CONTEXT *context; GWEN_XMLNODE *nInputFiles; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); context=GWB_Builder_GetContext(builder); xbuilder->maxInputFiles=GWEN_XMLNode_GetIntProperty(xbuilder->xmlDescr, "maxinputfiles", -1); nInputFiles=GWEN_XMLNode_FindFirstTag(xbuilder->xmlDescr, "inputFiles", NULL, NULL); if (nInputFiles) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(nInputFiles, "acceptedInputTypes", NULL, NULL); if (n) xbuilder->acceptedInputTypes=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(context), n, 1); n=GWEN_XMLNode_FindFirstTag(nInputFiles, "acceptedInputFiles", NULL, NULL); if (n) xbuilder->acceptedInputExt=GWB_Parser_ReadXmlDataIntoStringList(GWB_Context_GetVars(context), n, 1); } } void _setupVariables(GWB_BUILDER *builder) { GWB_BUILDER_GENERIC *xbuilder; GWB_CONTEXT *context; const char *s; GWEN_DB_NODE *db; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); db=xbuilder->dbVars; context=GWB_Builder_GetContext(builder); s=GWB_Context_GetCurrentRelativeDir(context); if (s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, "folder", s); GWEN_DB_AddGroupChildren(db, GWB_Context_GetVars(context)); } void _setToolName(GWB_BUILDER *builder, const char *s) { GWB_BUILDER_GENERIC *xbuilder; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); free(xbuilder->toolName); xbuilder->toolName=s?strdup(s):NULL; } void _addSourceFile(GWB_BUILDER *builder, GWB_FILE *f) { GWB_FILE_LIST2 *fileList; GWB_Builder_AddInputFile(builder, f); fileList=GWB_Builder_GetOutputFileList2(builder); if (!(fileList && GWB_File_List2_GetSize(fileList)>0)) { _setupAfterAddingFirstInputFile(builder); } } void _setupAfterAddingFirstInputFile(GWB_BUILDER *builder) { GWB_BUILDER_GENERIC *xbuilder; GWB_FILE_LIST2 *fileList; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); fileList=GWB_Builder_GetInputFileList2(builder); if (fileList) { GWB_FILE *file; file=GWB_File_List2_GetFront(fileList); if (file) { const char *s; s=GWB_File_GetName(file); if (s) { const char *ptrToPoint; GWEN_DB_SetCharValue(xbuilder->dbVars, GWEN_DB_FLAGS_DEFAULT, "firstInputFile", s); ptrToPoint=strrchr(s, '.'); if (ptrToPoint) { char *copyOfName; copyOfName=GWEN_Text_strndup(s, (ptrToPoint-s)); GWEN_DB_SetCharValue(xbuilder->dbVars, GWEN_DB_FLAGS_DEFAULT, "firstInputFileNoExt", copyOfName); free(copyOfName); } } } } _setupOutFiles(builder); _setupTargetLinkSpec(builder); } void _setupOutFiles(GWB_BUILDER *builder) { GWB_BUILDER_GENERIC *xbuilder; GWB_CONTEXT *context; GWB_TARGET *target; GWB_PROJECT *project; const char *folder; const char *installName; GWEN_XMLNODE *nOutputFiles; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); context=GWB_Builder_GetContext(builder); target=GWB_Context_GetCurrentTarget(context); project=GWB_Target_GetProject(target); folder=GWB_Context_GetCurrentBuildDir(context); installName=GWB_Target_GetInstallName(target); nOutputFiles=GWEN_XMLNode_FindFirstTag(xbuilder->xmlDescr, "outputFiles", NULL, NULL); if (nOutputFiles) { GWEN_XMLNODE *nFile; nFile=GWEN_XMLNode_FindFirstTag(nOutputFiles, "file", NULL, NULL); while (nFile) { GWB_FILE *fileOut; fileOut=_parseOutFile(builder, project, target, nFile, folder); if (fileOut) { if (installName && *installName) GWB_File_SetInstallName(fileOut, installName); GWB_Builder_AddOutputFile(builder, fileOut); } nFile=GWEN_XMLNode_FindNextTag(nFile, "file", NULL, NULL); } /* while nFile */ } /* if nOutputFiles */ } GWB_FILE *_parseOutFile(GWB_BUILDER *builder, GWB_PROJECT *project, GWB_TARGET *target, GWEN_XMLNODE *nFile, const char *folder) { GWB_BUILDER_GENERIC *xbuilder; const char *sFileType; const char *sInstall; GWEN_BUFFER *nbuf; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); sFileType=GWEN_XMLNode_GetProperty(nFile, "type", NULL); sInstall=GWEN_XMLNode_GetProperty(nFile, "install", NULL); nbuf=_readXmlDataIntoBufferAndExpand(xbuilder->dbVars, nFile); if (nbuf) { GWB_FILE *fileOut; const char *sTargetInstallPath=NULL; fileOut=GWB_File_List2_GetOrCreateFile(GWB_Project_GetFileList(project), folder, GWEN_Buffer_GetStart(nbuf)); GWEN_Buffer_free(nbuf); if (sFileType) GWB_File_SetFileType(fileOut, sFileType); if (sInstall && strcasecmp(sInstall, "target")==0) sTargetInstallPath=GWB_Target_GetInstallPath(target); GWB_File_AddFlags(fileOut, GWB_FILE_FLAGS_GENERATED); if (sTargetInstallPath && *sTargetInstallPath) { GWB_File_SetInstallPath(fileOut, sTargetInstallPath); GWB_File_AddFlags(fileOut, GWB_FILE_FLAGS_INSTALL); } return fileOut; } /* if nbuf */ return NULL; } void _setupTargetLinkSpec(GWB_BUILDER *builder) { GWB_BUILDER_GENERIC *xbuilder; GWEN_XMLNODE *nTargetLinkSpec; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); nTargetLinkSpec=GWEN_XMLNode_FindFirstTag(xbuilder->xmlDescr, "targetLinkSpecs", NULL, NULL); if (nTargetLinkSpec) { GWEN_BUFFER *buf; buf=_readXmlDataIntoBufferAndExpand(xbuilder->dbVars, nTargetLinkSpec); if (buf) { GWB_Builder_SetTargetLinkSpec(builder, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } } } GWEN_BUFFER *_readXmlDataIntoBufferAndExpand(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *xmlData; xmlData=GWEN_XMLNode_GetFirstData(xmlNode); if (xmlData) { const char *s; s=GWEN_XMLNode_GetData(xmlData); if (s && *s) { int rv; GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_DB_ReplaceVars(db, s, buf); if(rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(buf); return NULL; } return buf; } } return NULL; } int _isAcceptableInput(GWEN_UNUSED GWB_BUILDER *builder, const GWB_FILE *f) { GWB_BUILDER_GENERIC *xbuilder; const char *sType; const char *sExt; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); sType=GWB_File_GetFileType(f); sExt=GWB_File_GetExt(f); if (sType && xbuilder->acceptedInputTypes && GWEN_StringList_HasString(xbuilder->acceptedInputTypes, sType)) return 1; if (sExt && xbuilder->acceptedInputExt && GWEN_StringList_HasString(xbuilder->acceptedInputExt, sExt)) return 1; return 0; } int _addBuildCmd(GWB_BUILDER *builder, GWB_BUILD_CONTEXT *bctx) { GWB_BUILDER_GENERIC *xbuilder; GWB_CONTEXT *context; GWB_BUILD_CMD *bcmd; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); context=GWB_Builder_GetContext(builder); bcmd=GWB_BuildCmd_new(); GWB_BuildCmd_AddFlags(bcmd, GWB_BUILD_CMD_FLAGS_AUTO); GWB_BuildCmd_SetBuilderName(bcmd, xbuilder->builderName); GWB_BuildCmd_SetFolder(bcmd, GWB_Context_GetCurrentBuildDir(context)); _addBuildCommands(builder, bcmd); _addPrepareCommands(builder, bcmd); GWB_BuildCtx_AddInFilesToCtxAndCmd(bctx, bcmd, GWB_Builder_GetInputFileList2(builder)); GWB_BuildCtx_AddOutFilesToCtxAndCmd(bctx, bcmd, GWB_Builder_GetOutputFileList2(builder)); GWB_BuildCtx_AddCommand(bctx, bcmd); return 0; } void _addBuildCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd) { _addCommands(builder, bcmd, "buildCommands", GWB_BuildCmd_GetBuildCommandList(bcmd)); } void _addPrepareCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd) { _addCommands(builder, bcmd, "prepareCommands", GWB_BuildCmd_GetPrepareCommandList(bcmd)); } void _addCommands(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, const char *groupName, GWB_BUILD_SUBCMD_LIST *cmdList) { GWB_BUILDER_GENERIC *xbuilder; GWEN_XMLNODE *n; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); n=GWEN_XMLNode_FindFirstTag(xbuilder->xmlDescr, groupName, NULL, NULL); if (n) { const char *s; s=GWEN_XMLNode_GetProperty(n, "checkDates", "TRUE"); if (s && strcasecmp(s, "TRUE")==0) GWB_BuildCmd_AddFlags(bcmd, GWB_BUILD_CMD_FLAGS_CHECK_DATES); s=GWEN_XMLNode_GetProperty(n, "deleteOutFileFirst", "FALSE"); if (s && strcasecmp(s, "TRUE")==0) GWB_BuildCmd_AddFlags(bcmd, GWB_BUILD_CMD_FLAGS_DEL_OUTFILES); n=GWEN_XMLNode_FindFirstTag(n, "cmd", NULL, NULL); while(n) { GWB_BUILD_SUBCMD *cmd; cmd=_readSubCmd(builder, bcmd, n); if (cmd) GWB_BuildSubCmd_List_Add(cmd, cmdList); n=GWEN_XMLNode_FindNextTag(n, "cmd", NULL, NULL); } } } GWB_BUILD_SUBCMD *_readSubCmd(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *n) { GWB_BUILDER_GENERIC *xbuilder; const char *sToolName; GWEN_BUFFER *argsBuffer; GWEN_BUFFER *toolNameBuffer; GWB_BUILD_SUBCMD *cmd; const char *s; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); toolNameBuffer=GWEN_Buffer_new(0, 256, 0, 1); sToolName=GWEN_XMLNode_GetProperty(n, "tool", NULL); if (sToolName) { GWEN_DB_ReplaceVars(xbuilder->dbVars, sToolName, toolNameBuffer); sToolName=GWEN_Buffer_GetStart(toolNameBuffer); } cmd=GWB_BuildSubCmd_new(); GWB_BuildSubCmd_SetCommand(cmd, sToolName); s=GWEN_XMLNode_GetProperty(n, "ignoreResult", "FALSE"); if (s && strcasecmp(s, "TRUE")==0) GWB_BuildSubCmd_AddFlags(cmd, GWB_BUILD_SUBCMD_FLAGS_IGNORE_RESULT); s=GWEN_XMLNode_GetProperty(n, "checkDepends", "FALSE"); if (s && strcasecmp(s, "TRUE")==0) GWB_BuildSubCmd_AddFlags(cmd, GWB_BUILD_SUBCMD_FLAGS_CHECK_DEPENDS); argsBuffer=_readArgs(builder, bcmd, n); if (argsBuffer) { GWB_BuildSubCmd_SetArguments(cmd, GWEN_Buffer_GetStart(argsBuffer)); GWEN_Buffer_free(argsBuffer); } _readDepFile(builder, cmd, n); _readBuildMessage(builder, cmd, n); GWEN_Buffer_free(toolNameBuffer); return cmd; } void _readBuildMessage(GWB_BUILDER *builder, GWB_BUILD_SUBCMD *cmd, GWEN_XMLNODE *xmlNode) { GWB_BUILDER_GENERIC *xbuilder; GWEN_XMLNODE *xmlMsg; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); xmlMsg=GWEN_XMLNode_FindFirstTag(xmlNode, "buildMessage", NULL, NULL); if (xmlMsg) { GWEN_BUFFER *buf; buf=_readXmlDataIntoBufferAndExpand(xbuilder->dbVars, xmlMsg); if (buf) { GWB_BuildSubCmd_SetBuildMessage(cmd, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } } } void _readDepFile(GWB_BUILDER *builder, GWB_BUILD_SUBCMD *cmd, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *xmlFile; xmlFile=GWEN_XMLNode_FindFirstTag(xmlNode, "depFile", NULL, NULL); if (xmlFile) { GWB_CONTEXT *context; GWB_FILE_LIST2 *filesList; GWEN_BUFFER *filenameBuffer; context=GWB_Builder_GetContext(builder); filesList=GWB_Builder_GetOutputFileList2(builder); filenameBuffer=_readMainFilename(context, xmlFile, filesList); if (filenameBuffer) { GWB_BuildSubCmd_SetDepFilePath(cmd, GWEN_Buffer_GetStart(filenameBuffer)); GWEN_Buffer_free(filenameBuffer); } } } GWEN_BUFFER *_readMainFilename(GWB_CONTEXT *context, GWEN_XMLNODE *xmlFile, GWB_FILE_LIST2 *filesList) { if (filesList) { int index; index=GWEN_XMLNode_GetIntProperty(xmlFile, "index", -1); if (index>=0) { GWB_FILE *file; file=GWB_File_List2_GetAt(filesList, index); if (file) { GWEN_BUFFER *filenameBuffer; const char *s; filenameBuffer=GWEN_Buffer_new(0, 256, 0, 1); if (!(GWB_File_GetFlags(file) & GWB_FILE_FLAGS_GENERATED)) { s=GWB_Context_GetInitialSourceDir(context); if (s && *s) { GWEN_Buffer_AppendString(filenameBuffer, s); GWEN_Buffer_AppendString(filenameBuffer, GWEN_DIR_SEPARATOR_S); } } s=GWB_File_GetFolder(file); if (s && *s) { GWEN_Buffer_AppendString(filenameBuffer, s); GWEN_Buffer_AppendString(filenameBuffer, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(filenameBuffer, GWB_File_GetName(file)); return filenameBuffer; } } } return NULL; } GWEN_BUFFER *_readArgs(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode) { GWEN_XMLNODE *nArgs; nArgs=GWEN_XMLNode_FindFirstTag(xmlNode, "args", NULL, NULL); if (nArgs) { GWEN_BUFFER *argsBuffer; argsBuffer=GWEN_Buffer_new(0, 256, 0, 1); _readArgsLoop(builder, bcmd, nArgs, argsBuffer); if (GWEN_Buffer_GetUsedBytes(argsBuffer)) return argsBuffer; GWEN_Buffer_free(argsBuffer); } return NULL; } void _readArgsLoop(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *nArgs, GWEN_BUFFER *argsBuffer) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(nArgs); while(n) { const char *sTagName; sTagName=GWEN_XMLNode_GetData(n); if (sTagName) { if (strcasecmp(sTagName, "fixed")==0) _readArgsFixed(builder, n, argsBuffer); else if (strcasecmp(sTagName, "inputFiles")==0) _readArgsInputFiles(builder, n, argsBuffer); else if (strcasecmp(sTagName, "outputFiles")==0) _readArgsOutputFiles(builder, n, argsBuffer); else if (strcasecmp(sTagName, "ifHasSubTargetLibs")==0) _readArgsIfHasUsedSubTargets(builder, bcmd, n, argsBuffer); else if (strcasecmp(sTagName, "subTargetLibs")==0) _readArgsUsedSubTargets(builder, argsBuffer); else if (strcasecmp(sTagName, "includes")==0) _readArgsIncludes(builder, n, argsBuffer); else if (strcasecmp(sTagName, "defines")==0) _readArgsDefines(builder, argsBuffer); else if (strcasecmp(sTagName, "ifHasLibraries")==0) _readArgsIfHasLibraries(builder, bcmd, n, argsBuffer); else if (strcasecmp(sTagName, "libraries")==0) _readArgsLibraries(builder, argsBuffer); else if (strcasecmp(sTagName, "haveConfigH")==0) _readArgsHaveConfigH(builder, argsBuffer); else if (strcasecmp(sTagName, "blank")==0) { GWEN_Buffer_AppendString(argsBuffer, " "); } else { DBG_ERROR(NULL, "Unhandled tag \"%s\", ignoring", sTagName); } } n=GWEN_XMLNode_GetNextTag(n); } /* while */ } void _readArgsFixed(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer) { GWB_BUILDER_GENERIC *xbuilder; GWEN_BUFFER *buf; xbuilder=GWEN_INHERIT_GETDATA(GWB_BUILDER, GWB_BUILDER_GENERIC, builder); buf=_readXmlDataIntoBufferAndExpand(xbuilder->dbVars, xmlNode); if (buf) { GWEN_Buffer_AppendString(argsBuffer, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } } void _readArgsInputFiles(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer) { GWB_CONTEXT *context; GWB_FILE_LIST2 *inFilesList; context=GWB_Builder_GetContext(builder); inFilesList=GWB_Builder_GetInputFileList2(builder); if (inFilesList) { int index; const char *pattern; int useAbsPath; useAbsPath=(strcasecmp(GWEN_XMLNode_GetProperty(xmlNode, "mode", "relpath"), "abspath")==0)?1:0; pattern=GWEN_XMLNode_GetProperty(xmlNode, "match", NULL); index=GWEN_XMLNode_GetIntProperty(xmlNode, "index", -1); if (index>=0) { GWB_FILE *file; file=GWB_File_List2_GetAt(inFilesList, index); if (file) { if (useAbsPath) GWB_Builder_AddAbsFileNameToBuffer(context, file, argsBuffer); else GWB_Builder_AddFileNameToBuffer(context, file, argsBuffer); } } else _addMatchingFiles(builder, inFilesList, pattern, useAbsPath, argsBuffer); } } void _readArgsOutputFiles(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer) { GWB_CONTEXT *context; GWB_FILE_LIST2 *filesList; context=GWB_Builder_GetContext(builder); filesList=GWB_Builder_GetOutputFileList2(builder); if (filesList) { int index; const char *pattern; const char *useField; int useAbsPath; useAbsPath=(strcasecmp(GWEN_XMLNode_GetProperty(xmlNode, "mode", "relpath"), "abspath")==0)?1:0; pattern=GWEN_XMLNode_GetProperty(xmlNode, "match", NULL); index=GWEN_XMLNode_GetIntProperty(xmlNode, "index", -1); useField=GWEN_XMLNode_GetProperty(xmlNode, "useFields", NULL); if (index>=0) { GWB_FILE *file; file=GWB_File_List2_GetAt(filesList, index); if (file) { if (useField && strcasecmp(useField, "installPath")==0) { const char *s; s=GWB_File_GetInstallPath(file); if (s) GWEN_Buffer_AppendString(argsBuffer, s); } else { if (useAbsPath) GWB_Builder_AddAbsFileNameToBuffer(context, file, argsBuffer); else GWB_Builder_AddFileNameToBuffer(context, file, argsBuffer); } } } else _addMatchingFiles(builder, filesList, pattern, useAbsPath, argsBuffer); } } void _readArgsLibraries(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer) { GWB_CONTEXT *context; GWB_TARGET *target; context=GWB_Builder_GetContext(builder); target=GWB_Context_GetCurrentTarget(context); _addStringListToBuffer(GWB_Target_GetUsedLibraryNameList(target), argsBuffer); } void _readArgsUsedSubTargets(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer) { GWB_CONTEXT *context; GWB_TARGET *target; context=GWB_Builder_GetContext(builder); target=GWB_Context_GetCurrentTarget(context); _addStringListToBuffer(GWB_Target_GetUsedTargetLinkSpecList(target), argsBuffer); } void _readArgsIfHasUsedSubTargets(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer) { GWB_CONTEXT *context; GWB_TARGET *target; GWEN_STRINGLIST *sl; context=GWB_Builder_GetContext(builder); target=GWB_Context_GetCurrentTarget(context); sl=GWB_Target_GetUsedTargetLinkSpecList(target); if (sl && GWEN_StringList_Count(sl)>0) _readArgsLoop(builder, bcmd, xmlNode, argsBuffer); } void _readArgsIfHasLibraries(GWB_BUILDER *builder, GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer) { GWB_CONTEXT *context; GWB_TARGET *target; GWEN_STRINGLIST *sl; context=GWB_Builder_GetContext(builder); target=GWB_Context_GetCurrentTarget(context); sl=GWB_Target_GetUsedLibraryNameList(target); if (sl && GWEN_StringList_Count(sl)>0) _readArgsLoop(builder, bcmd, xmlNode, argsBuffer); } void _readArgsIncludes(GWB_BUILDER *builder, GWEN_XMLNODE *xmlNode, GWEN_BUFFER *argsBuffer) { GWB_CONTEXT *context; GWB_KEYVALUEPAIR_LIST *kvpList; const char *fileType; fileType=GWEN_XMLNode_GetProperty(xmlNode, "type", "c"); context=GWB_Builder_GetContext(builder); kvpList=GWB_Context_GetIncludeList(context); if (kvpList) { GWEN_Buffer_AppendString(argsBuffer, " "); GWB_KeyValuePair_List_SampleValuesByKey(kvpList, fileType, NULL, " ", argsBuffer); } } void _readArgsDefines(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer) { GWB_CONTEXT *context; GWB_KEYVALUEPAIR_LIST *kvpList; context=GWB_Builder_GetContext(builder); kvpList=GWB_Context_GetDefineList(context); if (kvpList) GWB_KeyValuePair_List_WriteAllPairsToBuffer(kvpList, "-D", "=", " ", argsBuffer); } void _readArgsHaveConfigH(GWB_BUILDER *builder, GWEN_BUFFER *argsBuffer) { GWB_CONTEXT *context; GWB_TARGET *target; GWB_PROJECT *project; context=GWB_Builder_GetContext(builder); target=GWB_Context_GetCurrentTarget(context); project=GWB_Target_GetProject(target); if (GWB_Project_GetFlags(project) & GWB_PROJECT_FLAGS_CONFIG_H) { GWEN_Buffer_AppendString(argsBuffer, " -DHAVE_CONFIG_H "); } } void _addMatchingFiles(GWB_BUILDER *builder, GWB_FILE_LIST2 *filesList, const char *pattern, int addAbs, GWEN_BUFFER *argsBuffer) { GWB_CONTEXT *context; context=GWB_Builder_GetContext(builder); if (filesList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(filesList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { const char *fname; fname=GWB_File_GetName(file); if (fname) { if (pattern==NULL || -1!=GWEN_Text_ComparePattern(fname, pattern, 0)) { if (GWEN_Buffer_GetUsedBytes(argsBuffer)) GWEN_Buffer_AppendString(argsBuffer, " "); if (addAbs) GWB_Builder_AddAbsFileNameToBuffer(context, file, argsBuffer); else GWB_Builder_AddFileNameToBuffer(context, file, argsBuffer); } } file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } } void _addStringListToBuffer(GWEN_STRINGLIST *sl, GWEN_BUFFER *argsBuffer) { if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { if (GWEN_Buffer_GetUsedBytes(argsBuffer)) GWEN_Buffer_AppendString(argsBuffer, " "); GWEN_Buffer_AppendString(argsBuffer, s); } se=GWEN_StringListEntry_Next(se); } } } gwenhywfar-5.12.0/tools/gwenbuild/Makefile.am0000664000175000017500000000124214144206312016053 00000000000000SUBDIRS=types parser tools buildctx builders templates INCLUDES=@all_includes@ -I$(top_builddir) -I../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) bin_PROGRAMS=gwbuild gwbuild_SOURCES=\ main.c \ utils.c \ c_setup.c \ c_prepare.c \ c_build.c \ c_install.c \ c_clean.c \ c_dist.c noinst_HEADERS=\ utils.h \ c_setup.h \ c_prepare.h \ c_build.h \ c_install.h \ c_clean.h \ c_dist.h \ filenames.h gwbuild_LDADD = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ types/libgwb_types.la \ parser/libgwb_parser.la \ tools/libgwb_tools.la \ builders/libgwb_builders.la \ buildctx/libgwb_build.la \ $(PROG_LIBRARIES) gwenhywfar-5.12.0/tools/gwenbuild/c_dist.h0000664000175000017500000000103714116666046015454 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_C_DIST_H #define GWBUILD_C_DIST_H #include int GWB_MkDist(void); #endif gwenhywfar-5.12.0/tools/gwenbuild/c_prepare.h0000664000175000017500000000110214116666046016140 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_C_PREPARE_H #define GWBUILD_C_PREPARE_H #include int GWB_Prepare(GWEN_UNUSED GWEN_DB_NODE *dbArgs); #endif gwenhywfar-5.12.0/tools/gwenbuild/c_build.c0000664000175000017500000000343414465136507015607 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "c_build.h" #include "c_setup.h" #include "utils.h" #include "gwenbuild/buildctx/buildctx_xml.h" #include "gwenbuild/buildctx/buildctx_run.h" #include "gwenbuild/filenames.h" #include int GWB_Build(GWEN_DB_NODE *dbArgs) { GWB_BUILD_CONTEXT *buildCtx; int rv; int numThreads; const char *builderName; numThreads=GWEN_DB_GetIntValue(dbArgs, "jobs", 0, 1); builderName=GWEN_DB_GetCharValue(dbArgs, "builder", 0, NULL); if (GWB_Utils_BuildFilesChanged(GWBUILD_FILE_BUILDFILES)) { fprintf(stdout, "Build files changed, repeating last setup command.\n"); rv=GWB_RepeatLastSetup(GWBUILD_FILE_ARGS); if (rv<0) { DBG_INFO(NULL, "here"); return rv; } } buildCtx=GWB_BuildCtx_ReadFromXmlFile(GWBUILD_FILE_CTX); if (buildCtx==NULL) { fprintf(stderr, "ERROR: Error reading build context from file.\n"); return 2; } /* first build typemaker2 files */ if (!(builderName && *builderName)) { rv=GWB_BuildCtx_Run(buildCtx, numThreads, 0, "tm2builder"); if (rv<0) { fprintf(stderr, "ERROR: Error building typermaker2 files.\n"); return 3; } } /* build the rest */ rv=GWB_BuildCtx_Run(buildCtx, numThreads, 0, builderName); if (rv<0) { fprintf(stderr, "ERROR: Error building builds.\n"); return 3; } return 0; } gwenhywfar-5.12.0/tools/gwenbuild/c_clean.c0000664000175000017500000000313314144206312015550 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "c_clean.h" #include "utils.h" #include "gwenbuild/filenames.h" #include #include #include int GWB_Clean(const char *fname) { GWB_FILE_LIST2 *fileList; fileList=GWB_Utils_ReadFileList2(fname); if (fileList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; GWEN_BUFFER *fnameBuf; fnameBuf=GWEN_Buffer_new(0, 256, 0, 1); file=GWB_File_List2Iterator_Data(it); while(file) { if (GWB_File_GetFlags(file) & GWB_FILE_FLAGS_GENERATED) { const char *s; s=GWB_File_GetFolder(file); if (s && *s) { GWEN_Buffer_AppendString(fnameBuf, s); GWEN_Buffer_AppendString(fnameBuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(fnameBuf, GWB_File_GetName(file)); fprintf(stdout, "Deleting '%s'\n", GWEN_Buffer_GetStart(fnameBuf)); unlink(GWEN_Buffer_GetStart(fnameBuf)); GWEN_Buffer_Reset(fnameBuf); } file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } GWB_File_List2_free(fileList); } return 0; } gwenhywfar-5.12.0/tools/gwenbuild/main.c0000664000175000017500000003135314460564441015130 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/parser/parser.h" #include "gwenbuild/filenames.h" #include "utils.h" #include "c_setup.h" #include "c_prepare.h" #include "c_build.h" #include "c_install.h" #include "c_clean.h" #include "c_dist.h" #include #include #include #include #include #include #include #include #ifdef HAVE_SIGNAL_H # include #endif #define I18N(msg) GWEN_I18N_Translate(PACKAGE, msg) #define I18S(msg) msg #define ARGS_COMMAND_SETUP 0x0001 #define ARGS_COMMAND_PREPARE 0x0002 #define ARGS_COMMAND_BUILD 0x0004 #define ARGS_COMMAND_REPEAT_SETUP 0x0008 #define ARGS_COMMAND_INSTALL 0x0010 #define ARGS_COMMAND_CLEAN 0x0020 #define ARGS_COMMAND_DIST 0x0040 static int _readArgsIntoDb(int argc, char **argv, GWEN_DB_NODE *db); static int _handleStringArgument(int argc, char **argv, int *pIndex, const char *sArg, const char *sArgId, const char *sVarName, GWEN_DB_NODE *db); static void _printHelpScreen(); #ifdef HAVE_SIGNAL_H # ifdef _POSIX_C_SOURCE struct sigaction sigActionChild; # endif void _signalHandler(int s) { switch(s) { #ifdef _POSIX_C_SOURCE case SIGCHLD: //fprintf(stderr, "Child exited %d\n", s); break; #endif default: fprintf(stderr, "Received unhandled signal %d\n", s); break; } signal(s, _signalHandler); } #if _POSIX_C_SOURCE int _setSingleSignalHandler(struct sigaction *sa, int sig) { sa->sa_handler=_signalHandler; sigemptyset(&sa->sa_mask); sa->sa_flags=0; if (sigaction(sig, sa, 0)) { DBG_ERROR(NULL, "Could not setup signal handler for signal %d", sig); return GWEN_ERROR_GENERIC; } return 0; } #endif int _setSignalHandlers() { #ifdef _POSIX_C_SOURCE int rv; rv=_setSingleSignalHandler(&sigActionChild, SIGCHLD); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } #endif return 0; } #endif int main(int argc, char **argv) { GWEN_DB_NODE *dbArgs; int rv; int err; uint32_t commands=0; const char *s; GWEN_GUI *gui; #if defined(HAVE_SIGNAL_H) && defined(_POSIX_C_SOURCE) signal(SIGCHLD, _signalHandler); //_setSignalHandlers(); #endif err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_Open(NULL, "gwenbuild", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(NULL, GWEN_LoggerLevel_Warning); dbArgs=GWEN_DB_Group_new("args"); rv=_readArgsIntoDb(argc, argv, dbArgs); if (rv<0 || rv==1) { return 1; } s=GWEN_DB_GetCharValue(dbArgs, "loglevel", 0, NULL); if (s && *s) { GWEN_LOGGER_LEVEL level; level=GWEN_Logger_Name2Level(s); if (level==GWEN_LoggerLevel_Unknown) { } else GWEN_Logger_SetLevel(NULL, level); } commands|=GWEN_DB_GetIntValue(dbArgs, "setup", 0, 0)?ARGS_COMMAND_SETUP:0; /* -s */ commands|=GWEN_DB_GetIntValue(dbArgs, "repeatSetup", 0, 0)?ARGS_COMMAND_REPEAT_SETUP:0; /* -r */ commands|=GWEN_DB_GetIntValue(dbArgs, "prepare", 0, 0)?ARGS_COMMAND_PREPARE:0; /* -p */ commands|=GWEN_DB_GetIntValue(dbArgs, "build", 0, 0)?ARGS_COMMAND_BUILD:0; /* -b or no opts */ commands|=GWEN_DB_GetIntValue(dbArgs, "install", 0, 0)?ARGS_COMMAND_INSTALL:0; /* -i */ commands|=GWEN_DB_GetIntValue(dbArgs, "clean", 0, 0)?ARGS_COMMAND_CLEAN:0; /* -c */ commands|=GWEN_DB_GetIntValue(dbArgs, "dist", 0, 0)?ARGS_COMMAND_DIST:0; /* -d */ if (commands & ARGS_COMMAND_SETUP) { rv=GWB_Setup(dbArgs); if (rv!=0) { fprintf(stderr, "ERROR: Error on setup build environment.\n"); return rv; } } if (commands & ARGS_COMMAND_REPEAT_SETUP) { rv=GWB_RepeatLastSetup(GWBUILD_FILE_ARGS); if (rv<0) { fprintf(stderr, "ERROR: Error on repeating setup.\n"); return rv; } } if (commands & ARGS_COMMAND_PREPARE) { rv=GWB_Prepare(dbArgs); if (rv!=0) { fprintf(stderr, "ERROR: Error on preparing build environment.\n"); return rv; } } if ((commands & ARGS_COMMAND_BUILD) || (commands==0)) { rv=GWB_Build(dbArgs); if (rv!=0) { fprintf(stderr, "ERROR: Error on building.\n"); return rv; } } if (commands & ARGS_COMMAND_INSTALL) { rv=GWB_InstallFiles(GWBUILD_FILE_INSTALLFILES, getenv("DESTDIR")); if (rv!=0) { fprintf(stderr, "ERROR: Error on installing.\n"); return rv; } } if (commands & ARGS_COMMAND_DIST) { rv=GWB_MkDist(); if (rv!=0) { fprintf(stderr, "ERROR: Error on creating dist file.\n"); return rv; } } if (commands & ARGS_COMMAND_CLEAN) { rv=GWB_Clean(GWBUILD_FILE_FILES); if (rv!=0) { fprintf(stderr, "ERROR: Error on cleaning generated files.\n"); return rv; } } err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return 0; } int _handleStringArgument(int argc, char **argv, int *pIndex, const char *sArg, const char *sArgId, const char *sVarName, GWEN_DB_NODE *db) { int i; i=*pIndex; if (*sArg==0) { i++; if (i>=argc) { DBG_ERROR(NULL, "Missing argument for \"%s\"", sArgId); return GWEN_ERROR_INVALID; } sArg=argv[i]; } if (sArg && *sArg) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_DEFAULT, sVarName, sArg); *pIndex=i; return 0; } int _readArgsIntoDb(int argc, char **argv, GWEN_DB_NODE *db) { int i=1; int help=0; while(i=argc) { DBG_ERROR(NULL, "Missing argument for \"-j\""); return GWEN_ERROR_INVALID; } s=argv[i]; } if (1!=sscanf(s, "%d", &val)) { DBG_ERROR(NULL, "Non-integer argument for \"-j\""); return GWEN_ERROR_INVALID; } GWEN_DB_SetIntValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "jobs", val); } } } i++; } /* while */ if (help) { _printHelpScreen(); return 1; } return 0; } void _printHelpScreen() { fprintf(stdout, "\n" "Gwenhywfar Build Tool " GWENHYWFAR_VERSION_FULL_STRING "\n" "\n" "Building a project (e.g. compiling and linking) is done in multiple steps.\n" "\n" "1. Setup Build Environment\n" "-------------------------\n" "A. Create files named 0BUILD inside your project (see project AqFinance for\n" "example files).\n" "B. Create an empty folder and change into it (all next commands are run\n" "from there).\n" "You might want to use a folder like 'build' inside the source tree of\n" "your project.\n" "C. run\n" " gwbuild -s PATH_TO_SOURCE_TREE [-OOPTIONS]\n" "e.g. gwbuild -s .. -Oprefix=/usr/local\n" "\n" "2. Prepare Building\n" "-------------------\n" " gwbuild -p\n" "This is only needed if your project uses typemaker2 to generate c-sources from\n" "XML files.\n" "This command makes typemaker2 create its derived type description files needed\n" "when referencing typemaker2 generated types inside another typemaker2 generated\n" "type.\n" "\n" "3. Build Typemaker2 Files\n" "--------------------------\n" " gwbuild -Btm2builder\n" "This step is only needed once after the previous step and before compiling source files.\n" "The reason is that compiling source files involves creating dependency files.\n" "But for that to work at least for GCC all the headers which are included by source\n" "files need to exist; this also means source files to be generated by typemaker2.\n" "So if you have typemaker2 input files you need to run this step once.\n" "After that gwbuild keeps track of changes made to the input files and calls typemaker2\n" "again if necessary.\n" "\n" "4. Build All Targets\n" "--------------------\n" " gwbuild\n" "This command builds typemaker2 source files first (if needed) and then all\n" "other targets.\n" "A single process is used to compile and link the project files.\n" "If you have multiple processor cores/threads you can build multiple files in\n" "parallel:\n" " gwbuild -j14\n" "This command uses 14 processes in parallel.\n" "The step can be repeated as often as needed. It will automatically check for\n" "changed files and try to only re-compile/link those modified files and others\n" "which depend on them.\n" "If you change a 0BUILD file gwbuild will automatically call the setup step\n" "using the same\n" "arguments given to the last setup command (-s). This typically leads to all\n" "files being re-build.\n" "\n" "Complete Option List\n" "--------------------\n" "-s FOLDER setup build environment (arg: source folder path)\n" "-p run preparation commands (needed e.g. if typemaker2 is used)\n" "-b build targets\n" "-i install files\n" "-c cleanup; delete generated files\n" "-r repeat setup command using the same arguments given to last setup\n" "-d make distribution folder (you need to run tar yourself for now)\n" "-Oname=value specify options (uppercase o, can occur multiple times)\n" "-Bname Only run commands for the given build (mostly used with\n" " 'tm2builder')\n" "-Lname Set loglevel (debug, info, notice, warn, error)\n" "-Cname Crosscompile for given environment (e-g- 'x86_64-w64-mingw32')\n" "-jvalue Use the given number of parallel process for building\n" "--static Generate static libs for InstallLibrary targets\n" "\n" "Please see https://www.aquamaniac.de/rdm/projects/aqbanking/wiki/Gwbuild for\n" "more info and tutorials.\n" ); } gwenhywfar-5.12.0/tools/gwenbuild/Makefile.in0000664000175000017500000007720414730344662016113 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@ bin_PROGRAMS = gwbuild$(EXEEXT) subdir = tools/gwenbuild ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_gwbuild_OBJECTS = main.$(OBJEXT) utils.$(OBJEXT) c_setup.$(OBJEXT) \ c_prepare.$(OBJEXT) c_build.$(OBJEXT) c_install.$(OBJEXT) \ c_clean.$(OBJEXT) c_dist.$(OBJEXT) gwbuild_OBJECTS = $(am_gwbuild_OBJECTS) am__DEPENDENCIES_1 = gwbuild_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ types/libgwb_types.la parser/libgwb_parser.la \ tools/libgwb_tools.la builders/libgwb_builders.la \ buildctx/libgwb_build.la $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/c_build.Po ./$(DEPDIR)/c_clean.Po \ ./$(DEPDIR)/c_dist.Po ./$(DEPDIR)/c_install.Po \ ./$(DEPDIR)/c_prepare.Po ./$(DEPDIR)/c_setup.Po \ ./$(DEPDIR)/main.Po ./$(DEPDIR)/utils.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(gwbuild_SOURCES) DIST_SOURCES = $(gwbuild_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 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 \ 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 $(top_srcdir)/depcomp README 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = types parser tools buildctx builders templates INCLUDES = @all_includes@ -I$(top_builddir) -I../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) gwbuild_SOURCES = \ main.c \ utils.c \ c_setup.c \ c_prepare.c \ c_build.c \ c_install.c \ c_clean.c \ c_dist.c noinst_HEADERS = \ utils.h \ c_setup.h \ c_prepare.h \ c_build.h \ c_install.h \ c_clean.h \ c_dist.h \ filenames.h gwbuild_LDADD = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ types/libgwb_types.la \ parser/libgwb_parser.la \ tools/libgwb_tools.la \ builders/libgwb_builders.la \ buildctx/libgwb_build.la \ $(PROG_LIBRARIES) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/gwenbuild/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gwenbuild/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-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 \ || test -f $$p1 \ ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list gwbuild$(EXEEXT): $(gwbuild_OBJECTS) $(gwbuild_DEPENDENCIES) $(EXTRA_gwbuild_DEPENDENCIES) @rm -f gwbuild$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gwbuild_OBJECTS) $(gwbuild_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_build.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_clean.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_dist.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_install.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_prepare.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c_setup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 $(PROGRAMS) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/c_build.Po -rm -f ./$(DEPDIR)/c_clean.Po -rm -f ./$(DEPDIR)/c_dist.Po -rm -f ./$(DEPDIR)/c_install.Po -rm -f ./$(DEPDIR)/c_prepare.Po -rm -f ./$(DEPDIR)/c_setup.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/utils.Po -rm -f Makefile distclean-am: clean-am distclean-compile 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-binPROGRAMS 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 ./$(DEPDIR)/c_build.Po -rm -f ./$(DEPDIR)/c_clean.Po -rm -f ./$(DEPDIR)/c_dist.Po -rm -f ./$(DEPDIR)/c_install.Po -rm -f ./$(DEPDIR)/c_prepare.Po -rm -f ./$(DEPDIR)/c_setup.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/utils.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ 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-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .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: gwenhywfar-5.12.0/tools/gwenbuild/c_setup.c0000664000175000017500000002763214460564441015653 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "c_setup.h" #include "utils.h" #include "gwenbuild/parser/parser.h" #include "gwenbuild/buildctx/buildctx_xml.h" #include "gwenbuild/filenames.h" #include #include #include #include #include #include static int _prepareContextForSetup(GWB_CONTEXT *firstContext, GWEN_DB_NODE *dbArgs); static void _determineTarget(GWB_CONTEXT *context, GWEN_DB_NODE *dbArgs); static int _determineTools(GWB_CONTEXT *context, GWEN_DB_NODE *dbArgs); static int _getAllToolPaths(GWEN_DB_NODE *dbVars, const char *sCompileTarget, const GWEN_STRINGLIST *sl); static int _getToolPath(GWEN_DB_NODE *dbVars, const char *sTarget, const GWEN_STRINGLIST *sl, const char *sCommand, const char *sEnvVar, const char *sVarName); static void _copySomeEnvironmentVariablesToDb(GWEN_DB_NODE *db); static void _copyEnvironmentVariableToDb(GWEN_DB_NODE *db, const char *envName, const char *dbVarName); static GWB_KEYVALUEPAIR_LIST *_readOptionsFromDb(GWEN_DB_NODE *db); static int _writeStaticLibHelper(const char *fileName); int GWB_Setup(GWEN_DB_NODE *dbArgs) { GWENBUILD *gwenbuild; GWB_CONTEXT *firstContext; GWB_PROJECT *project; GWB_BUILD_CONTEXT *buildCtx; const char *folder; int doDump; GWB_KEYVALUEPAIR_LIST *givenOptionList; int rv; doDump=GWEN_DB_GetIntValue(dbArgs, "dump", 0, 0); folder=GWEN_DB_GetCharValue(dbArgs, "folder", 0, NULL); if (!(folder && *folder)) { fprintf(stderr, "ERROR: Folder needed.\n"); return 1; } if (strcasecmp(folder, ".")==0) { fprintf(stderr, "ERROR: Only building outside source folder supported.\n"); return 1; } givenOptionList=_readOptionsFromDb(dbArgs); gwenbuild=GWBUILD_new(); if (GWEN_DB_GetIntValue(dbArgs, "static", 0, 0)) GWBUILD_AddFlags(gwenbuild, GWENBUILD_FLAGS_STATIC); firstContext=GWB_Context_new(gwenbuild); rv=_prepareContextForSetup(firstContext, dbArgs); if (rv<0) { fprintf(stderr, "ERROR: Error preparing first context.\n"); return 2; } project=GWB_Parser_ReadBuildTree(gwenbuild, firstContext, folder, givenOptionList); if (project==NULL) { fprintf(stderr, "ERROR: Error reading build files.\n"); return 2; } rv=GWBUILD_MakeBuildersForTargets(project); if (rv<0) { fprintf(stderr, "ERROR: Error making builders for targets.\n"); return 2; } buildCtx=GWBUILD_MakeBuildCommands(project); if (buildCtx==NULL) { fprintf(stderr, "ERROR: Could not generate build commands.\n"); return 2; } rv=GWB_BuildCtx_WriteToXmlFile(buildCtx, GWBUILD_FILE_CTX); if (rv<0) { fprintf(stderr, "ERROR: Error writing build context file.\n"); return 3; } rv=GWB_Utils_WriteProjectFileList(project, GWBUILD_FILE_FILES); if (rv<0) { fprintf(stderr, "ERROR: Error writing file list file.\n"); return 3; } GWB_Utils_WriteBuildFileList(gwenbuild, GWBUILD_FILE_BUILDFILES); rv=GWEN_DB_WriteFile(dbArgs, GWBUILD_FILE_ARGS, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { fprintf(stderr, "ERROR: Error writing file list file.\n"); return 3; } rv=GWB_Utils_WriteInstallFileList(project, GWBUILD_FILE_INSTALLFILES); if (rv<0) { fprintf(stderr, "ERROR: Error writing install file list.\n"); return 3; } #if 0 rv=GWB_Utils_WriteProjectToFile(project, GWBUILD_FILE_PROJECT); if (rv<0) { fprintf(stderr, "ERROR: Error writing project to file.\n"); return 3; } #endif rv=GWB_Utils_WriteProjectInfoToFile(project, GWBUILD_FILE_PROJECTINFO); if (rv<0) { fprintf(stderr, "ERROR: Error writing project info to file.\n"); return 3; } rv=GWB_Utils_WriteContextTreeToFile(GWB_Project_GetRootContext(project), GWBUILD_FILE_CTXTREE); rv=_writeStaticLibHelper("staticlibhelper.sh"); if (rv<0) { fprintf(stderr, "ERROR: Error writing staticlibhelper.\n"); return 3; } if (doDump) { GWB_Project_Dump(project, 2, 1); } return 0; } int GWB_RepeatLastSetup(const char *fileName) { int rv; GWEN_DB_NODE *db; db=GWEN_DB_Group_new("args"); rv=GWEN_DB_ReadFile(db, fileName, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_ERROR(NULL, "Error reading arguments from previous run (file \"%s\")", fileName); GWEN_DB_Group_free(db); return rv; } rv=GWB_Setup(db); if (rv!=0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_DB_Group_free(db); return rv; } GWEN_DB_Group_free(db); return 0; } int _prepareContextForSetup(GWB_CONTEXT *context, GWEN_DB_NODE *dbArgs) { GWEN_DB_NODE *dbVars; int rv; dbVars=GWB_Context_GetVars(context); GWEN_DB_SetCharValue(dbVars, GWEN_DB_FLAGS_OVERWRITE_VARS, "prefix", "/usr/local"); _copySomeEnvironmentVariablesToDb(GWB_Context_GetVars(context)); _determineTarget(context, dbArgs); rv=_determineTools(context, dbArgs); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _determineTarget(GWB_CONTEXT *context, GWEN_DB_NODE *dbArgs) { GWENBUILD *gwenbuild; GWEN_DB_NODE *dbVars; const char *sTarget; const char *sTargetSystem; const char *s; int systemIsWindows=0; dbVars=GWB_Context_GetVars(context); gwenbuild=GWB_Context_GetGwenbuild(context); sTarget=GWEN_DB_GetCharValue(dbArgs, "crossCompileFor", 0, NULL); if (sTarget) { s=GWBUILD_GetArchFromTriplet(sTarget); GWEN_DB_SetCharValue(dbVars, GWEN_DB_FLAGS_OVERWRITE_VARS, "GWBUILD_ARCH", s); sTargetSystem=GWBUILD_GetSystemFromTriplet(sTarget); } else { GWEN_DB_SetCharValue(dbVars, GWEN_DB_FLAGS_OVERWRITE_VARS, "GWBUILD_ARCH", GWBUILD_GetHostArch()); sTargetSystem=GWBUILD_GetHostSystem(); } systemIsWindows=(strcasecmp(sTargetSystem, "windows")==0)?1:0; if (GWBUILD_GetFlags(gwenbuild) & GWENBUILD_FLAGS_STATIC) GWEN_DB_SetCharValue(dbVars, GWEN_DB_FLAGS_OVERWRITE_VARS, "GWBUILD_LIBTYPE", "staticlib"); else GWEN_DB_SetCharValue(dbVars, GWEN_DB_FLAGS_OVERWRITE_VARS, "GWBUILD_LIBTYPE", "sharedlib"); GWEN_DB_SetCharValue(dbVars, GWEN_DB_FLAGS_OVERWRITE_VARS, "GWBUILD_SYSTEM", sTargetSystem); GWBUILD_SetTargetSystem(gwenbuild, sTargetSystem); GWBUILD_SetTargetIsWindows(gwenbuild, systemIsWindows); GWEN_DB_SetCharValue(dbVars, GWEN_DB_FLAGS_OVERWRITE_VARS, "GWBUILD_SYSTEMTYPE", systemIsWindows?"windows":"posix"); } int _determineTools(GWB_CONTEXT *context, GWEN_DB_NODE *dbArgs) { GWEN_DB_NODE *dbVars; const char *sTarget; GWEN_STRINGLIST *sl; int rv; dbVars=GWB_Context_GetVars(context); sTarget=GWEN_DB_GetCharValue(dbArgs, "crossCompileFor", 0, NULL); sl=GWBUILD_GetPathFromEnvironment(); if (sl==NULL) sl=GWEN_StringList_new(); GWEN_StringList_AppendString(sl, "/usr/local/bin", 0, 1); GWEN_StringList_AppendString(sl, "/usr/bin", 0, 1); GWEN_StringList_AppendString(sl, "/bin", 0, 1); rv=_getAllToolPaths(dbVars, sTarget, sl); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_StringList_free(sl); return rv; } GWEN_StringList_free(sl); return 0; } int _getAllToolPaths(GWEN_DB_NODE *dbVars, const char *sCompileTarget, const GWEN_STRINGLIST *sl) { int rv; rv=_getToolPath(dbVars, sCompileTarget, sl, "gcc", "CC", "GWBUILD_TOOL_CC"); if (rv<0) return rv; rv=_getToolPath(dbVars, sCompileTarget, sl, "g++", "CXX", "GWBUILD_TOOL_CXX"); if (rv<0) return rv; rv=_getToolPath(dbVars, sCompileTarget, sl, "ld", "LD", "GWBUILD_TOOL_LD"); if (rv<0) return rv; rv=_getToolPath(dbVars, sCompileTarget, sl, "ar", "AR", "GWBUILD_TOOL_AR"); if (rv<0) return rv; rv=_getToolPath(dbVars, sCompileTarget, sl, "ranlib", "RANLIB", "GWBUILD_TOOL_RANLIB"); if (rv<0) return rv; rv=_getToolPath(dbVars, NULL, sl, "typemaker2", "TYPEMAKER2", "GWBUILD_TOOL_TYPEMAKER2"); if (rv<0) return rv; /* optional tools */ rv=_getToolPath(dbVars, sCompileTarget, sl, "msgfmt", "MSGFMT", "GWBUILD_TOOL_MSGFMT"); if (rv<0) { DBG_WARN(NULL, "Tool msgfmt not found, limited i18n support."); GWEN_DB_SetCharValue(dbVars, GWEN_DB_FLAGS_OVERWRITE_VARS, "msgfmt_EXISTS", "FALSE"); } else GWEN_DB_SetCharValue(dbVars, GWEN_DB_FLAGS_OVERWRITE_VARS, "msgfmt_EXISTS", "TRUE"); rv=_getToolPath(dbVars, NULL, sl, "avra", "AVRA", "GWBUILD_TOOL_AVRA"); if (rv<0) { DBG_INFO(NULL, "Tool avra not found, only needed when assembling AVR assembler code."); } /* add more tools here */ /* done */ return 0; } int _getToolPath(GWEN_DB_NODE *dbVars, const char *sCompileTarget, const GWEN_STRINGLIST *sl, const char *sCommand, const char *sEnvVar, const char *sVarName) { GWEN_BUFFER *fbufIn; GWEN_BUFFER *fbufOut; const char *s; int rv; fbufIn=GWEN_Buffer_new(0, 256, 0, 1); if (sCompileTarget && *sCompileTarget) { GWEN_Buffer_AppendString(fbufIn, sCompileTarget); GWEN_Buffer_AppendString(fbufIn, "-"); } s=getenv(sEnvVar); if (s) GWEN_Buffer_AppendString(fbufIn, s); else GWEN_Buffer_AppendString(fbufIn, sCommand); fbufOut=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(sl, GWEN_Buffer_GetStart(fbufIn), fbufOut); if (rv<0) { DBG_ERROR(NULL, "Tool \"%s\" not available (%d)", GWEN_Buffer_GetStart(fbufIn), rv); GWEN_Buffer_free(fbufOut); GWEN_Buffer_free(fbufIn); return rv; } GWEN_DB_SetCharValue(dbVars, GWEN_DB_FLAGS_OVERWRITE_VARS, sVarName, GWEN_Buffer_GetStart(fbufOut)); GWEN_Buffer_free(fbufOut); GWEN_Buffer_free(fbufIn); return 0; } void _copySomeEnvironmentVariablesToDb(GWEN_DB_NODE *db) { _copyEnvironmentVariableToDb(db, "CFLAGS", "CFLAGS"); _copyEnvironmentVariableToDb(db, "CXXFLAGS", "CXXFLAGS"); _copyEnvironmentVariableToDb(db, "CPPFLAGS", "CPPFLAGS"); _copyEnvironmentVariableToDb(db, "LDFLAGS", "LDFLAGS"); _copyEnvironmentVariableToDb(db, "TM2FLAGS", "TM2FLAGS"); } void _copyEnvironmentVariableToDb(GWEN_DB_NODE *db, const char *envName, const char *dbVarName) { const char *s; s=getenv(envName); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, dbVarName, s); } GWB_KEYVALUEPAIR_LIST *_readOptionsFromDb(GWEN_DB_NODE *db) { int i; GWB_KEYVALUEPAIR_LIST *kvpList; kvpList=GWB_KeyValuePair_List_new(); for (i=0; i<100; i++) { const char *sOption; GWEN_STRINGLIST *sl; sOption=GWEN_DB_GetCharValue(db, "option", i, NULL); if (sOption==NULL) break; sl=GWEN_StringList_fromString2(sOption, "=", 0, GWEN_TEXT_FLAGS_DEL_QUOTES | GWEN_TEXT_FLAGS_CHECK_BACKSLASH); if (sl) { const char *name; const char *value; name=GWEN_StringList_StringAt(sl, 0); value=GWEN_StringList_StringAt(sl, 1); if (name) { GWB_KEYVALUEPAIR *kvp; kvp=GWB_KeyValuePair_new(name, value); GWB_KeyValuePair_List_Add(kvp, kvpList); } GWEN_StringList_free(sl); } } /* for */ if (GWB_KeyValuePair_List_GetCount(kvpList)==0) { GWB_KeyValuePair_List_free(kvpList); return NULL; } return kvpList; } int _writeStaticLibHelper(const char *fileName) { int rv; static char *staticLibHelperContent= "#!/bin/sh\n" "\n" "TOOL=$1\n" "LIB=$2\n" "\n" "$TOOL -t $LIB | xargs ar rvs $LIB.new && mv -v $LIB.new $LIB"; unlink(fileName); rv=GWEN_SyncIo_Helper_WriteFile(fileName, (const uint8_t*) staticLibHelperContent, strlen(staticLibHelperContent)); if (rv<0) { DBG_ERROR(NULL, "Error writing static lib helper to \"%s\" (%d)", fileName, rv); return rv; } if (chmod(fileName, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IWGRP | S_IXGRP)==-1) { DBG_ERROR(NULL, "Error on chmod(%s): %s", fileName, strerror(errno)); return GWEN_ERROR_GENERIC; } return 0; } gwenhywfar-5.12.0/tools/gwenbuild/buildctx/0000775000175000017500000000000014730345122015722 500000000000000gwenhywfar-5.12.0/tools/gwenbuild/buildctx/Makefile.in0000664000175000017500000006236114730344662017727 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 = tools/gwenbuild/buildctx ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgwb_build_la_LIBADD = am_libgwb_build_la_OBJECTS = buildcmd.lo buildsubcmd.lo buildctx.lo \ buildctx_bdeps.lo buildctx_depfile.lo buildctx_run.lo \ buildctx_xml.lo libgwb_build_la_OBJECTS = $(am_libgwb_build_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/buildcmd.Plo \ ./$(DEPDIR)/buildctx.Plo ./$(DEPDIR)/buildctx_bdeps.Plo \ ./$(DEPDIR)/buildctx_depfile.Plo ./$(DEPDIR)/buildctx_run.Plo \ ./$(DEPDIR)/buildctx_xml.Plo ./$(DEPDIR)/buildsubcmd.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(libgwb_build_la_SOURCES) DIST_SOURCES = $(libgwb_build_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = @all_includes@ -I$(top_builddir) -I../ -I../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) noinst_LTLIBRARIES = libgwb_build.la libgwb_build_la_SOURCES = \ buildcmd.c \ buildsubcmd.c \ buildctx.c \ buildctx_bdeps.c \ buildctx_depfile.c \ buildctx_run.c \ buildctx_xml.c noinst_HEADERS = \ buildcmd.h \ buildcmd_p.h \ buildsubcmd.h \ buildsubcmd_p.h \ buildctx.h \ buildctx_p.h \ buildctx_bdeps.h \ buildctx_depfile.h \ buildctx_run.h \ buildctx_xml.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/gwenbuild/buildctx/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gwenbuild/buildctx/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): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwb_build.la: $(libgwb_build_la_OBJECTS) $(libgwb_build_la_DEPENDENCIES) $(EXTRA_libgwb_build_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgwb_build_la_OBJECTS) $(libgwb_build_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildcmd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildctx.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildctx_bdeps.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildctx_depfile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildctx_run.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildctx_xml.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buildsubcmd.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) 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 clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/buildcmd.Plo -rm -f ./$(DEPDIR)/buildctx.Plo -rm -f ./$(DEPDIR)/buildctx_bdeps.Plo -rm -f ./$(DEPDIR)/buildctx_depfile.Plo -rm -f ./$(DEPDIR)/buildctx_run.Plo -rm -f ./$(DEPDIR)/buildctx_xml.Plo -rm -f ./$(DEPDIR)/buildsubcmd.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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 ./$(DEPDIR)/buildcmd.Plo -rm -f ./$(DEPDIR)/buildctx.Plo -rm -f ./$(DEPDIR)/buildctx_bdeps.Plo -rm -f ./$(DEPDIR)/buildctx_depfile.Plo -rm -f ./$(DEPDIR)/buildctx_run.Plo -rm -f ./$(DEPDIR)/buildctx_xml.Plo -rm -f ./$(DEPDIR)/buildsubcmd.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool 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 maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool 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: gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildcmd.h0000664000175000017500000000705514116666046017616 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDCMD_H #define GWBUILD_BUILDCMD_H #include #include #include #include typedef struct GWB_BUILD_CMD GWB_BUILD_CMD; GWEN_LIST_FUNCTION_DEFS(GWB_BUILD_CMD, GWB_BuildCmd); GWEN_LIST2_FUNCTION_DEFS(GWB_BUILD_CMD, GWB_BuildCmd); #define GWB_BUILD_CMD_FLAGS_CHECK_DATES 0x0002 #define GWB_BUILD_CMD_FLAGS_DEL_OUTFILES 0x0008 #define GWB_BUILD_CMD_FLAGS_AUTO 0x0010 #include "gwenbuild/types/file.h" #include "gwenbuild/types/keyvaluepair.h" #include "gwenbuild/buildctx/buildsubcmd.h" GWB_BUILD_CMD *GWB_BuildCmd_new(void); GWB_BUILD_CMD *GWB_BuildCmd_dup(GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_free(GWB_BUILD_CMD *bcmd); uint32_t GWB_BuildCmd_GetFlags(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_SetFlags(GWB_BUILD_CMD *bcmd, uint32_t i); void GWB_BuildCmd_AddFlags(GWB_BUILD_CMD *bcmd, uint32_t i); void GWB_BuildCmd_DelFlags(GWB_BUILD_CMD *bcmd, uint32_t i); const char *GWB_BuildCmd_GetBuilderName(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_SetBuilderName(GWB_BUILD_CMD *bcmd, const char *s); const char *GWB_BuildCmd_GetFolder(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_SetFolder(GWB_BUILD_CMD *bcmd, const char *s); const char *GWB_BuildCmd_GetBuildMessage(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_SetBuildMessage(GWB_BUILD_CMD *bcmd, const char *s); GWB_BUILD_SUBCMD_LIST *GWB_BuildCmd_GetPrepareCommandList(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_AddPrepareCommand(GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *cmd); GWB_BUILD_SUBCMD_LIST *GWB_BuildCmd_GetBuildCommandList(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_AddBuildCommand(GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *cmd); int GWB_BuildCmd_GetBlockingFiles(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_SetBlockingFiles(GWB_BUILD_CMD *bcmd, int i); int GWB_BuildCmd_IncBlockingFiles(GWB_BUILD_CMD *bcmd); int GWB_BuildCmd_DecBlockingFiles(GWB_BUILD_CMD *bcmd); GWB_FILE_LIST2 *GWB_BuildCmd_GetInFileList2(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_AddInFile(GWB_BUILD_CMD *bcmd, GWB_FILE *file); GWB_FILE_LIST2 *GWB_BuildCmd_GetOutFileList2(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_AddOutFile(GWB_BUILD_CMD *bcmd, GWB_FILE *file); GWEN_PROCESS *GWB_BuildCmd_GetCurrentProcess(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_SetCurrentProcess(GWB_BUILD_CMD *bcmd, GWEN_PROCESS *process); GWB_BUILD_SUBCMD *GWB_BuildCmd_GetCurrentCommand(const GWB_BUILD_CMD *bcmd); void GWB_BuildCmd_SetCurrentCommand(GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *cmd); void GWB_BuildCmd_toXml(const GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode); GWB_BUILD_CMD *GWB_BuildCmd_fromXml(GWEN_XMLNODE *xmlNode, GWB_FILE_LIST2 *fileList); void GWB_BuildCmd_List_WriteXml(const GWB_BUILD_CMD_LIST *cmdList, GWEN_XMLNODE *xmlNode, const char *groupName); void GWB_BuildCmd_List2_WriteXml(const GWB_BUILD_CMD_LIST2 *cmdList, GWEN_XMLNODE *xmlNode, const char *groupName); void GWB_BuildCmd_List2_FreeAll(GWB_BUILD_CMD_LIST2 *cmdList); void GWB_BuildCmd_Dump(const GWB_BUILD_CMD *bcmd, int indent); void GWB_BuildCmd_PrintDescriptionWithText(const GWB_BUILD_CMD *bcmd, int indent, const char *text); #endif gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildsubcmd.c0000664000175000017500000001363414460564441020321 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/buildctx/buildsubcmd_p.h" #include #include GWEN_LIST_FUNCTIONS(GWB_BUILD_SUBCMD, GWB_BuildSubCmd); GWB_BUILD_SUBCMD *GWB_BuildSubCmd_new(void) { GWB_BUILD_SUBCMD *cmd; GWEN_NEW_OBJECT(GWB_BUILD_SUBCMD, cmd); GWEN_LIST_INIT(GWB_BUILD_SUBCMD, cmd); return cmd; } GWB_BUILD_SUBCMD *GWB_BuildSubCmd_dup(const GWB_BUILD_SUBCMD *origCmd) { if (origCmd==NULL) return NULL; else { GWB_BUILD_SUBCMD *cmd; cmd=GWB_BuildSubCmd_new(); cmd->flags=origCmd->flags; cmd->command=(origCmd->command)?strdup(origCmd->command):NULL; cmd->arguments=(origCmd->arguments)?strdup(origCmd->arguments):NULL; cmd->buildMessage=(origCmd->buildMessage)?strdup(origCmd->buildMessage):NULL; cmd->depFilePath=(origCmd->depFilePath)?strdup(origCmd->depFilePath):NULL; return cmd; } } void GWB_BuildSubCmd_free(GWB_BUILD_SUBCMD *cmd) { if (cmd) { GWEN_LIST_FINI(GWB_BUILD_SUBCMD, cmd); free(cmd->command); free(cmd->arguments); free(cmd->buildMessage); free(cmd->logFilename); GWEN_FREE_OBJECT(cmd); } } const char *GWB_BuildSubCmd_GetLogFilename(const GWB_BUILD_SUBCMD *cmd) { return cmd->logFilename; } void GWB_BuildSubCmd_SetLogFilename(GWB_BUILD_SUBCMD *cmd, const char *s) { free(cmd->logFilename); cmd->logFilename=s?strdup(s):NULL; } uint32_t GWB_BuildSubCmd_GetFlags(const GWB_BUILD_SUBCMD *cmd) { return cmd->flags; } void GWB_BuildSubCmd_SetFlags(GWB_BUILD_SUBCMD *cmd, uint32_t f) { cmd->flags=f; } void GWB_BuildSubCmd_AddFlags(GWB_BUILD_SUBCMD *cmd, uint32_t f) { cmd->flags|=f; } void GWB_BuildSubCmd_DelFlags(GWB_BUILD_SUBCMD *cmd, uint32_t f) { cmd->flags&=~f; } const char *GWB_BuildSubCmd_GetCommand(const GWB_BUILD_SUBCMD *cmd) { return cmd->command; } void GWB_BuildSubCmd_SetCommand(GWB_BUILD_SUBCMD *cmd, const char *s) { free(cmd->command); cmd->command=s?strdup(s):NULL; } const char *GWB_BuildSubCmd_GetArguments(const GWB_BUILD_SUBCMD *cmd) { return cmd->arguments; } void GWB_BuildSubCmd_SetArguments(GWB_BUILD_SUBCMD *cmd, const char *s) { free(cmd->arguments); cmd->arguments=s?strdup(s):NULL; } const char *GWB_BuildSubCmd_GetBuildMessage(const GWB_BUILD_SUBCMD *cmd) { return cmd->buildMessage; } void GWB_BuildSubCmd_SetBuildMessage(GWB_BUILD_SUBCMD *cmd, const char *s) { free(cmd->buildMessage); cmd->buildMessage=s?strdup(s):NULL; } const char *GWB_BuildSubCmd_GetDepFilePath(const GWB_BUILD_SUBCMD *cmd) { return cmd->depFilePath; } void GWB_BuildSubCmd_SetDepFilePath(GWB_BUILD_SUBCMD *cmd, const char *s) { free(cmd->depFilePath); cmd->depFilePath=s?strdup(s):NULL; } void GWB_BuildSubCmd_toXml(const GWB_BUILD_SUBCMD *cmd, GWEN_XMLNODE *xmlNode) { GWEN_XMLNode_SetIntValue(xmlNode, "flags", cmd->flags); if (cmd->command) GWEN_XMLNode_SetCharValue(xmlNode, "command", cmd->command); if (cmd->arguments) GWEN_XMLNode_SetCharValue(xmlNode, "arguments", cmd->arguments); if (cmd->buildMessage) GWEN_XMLNode_SetCharValue(xmlNode, "buildMessage", cmd->buildMessage); if (cmd->depFilePath) GWEN_XMLNode_SetCharValue(xmlNode, "depFilePath", cmd->depFilePath); } GWB_BUILD_SUBCMD *GWB_BuildSubCmd_fromXml(GWEN_XMLNODE *xmlNode) { GWB_BUILD_SUBCMD *cmd; const char *s; cmd=GWB_BuildSubCmd_new(); cmd->flags=GWEN_XMLNode_GetIntValue(xmlNode, "flags", 0); s=GWEN_XMLNode_GetCharValue(xmlNode, "command", NULL); GWB_BuildSubCmd_SetCommand(cmd, s); s=GWEN_XMLNode_GetCharValue(xmlNode, "arguments", NULL); GWB_BuildSubCmd_SetArguments(cmd, s); s=GWEN_XMLNode_GetCharValue(xmlNode, "buildMessage", NULL); GWB_BuildSubCmd_SetBuildMessage(cmd, s); s=GWEN_XMLNode_GetCharValue(xmlNode, "depFilePath", NULL); GWB_BuildSubCmd_SetDepFilePath(cmd, s); return cmd; } GWB_BUILD_SUBCMD_LIST *GWB_BuildSubCmd_List_dup(const GWB_BUILD_SUBCMD_LIST *cmdList) { GWB_BUILD_SUBCMD_LIST *newList; GWB_BUILD_SUBCMD *cmd; newList=GWB_BuildSubCmd_List_new(); cmd=GWB_BuildSubCmd_List_First(cmdList); while(cmd) { GWB_BuildSubCmd_List_Add(GWB_BuildSubCmd_dup(cmd), newList); cmd=GWB_BuildSubCmd_List_Next(cmd); } return newList; } void GWB_BuildSubCmd_Dump(const GWB_BUILD_SUBCMD *cmd, int indent) { if (cmd) { int i; for(i=0; icommand)?(cmd->command):""); for(i=0; iarguments)?(cmd->arguments):""); for(i=0; ibuildMessage)?(cmd->buildMessage):""); for(i=0; idepFilePath)?(cmd->depFilePath):""); } } void GWB_BuildSubCmd_List_Dump(const GWB_BUILD_SUBCMD_LIST *cmdList, int indent, const char *text) { int i; if (text) { for(i=0; i\n"); } } gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx_depfile.h0000664000175000017500000000125614144206312021321 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDCTX_DEPFILE_H #define GWBUILD_BUILDCTX_DEPFILE_H #include #include "gwenbuild/buildctx/buildctx.h" GWEN_STRINGLIST *GWB_BuildCtx_ReadAndTranslateDepfile(const char *folder, const char *fileName); #endif gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx.c0000664000175000017500000001501214460564441017632 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "gwenbuild/buildctx/buildctx.h" #include "gwenbuild/buildctx/buildctx_run.h" #include "gwenbuild/buildctx/buildctx_p.h" #include #include #include #include #include #include static int _prepareBaseLogPath(GWB_BUILD_CONTEXT *bctx); GWB_BUILD_CONTEXT *GWB_BuildCtx_new() { GWB_BUILD_CONTEXT *bctx; GWEN_NEW_OBJECT(GWB_BUILD_CONTEXT, bctx); bctx->commandList=GWB_BuildCmd_List2_new(); bctx->fileList=GWB_File_List2_new(); return bctx; } void GWB_BuildCtx_free(GWB_BUILD_CONTEXT *bctx) { if (bctx) { GWB_BuildCmd_List2_free(bctx->waitingQueue); GWB_BuildCmd_List2_free(bctx->runningQueue); GWB_BuildCmd_List2_free(bctx->finishedQueue); GWB_BuildCmd_List2_FreeAll(bctx->commandList); GWB_File_List2_FreeAll(bctx->fileList); free(bctx->initialSourceDir); GWEN_FREE_OBJECT(bctx); } } const char *GWB_BuildCtx_GetLogPath(const GWB_BUILD_CONTEXT *bctx) { return bctx->logPath; } void GWB_BuildCtx_SetLogPath(GWB_BUILD_CONTEXT *bctx, const char *s) { free(bctx->logPath); bctx->logPath=s?strdup(s):NULL; } const char *GWB_BuildCtx_GetInitialSourceDir(const GWB_BUILD_CONTEXT *bctx) { return bctx->initialSourceDir; } void GWB_BuildCtx_SetInitialSourceDir(GWB_BUILD_CONTEXT *bctx, const char *s) { free(bctx->initialSourceDir); bctx->initialSourceDir=s?strdup(s):NULL; } GWB_BUILD_CMD_LIST2 *GWB_BuildCtx_GetCommandList(const GWB_BUILD_CONTEXT *bctx) { return bctx->commandList; } void GWB_BuildCtx_AddCommand(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *cmd) { GWB_BuildCmd_List2_PushBack(bctx->commandList, cmd); } GWB_FILE_LIST2 *GWB_BuildCtx_GetFileList(const GWB_BUILD_CONTEXT *bctx) { return bctx->fileList; } void GWB_BuildCtx_AddFile(GWB_BUILD_CONTEXT *bctx, GWB_FILE *file) { GWB_File_SetId(file, ++(bctx->lastFileId)); DBG_INFO(NULL, "Adding file%s/%s", GWB_File_GetFolder(file), GWB_File_GetName(file)); GWB_File_List2_PushBack(bctx->fileList, file); } GWB_FILE *GWB_BuildCtx_GetFileByPathAndName(const GWB_BUILD_CONTEXT *bctx, const char *folder, const char *fname) { return GWB_File_List2_GetFileByPathAndName(bctx->fileList, folder, fname); } void GWB_BuildCtx_AddInFileToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE *file) { GWB_FILE *storedFile; storedFile=GWB_BuildCtx_GetFileByPathAndName(bctx, GWB_File_GetFolder(file), GWB_File_GetName(file)); if (storedFile) GWB_BuildCmd_AddInFile(bcmd, storedFile); else { GWB_FILE *fileCopy; fileCopy=GWB_File_dup(file); GWB_BuildCtx_AddFile(bctx, fileCopy); GWB_BuildCmd_AddInFile(bcmd, fileCopy); } } void GWB_BuildCtx_AddInFilesToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE_LIST2 *fileList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { GWB_BuildCtx_AddInFileToCtxAndCmd(bctx, bcmd, file); file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } void GWB_BuildCtx_AddOutFileToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE *file) { GWB_FILE *storedFile; storedFile=GWB_BuildCtx_GetFileByPathAndName(bctx, GWB_File_GetFolder(file), GWB_File_GetName(file)); if (storedFile) GWB_BuildCmd_AddOutFile(bcmd, storedFile); else { GWB_FILE *fileCopy; fileCopy=GWB_File_dup(file); GWB_BuildCtx_AddFile(bctx, fileCopy); GWB_BuildCmd_AddOutFile(bcmd, fileCopy); } } void GWB_BuildCtx_AddOutFilesToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE_LIST2 *fileList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { GWB_BuildCtx_AddOutFileToCtxAndCmd(bctx, bcmd, file); file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } void GWB_BuildCtx_Dump(const GWB_BUILD_CONTEXT *bctx, int indent) { int i; for(i=0; icommandList, indent+2); GWBUILD_Debug_PrintFileList2("fileList", bctx->fileList, indent+2); } int GWB_BuildCtx_CreateAndSetLogFilenameForSubCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_SUBCMD *cmd) { GWEN_BUFFER *dbuf; int rv; if (bctx->logPath==NULL) { rv=_prepareBaseLogPath(bctx); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } dbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dbuf, bctx->logPath); #if 0 rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(dbuf), 0); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error opening/creating folder \"%s\": %d", GWEN_Buffer_GetStart(dbuf), rv); GWEN_Buffer_free(dbuf); return rv; } #endif /*GWEN_Buffer_AppendString(dbuf, GWEN_DIR_SEPARATOR_S);*/ GWEN_Buffer_AppendString(dbuf, "-"); GWEN_Buffer_AppendArgs(dbuf, "%05d", ++(bctx->lastLogfileId)); GWEN_Buffer_AppendString(dbuf, ".log"); GWB_BuildSubCmd_SetLogFilename(cmd, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); return 0; } int _prepareBaseLogPath(GWB_BUILD_CONTEXT *bctx) { GWEN_BUFFER *dbuf; GWEN_TIME *ti; int rv; dbuf=GWEN_Buffer_new(0, 256, 0, 1); ti=GWEN_CurrentTime(); GWEN_Buffer_AppendString(dbuf, ".logs"); rv=GWEN_Directory_GetPath(GWEN_Buffer_GetStart(dbuf), 0); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error getting path \"%s\": %d", GWEN_Buffer_GetStart(dbuf), rv); GWEN_Time_free(ti); GWEN_Buffer_free(dbuf); return rv; } GWEN_Buffer_AppendString(dbuf, GWEN_DIR_SEPARATOR_S); rv=GWEN_Time_toString(ti, "YYYYMMDD-hhmmss", dbuf); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error adding time string to buffer: %d", rv); GWEN_Time_free(ti); GWEN_Buffer_free(dbuf); return rv; } GWB_BuildCtx_SetLogPath(bctx, GWEN_Buffer_GetStart(dbuf)); GWEN_Time_free(ti); GWEN_Buffer_free(dbuf); return 0; } gwenhywfar-5.12.0/tools/gwenbuild/buildctx/Makefile.am0000664000175000017500000000075014144206312017674 00000000000000INCLUDES=@all_includes@ -I$(top_builddir) -I../ -I../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) noinst_LTLIBRARIES=libgwb_build.la libgwb_build_la_SOURCES=\ buildcmd.c \ buildsubcmd.c \ buildctx.c \ buildctx_bdeps.c \ buildctx_depfile.c \ buildctx_run.c \ buildctx_xml.c noinst_HEADERS=\ buildcmd.h \ buildcmd_p.h \ buildsubcmd.h \ buildsubcmd_p.h \ buildctx.h \ buildctx_p.h \ buildctx_bdeps.h \ buildctx_depfile.h \ buildctx_run.h \ buildctx_xml.h gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx_bdeps.h0000664000175000017500000000206714116666046021024 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDCTX_BDEPS_H #define GWBUILD_BUILDCTX_BDEPS_H #include #include "gwenbuild/buildctx/buildctx.h" int GWB_BuildCtx_SetupDependencies(GWB_BUILD_CONTEXT *bctx); int GWB_BuildCtx_FillWaitingQueue(GWB_BUILD_CONTEXT *bctx, const char *builderName); int GWB_BuildCtx_AddBuildCmdsForFileToList(const GWB_FILE *file, GWB_BUILD_CMD_LIST2 *targetCmdList); int GWB_BuildCtx_AddBuildCmdsByBuilderNameToList(const GWB_BUILD_CMD_LIST2 *sourceCmdList, const char *builderName, GWB_BUILD_CMD_LIST2 *targetCmdList); #endif gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx_run.h0000664000175000017500000000126614116666046020533 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDCTX_RUN_H #define GWBUILD_BUILDCTX_RUN_H #include #include "gwenbuild/buildctx/buildctx.h" int GWB_BuildCtx_Run(GWB_BUILD_CONTEXT *bctx, int maxConcurrentJobs, int usePrepareCommands, const char *builderName); #endif gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx_xml.h0000664000175000017500000000133714116666046020526 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDCTX_XML_H #define GWBUILD_BUILDCTX_XML_H #include #include "gwenbuild/buildctx/buildctx.h" GWB_BUILD_CONTEXT *GWB_BuildCtx_ReadFromXmlFile(const char *fileName); int GWB_BuildCtx_WriteToXmlFile(const GWB_BUILD_CONTEXT *buildCtx, const char *fileName); #endif gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildsubcmd_p.h0000664000175000017500000000134214460564441020636 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDSUBCMD_P_H #define GWBUILD_BUILDSUBCMD_P_H #include "gwenbuild/buildctx/buildsubcmd.h" struct GWB_BUILD_SUBCMD { GWEN_LIST_ELEMENT(GWB_BUILD_SUBCMD) uint32_t flags; char *command; char *arguments; char *buildMessage; char *depFilePath; char *logFilename; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildsubcmd.h0000664000175000017500000000447514460564441020331 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDSUBCMD_H #define GWBUILD_BUILDSUBCMD_H #include typedef struct GWB_BUILD_SUBCMD GWB_BUILD_SUBCMD; GWEN_LIST_FUNCTION_DEFS(GWB_BUILD_SUBCMD, GWB_BuildSubCmd); #include "gwenbuild/buildctx/buildcmd.h" #define GWB_BUILD_SUBCMD_FLAGS_IGNORE_RESULT 0x0001 #define GWB_BUILD_SUBCMD_FLAGS_CHECK_DEPENDS 0x0004 GWB_BUILD_SUBCMD *GWB_BuildSubCmd_new(void); GWB_BUILD_SUBCMD *GWB_BuildSubCmd_dup(const GWB_BUILD_SUBCMD *origCmd); void GWB_BuildSubCmd_free(GWB_BUILD_SUBCMD *cmd); uint32_t GWB_BuildSubCmd_GetFlags(const GWB_BUILD_SUBCMD *cmd); void GWB_BuildSubCmd_SetFlags(GWB_BUILD_SUBCMD *cmd, uint32_t f); void GWB_BuildSubCmd_AddFlags(GWB_BUILD_SUBCMD *cmd, uint32_t f); void GWB_BuildSubCmd_DelFlags(GWB_BUILD_SUBCMD *cmd, uint32_t f); const char *GWB_BuildSubCmd_GetCommand(const GWB_BUILD_SUBCMD *cmd); void GWB_BuildSubCmd_SetCommand(GWB_BUILD_SUBCMD *cmd, const char *s); const char *GWB_BuildSubCmd_GetArguments(const GWB_BUILD_SUBCMD *cmd); void GWB_BuildSubCmd_SetArguments(GWB_BUILD_SUBCMD *cmd, const char *s); const char *GWB_BuildSubCmd_GetBuildMessage(const GWB_BUILD_SUBCMD *cmd); void GWB_BuildSubCmd_SetBuildMessage(GWB_BUILD_SUBCMD *cmd, const char *s); const char *GWB_BuildSubCmd_GetDepFilePath(const GWB_BUILD_SUBCMD *cmd); void GWB_BuildSubCmd_SetDepFilePath(GWB_BUILD_SUBCMD *cmd, const char *s); const char *GWB_BuildSubCmd_GetLogFilename(const GWB_BUILD_SUBCMD *cmd); void GWB_BuildSubCmd_SetLogFilename(GWB_BUILD_SUBCMD *cmd, const char *s); void GWB_BuildSubCmd_toXml(const GWB_BUILD_SUBCMD *cmd, GWEN_XMLNODE *xmlNode); GWB_BUILD_SUBCMD *GWB_BuildSubCmd_fromXml(GWEN_XMLNODE *xmlNode); GWB_BUILD_SUBCMD_LIST *GWB_BuildSubCmd_List_dup(const GWB_BUILD_SUBCMD_LIST *cmdList); void GWB_BuildSubCmd_Dump(const GWB_BUILD_SUBCMD *cmd, int indent); void GWB_BuildSubCmd_List_Dump(const GWB_BUILD_SUBCMD_LIST *cmdList, int indent, const char *text); #endif gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildcmd.c0000664000175000017500000003624414460564441017611 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/buildctx/buildcmd_p.h" #include #include GWEN_LIST_FUNCTIONS(GWB_BUILD_CMD, GWB_BuildCmd); GWEN_LIST2_FUNCTIONS(GWB_BUILD_CMD, GWB_BuildCmd); static void _writeIdsFromFile2ListToXml(const GWB_FILE_LIST2 *fileList2, GWEN_XMLNODE *xmlNode, const char *groupName); static void _readFileIdsFromXml(GWEN_XMLNODE *xmlNode, const char *groupName, GWB_FILE_LIST2 *ctxFileList, GWB_FILE_LIST2 *destFileList); static void _writeSubCommandListToXml(const GWB_BUILD_SUBCMD_LIST *cmdList, GWEN_XMLNODE *xmlNode, const char *groupName); static void _readSubCommandListFromXml(GWB_BUILD_SUBCMD_LIST *cmdList, GWEN_XMLNODE *xmlNode, const char *groupName); GWB_BUILD_CMD *GWB_BuildCmd_new(void) { GWB_BUILD_CMD *bcmd; GWEN_NEW_OBJECT(GWB_BUILD_CMD, bcmd); GWEN_LIST_INIT(GWB_BUILD_CMD, bcmd); bcmd->inFileList2=GWB_File_List2_new(); bcmd->outFileList2=GWB_File_List2_new(); bcmd->prepareCommandList=GWB_BuildSubCmd_List_new(); bcmd->buildCommandList=GWB_BuildSubCmd_List_new(); return bcmd; } GWB_BUILD_CMD *GWB_BuildCmd_dup(GWB_BUILD_CMD *origCmd) { GWB_BUILD_CMD *bcmd; GWEN_NEW_OBJECT(GWB_BUILD_CMD, bcmd); GWEN_LIST_INIT(GWB_BUILD_CMD, bcmd); bcmd->flags=origCmd->flags; bcmd->builderName=(origCmd->builderName)?strdup(origCmd->builderName):NULL; bcmd->folder=(origCmd->folder)?strdup(origCmd->folder):NULL; bcmd->buildMessage=(origCmd->buildMessage)?strdup(origCmd->buildMessage):NULL; if (origCmd->prepareCommandList) bcmd->prepareCommandList=GWB_BuildSubCmd_List_dup(origCmd->prepareCommandList); else bcmd->prepareCommandList=GWB_BuildSubCmd_List_new(); if (origCmd->buildCommandList) bcmd->buildCommandList=GWB_BuildSubCmd_List_dup(origCmd->buildCommandList); else bcmd->buildCommandList=GWB_BuildSubCmd_List_new(); bcmd->blockingFiles=origCmd->blockingFiles; if (origCmd->inFileList2) bcmd->inFileList2=GWB_File_List2_dup(origCmd->inFileList2); else bcmd->inFileList2=GWB_File_List2_new(); if (origCmd->outFileList2) bcmd->outFileList2=GWB_File_List2_dup(origCmd->outFileList2); else bcmd->outFileList2=GWB_File_List2_new(); bcmd->currentProcess=NULL; bcmd->currentCommand=NULL; return bcmd; } void GWB_BuildCmd_free(GWB_BUILD_CMD *bcmd) { if (bcmd) { GWEN_LIST_FINI(GWB_BUILD_CMD, bcmd); GWB_BuildCmd_SetCurrentProcess(bcmd, NULL); GWB_BuildCmd_SetCurrentCommand(bcmd, NULL); free(bcmd->buildMessage); free(bcmd->folder); free(bcmd->builderName); GWB_BuildSubCmd_List_free(bcmd->prepareCommandList); GWB_BuildSubCmd_List_free(bcmd->buildCommandList); GWB_File_List2_free(bcmd->inFileList2); GWB_File_List2_free(bcmd->outFileList2); GWEN_FREE_OBJECT(bcmd); } } uint32_t GWB_BuildCmd_GetFlags(const GWB_BUILD_CMD *bcmd) { return bcmd->flags; } void GWB_BuildCmd_SetFlags(GWB_BUILD_CMD *bcmd, uint32_t i) { bcmd->flags=i; } void GWB_BuildCmd_AddFlags(GWB_BUILD_CMD *bcmd, uint32_t i) { bcmd->flags|=i; } void GWB_BuildCmd_DelFlags(GWB_BUILD_CMD *bcmd, uint32_t i) { bcmd->flags&=~i; } const char *GWB_BuildCmd_GetBuilderName(const GWB_BUILD_CMD *bcmd) { return bcmd->builderName; } void GWB_BuildCmd_SetBuilderName(GWB_BUILD_CMD *bcmd, const char *s) { free(bcmd->builderName); bcmd->builderName=s?strdup(s):NULL; } const char *GWB_BuildCmd_GetFolder(const GWB_BUILD_CMD *bcmd) { return bcmd->folder; } void GWB_BuildCmd_SetFolder(GWB_BUILD_CMD *bcmd, const char *s) { free(bcmd->folder); bcmd->folder=s?strdup(s):NULL; } const char *GWB_BuildCmd_GetBuildMessage(const GWB_BUILD_CMD *bcmd) { return bcmd->buildMessage; } void GWB_BuildCmd_SetBuildMessage(GWB_BUILD_CMD *bcmd, const char *s) { free(bcmd->buildMessage); bcmd->buildMessage=s?strdup(s):NULL; } GWB_BUILD_SUBCMD_LIST *GWB_BuildCmd_GetPrepareCommandList(const GWB_BUILD_CMD *bcmd) { return bcmd->prepareCommandList; } void GWB_BuildCmd_AddPrepareCommand(GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *cmd) { GWB_BuildSubCmd_List_Add(cmd, bcmd->prepareCommandList); } GWB_BUILD_SUBCMD_LIST *GWB_BuildCmd_GetBuildCommandList(const GWB_BUILD_CMD *bcmd) { return bcmd->buildCommandList; } void GWB_BuildCmd_AddBuildCommand(GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *cmd) { GWB_BuildSubCmd_List_Add(cmd, bcmd->buildCommandList); } int GWB_BuildCmd_GetBlockingFiles(const GWB_BUILD_CMD *bcmd) { return bcmd->blockingFiles; } void GWB_BuildCmd_SetBlockingFiles(GWB_BUILD_CMD *bcmd, int i) { bcmd->blockingFiles=i; } int GWB_BuildCmd_IncBlockingFiles(GWB_BUILD_CMD *bcmd) { return ++(bcmd->blockingFiles); } int GWB_BuildCmd_DecBlockingFiles(GWB_BUILD_CMD *bcmd) { if (bcmd->blockingFiles>0) return --(bcmd->blockingFiles); else return bcmd->blockingFiles; } GWB_FILE_LIST2 *GWB_BuildCmd_GetInFileList2(const GWB_BUILD_CMD *bcmd) { return bcmd->inFileList2; } void GWB_BuildCmd_AddInFile(GWB_BUILD_CMD *bcmd, GWB_FILE *file) { if (file) GWB_File_List2_PushBack(bcmd->inFileList2, file); } GWB_FILE_LIST2 *GWB_BuildCmd_GetOutFileList2(const GWB_BUILD_CMD *bcmd) { return bcmd->outFileList2; } void GWB_BuildCmd_AddOutFile(GWB_BUILD_CMD *bcmd, GWB_FILE *file) { if (file) GWB_File_List2_PushBack(bcmd->outFileList2, file); } GWEN_PROCESS *GWB_BuildCmd_GetCurrentProcess(const GWB_BUILD_CMD *bcmd) { return bcmd->currentProcess; } void GWB_BuildCmd_SetCurrentProcess(GWB_BUILD_CMD *bcmd, GWEN_PROCESS *process) { if (bcmd->currentProcess) { if (GWEN_Process_CheckState(bcmd->currentProcess)==GWEN_ProcessStateRunning) { DBG_ERROR(NULL, "Process is still running!"); GWEN_Process_Terminate(bcmd->currentProcess); } GWEN_Process_free(bcmd->currentProcess); } bcmd->currentProcess=process; } GWB_BUILD_SUBCMD *GWB_BuildCmd_GetCurrentCommand(const GWB_BUILD_CMD *bcmd) { return bcmd->currentCommand; } void GWB_BuildCmd_SetCurrentCommand(GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *cmd) { bcmd->currentCommand=cmd; } void GWB_BuildCmd_toXml(const GWB_BUILD_CMD *bcmd, GWEN_XMLNODE *xmlNode) { if (bcmd->builderName) GWEN_XMLNode_SetCharValue(xmlNode, "builderName", bcmd->builderName); GWEN_XMLNode_SetIntValue(xmlNode, "flags", bcmd->flags); if (bcmd->folder) GWEN_XMLNode_SetCharValue(xmlNode, "folder", bcmd->folder); if (bcmd->buildMessage) GWEN_XMLNode_SetCharValue(xmlNode, "buildMessage", bcmd->buildMessage); if (bcmd->prepareCommandList) { GWEN_XMLNODE *xmlGroupNode; xmlGroupNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "prepareCommands"); _writeSubCommandListToXml(bcmd->prepareCommandList, xmlGroupNode, "command"); GWEN_XMLNode_AddChild(xmlNode, xmlGroupNode); } if (bcmd->buildCommandList) { GWEN_XMLNODE *xmlGroupNode; xmlGroupNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "buildCommands"); _writeSubCommandListToXml(bcmd->buildCommandList, xmlGroupNode, "command"); GWEN_XMLNode_AddChild(xmlNode, xmlGroupNode); } if (bcmd->inFileList2) { GWEN_XMLNODE *xmlGroupNode; xmlGroupNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "inputFiles"); _writeIdsFromFile2ListToXml(bcmd->inFileList2, xmlGroupNode, "file"); GWEN_XMLNode_AddChild(xmlNode, xmlGroupNode); } if (bcmd->outFileList2) { GWEN_XMLNODE *xmlGroupNode; xmlGroupNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "outputFiles"); _writeIdsFromFile2ListToXml(bcmd->outFileList2, xmlGroupNode, "file"); GWEN_XMLNode_AddChild(xmlNode, xmlGroupNode); } } GWB_BUILD_CMD *GWB_BuildCmd_fromXml(GWEN_XMLNODE *xmlNode, GWB_FILE_LIST2 *fileList) { GWB_BUILD_CMD *bcmd; GWEN_XMLNODE *xmlGroupNode; const char *s; bcmd=GWB_BuildCmd_new(); s=GWEN_XMLNode_GetCharValue(xmlNode, "builderName", NULL); GWB_BuildCmd_SetBuilderName(bcmd, s); bcmd->flags=GWEN_XMLNode_GetIntValue(xmlNode, "flags", 0); s=GWEN_XMLNode_GetCharValue(xmlNode, "folder", NULL); GWB_BuildCmd_SetFolder(bcmd, s); s=GWEN_XMLNode_GetCharValue(xmlNode, "buildMessage", NULL); GWB_BuildCmd_SetBuildMessage(bcmd, s); xmlGroupNode=GWEN_XMLNode_FindFirstTag(xmlNode, "prepareCommands", NULL, NULL); if (xmlGroupNode) _readSubCommandListFromXml(bcmd->prepareCommandList, xmlGroupNode, "command"); xmlGroupNode=GWEN_XMLNode_FindFirstTag(xmlNode, "buildCommands", NULL, NULL); if (xmlGroupNode) _readSubCommandListFromXml(bcmd->buildCommandList, xmlGroupNode, "command"); xmlGroupNode=GWEN_XMLNode_FindFirstTag(xmlNode, "inputFiles", NULL, NULL); if (xmlGroupNode) _readFileIdsFromXml(xmlGroupNode, "file", fileList, bcmd->inFileList2); xmlGroupNode=GWEN_XMLNode_FindFirstTag(xmlNode, "outputFiles", NULL, NULL); if (xmlGroupNode) _readFileIdsFromXml(xmlGroupNode, "file", fileList, bcmd->outFileList2); return bcmd; } void _writeSubCommandListToXml(const GWB_BUILD_SUBCMD_LIST *cmdList, GWEN_XMLNODE *xmlNode, const char *groupName) { const GWB_BUILD_SUBCMD *cmd; cmd=GWB_BuildSubCmd_List_First(cmdList); while(cmd) { GWEN_XMLNODE *entryNode; entryNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, groupName); GWB_BuildSubCmd_toXml(cmd, entryNode); GWEN_XMLNode_AddChild(xmlNode, entryNode); cmd=GWB_BuildSubCmd_List_Next(cmd); } } void _readSubCommandListFromXml(GWB_BUILD_SUBCMD_LIST *cmdList, GWEN_XMLNODE *xmlNode, const char *groupName) { GWEN_XMLNODE *xmlEntry; xmlEntry=GWEN_XMLNode_FindFirstTag(xmlNode, groupName, NULL, NULL); while(xmlEntry) { GWB_BUILD_SUBCMD *cmd; cmd=GWB_BuildSubCmd_fromXml(xmlEntry); if (cmd) GWB_BuildSubCmd_List_Add(cmd, cmdList); xmlEntry=GWEN_XMLNode_FindNextTag(xmlEntry, groupName, NULL, NULL); } } void _writeIdsFromFile2ListToXml(const GWB_FILE_LIST2 *fileList2, GWEN_XMLNODE *xmlNode, const char *groupName) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList2); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { GWEN_XMLNODE *entryNode; uint32_t id; entryNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, groupName); id=GWB_File_GetId(file); GWEN_XMLNode_SetIntProperty(entryNode, "id", (int) id); GWEN_XMLNode_AddChild(xmlNode, entryNode); file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } void _readFileIdsFromXml(GWEN_XMLNODE *xmlNode, const char *groupName, GWB_FILE_LIST2 *ctxFileList, GWB_FILE_LIST2 *destFileList) { GWEN_XMLNODE *xmlEntry; xmlEntry=GWEN_XMLNode_FindFirstTag(xmlNode, groupName, NULL, NULL); while(xmlEntry) { uint32_t id; id=(uint32_t) GWEN_XMLNode_GetIntProperty(xmlEntry, "id", 0); if (id==0) { DBG_ERROR(NULL, "FILE has no id"); } else { GWB_FILE *file; file=GWB_File_List2_GetFileById(ctxFileList, id); if (file==NULL) { DBG_ERROR(NULL, "FILE %d not found", (int) id); } else GWB_File_List2_PushBack(destFileList, file); } xmlEntry=GWEN_XMLNode_FindNextTag(xmlEntry, groupName, NULL, NULL); } } void GWB_BuildCmd_List2_WriteXml(const GWB_BUILD_CMD_LIST2 *cmdList, GWEN_XMLNODE *xmlNode, const char *groupName) { GWB_BUILD_CMD_LIST2_ITERATOR *it; it=GWB_BuildCmd_List2_First(cmdList); if (it) { GWB_BUILD_CMD *cmd; cmd=GWB_BuildCmd_List2Iterator_Data(it); while(cmd) { GWEN_XMLNODE *entryNode; entryNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, groupName); GWB_BuildCmd_toXml(cmd, entryNode); GWEN_XMLNode_AddChild(xmlNode, entryNode); cmd=GWB_BuildCmd_List2Iterator_Next(it); } GWB_BuildCmd_List2Iterator_free(it); } } void GWB_BuildCmd_List_WriteXml(const GWB_BUILD_CMD_LIST *cmdList, GWEN_XMLNODE *xmlNode, const char *groupName) { GWB_BUILD_CMD *cmd; cmd=GWB_BuildCmd_List_First(cmdList); while(cmd) { GWEN_XMLNODE *entryNode; entryNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, groupName); GWB_BuildCmd_toXml(cmd, entryNode); GWEN_XMLNode_AddChild(xmlNode, entryNode); cmd=GWB_BuildCmd_List_Next(cmd); } } void GWB_BuildCmd_List2_FreeAll(GWB_BUILD_CMD_LIST2 *cmdList) { if (cmdList) { GWB_BUILD_CMD_LIST2_ITERATOR *it; it=GWB_BuildCmd_List2_First(cmdList); if (it) { GWB_BUILD_CMD *cmd; cmd=GWB_BuildCmd_List2Iterator_Data(it); while(cmd) { GWB_BuildCmd_free(cmd); cmd=GWB_BuildCmd_List2Iterator_Next(it); } } GWB_BuildCmd_List2_free(cmdList); } } void GWB_BuildCmd_Dump(const GWB_BUILD_CMD *bcmd, int indent) { int i; for(i=0; ifolder, indent+2); GWBUILD_Debug_PrintIntValue("blockingFiles", bcmd->blockingFiles, indent+2); GWB_BuildSubCmd_List_Dump(bcmd->prepareCommandList, indent+2, "prepareCommandList"); GWB_BuildSubCmd_List_Dump(bcmd->buildCommandList, indent+2, "buildCommandList"); GWBUILD_Debug_PrintFileList2("inFileList2", bcmd->inFileList2, indent+2); GWBUILD_Debug_PrintFileList2("outFileList2", bcmd->outFileList2, indent+2); } void GWB_BuildCmd_PrintDescriptionWithText(const GWB_BUILD_CMD *bcmd, int indent, const char *text) { if (bcmd) { const GWB_FILE *fileIn=NULL; const GWB_FILE *fileOut=NULL; if (bcmd->inFileList2) fileIn=GWB_File_List2_GetFront(bcmd->inFileList2); if (bcmd->outFileList2) fileOut=GWB_File_List2_GetFront(bcmd->outFileList2); if (fileIn || fileOut) { const char *folder; const char *fileNameIn=NULL; const char *fileNameOut=NULL; folder=GWB_BuildCmd_GetFolder(bcmd); if (fileIn) fileNameIn=GWB_File_GetName(fileIn); if (fileOut) fileNameOut=GWB_File_GetName(fileOut); if (fileNameIn && fileNameOut) { int i; for(i=0; i %s) [%d blocking files]\n", folder?folder:"", text?text:"BuildCmd", fileNameIn?fileNameIn:"", fileNameOut?fileNameOut:"", bcmd->blockingFiles); } else if (fileIn) { int i; for(i=0; i", text?text:"BuildCmd", fileNameIn?fileNameIn:"", bcmd->blockingFiles); } } } } gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx_xml.c0000664000175000017500000002134414300757743020521 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "gwenbuild/buildctx/buildctx_p.h" #include "gwenbuild/buildctx/buildctx_xml.h" #include #include #include #include #include static void _writeFileList2ToXml(const GWB_FILE_LIST2 *fileList, GWEN_XMLNODE *xmlNode, const char *groupName); static void _readFilesFromXml(GWEN_XMLNODE *xmlNode, const char *groupName, GWB_FILE_LIST2 *destFileList); static void _writeCommandList2ToXml(const GWB_BUILD_CMD_LIST2 *commandList, GWEN_XMLNODE *xmlNode, const char *groupName); static void _readCommandsFromXml(GWB_BUILD_CONTEXT *bctx, GWEN_XMLNODE *xmlNode, const char *groupName); static void _writeFileFlagsToXml(uint32_t flags, GWEN_XMLNODE *xmlNode, const char *varName); static uint32_t _readFlagsFromChar(const char *flagsAsText); void GWB_BuildCtx_toXml(const GWB_BUILD_CONTEXT *bctx, GWEN_XMLNODE *xmlNode) { if (bctx->initialSourceDir) GWEN_XMLNode_SetCharValue(xmlNode, "initialSourceDir", bctx->initialSourceDir); if (bctx->fileList) { GWEN_XMLNODE *xmlGroupNode; xmlGroupNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "fileList"); _writeFileList2ToXml(bctx->fileList, xmlGroupNode, "file"); GWEN_XMLNode_AddChild(xmlNode, xmlGroupNode); } if (bctx->commandList) { GWEN_XMLNODE *xmlGroupNode; xmlGroupNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "commandList"); _writeCommandList2ToXml(bctx->commandList, xmlGroupNode, "command"); GWEN_XMLNode_AddChild(xmlNode, xmlGroupNode); } } GWB_BUILD_CONTEXT *GWB_BuildCtx_fromXml(GWEN_XMLNODE *xmlNode) { GWB_BUILD_CONTEXT *bctx; GWEN_XMLNODE *xmlGroupNode; const char *s; bctx=GWB_BuildCtx_new(); s=GWEN_XMLNode_GetCharValue(xmlNode, "initialSourceDir", NULL); if (s) GWB_BuildCtx_SetInitialSourceDir(bctx, s); xmlGroupNode=GWEN_XMLNode_FindFirstTag(xmlNode, "fileList", NULL, NULL); if (xmlGroupNode) _readFilesFromXml(xmlGroupNode, "file", bctx->fileList); xmlGroupNode=GWEN_XMLNode_FindFirstTag(xmlNode, "commandList", NULL, NULL); if (xmlGroupNode) _readCommandsFromXml(bctx, xmlGroupNode, "command"); return bctx; } void _writeCommandList2ToXml(const GWB_BUILD_CMD_LIST2 *commandList, GWEN_XMLNODE *xmlNode, const char *groupName) { GWB_BUILD_CMD_LIST2_ITERATOR *it; it=GWB_BuildCmd_List2_First(commandList); if (it) { const GWB_BUILD_CMD *cmd; cmd=GWB_BuildCmd_List2Iterator_Data(it); while(cmd) { GWEN_XMLNODE *entryNode; entryNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, groupName); GWB_BuildCmd_toXml(cmd, entryNode); GWEN_XMLNode_AddChild(xmlNode, entryNode); cmd=GWB_BuildCmd_List2Iterator_Next(it); } GWB_BuildCmd_List2Iterator_free(it); } } void _writeFileList2ToXml(const GWB_FILE_LIST2 *fileList, GWEN_XMLNODE *xmlNode, const char *groupName) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { GWEN_XMLNODE *entryNode; const char *s; entryNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, groupName); GWEN_XMLNode_SetIntProperty(entryNode, "id", (int) GWB_File_GetId(file)); s=GWB_File_GetFolder(file); if (s) GWEN_XMLNode_SetCharValue(entryNode, "folder", s); s=GWB_File_GetName(file); if (s) GWEN_XMLNode_SetCharValue(entryNode, "name", s); s=GWB_File_GetFileType(file); if (s) GWEN_XMLNode_SetCharValue(entryNode, "type", s); _writeFileFlagsToXml(GWB_File_GetFlags(file), entryNode, "flags"); GWEN_XMLNode_AddChild(xmlNode, entryNode); file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } void _writeFileFlagsToXml(uint32_t flags, GWEN_XMLNODE *xmlNode, const char *varName) { if (flags) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); if (flags & GWB_FILE_FLAGS_DIST) { if (GWEN_Buffer_GetUsedBytes(dbuf)) GWEN_Buffer_AppendString(dbuf, " "); GWEN_Buffer_AppendString(dbuf, "DIST"); } if (flags & GWB_FILE_FLAGS_INSTALL) { if (GWEN_Buffer_GetUsedBytes(dbuf)) GWEN_Buffer_AppendString(dbuf, " "); GWEN_Buffer_AppendString(dbuf, "INSTALL"); } if (flags & GWB_FILE_FLAGS_GENERATED) { if (GWEN_Buffer_GetUsedBytes(dbuf)) GWEN_Buffer_AppendString(dbuf, " "); GWEN_Buffer_AppendString(dbuf, "GENERATED"); } GWEN_XMLNode_SetCharValue(xmlNode, varName, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } } void _readCommandsFromXml(GWB_BUILD_CONTEXT *bctx, GWEN_XMLNODE *xmlNode, const char *groupName) { GWEN_XMLNODE *xmlEntry; xmlEntry=GWEN_XMLNode_FindFirstTag(xmlNode, groupName, NULL, NULL); while(xmlEntry) { GWB_BUILD_CMD *bcmd; bcmd=GWB_BuildCmd_fromXml(xmlEntry, bctx->fileList); GWB_BuildCmd_List2_PushBack(bctx->commandList, bcmd); xmlEntry=GWEN_XMLNode_FindNextTag(xmlEntry, groupName, NULL, NULL); } } void _readFilesFromXml(GWEN_XMLNODE *xmlNode, const char *groupName, GWB_FILE_LIST2 *destFileList) { GWEN_XMLNODE *xmlEntry; xmlEntry=GWEN_XMLNode_FindFirstTag(xmlNode, groupName, NULL, NULL); while(xmlEntry) { uint32_t id; id=(uint32_t) GWEN_XMLNode_GetIntProperty(xmlEntry, "id", 0); if (id==0) { DBG_ERROR(NULL, "FILE has no id"); } else { GWB_FILE *file; const char *folder; const char *name; const char *fileType; const char *flagsAsText; uint32_t flags; folder=GWEN_XMLNode_GetCharValue(xmlEntry, "folder", NULL); name=GWEN_XMLNode_GetCharValue(xmlEntry, "name", NULL); fileType=GWEN_XMLNode_GetCharValue(xmlEntry, "type", NULL); flagsAsText=GWEN_XMLNode_GetCharValue(xmlEntry, "flags", NULL); flags=_readFlagsFromChar(flagsAsText); file=GWB_File_new(folder, name, id); GWB_File_SetFlags(file, flags); GWB_File_SetFileType(file, fileType); GWB_File_List2_PushBack(destFileList, file); } xmlEntry=GWEN_XMLNode_FindNextTag(xmlEntry, groupName, NULL, NULL); } } uint32_t _readFlagsFromChar(const char *flagsAsText) { GWEN_STRINGLIST *sl; uint32_t flags=0; sl=GWEN_StringList_fromString(flagsAsText, " ", 1); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { if (strcasecmp(s, "DIST")==0) flags|=GWB_FILE_FLAGS_DIST; else if (strcasecmp(s, "INSTALL")==0) flags|=GWB_FILE_FLAGS_INSTALL; else if (strcasecmp(s, "GENERATED")==0) flags|=GWB_FILE_FLAGS_GENERATED; else { DBG_ERROR(NULL, "Unexpected FILE flag \"%s\"", s); } } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } return flags; } GWB_BUILD_CONTEXT *GWB_BuildCtx_ReadFromXmlFile(const char *fileName) { GWB_BUILD_CONTEXT *buildCtx; GWEN_XMLNODE *xmlNode; GWEN_XMLNODE *xmlBuildCtx; int rv; xmlNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); rv=GWEN_XML_ReadFile(xmlNode, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); if (rv<0) { DBG_ERROR(NULL, "Error reading BuildContext file \"%s\": Bad XML (%d)", fileName, rv); GWEN_XMLNode_free(xmlNode); return NULL; } xmlBuildCtx=GWEN_XMLNode_FindFirstTag(xmlNode, "BuildContext", NULL, NULL); if (xmlBuildCtx==NULL) { DBG_ERROR(NULL, "XML file \"%s\" doesn not contain a BuildContext element,", fileName); GWEN_XMLNode_free(xmlNode); return NULL; } buildCtx=GWB_BuildCtx_fromXml(xmlBuildCtx); GWEN_XMLNode_free(xmlNode); return buildCtx; } int GWB_BuildCtx_WriteToXmlFile(const GWB_BUILD_CONTEXT *buildCtx, const char *fileName) { GWEN_XMLNODE *xmlNode; GWEN_XMLNODE *xmlBuildCtx; int rv; xmlNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); xmlBuildCtx=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "BuildContext"); GWB_BuildCtx_toXml(buildCtx, xmlBuildCtx); GWEN_XMLNode_AddChild(xmlNode, xmlBuildCtx); rv=GWEN_XMLNode_WriteFile(xmlNode, fileName, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_SIMPLE); GWEN_XMLNode_free(xmlNode); if (rv<0) { DBG_ERROR(NULL, "Error writing BuildContext to file \"%s\" (%d)", fileName, rv); return rv; } return 0; } gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx_p.h0000664000175000017500000000155114460564441020161 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDCTX_P_H #define GWBUILD_BUILDCTX_P_H #include "gwenbuild/buildctx/buildctx.h" struct GWB_BUILD_CONTEXT { int lastFileId; char *initialSourceDir; GWB_BUILD_CMD_LIST2 *commandList; GWB_FILE_LIST2 *fileList; /* only used while running commands */ GWB_BUILD_CMD_LIST2 *waitingQueue; GWB_BUILD_CMD_LIST2 *runningQueue; GWB_BUILD_CMD_LIST2 *finishedQueue; char *logPath; int lastLogfileId; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildcmd_p.h0000664000175000017500000000163614301235317020121 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDCMD_P_H #define GWBUILD_BUILDCMD_P_H #include "gwenbuild/buildctx/buildcmd.h" struct GWB_BUILD_CMD { GWEN_LIST_ELEMENT(GWB_BUILD_CMD) uint32_t flags; char *builderName; char *folder; char *buildMessage; GWB_BUILD_SUBCMD_LIST *prepareCommandList; GWB_BUILD_SUBCMD_LIST *buildCommandList; int blockingFiles; GWB_FILE_LIST2 *inFileList2; GWB_FILE_LIST2 *outFileList2; GWEN_PROCESS *currentProcess; GWB_BUILD_SUBCMD *currentCommand; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx_bdeps.c0000664000175000017500000001660114460564441021014 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "gwenbuild/buildctx/buildctx_p.h" #include "gwenbuild/buildctx/buildctx_bdeps.h" #include #include #include #include #include static void _setupDepsForCmd(GWB_BUILD_CMD *bcmd, GWB_BUILD_CMD_LIST2 *targetCmdList); static void _setBuildCmdInFiles(GWB_BUILD_CONTEXT *bctx); static void _fileListSetBuildCmd(GWB_FILE_LIST2 *fileList, GWB_BUILD_CMD *bcmd); static int _cmdIsInList(const GWB_BUILD_CMD_LIST2 *sourceCmdList, const GWB_BUILD_CMD *cmd); static void _clearDeps(GWB_BUILD_CONTEXT *bctx); static void _clearDepsInCommands(GWB_BUILD_CONTEXT *bctx); static void _clearDepsInFiles(GWB_BUILD_CONTEXT *bctx); int GWB_BuildCtx_SetupDependencies(GWB_BUILD_CONTEXT *bctx) { _clearDeps(bctx); _setBuildCmdInFiles(bctx); return 0; } int GWB_BuildCtx_FillWaitingQueue(GWB_BUILD_CONTEXT *bctx, const char *builderName) { int rv; rv=GWB_BuildCtx_AddBuildCmdsByBuilderNameToList(bctx->commandList, builderName, bctx->waitingQueue); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } #if 0 DBG_ERROR(NULL, "Got this queue:"); GWBUILD_Debug_PrintBuildCmdList2("Waiting Queue", bctx->waitingQueue, 2); #endif return 0; } int GWB_BuildCtx_AddBuildCmdsForFileToList(const GWB_FILE *file, GWB_BUILD_CMD_LIST2 *targetCmdList) { GWB_BUILD_CMD *bcmd; bcmd=GWB_File_GetBuildCmd(file); if (bcmd) { if (GWB_BuildCmd_GetCurrentCommand(bcmd)) { GWB_BuildCmd_List2_PushBack(targetCmdList, bcmd); _setupDepsForCmd(bcmd, targetCmdList); } else { const char *sBuilderName; const char *sFolder; const char *sFileName; sBuilderName=GWB_BuildCmd_GetBuilderName(bcmd); sFileName=GWB_File_GetName(file); sFolder=GWB_File_GetFolder(file); DBG_ERROR(NULL, "Builder \"%s\" for selected file \"%s\" in folder \"%s\" has no build commands", sBuilderName?sBuilderName:"", sFileName?sFileName:"", sFolder?sFolder:"."); } } return 0; } int GWB_BuildCtx_AddBuildCmdsByBuilderNameToList(const GWB_BUILD_CMD_LIST2 *sourceCmdList, const char *builderName, GWB_BUILD_CMD_LIST2 *targetCmdList) { if (sourceCmdList) { GWB_BUILD_CMD_LIST2_ITERATOR *it; it=GWB_BuildCmd_List2_First(sourceCmdList); if (it) { if (builderName && *builderName) { GWB_BUILD_CMD *bcmd; bcmd=GWB_BuildCmd_List2Iterator_Data(it); while(bcmd) { const char *s; s=GWB_BuildCmd_GetBuilderName(bcmd); if (s && strcasecmp(s, builderName)==0) { if (!_cmdIsInList(targetCmdList, bcmd)) { if (GWB_BuildCmd_GetCurrentCommand(bcmd)) { GWB_BuildCmd_List2_PushBack(targetCmdList, bcmd); _setupDepsForCmd(bcmd, targetCmdList); } } } bcmd=GWB_BuildCmd_List2Iterator_Next(it); } GWB_BuildCmd_List2Iterator_free(it); } else { GWB_BUILD_CMD *bcmd; bcmd=GWB_BuildCmd_List2Iterator_Data(it); while(bcmd) { if (GWB_BuildCmd_GetFlags(bcmd) & GWB_BUILD_CMD_FLAGS_AUTO) { if (!_cmdIsInList(targetCmdList, bcmd)) { if (GWB_BuildCmd_GetCurrentCommand(bcmd)) { GWB_BuildCmd_List2_PushBack(targetCmdList, bcmd); _setupDepsForCmd(bcmd, targetCmdList); } } } bcmd=GWB_BuildCmd_List2Iterator_Next(it); } GWB_BuildCmd_List2Iterator_free(it); } } } return 0; } void _clearDeps(GWB_BUILD_CONTEXT *bctx) { _clearDepsInCommands(bctx); _clearDepsInFiles(bctx); } void _clearDepsInCommands(GWB_BUILD_CONTEXT *bctx) { if (bctx->commandList) { GWB_BUILD_CMD_LIST2_ITERATOR *it; it=GWB_BuildCmd_List2_First(bctx->commandList); if (it) { GWB_BUILD_CMD *bcmd; bcmd=GWB_BuildCmd_List2Iterator_Data(it); while(bcmd) { GWB_BuildCmd_SetBlockingFiles(bcmd, 0); bcmd=GWB_BuildCmd_List2Iterator_Next(it); } GWB_BuildCmd_List2Iterator_free(it); } } } void _clearDepsInFiles(GWB_BUILD_CONTEXT *bctx) { if (bctx->fileList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(bctx->fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { GWB_File_ClearWaitingBuildCmds(file); file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } } void _setupDepsForCmd(GWB_BUILD_CMD *bcmd, GWB_BUILD_CMD_LIST2 *targetCmdList) { GWB_FILE_LIST2 *fileList; fileList=GWB_BuildCmd_GetInFileList2(bcmd); if (fileList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { GWB_BUILD_CMD *fileBuildCmd; fileBuildCmd=GWB_File_GetBuildCmd(file); if (fileBuildCmd) { GWB_File_AddWaitingBuildCmd(file, bcmd); GWB_BuildCmd_IncBlockingFiles(bcmd); if (!_cmdIsInList(targetCmdList, fileBuildCmd)) { if (GWB_BuildCmd_GetCurrentCommand(fileBuildCmd)) { GWB_BuildCmd_List2_PushBack(targetCmdList, fileBuildCmd); _setupDepsForCmd(fileBuildCmd, targetCmdList); /* recursion! */ } } } file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } } void _setBuildCmdInFiles(GWB_BUILD_CONTEXT *bctx) { if (bctx->commandList) { GWB_BUILD_CMD_LIST2_ITERATOR *it; it=GWB_BuildCmd_List2_First(bctx->commandList); if (it) { GWB_BUILD_CMD *bcmd; bcmd=GWB_BuildCmd_List2Iterator_Data(it); while(bcmd) { _fileListSetBuildCmd(GWB_BuildCmd_GetOutFileList2(bcmd), bcmd); bcmd=GWB_BuildCmd_List2Iterator_Next(it); } GWB_BuildCmd_List2Iterator_free(it); } } } void _fileListSetBuildCmd(GWB_FILE_LIST2 *fileList, GWB_BUILD_CMD *bcmd) { if (fileList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { GWB_File_SetBuildCmd(file, bcmd); file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } } int _cmdIsInList(const GWB_BUILD_CMD_LIST2 *sourceCmdList, const GWB_BUILD_CMD *cmd) { GWB_BUILD_CMD_LIST2_ITERATOR *it; it=GWB_BuildCmd_List2_First(sourceCmdList); if (it) { GWB_BUILD_CMD *bcmd; bcmd=GWB_BuildCmd_List2Iterator_Data(it); while(bcmd) { if (bcmd==cmd) { GWB_BuildCmd_List2Iterator_free(it); return 1; } bcmd=GWB_BuildCmd_List2Iterator_Next(it); } GWB_BuildCmd_List2Iterator_free(it); } return 0; } gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx_run.c0000664000175000017500000005335014606171174020524 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "gwenbuild/buildctx/buildctx_p.h" #include "gwenbuild/buildctx/buildctx_run.h" #include "gwenbuild/buildctx/buildctx_bdeps.h" #include "gwenbuild/buildctx/buildctx_depfile.h" #include #include #include #include #include #include #include #include #include #define GWB_BUILDCTX_PROCESS_WAIT_TIMEOUT 10.0 static int _commandLogNum=0; static void _setupCommands(GWB_BUILD_CONTEXT *bctx, int forPrepareCommands); static void _createCommandQueues(GWB_BUILD_CONTEXT *bctx); static int _checkWaitingQueue(GWB_BUILD_CONTEXT *bctx, int maxStartAllowed); static int _startCommand(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, const GWEN_STRINGLIST *slOutFiles); static int _checkRunningQueue(GWB_BUILD_CONTEXT *bctx); static void _signalJobFinished(GWB_BUILD_CMD *bcmd); static void _decBlockingFilesInWaitingBuildCommands(GWB_BUILD_CMD_LIST2 *waitingCommands); static void _printCmdOutputIfNotEmptyAndDeleteFile(GWB_BUILD_CMD *cmd, GWB_BUILD_SUBCMD *subCmd); static int _waitForRunningJobs(GWB_BUILD_CONTEXT *bctx); static void _abortAllCommands(GWB_BUILD_CONTEXT *bctx); static void _abortCommandsInQueue(GWB_BUILD_CMD_LIST2 *cmdList); static int _needRunCurrentCommand(GWB_BUILD_CMD *bcmd, const GWEN_STRINGLIST *slInFiles, const GWEN_STRINGLIST *slOutFiles); static void _finishCurrentCommand(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *currentCommand); static int _checkDependencies(GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *subCmd, const char *firstOutFileName); static int _checkDatesOfFileAgainstList(const char *fileName, const GWEN_STRINGLIST *sl); static int _inFilesNewerThanOutFiles(const GWEN_STRINGLIST *slInFiles, const GWEN_STRINGLIST *slOutFiles); static time_t _getHighestModificationTime(const GWEN_STRINGLIST *slFiles); static time_t _getLowestModificationTime(const GWEN_STRINGLIST *slFiles); static void _unlinkFilesInStringList(const GWEN_STRINGLIST *slFiles); int GWB_BuildCtx_Run(GWB_BUILD_CONTEXT *bctx, int maxConcurrentJobs, int usePrepareCommands, const char *builderName) { int rv; int waitingJobs; int runningJobs; GWB_BuildCtx_SetupDependencies(bctx); _setupCommands(bctx, usePrepareCommands); _createCommandQueues(bctx); rv=GWB_BuildCtx_FillWaitingQueue(bctx, builderName); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } if (GWB_BuildCmd_List2_GetSize(bctx->waitingQueue)==0) { fprintf(stdout, "Nothing to do.\n"); return 0; } waitingJobs=GWB_BuildCmd_List2_GetSize(bctx->waitingQueue); runningJobs=GWB_BuildCmd_List2_GetSize(bctx->runningQueue); while(waitingJobs+runningJobs) { int startedCommands; int changedCommands; startedCommands=_checkWaitingQueue(bctx, maxConcurrentJobs-runningJobs); if (startedCommands<0) { _waitForRunningJobs(bctx); _abortAllCommands(bctx); return GWEN_ERROR_GENERIC; } changedCommands=_checkRunningQueue(bctx); if (changedCommands<0) { /* error */ _waitForRunningJobs(bctx); _abortAllCommands(bctx); return GWEN_ERROR_GENERIC; } if (startedCommands==0 && changedCommands==0) { if (runningJobs==0) { DBG_ERROR(NULL, "ERROR: No running jobs and none could be started, maybe circular dependencies?"); _waitForRunningJobs(bctx); _abortAllCommands(bctx); return GWEN_ERROR_GENERIC; } DBG_DEBUG(NULL, "Nothing changed, sleeping..."); sleep(3); } waitingJobs=GWB_BuildCmd_List2_GetSize(bctx->waitingQueue); runningJobs=GWB_BuildCmd_List2_GetSize(bctx->runningQueue); } /* while */ GWB_BuildCmd_List2_free(bctx->waitingQueue); bctx->waitingQueue=NULL; GWB_BuildCmd_List2_free(bctx->runningQueue); bctx->runningQueue=NULL; GWB_BuildCmd_List2_free(bctx->finishedQueue); bctx->finishedQueue=NULL; return 0; } int _waitForRunningJobs(GWB_BUILD_CONTEXT *bctx) { int numRunningJobs; time_t startTime; startTime=time(0); numRunningJobs=GWB_BuildCmd_List2_GetSize(bctx->runningQueue); if (numRunningJobs) fprintf(stderr, "NOTICE: Waiting for %d jobs.\n", numRunningJobs); while(numRunningJobs) { int numChangedCommands; time_t currentTime; numChangedCommands=_checkRunningQueue(bctx); if (numChangedCommands<0) { /* error */ DBG_INFO(NULL, "Some jobs had errors"); } numRunningJobs=GWB_BuildCmd_List2_GetSize(bctx->runningQueue); if (numRunningJobs>0) { double delta; currentTime=time(0); delta=difftime(currentTime, startTime); if (delta>=GWB_BUILDCTX_PROCESS_WAIT_TIMEOUT) { DBG_ERROR(NULL, "%d jobs still running after %f.1 seconds, aborting", numRunningJobs, delta); return GWEN_ERROR_TIMEOUT; } DBG_DEBUG(NULL, "Jobs still running, sleeping..."); sleep(1); } } /* while */ return 0; } void _abortAllCommands(GWB_BUILD_CONTEXT *bctx) { _abortCommandsInQueue(bctx->waitingQueue); GWB_BuildCmd_List2_free(bctx->waitingQueue); bctx->waitingQueue=NULL; _abortCommandsInQueue(bctx->runningQueue); GWB_BuildCmd_List2_free(bctx->runningQueue); bctx->runningQueue=NULL; _abortCommandsInQueue(bctx->finishedQueue); GWB_BuildCmd_List2_free(bctx->finishedQueue); bctx->finishedQueue=NULL; } void _abortCommandsInQueue(GWB_BUILD_CMD_LIST2 *cmdList) { GWB_BUILD_CMD *bcmd; while( (bcmd=GWB_BuildCmd_List2_GetFront(cmdList)) ) { GWB_BuildCmd_List2_PopFront(cmdList); GWB_BuildCmd_SetCurrentProcess(bcmd, NULL); } /* while */ } void _setupCommands(GWB_BUILD_CONTEXT *bctx, int forPrepareCommands) { GWB_BUILD_CMD_LIST2_ITERATOR *it; it=GWB_BuildCmd_List2_First(bctx->commandList); if (it) { GWB_BUILD_CMD *bcmd; bcmd=GWB_BuildCmd_List2Iterator_Data(it); while(bcmd) { GWB_BUILD_SUBCMD_LIST *cmdList; if (forPrepareCommands) cmdList=GWB_BuildCmd_GetPrepareCommandList(bcmd); else cmdList=GWB_BuildCmd_GetBuildCommandList(bcmd); if (cmdList) GWB_BuildCmd_SetCurrentCommand(bcmd, GWB_BuildSubCmd_List_First(cmdList)); bcmd=GWB_BuildCmd_List2Iterator_Next(it); } GWB_BuildCmd_List2Iterator_free(it); } } void _createCommandQueues(GWB_BUILD_CONTEXT *bctx) { bctx->waitingQueue=GWB_BuildCmd_List2_new(); bctx->finishedQueue=GWB_BuildCmd_List2_new(); bctx->runningQueue=GWB_BuildCmd_List2_new(); } int _checkWaitingQueue(GWB_BUILD_CONTEXT *bctx, int maxStartAllowed) { GWB_BUILD_CMD_LIST2 *oldQueue; GWB_BUILD_CMD *bcmd; int started=0; int errors=0; oldQueue=bctx->waitingQueue; bctx->waitingQueue=GWB_BuildCmd_List2_new(); while( (bcmd=GWB_BuildCmd_List2_GetFront(oldQueue)) ) { GWB_BuildCmd_List2_PopFront(oldQueue); if (startedinitialSourceDir); slOutFiles=GWB_File_FileListToTopBuildDirStringList(GWB_BuildCmd_GetOutFileList2(bcmd), bctx->initialSourceDir); if (_needRunCurrentCommand(bcmd, slInFiles, slOutFiles)) { rv=_startCommand(bctx, bcmd, slOutFiles); if (rv<0) { GWB_BuildCmd_List2_PushBack(bctx->finishedQueue, bcmd); errors++; } else { GWB_BuildCmd_List2_PushBack(bctx->runningQueue, bcmd); started++; } } else { _finishCurrentCommand(bctx, bcmd, GWB_BuildCmd_GetCurrentCommand(bcmd)); started++; } GWEN_StringList_free(slOutFiles); GWEN_StringList_free(slInFiles); } else GWB_BuildCmd_List2_PushBack(bctx->waitingQueue, bcmd); } else GWB_BuildCmd_List2_PushBack(bctx->waitingQueue, bcmd); } /* while */ GWB_BuildCmd_List2_free(oldQueue); if (errors) return GWEN_ERROR_GENERIC; return started; } GWEN_STRINGLIST *_fileListToTopBuildDirStringList(const char *initialSourceDir, GWB_FILE_LIST2 *fileList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWEN_STRINGLIST *sl; GWB_FILE *file; GWEN_BUFFER *fbuf; sl=GWEN_StringList_new(); fbuf=GWEN_Buffer_new(0, 256, 0, 1); file=GWB_File_List2Iterator_Data(it); while(file) { GWB_File_WriteFileNameToTopBuildDirString(file, initialSourceDir, fbuf); GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(fbuf), 0, 1); GWEN_Buffer_Reset(fbuf); file=GWB_File_List2Iterator_Next(it); } /* while */ GWEN_Buffer_Reset(fbuf); GWB_File_List2Iterator_free(it); if (GWEN_StringList_Count(sl)==0) { GWEN_StringList_free(sl); return NULL; } return sl; } return NULL; } int _needRunCurrentCommand(GWB_BUILD_CMD *bcmd, const GWEN_STRINGLIST *slInFiles, const GWEN_STRINGLIST *slOutFiles) { GWB_BUILD_SUBCMD *currentCommand; currentCommand=GWB_BuildCmd_GetCurrentCommand(bcmd); if (currentCommand) { uint32_t cmdFlags; uint32_t subCmdFlags; cmdFlags=GWB_BuildCmd_GetFlags(bcmd); subCmdFlags=GWB_BuildSubCmd_GetFlags(currentCommand); if (cmdFlags & GWB_BUILD_CMD_FLAGS_CHECK_DATES) { if (_inFilesNewerThanOutFiles(slInFiles, slOutFiles)) { /* need rebuild */ DBG_INFO(NULL, "Input files newer than output files, rebuild needed"); return 1; } } else /* dont check dates, always rebuild */ return 1; if (subCmdFlags & GWB_BUILD_SUBCMD_FLAGS_CHECK_DEPENDS) { int rv; rv=_checkDependencies(bcmd, currentCommand, GWEN_StringList_FirstString(slOutFiles)); if (rv==-1) { DBG_INFO(NULL, "Dependencies flag NO rebuild needed (%d)", rv); return 0; } DBG_INFO(NULL, "Dependencies flag rebuild needed (%d)", rv); return 1; } } DBG_INFO(NULL, "Rebuild not needed"); return 0; } /* return 0: no rebuild needed; 1: rebuild needed */ int _inFilesNewerThanOutFiles(const GWEN_STRINGLIST *slInFiles, const GWEN_STRINGLIST *slOutFiles) { time_t tiHighestInFileTime; time_t tiLowestOutFileTime; tiHighestInFileTime=_getHighestModificationTime(slInFiles); tiLowestOutFileTime=_getLowestModificationTime(slOutFiles); if (tiHighestInFileTime==0 || tiLowestOutFileTime==0) { DBG_INFO(NULL, "Either input or output time not available"); return 1; } if (tiHighestInFileTime>tiLowestOutFileTime) return 1; return 0; } time_t _getLowestModificationTime(const GWEN_STRINGLIST *slFiles) { time_t tiLowest=0; if (slFiles) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(slFiles); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { time_t tiFile; tiFile=GWBUILD_GetModificationTimeOfFile(s); if (tiFile>0) { if (tiLowest==0) tiLowest=tiFile; else if (tiFile0) { if (tiHighest==0) tiHighest=tiFile; else if (tiFile>tiHighest) tiHighest=tiFile; } else { DBG_INFO(NULL, "No modification time for \"%s\"", s); return 0; } } se=GWEN_StringListEntry_Next(se); } } return tiHighest; } void _unlinkFilesInStringList(const GWEN_STRINGLIST *slFiles) { if (slFiles) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(slFiles); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { DBG_DEBUG(NULL, "Deleting \"%s\"", s); unlink(s); } se=GWEN_StringListEntry_Next(se); } } } /* return 1: need rebuild, -1: Need no rebuild, 0: undecided */ int _checkDependencies(GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *subCmd, const char *firstOutFileName) { const char *depFileName; depFileName=GWB_BuildSubCmd_GetDepFilePath(subCmd); if (depFileName && firstOutFileName) { GWEN_STRINGLIST *sl; DBG_DEBUG(NULL, "Checking depend file \"%s\"", depFileName); sl=GWB_BuildCtx_ReadAndTranslateDepfile(GWB_BuildCmd_GetFolder(bcmd), depFileName); if (sl) { int rv; //GWBUILD_Debug_PrintStringList(depFileName, sl, 2); rv=_checkDatesOfFileAgainstList(firstOutFileName, sl); GWEN_StringList_free(sl); return rv; } else { DBG_DEBUG(NULL, "Could not load depend file \"%s\"", depFileName); } } else { if (depFileName==NULL) { DBG_DEBUG(NULL, "No depFileName for %s", firstOutFileName?firstOutFileName:""); } if (firstOutFileName==NULL) { DBG_DEBUG(NULL, "No outFileName"); } } return 0; /* indeterminate */ } int _checkDatesOfFileAgainstList(const char *fileName, const GWEN_STRINGLIST *sl) { time_t tFile; GWEN_STRINGLISTENTRY *se; tFile=GWBUILD_GetModificationTimeOfFile(fileName); if (tFile==0) { DBG_DEBUG(NULL, "%s: No modification time, need rebuild", fileName); return 1; /* need rebuild */ } se=GWEN_StringList_FirstEntry(sl); if (se) { while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { time_t tCurrent; DBG_DEBUG(NULL, " Checking dep: %s", s); tCurrent=GWBUILD_GetModificationTimeOfFile(s); if (tCurrent==0) { DBG_DEBUG(NULL, "No modification time for dependency \"%s\", need rebuild", s); return 1; /* need rebuild */ } if (difftime(tFile, tCurrent)<0.0) { DBG_DEBUG(NULL, "File \"%s\" is newer than \"%s\", rebuild needed", s, fileName); return 1; /* definately need rebuild */ } } se=GWEN_StringListEntry_Next(se); } DBG_DEBUG(NULL, "No dependency is newer than file \"%s\", NO rebuild needed", fileName); return -1; /* definately no need for rebuild */ } else { DBG_DEBUG(NULL, "Empty dependency list, rebuild needed"); } return 0; } int _startCommand(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, const GWEN_STRINGLIST *slOutFiles) { GWB_BUILD_SUBCMD *currentCommand; currentCommand=GWB_BuildCmd_GetCurrentCommand(bcmd); if (currentCommand) { const char *folder; const char *cmd; const char *args; folder=GWB_BuildCmd_GetFolder(bcmd); cmd=GWB_BuildSubCmd_GetCommand(currentCommand); args=GWB_BuildSubCmd_GetArguments(currentCommand); if (cmd && *cmd) { GWEN_PROCESS *process; GWEN_PROCESS_STATE pstate; const char *buildMessage; int rv; if (GWB_BuildSubCmd_List_Previous(currentCommand)==NULL) { /* first command */ if (slOutFiles && (GWB_BuildCmd_GetFlags(bcmd) & GWB_BUILD_CMD_FLAGS_DEL_OUTFILES)) { _unlinkFilesInStringList(slOutFiles); } } buildMessage=GWB_BuildSubCmd_GetBuildMessage(currentCommand); if (buildMessage) fprintf(stdout, "%s [%s]\n", buildMessage, cmd); else fprintf(stdout, "%s %s\n", cmd, args); rv=GWB_BuildCtx_CreateAndSetLogFilenameForSubCmd(bctx, currentCommand); if (rv<0) { DBG_ERROR(NULL, "Error creating logfile path for output redirection (%d)", rv); GWB_BuildCmd_SetCurrentProcess(bcmd, NULL); return GWEN_ERROR_GENERIC; } process=GWEN_Process_new(); if (folder && *folder) GWEN_Process_SetFolder(process, folder); GWEN_Process_SetFilenameStdOut(process, GWB_BuildSubCmd_GetLogFilename(currentCommand)); GWEN_Process_SetFilenameStdErr(process, GWB_BuildSubCmd_GetLogFilename(currentCommand)); GWB_BuildCmd_SetCurrentProcess(bcmd, process); pstate=GWEN_Process_Start(process, cmd, args); if (pstate!=GWEN_ProcessStateRunning) { DBG_ERROR(NULL, "Error starting command process (%d)", pstate); GWB_BuildCmd_SetCurrentProcess(bcmd, NULL); return GWEN_ERROR_GENERIC; } DBG_DEBUG(NULL, "Process started"); return 0; } else { DBG_ERROR(NULL, "No command in build command"); return GWEN_ERROR_GENERIC; } } else { DBG_ERROR(NULL, "No current command in build command"); return GWEN_ERROR_GENERIC; } } int _checkRunningQueue(GWB_BUILD_CONTEXT *bctx) { GWB_BUILD_CMD_LIST2 *oldRunningQueue; GWB_BUILD_CMD *bcmd; int changes=0; int errors=0; oldRunningQueue=bctx->runningQueue; bctx->runningQueue=GWB_BuildCmd_List2_new(); while( (bcmd=GWB_BuildCmd_List2_GetFront(oldRunningQueue)) ) { GWEN_PROCESS *process; GWEN_PROCESS_STATE pstate; GWB_BUILD_SUBCMD *currentCommand; GWB_BuildCmd_List2_PopFront(oldRunningQueue); currentCommand=GWB_BuildCmd_GetCurrentCommand(bcmd); process=GWB_BuildCmd_GetCurrentProcess(bcmd); pstate=GWEN_Process_CheckState(process); if (pstate!=GWEN_ProcessStateRunning) { changes++; if (pstate==GWEN_ProcessStateExited) { int result; result=GWEN_Process_GetResult(process); _printCmdOutputIfNotEmptyAndDeleteFile(bcmd, currentCommand); if (result) { if (GWB_BuildSubCmd_GetFlags(currentCommand) & GWB_BUILD_SUBCMD_FLAGS_IGNORE_RESULT) { DBG_INFO(NULL, "Command exited with result %d, ignoring", result); _finishCurrentCommand(bctx, bcmd, currentCommand); } else { DBG_INFO(NULL, "Command exited with result %d", result); errors++; } //_printCmdOutput(currentCommand); } else { _finishCurrentCommand(bctx, bcmd, currentCommand); } } else { DBG_ERROR(NULL, "Command aborted (status: %d)", pstate); GWB_BuildCmd_List2_PushBack(bctx->finishedQueue, bcmd); errors++; } GWB_BuildCmd_SetCurrentProcess(bcmd, NULL); /* no longer running */ } else GWB_BuildCmd_List2_PushBack(bctx->runningQueue, bcmd); /* still running, put back */ } /* while still commands in running queue */ GWB_BuildCmd_List2_free(oldRunningQueue); if (errors) return GWEN_ERROR_GENERIC; return changes; } void _finishCurrentCommand(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_BUILD_SUBCMD *currentCommand) { GWB_BUILD_SUBCMD *nextCommand; nextCommand=GWB_BuildSubCmd_List_Next(currentCommand); GWB_BuildCmd_SetCurrentCommand(bcmd, nextCommand); if (nextCommand) GWB_BuildCmd_List2_PushBack(bctx->waitingQueue, bcmd); else { _signalJobFinished(bcmd); GWB_BuildCmd_List2_PushBack(bctx->finishedQueue, bcmd); } } void _signalJobFinished(GWB_BUILD_CMD *bcmd) { GWB_FILE_LIST2 *outFileList; outFileList=GWB_BuildCmd_GetOutFileList2(bcmd); if (outFileList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(outFileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { GWB_BUILD_CMD_LIST2 *waitingCommands; waitingCommands=GWB_File_GetWaitingBuildCmdList2(file); if (waitingCommands) _decBlockingFilesInWaitingBuildCommands(waitingCommands); file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } } void _decBlockingFilesInWaitingBuildCommands(GWB_BUILD_CMD_LIST2 *waitingCommands) { GWB_BUILD_CMD_LIST2_ITERATOR *it; it=GWB_BuildCmd_List2_First(waitingCommands); if (it) { GWB_BUILD_CMD *bcmd; bcmd=GWB_BuildCmd_List2Iterator_Data(it); while(bcmd) { GWB_BuildCmd_DecBlockingFiles(bcmd); bcmd=GWB_BuildCmd_List2Iterator_Next(it); } GWB_BuildCmd_List2Iterator_free(it); } } void _printCmdOutputIfNotEmptyAndDeleteFile(GWB_BUILD_CMD *cmd, GWB_BUILD_SUBCMD *subCmd) { const char *fileName; fileName=GWB_BuildSubCmd_GetLogFilename(subCmd); if (fileName) { struct stat sb; if (stat(fileName, &sb)==-1) { DBG_ERROR(GWEN_LOGDOMAIN, "stat(%s): %d [%s]", fileName, errno, strerror(errno)); } else { if (sb.st_size>0) { int rv; GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Helper_ReadFile(fileName, dbuf); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error reading command output from file \"%s\": %d", fileName, rv); } else { const char *buildMessage; const char *exe; const char *folder; folder=GWB_BuildCmd_GetFolder(cmd); buildMessage=GWB_BuildSubCmd_GetBuildMessage(subCmd); exe=GWB_BuildSubCmd_GetCommand(subCmd); fprintf(stderr, "Output from [%s]\n", buildMessage?buildMessage:(exe?exe:"NONE")); if (folder && *folder) fprintf(stderr, "make[%d]: Entering directory '%s'\n", ++_commandLogNum, folder); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(dbuf)); if (folder && *folder) fprintf(stderr, "make[%d]: Leaving directory '%s'\n", _commandLogNum, folder); fflush(stderr); } GWEN_Buffer_free(dbuf); } unlink(fileName); } } } gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx_depfile.c0000664000175000017500000001136614144206312021317 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #define DISABLE_DEBUGLOG #include "gwenbuild/buildctx/buildctx_p.h" #include "gwenbuild/buildctx/buildctx_depfile.h" #include "gwenbuild/buildctx/buildctx_run.h" #include #include #include #include #include static GWEN_STRINGLIST *_readDepFile(const char *fileName); static GWEN_STRINGLIST *_makeAbsolutePaths(GWEN_STRINGLIST *slInput, const char *folder); static void _overwriteEscapedLineFeedsWithSpace(GWEN_BUFFER *buffer); GWEN_STRINGLIST *GWB_BuildCtx_ReadAndTranslateDepfile(const char *folder, const char *fileName) { GWEN_STRINGLIST *slInput; slInput=_readDepFile(fileName); if (slInput) { GWEN_STRINGLIST *slOutput; slOutput=_makeAbsolutePaths(slInput, folder); if (slOutput) { GWEN_StringList_free(slInput); return slOutput; } GWEN_StringList_free(slInput); } return NULL; } GWEN_STRINGLIST *_readDepFile(const char *fileName) { GWEN_BUFFER *fileBuffer; int rv; char *s; fileBuffer=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_SyncIo_Helper_ReadFile(fileName, fileBuffer); if (rv<0) { DBG_ERROR(NULL, "here (%d)", rv); GWEN_Buffer_free(fileBuffer); return NULL; } _overwriteEscapedLineFeedsWithSpace(fileBuffer); GWEN_Text_CondenseBuffer(fileBuffer); s=strchr(GWEN_Buffer_GetStart(fileBuffer), ':'); if (s) { GWEN_STRINGLIST *slDependencies; slDependencies=GWEN_StringList_fromString2(s+1, " ", 1, GWEN_TEXT_FLAGS_DEL_QUOTES | GWEN_TEXT_FLAGS_CHECK_BACKSLASH | GWEN_TEXT_FLAGS_DEL_MULTIPLE_BLANKS| GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS| GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS); if (slDependencies) { GWEN_Buffer_free(fileBuffer); return slDependencies; } } GWEN_Buffer_free(fileBuffer); return NULL; } void _overwriteEscapedLineFeedsWithSpace(GWEN_BUFFER *buffer) { char *ptr; ptr=GWEN_Buffer_GetStart(buffer); while(*ptr) { char *ptrNextEscape; ptrNextEscape=strchr(ptr, '\\'); if (ptrNextEscape) { if (iscntrl(ptrNextEscape[1])) { /* overwrite backslash */ *(ptrNextEscape++)=' '; /* overwrite every immediately following control character (such as LF, CR, TAB etc) */ while(*ptrNextEscape && iscntrl(*ptrNextEscape)) *(ptrNextEscape++)=' '; } } else break; } } GWEN_STRINGLIST *_makeAbsolutePaths(GWEN_STRINGLIST *slInput, const char *folder) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(slInput); if (se) { GWEN_STRINGLIST *slOutput; slOutput=GWEN_StringList_new(); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s) { while(*s && *s<33) s++; if (*s) { if (*s=='/') { GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 256, 0, 1); while(*s && *s>31) GWEN_Buffer_AppendByte(buf, *(s++)); GWEN_StringList_AppendString(slOutput, GWEN_Buffer_GetStart(buf), 0, 1); GWEN_Buffer_free(buf); } else { const char *ptrToSlash; ptrToSlash=strrchr(s, '/'); if (ptrToSlash) { GWEN_BUFFER *buf; GWEN_BUFFER *absBuf; /* get absolute path for folder */ buf=GWEN_Buffer_new(0, 256, 0, 1); if (folder) { GWEN_Buffer_AppendString(buf, folder); GWEN_Buffer_AppendString(buf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendBytes(buf, s, ptrToSlash-s); /* deliberately not "+1": excluding '/' */ absBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Directory_GetAbsoluteFolderPath(GWEN_Buffer_GetStart(buf), absBuf); if (GWEN_Buffer_GetUsedBytes(absBuf)) GWEN_Buffer_AppendString(absBuf, GWEN_DIR_SEPARATOR_S); /* add file name */ ptrToSlash++; /* skip '/', ptrToSlash now points to file name */ GWEN_Buffer_AppendString(absBuf, ptrToSlash); /* add complete absolute path to stringlist */ GWEN_StringList_AppendString(slOutput, GWEN_Buffer_GetStart(absBuf), 0, 1); GWEN_Buffer_free(absBuf); GWEN_Buffer_free(buf); } } } } se=GWEN_StringListEntry_Next(se); } if (GWEN_StringList_Count(slOutput)==0) { GWEN_StringList_free(slOutput); return NULL; } return slOutput; } return NULL; } gwenhywfar-5.12.0/tools/gwenbuild/buildctx/buildctx.h0000664000175000017500000000430614460564441017643 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDCTX_H #define GWBUILD_BUILDCTX_H #include typedef struct GWB_BUILD_CONTEXT GWB_BUILD_CONTEXT; #include "gwenbuild/buildctx/buildcmd.h" #include "gwenbuild/buildctx/buildsubcmd.h" #include "gwenbuild/types/file.h" GWB_BUILD_CONTEXT *GWB_BuildCtx_new(); void GWB_BuildCtx_free(GWB_BUILD_CONTEXT *bctx); const char *GWB_BuildCtx_GetInitialSourceDir(const GWB_BUILD_CONTEXT *bctx); void GWB_BuildCtx_SetInitialSourceDir(GWB_BUILD_CONTEXT *bctx, const char *s); GWB_BUILD_CMD_LIST2 *GWB_BuildCtx_GetCommandList(const GWB_BUILD_CONTEXT *bctx); void GWB_BuildCtx_AddCommand(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd); GWB_FILE_LIST2 *GWB_BuildCtx_GetFileList(const GWB_BUILD_CONTEXT *bctx); void GWB_BuildCtx_AddFile(GWB_BUILD_CONTEXT *bctx, GWB_FILE *file); GWB_FILE *GWB_BuildCtx_GetFileByPathAndName(const GWB_BUILD_CONTEXT *bctx, const char *folder, const char *fname); void GWB_BuildCtx_AddInFilesToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE_LIST2 *fileList); void GWB_BuildCtx_AddOutFilesToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE_LIST2 *fileList); void GWB_BuildCtx_AddInFileToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE *file); void GWB_BuildCtx_AddOutFileToCtxAndCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_CMD *bcmd, GWB_FILE *file); const char *GWB_BuildCtx_GetLogPath(const GWB_BUILD_CONTEXT *bctx); void GWB_BuildCtx_SetLogPath(GWB_BUILD_CONTEXT *bctx, const char *s); int GWB_BuildCtx_CreateAndSetLogFilenameForSubCmd(GWB_BUILD_CONTEXT *bctx, GWB_BUILD_SUBCMD *cmd); void GWB_BuildCtx_toXml(const GWB_BUILD_CONTEXT *bctx, GWEN_XMLNODE *xmlNode); GWB_BUILD_CONTEXT *GWB_BuildCtx_fromXml(GWEN_XMLNODE *xmlNode); void GWB_BuildCtx_Dump(const GWB_BUILD_CONTEXT *bctx, int indent); #endif gwenhywfar-5.12.0/tools/gwenbuild/tools/0000775000175000017500000000000014730345122015244 500000000000000gwenhywfar-5.12.0/tools/gwenbuild/tools/trylink.c0000664000175000017500000000507714116666046017046 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/tools/trylink.h" #include #include #include #include #include int GWB_Tools_TryLink(GWB_CONTEXT *context, const char *testCode, const char *libName) { GWEN_BUFFER *argBuffer; GWEN_BUFFER *stdOutBuffer; GWEN_BUFFER *stdErrBuffer; const char *toolName; const char *s; int rv; toolName=GWEN_DB_GetCharValue(GWB_Context_GetVars(context), "GWBUILD_TOOL_CC", 0, "gcc"); if (!(toolName && *toolName)) { DBG_ERROR(NULL, "No tool name for \"CC\""); return GWEN_ERROR_INTERNAL; } rv=GWEN_SyncIo_Helper_WriteFile("conftest.c", (const uint8_t*) testCode, strlen(testCode)); if (rv<0) { DBG_ERROR(NULL, "Error writing conftest.c (%d)", rv); return rv; } stdOutBuffer=GWEN_Buffer_new(0, 256, 0, 1); stdErrBuffer=GWEN_Buffer_new(0, 256, 0, 1); argBuffer=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_DB_GetCharValue(GWB_Context_GetVars(context), "ldflags", 0, NULL); if (s) { if (GWEN_Buffer_GetUsedBytes(argBuffer)) GWEN_Buffer_AppendString(argBuffer, " "); GWEN_Buffer_AppendString(argBuffer, s); } s=GWEN_DB_GetCharValue(GWB_Context_GetVars(context), "local/ldflags", 0, NULL); if (s) { if (GWEN_Buffer_GetUsedBytes(argBuffer)) GWEN_Buffer_AppendString(argBuffer, " "); GWEN_Buffer_AppendString(argBuffer, s); } if (GWEN_Buffer_GetUsedBytes(argBuffer)) GWEN_Buffer_AppendString(argBuffer, " "); GWEN_Buffer_AppendString(argBuffer, "-fPIC conftest.c -o conftest"); if (libName) { GWEN_Buffer_AppendString(argBuffer, " -l"); GWEN_Buffer_AppendString(argBuffer, libName); } rv=GWEN_Process_RunCommandWaitAndGather(toolName, GWEN_Buffer_GetStart(argBuffer), stdOutBuffer, stdErrBuffer); if (rv<0) { DBG_ERROR(NULL, "Error running gcc (%d)", rv); GWEN_Buffer_free(argBuffer); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); return rv; } GWEN_Buffer_free(argBuffer); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); unlink("conftest.c"); unlink("conftest"); return rv; } gwenhywfar-5.12.0/tools/gwenbuild/tools/trycompile.c0000664000175000017500000000756514116666046017545 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/tools/trycompile.h" #include #include #include #include #include int GWB_Tools_TryCompile(GWB_CONTEXT *context, const char *testCode) { GWEN_BUFFER *argBuffer; GWEN_BUFFER *stdOutBuffer; GWEN_BUFFER *stdErrBuffer; const char *toolName; const char *s; int rv; toolName=GWEN_DB_GetCharValue(GWB_Context_GetVars(context), "GWBUILD_TOOL_CC", 0, "gcc"); if (!(toolName && *toolName)) { DBG_ERROR(NULL, "No tool name for \"CC\""); return GWEN_ERROR_INTERNAL; } rv=GWEN_SyncIo_Helper_WriteFile("conftest.c", (const uint8_t*) testCode, strlen(testCode)); if (rv<0) { DBG_ERROR(NULL, "Error writing conftest.c (%d)", rv); return rv; } stdOutBuffer=GWEN_Buffer_new(0, 256, 0, 1); stdErrBuffer=GWEN_Buffer_new(0, 256, 0, 1); argBuffer=GWEN_Buffer_new(0, 256, 0, 1); s=GWEN_DB_GetCharValue(GWB_Context_GetVars(context), "cflags", 0, NULL); if (s) { if (GWEN_Buffer_GetUsedBytes(argBuffer)) GWEN_Buffer_AppendString(argBuffer, " "); GWEN_Buffer_AppendString(argBuffer, s); } s=GWEN_DB_GetCharValue(GWB_Context_GetVars(context), "local/cflags", 0, NULL); if (s) { if (GWEN_Buffer_GetUsedBytes(argBuffer)) GWEN_Buffer_AppendString(argBuffer, " "); GWEN_Buffer_AppendString(argBuffer, s); } if (GWEN_Buffer_GetUsedBytes(argBuffer)) GWEN_Buffer_AppendString(argBuffer, " "); GWEN_Buffer_AppendString(argBuffer, "-c -fPIC -o conftest.o conftest.c"); rv=GWEN_Process_RunCommandWaitAndGather(toolName, GWEN_Buffer_GetStart(argBuffer), stdOutBuffer, stdErrBuffer); if (rv<0) { DBG_ERROR(NULL, "Error running gcc (%d)", rv); GWEN_Buffer_free(argBuffer); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); unlink("conftest.c"); return rv; } GWEN_Buffer_free(argBuffer); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); unlink("conftest.c"); unlink("conftest.o"); return rv; } int GWB_Tools_CheckCompilerArgs(GWB_CONTEXT *context, const char *compilerArgs) { GWEN_BUFFER *stdOutBuffer; GWEN_BUFFER *stdErrBuffer; const char *toolName; int rv; const char *testCode="int main(int argc, char **argv) { return 0;};\n"; GWEN_BUFFER *argBuffer; toolName=GWEN_DB_GetCharValue(GWB_Context_GetVars(context), "GWBUILD_TOOL_CC", 0, "gcc"); if (!(toolName && *toolName)) { DBG_ERROR(NULL, "No tool name for \"CC\""); return GWEN_ERROR_INTERNAL; } rv=GWEN_SyncIo_Helper_WriteFile("conftest.c", (const uint8_t*) testCode, strlen(testCode)); if (rv<0) { DBG_ERROR(NULL, "Error writing conftest.c (%d)", rv); return rv; } stdOutBuffer=GWEN_Buffer_new(0, 256, 0, 1); stdErrBuffer=GWEN_Buffer_new(0, 256, 0, 1); argBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(argBuffer, compilerArgs); GWEN_Buffer_AppendString(argBuffer, " -c -fPIC conftest.c -o conftest.o"); rv=GWEN_Process_RunCommandWaitAndGather(toolName, GWEN_Buffer_GetStart(argBuffer), stdOutBuffer, stdErrBuffer); if (rv<0) { DBG_ERROR(NULL, "Error running gcc (%d)", rv); GWEN_Buffer_free(argBuffer); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); unlink("conftest.c"); return rv; } GWEN_Buffer_free(argBuffer); GWEN_Buffer_free(stdErrBuffer); GWEN_Buffer_free(stdOutBuffer); unlink("conftest.c"); unlink("conftest.o"); return rv; } gwenhywfar-5.12.0/tools/gwenbuild/tools/Makefile.in0000664000175000017500000005763414730344662017260 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 = tools/gwenbuild/tools ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgwb_tools_la_LIBADD = am_libgwb_tools_la_OBJECTS = trycompile.lo trylink.lo libgwb_tools_la_OBJECTS = $(am_libgwb_tools_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/trycompile.Plo \ ./$(DEPDIR)/trylink.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(libgwb_tools_la_SOURCES) DIST_SOURCES = $(libgwb_tools_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = @all_includes@ -I$(top_builddir) -I../ -I../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) noinst_LTLIBRARIES = libgwb_tools.la libgwb_tools_la_SOURCES = \ trycompile.c \ trylink.c noinst_HEADERS = \ trycompile.h \ trylink.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/gwenbuild/tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gwenbuild/tools/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): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwb_tools.la: $(libgwb_tools_la_OBJECTS) $(libgwb_tools_la_DEPENDENCIES) $(EXTRA_libgwb_tools_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgwb_tools_la_OBJECTS) $(libgwb_tools_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trycompile.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trylink.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) 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 clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/trycompile.Plo -rm -f ./$(DEPDIR)/trylink.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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 ./$(DEPDIR)/trycompile.Plo -rm -f ./$(DEPDIR)/trylink.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool 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 maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool 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: gwenhywfar-5.12.0/tools/gwenbuild/tools/trylink.h0000664000175000017500000000115714116666046017046 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_TRYLINK_H #define GWBUILD_TRYLINK_H #include "gwenbuild/types/gwenbuild.h" int GWB_Tools_TryLink(GWB_CONTEXT *context, const char *testCode, const char *libName); #endif gwenhywfar-5.12.0/tools/gwenbuild/tools/trycompile.h0000664000175000017500000000126514116666046017541 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_TRYCOMPILE_H #define GWBUILD_TRYCOMPILE_H #include "gwenbuild/types/gwenbuild.h" int GWB_Tools_TryCompile(GWB_CONTEXT *context, const char *testCode); int GWB_Tools_CheckCompilerArgs(GWB_CONTEXT *context, const char *compilerArgs); #endif gwenhywfar-5.12.0/tools/gwenbuild/tools/Makefile.am0000664000175000017500000000036714125675316017237 00000000000000INCLUDES=@all_includes@ -I$(top_builddir) -I../ -I../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) noinst_LTLIBRARIES=libgwb_tools.la libgwb_tools_la_SOURCES=\ trycompile.c \ trylink.c noinst_HEADERS=\ trycompile.h \ trylink.h gwenhywfar-5.12.0/tools/gwenbuild/c_dist.c0000664000175000017500000001215714144206312015437 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "c_dist.h" #include "utils.h" #include "gwenbuild/filenames.h" #include #include #include #include #include #include #include #include #include static int _writeDistFiles(const char *initialSourceDir, const GWB_FILE_LIST2 *fileList, const char *folder); int GWB_MkDist() { GWB_FILE_LIST2 *projectFileList; GWEN_XMLNODE *xmlProjectInfo; GWEN_BUFFER *nameBuf; const char *initialSourceDir; const char *projectName; int versionMajor; int versionMinor; int versionPatchlevel; int versionBuild; const char *versionTag; int rv; projectFileList=GWB_Utils_ReadFileList2(GWBUILD_FILE_FILES); if (projectFileList==NULL) { DBG_ERROR(NULL, "No file list read."); return GWEN_ERROR_GENERIC; } xmlProjectInfo=GWB_Utils_ReadProjectInfoFromFile(GWBUILD_FILE_PROJECTINFO); if (xmlProjectInfo==NULL) { DBG_ERROR(NULL, "Error reading project info."); GWB_File_List2_free(projectFileList); return GWEN_ERROR_GENERIC; } initialSourceDir=GWEN_XMLNode_GetCharValue(xmlProjectInfo, "initialSourceDir", NULL); projectName=GWEN_XMLNode_GetCharValue(xmlProjectInfo, "projectName", NULL); versionMajor=GWEN_XMLNode_GetIntValue(xmlProjectInfo, "versionMajor", 0); versionMinor=GWEN_XMLNode_GetIntValue(xmlProjectInfo, "versionMinor", 0); versionPatchlevel=GWEN_XMLNode_GetIntValue(xmlProjectInfo, "versionPatchlevel", 0); versionBuild=GWEN_XMLNode_GetIntValue(xmlProjectInfo, "versionBuild", 0); versionTag=GWEN_XMLNode_GetCharValue(xmlProjectInfo, "versionTag", NULL); if (!(projectName && *projectName)) { DBG_ERROR(NULL, "Missing project name in project info file"); GWEN_XMLNode_free(xmlProjectInfo); GWB_File_List2_free(projectFileList); return GWEN_ERROR_GENERIC; } nameBuf=GWEN_Buffer_new(0, 256, 0, 1); if (versionBuild>0) GWEN_Buffer_AppendArgs(nameBuf, "%s-%d.%d.%d.%d%s", projectName, versionMajor, versionMinor, versionPatchlevel, versionBuild, versionTag?versionTag:""); else GWEN_Buffer_AppendArgs(nameBuf, "%s-%d.%d.%d%s", projectName, versionMajor, versionMinor, versionPatchlevel, versionTag?versionTag:""); rv=_writeDistFiles(initialSourceDir, projectFileList, GWEN_Buffer_GetStart(nameBuf)); if (rv<0) { DBG_ERROR(NULL, "Error copying files into dist folder \"%s\"", GWEN_Buffer_GetStart(nameBuf)); GWEN_Buffer_free(nameBuf); GWEN_XMLNode_free(xmlProjectInfo); GWB_File_List2_free(projectFileList); return rv; } GWEN_Buffer_free(nameBuf); GWEN_XMLNode_free(xmlProjectInfo); GWB_File_List2_free(projectFileList); return 0; } int _writeDistFiles(const char *initialSourceDir, const GWB_FILE_LIST2 *fileList, const char *folder) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; GWEN_BUFFER *sourceNameBuf; GWEN_BUFFER *destNameBuf; sourceNameBuf=GWEN_Buffer_new(0, 256, 0, 1); destNameBuf=GWEN_Buffer_new(0, 256, 0, 1); file=GWB_File_List2Iterator_Data(it); while(file) { uint32_t flags; const char *s; flags=GWB_File_GetFlags(file); if (flags & GWB_FILE_FLAGS_DIST) { int rv; /* generate source path */ if (!(flags & GWB_FILE_FLAGS_GENERATED)) { GWEN_Buffer_AppendString(sourceNameBuf, initialSourceDir); GWEN_Buffer_AppendString(sourceNameBuf, GWEN_DIR_SEPARATOR_S); } s=GWB_File_GetFolder(file); if (s && *s) { GWEN_Buffer_AppendString(sourceNameBuf, s); GWEN_Buffer_AppendString(sourceNameBuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(sourceNameBuf, GWB_File_GetName(file)); /* generate target path */ GWEN_Buffer_AppendString(destNameBuf, folder); GWEN_Buffer_AppendString(destNameBuf, GWEN_DIR_SEPARATOR_S); if (s && *s) { GWEN_Buffer_AppendString(destNameBuf, s); GWEN_Buffer_AppendString(destNameBuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(destNameBuf, GWB_File_GetName(file)); fprintf(stdout, "Moving file '%s' into dist folder\n", GWEN_Buffer_GetStart(sourceNameBuf)); rv=GWB_Utils_CopyFile(GWEN_Buffer_GetStart(sourceNameBuf), GWEN_Buffer_GetStart(destNameBuf)); if (rv<0) { DBG_ERROR(NULL, "Error copying \"%s\" into dist folder (%d)", GWEN_Buffer_GetStart(sourceNameBuf), rv); GWEN_Buffer_free(sourceNameBuf); GWEN_Buffer_free(destNameBuf); return rv; } GWEN_Buffer_Reset(sourceNameBuf); GWEN_Buffer_Reset(destNameBuf); } file=GWB_File_List2Iterator_Next(it); } GWEN_Buffer_free(sourceNameBuf); GWEN_Buffer_free(destNameBuf); GWB_File_List2Iterator_free(it); } return 0; } gwenhywfar-5.12.0/tools/gwenbuild/c_install.h0000664000175000017500000000112014116666046016150 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_C_INSTALL_H #define GWBUILD_C_INSTALL_H #include int GWB_InstallFiles(const char *fileName, const char *destDir); #endif gwenhywfar-5.12.0/tools/gwenbuild/utils.h0000664000175000017500000000327314125675317015354 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_UTILS_H #define GWBUILD_UTILS_H #include "gwenbuild/types/project.h" int GWB_Utils_WriteProjectFileList(const GWB_PROJECT *project, const char *fileName); GWB_FILE_LIST2 *GWB_Utils_ReadFileList2(const char *fileName); int GWB_Utils_WriteBuildFileList(const GWENBUILD *gwenbuild, const char *fileName); int GWB_Utils_WriteInstallFileList(const GWB_PROJECT *project, const char *fileName); GWB_KEYVALUEPAIR_LIST *GWB_Utils_ReadInstallFileList(const char *fileName); int GWB_Utils_WriteProjectToFile(const GWB_PROJECT *project, const char *fileName); int GWB_Utils_WriteContextTreeToFile(const GWB_CONTEXT *ctx, const char *fileName); int GWB_Utils_WriteProjectInfoToFile(const GWB_PROJECT *project, const char *fileName); GWEN_XMLNODE *GWB_Utils_ReadProjectInfoFromFile(const char *fileName); int GWB_Utils_BuildFilesChanged(const char *fileName); int GWB_Utils_CopyFile(const char *sSrcPath, const char *sDestPath); int GWB_Utils_VersionStringToDb(GWEN_DB_NODE *db, const char *prefix, const char *s); int GWB_Utils_VersionStringToInt(const char *s); void GWB_Utils_VersionToDbVar(GWEN_DB_NODE *db, const char *dbVarName, int vmajor, int vminor, int vpatchlevel, int vbuild, const char *vtag); #endif gwenhywfar-5.12.0/tools/gwenbuild/types/0000775000175000017500000000000014730345121015247 500000000000000gwenhywfar-5.12.0/tools/gwenbuild/types/gwenbuild.h0000664000175000017500000001004714460564441017332 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_GWENBUILD_H #define GWBUILD_GWENBUILD_H /** main object of gwenbuild */ typedef struct GWENBUILD GWENBUILD; typedef enum { GWBUILD_TargetType_Invalid=-1, GWBUILD_TargetType_None=0, GWBUILD_TargetType_InstallLibrary, GWBUILD_TargetType_ConvenienceLibrary, GWBUILD_TargetType_Program, GWBUILD_TargetType_CxxProgram, GWBUILD_TargetType_Objects, GWBUILD_TargetType_Module, GWBUILD_TargetType_I18nCatalog, GWBUILD_TargetType_AvrHexFile, } GWBUILD_TARGETTYPE; #define GWENBUILD_FLAGS_STATIC 0x0001 #include "gwenbuild/types/keyvaluepair.h" #include "gwenbuild/types/file.h" #include "gwenbuild/types/target.h" #include "gwenbuild/types/project.h" #include "gwenbuild/buildctx/buildctx.h" #include "gwenbuild/types/option.h" #include "gwenbuild/builders/gbuilderdescr.h" #include #include #include #include #include GWENBUILD *GWBUILD_new(void); void GWBUILD_free(GWENBUILD *gwenbuild); uint32_t GWBUILD_GetFlags(const GWENBUILD *gwenbuild); void GWBUILD_SetFlags(GWENBUILD *gwenbuild, uint32_t f); void GWBUILD_AddFlags(GWENBUILD *gwenbuild, uint32_t f); void GWBUILD_DelFlags(GWENBUILD *gwenbuild, uint32_t f); const char *GWBUILD_GetTargetSystem(const GWENBUILD *gwenbuild); void GWBUILD_SetTargetSystem(GWENBUILD *gwenbuild, const char *s); int GWBUILD_GetTargetIsWindows(const GWENBUILD *gwenbuild); void GWBUILD_SetTargetIsWindows(GWENBUILD *gwenbuild, int i); int GWBUILD_MakeBuildersForTargets(GWB_PROJECT *project); GWB_BUILD_CONTEXT *GWBUILD_MakeBuildCommands(GWB_PROJECT *project); GWEN_STRINGLIST *GWBUILD_GetBuildFilenameList(const GWENBUILD *gwenbuild); void GWBUILD_AddBuildFilename(GWENBUILD *gwenbuild, const char *s); const char *GWBUILD_GetHostArch(void); const char *GWBUILD_GetHostSystem(void); const char *GWBUILD_GetArchFromTriplet(const char *sTriplet); const char *GWBUILD_GetSystemFromTriplet(const char *sTriplet); GWEN_STRINGLIST *GWBUILD_GetPathFromEnvironment(void); void GWBUILD_AddFilesFromStringList(GWB_FILE_LIST2 *mainFileList, const char *sFolder, const GWEN_STRINGLIST *fileNameList, GWB_FILE_LIST2 *outFileList, uint32_t flagsToAdd, int copyFileForOutList); GWBUILD_TARGETTYPE GWBUILD_TargetType_fromString(const char *s); const char *GWBUILD_TargetType_toString(GWBUILD_TARGETTYPE tt); time_t GWBUILD_GetModificationTimeOfFile(const char *filename); void GWBUILD_Debug_PrintValue(const char *sName, const char *sValue, int indent); void GWBUILD_Debug_PrintIntValue(const char *sName, int value, int indent); void GWBUILD_Debug_PrintKvpList(const char *sName, const GWB_KEYVALUEPAIR_LIST *kvpList, int indent); void GWBUILD_Debug_PrintDb(const char *sName, GWEN_DB_NODE *db, int indent); void GWBUILD_Debug_PrintFileList2(const char *sName, const GWB_FILE_LIST2 *fileList2, int indent); void GWBUILD_Debug_PrintTargetList2(const char *sName, const GWB_TARGET_LIST2 *targetList2, int indent, int fullDump); void GWBUILD_Debug_PrintBuilderList2(const char *sName, const GWB_BUILDER_LIST2 *builderList2, int indent, int fullDump); void GWBUILD_Debug_PrintBuildCmdList2(const char *sName, const GWB_BUILD_CMD_LIST2 *buildCmdList2, int indent); void GWBUILD_Debug_PrintStringList(const char *sName, const GWEN_STRINGLIST *sl, int indent); void GWBUILD_Debug_PrintFile(const char *sName, const GWB_FILE *file, int indent); void GWBUILD_Debug_PrintOptionList(const char *sName, const GWB_OPTION_LIST *optionList, int indent); #endif gwenhywfar-5.12.0/tools/gwenbuild/types/file.h0000664000175000017500000000707214144206313016263 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_FILE_H #define GWBUILD_FILE_H #include #include #include typedef struct GWB_FILE GWB_FILE; GWEN_LIST2_FUNCTION_DEFS(GWB_FILE, GWB_File) #define GWB_FILE_FLAGS_DIST 0x0001 #define GWB_FILE_FLAGS_INSTALL 0x0002 #define GWB_FILE_FLAGS_GENERATED 0x0004 #include "gwenbuild/types/context.h" #include "gwenbuild/buildctx/buildcmd.h" #include GWB_FILE *GWB_File_new(const char *folder, const char *fName, uint32_t id); GWB_FILE *GWB_File_dup(const GWB_FILE *oldFile); void GWB_File_free(GWB_FILE *f); uint32_t GWB_File_GetId(const GWB_FILE *f); void GWB_File_SetId(GWB_FILE *f, uint32_t i); uint32_t GWB_File_GetFlags(const GWB_FILE *f); void GWB_File_SetFlags(GWB_FILE *f, uint32_t i); void GWB_File_AddFlags(GWB_FILE *f, uint32_t i); void GWB_File_DelFlags(GWB_FILE *f, uint32_t i); const char *GWB_File_GetFolder(const GWB_FILE *f); void GWB_File_SetFolder(GWB_FILE *f, const char *s); const char *GWB_File_GetName(const GWB_FILE *f); void GWB_File_SetName(GWB_FILE *f, const char *s); const char *GWB_File_GetInstallName(const GWB_FILE *f); void GWB_File_SetInstallName(GWB_FILE *f, const char *s); const char *GWB_File_GetExt(const GWB_FILE *f); const char *GWB_File_GetBuilder(const GWB_FILE *f); void GWB_File_SetBuilder(GWB_FILE *f, const char *s); const char *GWB_File_GetInstallPath(const GWB_FILE *f); void GWB_File_SetInstallPath(GWB_FILE *f, const char *s); const char *GWB_File_GetFileType(const GWB_FILE *f); void GWB_File_SetFileType(GWB_FILE *f, const char *s); void GWB_File_toXml(const GWB_FILE *file, GWEN_XMLNODE *xmlNode); GWB_FILE *GWB_File_fromXml(GWEN_XMLNODE *xmlNode); GWB_BUILD_CMD_LIST2 *GWB_File_GetWaitingBuildCmdList2(const GWB_FILE *f); void GWB_File_AddWaitingBuildCmd(GWB_FILE *f, GWB_BUILD_CMD *bcmd); void GWB_File_ClearWaitingBuildCmds(GWB_FILE *file); GWB_BUILD_CMD *GWB_File_GetBuildCmd(const GWB_FILE *f); void GWB_File_SetBuildCmd(GWB_FILE *f, GWB_BUILD_CMD *bcmd); void GWB_File_List2_FreeAll(GWB_FILE_LIST2 *fileList2); GWB_FILE *GWB_File_List2_GetFileByPathAndName(const GWB_FILE_LIST2 *fileList, const char *folder, const char *fname); GWB_FILE *GWB_File_List2_GetFileById(const GWB_FILE_LIST2 *fileList, uint32_t id); GWB_FILE *GWB_File_List2_GetOrCreateFile(GWB_FILE_LIST2 *fileList, const char *folder, const char *fname); GWB_FILE *GWB_File_List2_GetAt(const GWB_FILE_LIST2 *fileList, int index); void GWB_File_List2_WriteXml(const GWB_FILE_LIST2 *fileList, GWEN_XMLNODE *xmlNode, const char *groupName); void GWB_File_List2_ReadXml(GWEN_XMLNODE *xmlNode, const char *groupName, GWB_FILE_LIST2 *destFileList); void GWB_File_ReplaceExtension(GWB_FILE *file, const char *newExt); GWB_FILE *GWB_File_CopyObjectAndChangeExtension(const GWB_FILE *file, const char *newExt); void GWB_File_AddFileList2ToFileList2(GWB_FILE_LIST2 *sourceList, GWB_FILE_LIST2 *destList, const char *ext); void GWB_File_WriteFileNameToTopBuildDirString(const GWB_FILE *file, const char *initialSourceDir, GWEN_BUFFER *fbuf); GWEN_STRINGLIST *GWB_File_FileListToTopBuildDirStringList(const GWB_FILE_LIST2 *fileList, const char *initialSourceDir); #endif gwenhywfar-5.12.0/tools/gwenbuild/types/target.h0000664000175000017500000000614414144206313016631 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_TARGET_H #define GWBUILD_TARGET_H #include typedef struct GWB_TARGET GWB_TARGET; GWEN_LIST2_FUNCTION_DEFS(GWB_TARGET, GWB_Target) #include "gwenbuild/types/context.h" #include "gwenbuild/types/file.h" #include "gwenbuild/types/builder.h" #include "gwenbuild/types/gwenbuild.h" #include "gwenbuild/types/project.h" #include "gwenbuild/buildctx/buildcmd.h" #include GWB_TARGET *GWB_Target_new(GWB_PROJECT *project); void GWB_Target_free(GWB_TARGET *target); const char *GWB_Target_GetId(const GWB_TARGET *target); void GWB_Target_SetId(GWB_TARGET *target, const char *s); const char *GWB_Target_GetName(const GWB_TARGET *target); void GWB_Target_SetName(GWB_TARGET *target, const char *s); const char *GWB_Target_GetInstallName(const GWB_TARGET *target); void GWB_Target_SetInstallName(GWB_TARGET *target, const char *s); GWBUILD_TARGETTYPE GWB_Target_GetTargetType(const GWB_TARGET *target); void GWB_Target_SetTargetType(GWB_TARGET *target, GWBUILD_TARGETTYPE t); const char *GWB_Target_GetInstallPath(const GWB_TARGET *target); void GWB_Target_SetInstallPath(GWB_TARGET *target, const char *s); GWB_PROJECT *GWB_Target_GetProject(const GWB_TARGET *target); void GWB_Target_SetSoVersion(GWB_TARGET *target, int vCurrent, int vAge, int vRevision); int GWB_Target_GetSoVersionCurrent(const GWB_TARGET *target); int GWB_Target_GetSoVersionAge(const GWB_TARGET *target); int GWB_Target_GetSoVersionRevision(const GWB_TARGET *target); GWB_CONTEXT *GWB_Target_GetContext(const GWB_TARGET *target); void GWB_Target_SetContext(GWB_TARGET *target, GWB_CONTEXT *ctx); GWB_FILE_LIST2 *GWB_Target_GetSourceFileList(const GWB_TARGET *target); void GWB_Target_AddSourceFile(GWB_TARGET *target, GWB_FILE *file); GWEN_STRINGLIST *GWB_Target_GetUsedTargetNameList(const GWB_TARGET *target); void GWB_Target_AddUsedTargetName(GWB_TARGET *target, const char *s); GWEN_STRINGLIST *GWB_Target_GetUsedLibraryNameList(const GWB_TARGET *target); void GWB_Target_AddUsedLibraryName(GWB_TARGET *target, const char *s); GWEN_STRINGLIST *GWB_Target_GetUsedTargetLinkSpecList(const GWB_TARGET *target); void GWB_Target_AddUsedTargetLinkSpec(GWB_TARGET *target, const char *s); GWB_BUILDER *GWB_Target_GetBuilder(const GWB_TARGET *target); void GWB_Target_SetBuilder(GWB_TARGET *target, GWB_BUILDER *builder); GWB_FILE *GWB_Target_GetOutputFile(const GWB_TARGET *target); void GWB_Target_SetOutputFile(GWB_TARGET *target, GWB_FILE *f); GWB_BUILD_CMD_LIST *GWB_Target_GetExplicitBuildList(const GWB_TARGET *target); void GWB_Target_AddExplicitBuild(GWB_TARGET *target, GWB_BUILD_CMD *bcmd); void GWB_Target_Dump(const GWB_TARGET *target, int indent, int fullDump); #endif gwenhywfar-5.12.0/tools/gwenbuild/types/builder.c0000664000175000017500000002170314460564441016774 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/types/builder_p.h" #include #include #include GWEN_LIST2_FUNCTIONS(GWB_BUILDER, GWB_Builder) GWEN_INHERIT_FUNCTIONS(GWB_BUILDER) GWB_BUILDER *GWB_Builder_new(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *typeName) { GWB_BUILDER *builder; GWEN_NEW_OBJECT(GWB_BUILDER, builder); GWEN_INHERIT_INIT(GWB_BUILDER, builder); builder->gwenbuild=gwenbuild; builder->context=context; if (typeName) builder->typeName=strdup(typeName); return builder; } void GWB_Builder_free(GWB_BUILDER *builder) { if (builder) { GWEN_INHERIT_FINI(GWB_BUILDER, builder); free(builder->targetLinkSpec); free(builder->typeName); GWB_File_List2_free(builder->inputFileList2); GWB_File_List2_free(builder->outputFileList2); } } GWENBUILD *GWB_Builder_GetGwenbuild(const GWB_BUILDER *builder) { return builder->gwenbuild; } uint32_t GWB_Builder_GetId(const GWB_BUILDER *builder) { return builder->id; } const char *GWB_Builder_GetTypeName(const GWB_BUILDER *builder) { return builder->typeName; } const char *GWB_Builder_GetTargetLinkSpec(const GWB_BUILDER *builder) { return builder->targetLinkSpec; } void GWB_Builder_SetTargetLinkSpec(GWB_BUILDER *builder, const char *s) { free(builder->targetLinkSpec); builder->targetLinkSpec=s?strdup(s):NULL; } GWB_CONTEXT *GWB_Builder_GetContext(const GWB_BUILDER *builder) { return builder->context; } GWB_FILE_LIST2 *GWB_Builder_GetInputFileList2(const GWB_BUILDER *builder) { return builder->inputFileList2; } void GWB_Builder_AddInputFile(GWB_BUILDER *builder, GWB_FILE *f) { if (builder->inputFileList2==NULL) builder->inputFileList2=GWB_File_List2_new(); GWB_File_List2_PushBack(builder->inputFileList2, f); } GWB_FILE_LIST2 *GWB_Builder_GetOutputFileList2(const GWB_BUILDER *builder) { return builder->outputFileList2; } void GWB_Builder_AddOutputFile(GWB_BUILDER *builder, GWB_FILE *f) { if (builder->outputFileList2==NULL) builder->outputFileList2=GWB_File_List2_new(); GWB_File_List2_PushBack(builder->outputFileList2, f); } int GWB_Builder_GetNumBlockingInputFiles(const GWB_BUILDER *builder) { return builder->numBlockingInputFiles; } int GWB_Builder_IncNumBlockingInputFiles(GWB_BUILDER *builder) { builder->numBlockingInputFiles++; return builder->numBlockingInputFiles; } int GWB_Builder_DecNumBlockingInputFiles(GWB_BUILDER *builder) { if (builder->numBlockingInputFiles>0) builder->numBlockingInputFiles--; return builder->numBlockingInputFiles; } int GWB_Builder_IsAcceptableInput(GWB_BUILDER *builder, const GWB_FILE *file) { if (builder->isAcceptableInputFn) return builder->isAcceptableInputFn(builder, file); else return GWEN_ERROR_NOT_IMPLEMENTED; } int GWB_Builder_AddBuildCmd(GWB_BUILDER *builder, GWB_BUILD_CONTEXT *bctx) { if (builder->addBuildCmdFn) return builder->addBuildCmdFn(builder, bctx); else return GWEN_ERROR_NOT_IMPLEMENTED; } void GWB_Builder_AddSourceFile(GWB_BUILDER *builder, GWB_FILE *f) { if (builder->addSourceFileFn) return builder->addSourceFileFn(builder, f); } GWEN_BUILDER_ISACCEPTABLEINPUT_FN GWB_Builder_SetIsAcceptableInputFn(GWB_BUILDER *builder, GWEN_BUILDER_ISACCEPTABLEINPUT_FN fn) { GWEN_BUILDER_ISACCEPTABLEINPUT_FN oldFn; oldFn=builder->isAcceptableInputFn; builder->isAcceptableInputFn=fn; return oldFn; } GWEN_BUILDER_ADDBUILDCMD_FN GWB_Builder_SetAddBuildCmdFn(GWB_BUILDER *builder, GWEN_BUILDER_ADDBUILDCMD_FN fn) { GWEN_BUILDER_ADDBUILDCMD_FN oldFn; oldFn=builder->addBuildCmdFn; builder->addBuildCmdFn=fn; return oldFn; } GWB_BUILDER_ADDSOURCEFILE_FN GWB_Builder_SetAddSourceFileFn(GWB_BUILDER *builder, GWB_BUILDER_ADDSOURCEFILE_FN fn) { GWB_BUILDER_ADDSOURCEFILE_FN oldFn; oldFn=builder->addSourceFileFn; builder->addSourceFileFn=fn; return oldFn; } void GWB_Builder_AddFileNamesToBuffer(const GWB_CONTEXT *context, const GWB_FILE_LIST2 *inFileList, GWEN_BUFFER *argBuffer) { GWB_FILE_LIST2_ITERATOR *it; int entriesAdded=0; it=GWB_File_List2_First(inFileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { if (entriesAdded) GWEN_Buffer_AppendString(argBuffer, " "); GWB_Builder_AddFileNameToBuffer(context, file, argBuffer); entriesAdded++; file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } void GWB_Builder_AddFileNameToBuffer(const GWB_CONTEXT *context, const GWB_FILE *file, GWEN_BUFFER *argBuffer) { const char *folder; const char *buildDir; const char *initialSourceDir; GWEN_BUFFER *realFileFolderBuffer; GWEN_BUFFER *relBuffer; buildDir=GWB_Context_GetCurrentBuildDir(context); initialSourceDir=GWB_Context_GetInitialSourceDir(context); folder=GWB_File_GetFolder(file); realFileFolderBuffer=GWEN_Buffer_new(0, 256, 0, 1); if (!(GWB_File_GetFlags(file) & GWB_FILE_FLAGS_GENERATED)) { GWEN_Buffer_AppendString(realFileFolderBuffer, initialSourceDir); GWEN_Buffer_AppendString(realFileFolderBuffer, GWEN_DIR_SEPARATOR_S); } if (folder && *folder) GWEN_Buffer_AppendString(realFileFolderBuffer, folder); relBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Path_GetPathBetween(buildDir, GWEN_Buffer_GetStart(realFileFolderBuffer), relBuffer); if (GWEN_Buffer_GetUsedBytes(relBuffer)) GWEN_Buffer_AppendString(relBuffer, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(relBuffer, GWB_File_GetName(file)); GWEN_Buffer_AppendString(argBuffer, GWEN_Buffer_GetStart(relBuffer)); GWEN_Buffer_free(relBuffer); GWEN_Buffer_free(realFileFolderBuffer); } void GWB_Builder_AddRelativeFolderToBuffer(const GWB_CONTEXT *context, const char *folder, int useBuildDir, GWEN_BUFFER *argBuffer) { const char *buildDir; const char *initialSourceDir; GWEN_BUFFER *realFileFolderBuffer; GWEN_BUFFER *relBuffer; buildDir=GWB_Context_GetCurrentBuildDir(context); initialSourceDir=GWB_Context_GetInitialSourceDir(context); realFileFolderBuffer=GWEN_Buffer_new(0, 256, 0, 1); if (!useBuildDir) { GWEN_Buffer_AppendString(realFileFolderBuffer, initialSourceDir); GWEN_Buffer_AppendString(realFileFolderBuffer, GWEN_DIR_SEPARATOR_S); } if (folder) GWEN_Buffer_AppendString(realFileFolderBuffer, folder); relBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Path_GetPathBetween(buildDir, GWEN_Buffer_GetStart(realFileFolderBuffer), relBuffer); #if 0 DBG_ERROR(NULL, "Paths: [%s]->[%s]: [%s]", buildDir, GWEN_Buffer_GetStart(realFileFolderBuffer), GWEN_Buffer_GetStart(relBuffer)); #endif if (GWEN_Buffer_GetUsedBytes(relBuffer)>0) GWEN_Buffer_AppendString(argBuffer, GWEN_Buffer_GetStart(relBuffer)); else GWEN_Buffer_AppendString(argBuffer, "."); GWEN_Buffer_free(relBuffer); GWEN_Buffer_free(realFileFolderBuffer); } void GWB_Builder_AddAbsFileNameToBuffer(const GWB_CONTEXT *context, const GWB_FILE *file, GWEN_BUFFER *argBuffer) { const char *folder; const char *initialSourceDir; GWEN_BUFFER *realFileFolderBuffer; GWEN_BUFFER *absBuffer; initialSourceDir=GWB_Context_GetInitialSourceDir(context); folder=GWB_File_GetFolder(file); realFileFolderBuffer=GWEN_Buffer_new(0, 256, 0, 1); if (!(GWB_File_GetFlags(file) & GWB_FILE_FLAGS_GENERATED)) { GWEN_Buffer_AppendString(realFileFolderBuffer, initialSourceDir); GWEN_Buffer_AppendString(realFileFolderBuffer, GWEN_DIR_SEPARATOR_S); } if (folder && *folder) GWEN_Buffer_AppendString(realFileFolderBuffer, folder); absBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Directory_GetAbsoluteFolderPath(GWEN_Buffer_GetStart(realFileFolderBuffer), absBuffer); if (GWEN_Buffer_GetUsedBytes(absBuffer)) GWEN_Buffer_AppendString(absBuffer, GWEN_DIR_SEPARATOR_S); GWEN_Buffer_AppendString(absBuffer, GWB_File_GetName(file)); GWEN_Buffer_AppendString(argBuffer, GWEN_Buffer_GetStart(absBuffer)); GWEN_Buffer_free(absBuffer); GWEN_Buffer_free(realFileFolderBuffer); } void GWB_Builder_Dump(const GWB_BUILDER *builder, int indent, int fullDump) { int i; for(i=0; itypeName, indent+2); GWBUILD_Debug_PrintFileList2("inputFileList2.", builder->inputFileList2, indent+2); GWBUILD_Debug_PrintFileList2("outputFileList2", builder->outputFileList2, indent+2); if (fullDump) GWB_Context_Dump(builder->context, indent+2); } gwenhywfar-5.12.0/tools/gwenbuild/types/option.c0000664000175000017500000001042014116666046016652 00000000000000/*************************************************************************** begin : Fri Apr 02 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/types/option_p.h" #include "gwenbuild/types/keyvaluepair.h" #include "gwenbuild/types/gwenbuild.h" #include GWEN_LIST_FUNCTIONS(GWB_OPTION, GWB_Option) GWB_OPTION *GWB_Option_new(const char *id) { GWB_OPTION *option; GWEN_NEW_OBJECT(GWB_OPTION, option); GWEN_LIST_INIT(GWB_OPTION, option); option->id=id?strdup(id):NULL; option->aliasList=GWB_KeyValuePair_List_new(); option->choiceList=GWEN_StringList_new(); return option; } void GWB_Option_free(GWB_OPTION *option) { if (option) { GWEN_LIST_FINI(GWB_OPTION, option); free(option->id); free(option->defaultValue); free(option->definePrefix); GWEN_StringList_free(option->choiceList); GWB_KeyValuePair_List_free(option->aliasList); GWEN_FREE_OBJECT(option); } } const char *GWB_Option_GetId(const GWB_OPTION *option) { return option->id; } int GWB_Option_GetOptionType(const GWB_OPTION *option) { return option->optionType; } void GWB_Option_SetOptionType(GWB_OPTION *option, int i) { option->optionType=i; } const char *GWB_Option_GetDefaultValue(const GWB_OPTION *option) { return option->defaultValue; } void GWB_Option_SetDefaultValue(GWB_OPTION *option, const char *s) { free(option->defaultValue); option->defaultValue=s?strdup(s):NULL; } GWB_KEYVALUEPAIR_LIST *GWB_Option_GetAliasList(const GWB_OPTION *option) { return option->aliasList; } void GWB_Option_AddAlias(GWB_OPTION *option, const char *name, const char *value) { GWB_KEYVALUEPAIR *kvp; kvp=GWB_KeyValuePair_new(name, value); GWB_KeyValuePair_List_Add(kvp, option->aliasList); } const char *GWB_Option_GetAlias(const GWB_OPTION *option, const char *name) { return GWB_KeyValuePair_List_GetValue(option->aliasList, name); } GWEN_STRINGLIST *GWB_Option_GetChoiceList(const GWB_OPTION *option) { return option->choiceList; } int GWB_Option_HasChoices(const GWB_OPTION *option) { return (GWEN_StringList_Count(option->choiceList)>0)?1:0; } int GWB_Option_IsValidChoice(const GWB_OPTION *option, const char *s) { if (GWEN_StringList_Count(option->choiceList)==0) return 1; if (GWEN_StringList_HasString(option->choiceList, s)) return 1; return 0; } void GWB_Option_AddChoice(GWB_OPTION *option, const char *s) { GWEN_StringList_AppendString(option->choiceList, s, 0, 1); } const char *GWB_Option_GetDefinePrefix(const GWB_OPTION *option) { return option->definePrefix; } void GWB_Option_SetDefinePrefix(GWB_OPTION *option, const char *s) { free(option->definePrefix); option->definePrefix=s?strdup(s):NULL; } void GWB_Option_Dump(const GWB_OPTION *option, int indent) { int i; for(i=0; iid, indent+2); GWBUILD_Debug_PrintValue( "defaultValue", option->defaultValue, indent+2); GWBUILD_Debug_PrintValue( "definePrefix", option->definePrefix, indent+2); GWBUILD_Debug_PrintKvpList( "aliasList...", option->aliasList, indent+2); GWBUILD_Debug_PrintStringList("choiceList..", option->choiceList, indent+2); } const char *GWB_OptionType_toString(int t) { switch(t) { case GWB_OptionType_Unknown: return "unknown"; case GWB_OptionType_None: return "none"; case GWB_OptionType_String: return "string"; case GWB_OptionType_StringList: return "stringlist"; } return "unknown"; } int GWB_OptionType_fromString(const char *s) { if (s) { if (strcasecmp(s, "unknown")==0) return GWB_OptionType_Unknown; else if (strcasecmp(s, "none")==0) return GWB_OptionType_None; else if (strcasecmp(s, "string")==0) return GWB_OptionType_String; else if (strcasecmp(s, "stringlist")==0) return GWB_OptionType_StringList; } return GWB_OptionType_Unknown; } gwenhywfar-5.12.0/tools/gwenbuild/types/target_p.h0000664000175000017500000000201414144206313017140 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_TARGET_P_H #define GWBUILD_TARGET_P_H #include "gwenbuild/types/target.h" struct GWB_TARGET { char *id; char *name; char *installName; GWBUILD_TARGETTYPE targetType; int soVersionCurrent; int soVersionAge; int soVersionRevision; GWB_CONTEXT *context; GWB_FILE_LIST2 *sourceFileList; GWEN_STRINGLIST *usedTargetNameList; GWEN_STRINGLIST *usedLibraryList; /* LDFLAGS */ GWEN_STRINGLIST *usedTargetLinkSpecList; GWB_BUILDER *builder; GWB_FILE *outputFile; GWB_PROJECT *project; char *installPath; GWB_BUILD_CMD_LIST *explicitBuildList; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/types/project_p.h0000664000175000017500000000206614125401126017325 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PROJECT_P_H #define GWBUILD_PROJECT_P_H #include "gwenbuild/types/project.h" struct GWB_PROJECT { GWENBUILD *gwbuild; GWB_CONTEXT *contextTree; GWB_FILE_LIST2 *fileList; GWB_TARGET_LIST2 *targetList; GWB_BUILDER_LIST2 *builderList; GWB_KEYVALUEPAIR_LIST *defineList; GWB_KEYVALUEPAIR_LIST *givenOptionList; GWB_OPTION_LIST *optionList; char *projectName; int versionMajor; int versionMinor; int versionPatchlevel; int versionBuild; char *versionTag; int soVersionCurrent; int soVersionAge; int soVersionRevision; uint32_t flags; GWB_BUILD_CMD_LIST *explicitBuildList; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/types/option_p.h0000664000175000017500000000133114116666046017177 00000000000000/*************************************************************************** begin : Fri Apr 02 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_OPTION_P_H #define GWBUILD_OPTION_P_H #include "gwenbuild/types/option.h" struct GWB_OPTION { GWEN_LIST_ELEMENT(GWB_OPTION) char *id; int optionType; char *defaultValue; char *definePrefix; GWB_KEYVALUEPAIR_LIST *aliasList; GWEN_STRINGLIST *choiceList; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/types/context.h0000664000175000017500000000732714116666046017047 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_CONTEXT_H #define GWBUILD_CONTEXT_H #include typedef struct GWB_CONTEXT GWB_CONTEXT; GWEN_TREE2_FUNCTION_DEFS(GWB_CONTEXT, GWB_Context) #include "gwenbuild/types/keyvaluepair.h" #include "gwenbuild/types/file.h" #include "gwenbuild/types/target.h" #include "gwenbuild/types/gwenbuild.h" #include #include #include GWB_CONTEXT *GWB_Context_new(GWENBUILD *gwenbuild); GWB_CONTEXT *GWB_Context_dup(const GWB_CONTEXT *originalCtx); void GWB_Context_free(GWB_CONTEXT *ctx); void GWB_Context_toXml(const GWB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode, int withDb); GWENBUILD *GWB_Context_GetGwenbuild(const GWB_CONTEXT *ctx); const char *GWB_Context_GetCurrentRelativeDir(const GWB_CONTEXT *ctx); void GWB_Context_SetCurrentRelativeDir(GWB_CONTEXT *ctx, const char *s); void GWB_Context_AddCurrentRelativeDir(GWB_CONTEXT *ctx, const char *s); const char *GWB_Context_GetInitialSourceDir(const GWB_CONTEXT *ctx); void GWB_Context_SetInitialSourceDir(GWB_CONTEXT *ctx, const char *s); const char *GWB_Context_GetTopBuildDir(const GWB_CONTEXT *ctx); void GWB_Context_SetTopBuildDir(GWB_CONTEXT *ctx, const char *s); void GWB_Context_InsertTopBuildDir(GWB_CONTEXT *ctx, const char *s); const char *GWB_Context_GetTopSourceDir(const GWB_CONTEXT *ctx); void GWB_Context_SetTopSourceDir(GWB_CONTEXT *ctx, const char *s); void GWB_Context_InsertTopSourceDir(GWB_CONTEXT *ctx, const char *s); const char *GWB_Context_GetCurrentBuildDir(const GWB_CONTEXT *ctx); void GWB_Context_SetCurrentBuildDir(GWB_CONTEXT *ctx, const char *s); void GWB_Context_AddCurrentBuildDir(GWB_CONTEXT *ctx, const char *s); const char *GWB_Context_GetCurrentSourceDir(const GWB_CONTEXT *ctx); void GWB_Context_SetCurrentSourceDir(GWB_CONTEXT *ctx, const char *s); void GWB_Context_AddCurrentSourceDir(GWB_CONTEXT *ctx, const char *s); void GWB_Context_InsertCurrentSourceDir(GWB_CONTEXT *ctx, const char *s); const char *GWB_Context_GetCompilerFlags(const GWB_CONTEXT *ctx); void GWB_Context_SetCompilerFlags(GWB_CONTEXT *ctx, const char *s); void GWB_Context_AddCompilerFlags(GWB_CONTEXT *ctx, const char *s); const char *GWB_Context_GetLinkerFlags(const GWB_CONTEXT *ctx); void GWB_Context_SetLinkerFlags(GWB_CONTEXT *ctx, const char *s); void GWB_Context_AddLinkerFlags(GWB_CONTEXT *ctx, const char *s); GWB_KEYVALUEPAIR_LIST *GWB_Context_GetIncludeList(const GWB_CONTEXT *ctx); void GWB_Context_AddInclude(GWB_CONTEXT *ctx, const char *genType, const char *incl); void GWB_Context_ClearIncludeList(GWB_CONTEXT *ctx); GWB_KEYVALUEPAIR_LIST *GWB_Context_GetDefineList(const GWB_CONTEXT *ctx); void GWB_Context_SetDefine(GWB_CONTEXT *ctx, const char *name, const char *value); void GWB_Context_ClearDefineList(GWB_CONTEXT *ctx); GWEN_DB_NODE *GWB_Context_GetVars(const GWB_CONTEXT *ctx); GWB_TARGET *GWB_Context_GetCurrentTarget(const GWB_CONTEXT *ctx); /** doesn't take over target */ void GWB_Context_SetCurrentTarget(GWB_CONTEXT *ctx, GWB_TARGET *target); GWB_FILE_LIST2 *GWB_Context_GetSourceFileList2(const GWB_CONTEXT *ctx); void GWB_Context_AddSourceFile(GWB_CONTEXT *ctx, GWB_FILE *f); void GWB_Context_ClearSourceFileList2(GWB_CONTEXT *ctx); void GWB_Context_Dump(const GWB_CONTEXT *ctx, int indent); void GWB_Context_Tree2_Dump(const GWB_CONTEXT *ctx, int indent); #endif gwenhywfar-5.12.0/tools/gwenbuild/types/project.h0000664000175000017500000000776314125675316017035 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_PROJECT_H #define GWBUILD_PROJECT_H typedef struct GWB_PROJECT GWB_PROJECT; #include "gwenbuild/types/gwenbuild.h" #include "gwenbuild/types/context.h" #include "gwenbuild/types/file.h" #include "gwenbuild/types/builder.h" #include "gwenbuild/types/target.h" #include "gwenbuild/types/option.h" #include "gwenbuild/buildctx/buildcmd.h" #define GWB_PROJECT_FLAGS_SHARED 0x0001 #define GWB_PROJECT_FLAGS_CONFIG_H 0x0002 GWB_PROJECT *GWB_Project_new(GWENBUILD *gwbuild, GWB_CONTEXT *ctx); void GWB_Project_free(GWB_PROJECT *project); GWENBUILD *GWB_Project_GetGwbuild(const GWB_PROJECT *project); GWB_CONTEXT *GWB_Project_GetRootContext(const GWB_PROJECT *project); const char *GWB_Project_GetProjectName(const GWB_PROJECT *project); void GWB_Project_SetProjectName(GWB_PROJECT *project, const char *s); void GWB_Project_SetVersion(GWB_PROJECT *project, int vMajor, int vMinor, int vPatchlevel, int vBuild, const char *vTag); int GWB_Project_GetVersionMajor(const GWB_PROJECT *project); int GWB_Project_GetVersionMinor(const GWB_PROJECT *project); int GWB_Project_GetVersionPatchlevel(const GWB_PROJECT *project); int GWB_Project_GetVersionBuild(const GWB_PROJECT *project); const char *GWB_Project_GetVersionTag(const GWB_PROJECT *project); void GWB_Project_SetSoVersion(GWB_PROJECT *project, int vCurrent, int vAge, int vRevision); int GWB_Project_GetSoVersionCurrent(const GWB_PROJECT *project); int GWB_Project_GetSoVersionAge(const GWB_PROJECT *project); int GWB_Project_GetSoVersionRevision(const GWB_PROJECT *project); GWB_KEYVALUEPAIR_LIST *GWB_Project_GetDefineList(const GWB_PROJECT *project); void GWB_Project_SetDefine(GWB_PROJECT *project, const char *name, const char *value); void GWB_Project_SetDefineQuoted(GWB_PROJECT *project, const char *name, const char *value); void GWB_Project_ClearDefineList(GWB_PROJECT *project); GWB_KEYVALUEPAIR_LIST *GWB_Project_GetGivenOptionList(const GWB_PROJECT *project); void GWB_Project_SetGivenOptionList(GWB_PROJECT *project, GWB_KEYVALUEPAIR_LIST *kvpList); void GWB_Project_SetGivenOption(GWB_PROJECT *project, const char *name, const char *value); const char *GWB_Project_GetGivenOption(const GWB_PROJECT *project, const char *name); GWB_FILE_LIST2 *GWB_Project_GetFileList(const GWB_PROJECT *project); GWB_FILE *GWB_Project_GetFileByPathAndName(const GWB_PROJECT *project, const char *folder, const char *fname); void GWB_Project_AddFile(GWB_PROJECT *project, GWB_FILE *file); GWB_TARGET_LIST2 *GWB_Project_GetTargetList(const GWB_PROJECT *project); void GWB_Project_AddTarget(GWB_PROJECT *project, GWB_TARGET *target); GWB_TARGET *GWB_Project_GetTargetById(const GWB_PROJECT *project, const char *name); GWB_BUILDER_LIST2 *GWB_Project_GetBuilderList(const GWB_PROJECT *project); void GWB_Project_AddBuilder(GWB_PROJECT *project, GWB_BUILDER *builder); GWB_OPTION_LIST *GWB_Project_GetOptionList(const GWB_PROJECT *project); void GWB_Project_AddOption(GWB_PROJECT *project, GWB_OPTION *option); GWB_OPTION *GWB_Project_GetOptionById(const GWB_PROJECT *project, const char *optionId); uint32_t GWB_Project_GetFlags(const GWB_PROJECT *project); void GWB_Project_SetFlags(GWB_PROJECT *project, uint32_t fl); void GWB_Project_AddFlags(GWB_PROJECT *project, uint32_t fl); void GWB_Project_DelFlags(GWB_PROJECT *project, uint32_t fl); GWB_BUILD_CMD_LIST *GWB_Project_GetExplicitBuildList(const GWB_PROJECT *project); void GWB_Project_AddExplicitBuild(GWB_PROJECT *project, GWB_BUILD_CMD *bcmd); void GWB_Project_toXml(const GWB_PROJECT *project, GWEN_XMLNODE *xmlNode); void GWB_Project_Dump(const GWB_PROJECT *project, int indent, int fullDump); #endif gwenhywfar-5.12.0/tools/gwenbuild/types/keyvaluepair.c0000664000175000017500000001326014116666046020050 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/types/keyvaluepair_p.h" #include #include #include GWEN_LIST_FUNCTIONS(GWB_KEYVALUEPAIR, GWB_KeyValuePair) static GWB_KEYVALUEPAIR *_getByKey(GWB_KEYVALUEPAIR *kvp, const char *key); GWB_KEYVALUEPAIR *GWB_KeyValuePair_new(const char *key, const char *value) { GWB_KEYVALUEPAIR *kvp; GWEN_NEW_OBJECT(GWB_KEYVALUEPAIR, kvp); GWEN_LIST_INIT(GWB_KEYVALUEPAIR, kvp); if (key) GWB_KeyValuePair_SetKey(kvp, key); if (value) GWB_KeyValuePair_SetValue(kvp, value); return kvp; } GWB_KEYVALUEPAIR *GWB_KeyValuePair_dup(const GWB_KEYVALUEPAIR *originalKvp) { GWB_KEYVALUEPAIR *kvp; GWEN_NEW_OBJECT(GWB_KEYVALUEPAIR, kvp); GWEN_LIST_INIT(GWB_KEYVALUEPAIR, kvp); if (originalKvp->key) GWB_KeyValuePair_SetKey(kvp, originalKvp->key); if (originalKvp->value) GWB_KeyValuePair_SetValue(kvp, originalKvp->value); return kvp; } void GWB_KeyValuePair_free(GWB_KEYVALUEPAIR *kvp) { if (kvp) { free(kvp->value); free(kvp->key); GWEN_FREE_OBJECT(kvp); } } const char *GWB_KeyValuePair_GetKey(const GWB_KEYVALUEPAIR *kvp) { return kvp->key; } void GWB_KeyValuePair_SetKey(GWB_KEYVALUEPAIR *kvp, const char *s) { free(kvp->key); if (s) kvp->key=strdup(s); else kvp->key=NULL; } const char *GWB_KeyValuePair_GetValue(const GWB_KEYVALUEPAIR *kvp) { return kvp->value; } void GWB_KeyValuePair_SetValue(GWB_KEYVALUEPAIR *kvp, const char *s) { free(kvp->value); if (s) kvp->value=strdup(s); else kvp->value=NULL; } GWB_KEYVALUEPAIR_LIST *GWB_KeyValuePair_List_dup(const GWB_KEYVALUEPAIR_LIST *oldKvpList) { GWB_KEYVALUEPAIR_LIST *kvpList; GWB_KEYVALUEPAIR *kvp; kvpList=GWB_KeyValuePair_List_new(); kvp=GWB_KeyValuePair_List_First(oldKvpList); while(kvp) { GWB_KeyValuePair_List_Add(GWB_KeyValuePair_dup(kvp), kvpList); kvp=GWB_KeyValuePair_List_Next(kvp); } return kvpList; } const char *GWB_KeyValuePair_List_GetValue(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key) { GWB_KEYVALUEPAIR *kvp; kvp=GWB_KeyValuePair_List_GetFirstByKey(kvpList, key); if (kvp==NULL) return NULL; return kvp->value; } GWB_KEYVALUEPAIR *GWB_KeyValuePair_List_GetFirstByKey(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key) { return _getByKey(GWB_KeyValuePair_List_First(kvpList), key); } GWB_KEYVALUEPAIR *GWB_KeyValuePair_List_GetNextByKey(const GWB_KEYVALUEPAIR *kvp, const char *key) { if (kvp) return _getByKey(GWB_KeyValuePair_List_Next(kvp), key); return NULL; } GWB_KEYVALUEPAIR *_getByKey(GWB_KEYVALUEPAIR *kvp, const char *key) { while(kvp) { if (kvp->key && strcmp(kvp->key, key)==0) return kvp; kvp=GWB_KeyValuePair_List_Next(kvp); } return NULL; } int GWB_KeyValuePair_List_SampleValuesByKey(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key, const char *prefix, const char *delim, GWEN_BUFFER *destBuf) { const GWB_KEYVALUEPAIR *kvp; int entriesAdded=0; kvp=GWB_KeyValuePair_List_GetFirstByKey(kvpList, key); while(kvp) { if (kvp->value && *(kvp->value)) { if (entriesAdded && delim) GWEN_Buffer_AppendString(destBuf, delim); if (prefix) GWEN_Buffer_AppendString(destBuf, prefix); GWEN_Buffer_AppendString(destBuf, kvp->value); entriesAdded++; } kvp=GWB_KeyValuePair_List_GetNextByKey(kvp, key); } return entriesAdded; } int GWB_KeyValuePair_List_WriteAllPairsToBuffer(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *prefix, const char *assignmentString, const char *delim, GWEN_BUFFER *destBuf) { const GWB_KEYVALUEPAIR *kvp; int entriesAdded=0; kvp=GWB_KeyValuePair_List_First(kvpList); while(kvp) { if (kvp->key && *(kvp->key)) { if (entriesAdded && delim) GWEN_Buffer_AppendString(destBuf, delim); if (prefix) GWEN_Buffer_AppendString(destBuf, prefix); GWEN_Buffer_AppendString(destBuf, kvp->key); if (kvp->value && *(kvp->value)) { if (assignmentString) GWEN_Buffer_AppendString(destBuf, assignmentString); GWEN_Buffer_AppendString(destBuf, kvp->value); } entriesAdded++; } kvp=GWB_KeyValuePair_List_Next(kvp); } return entriesAdded; } void GWB_KeyValuePair_toXml(const GWB_KEYVALUEPAIR *kvp, GWEN_XMLNODE *xmlNode) { if (kvp->key) GWEN_XMLNode_SetCharValue(xmlNode, "key", kvp->key); if (kvp->value) GWEN_XMLNode_SetCharValue(xmlNode, "value", kvp->value); } void GWB_KeyValuePair_List_WriteXml(const GWB_KEYVALUEPAIR_LIST *kvpList, GWEN_XMLNODE *xmlNode, const char *groupName) { GWB_KEYVALUEPAIR *kvp; kvp=GWB_KeyValuePair_List_First(kvpList); while(kvp) { GWEN_XMLNODE *entryNode; entryNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, groupName); GWB_KeyValuePair_toXml(kvp, entryNode); GWEN_XMLNode_AddChild(xmlNode, entryNode); kvp=GWB_KeyValuePair_List_Next(kvp); } } gwenhywfar-5.12.0/tools/gwenbuild/types/gwenbuild_p.h0000664000175000017500000000131014116666046017644 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_GWENBUILD_P_H #define GWBUILD_GWENBUILD_P_H #include "gwenbuild/types/gwenbuild.h" struct GWENBUILD { GWEN_STRINGLIST *buildFilenameList; char *targetSystem; int targetIsWindows; GWB_GBUILDER_DESCR_LIST *builderDescrList; uint32_t flags; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/types/Makefile.in0000664000175000017500000006262414730344662017257 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 = tools/gwenbuild/types ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libgwb_types_la_LIBADD = am_libgwb_types_la_OBJECTS = builder.lo context.lo file.lo \ gwenbuild.lo keyvaluepair.lo target.lo project.lo option.lo libgwb_types_la_OBJECTS = $(am_libgwb_types_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/builder.Plo ./$(DEPDIR)/context.Plo \ ./$(DEPDIR)/file.Plo ./$(DEPDIR)/gwenbuild.Plo \ ./$(DEPDIR)/keyvaluepair.Plo ./$(DEPDIR)/option.Plo \ ./$(DEPDIR)/project.Plo ./$(DEPDIR)/target.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(libgwb_types_la_SOURCES) DIST_SOURCES = $(libgwb_types_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DBUILDERDATADIR=\"$(datadir)/gwenhywfar/gwenbuild/builders\" DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = @all_includes@ -I$(top_builddir) -I../ -I../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) noinst_LTLIBRARIES = libgwb_types.la libgwb_types_la_SOURCES = \ builder.c \ context.c \ file.c \ gwenbuild.c \ keyvaluepair.c \ target.c \ project.c \ option.c noinst_HEADERS = \ builder.h \ builder_be.h \ builder_p.h \ context.h \ context_p.h \ file.h \ file_p.h \ gwenbuild.h \ gwenbuild_p.h \ keyvaluepair.h \ keyvaluepair_p.h \ target.h \ target_p.h \ project.h \ project_p.h \ option.h \ option_p.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/gwenbuild/types/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gwenbuild/types/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): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgwb_types.la: $(libgwb_types_la_OBJECTS) $(libgwb_types_la_DEPENDENCIES) $(EXTRA_libgwb_types_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgwb_types_la_OBJECTS) $(libgwb_types_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/builder.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/context.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gwenbuild.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyvaluepair.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/option.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/project.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/target.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) 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 clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/builder.Plo -rm -f ./$(DEPDIR)/context.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/gwenbuild.Plo -rm -f ./$(DEPDIR)/keyvaluepair.Plo -rm -f ./$(DEPDIR)/option.Plo -rm -f ./$(DEPDIR)/project.Plo -rm -f ./$(DEPDIR)/target.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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 ./$(DEPDIR)/builder.Plo -rm -f ./$(DEPDIR)/context.Plo -rm -f ./$(DEPDIR)/file.Plo -rm -f ./$(DEPDIR)/gwenbuild.Plo -rm -f ./$(DEPDIR)/keyvaluepair.Plo -rm -f ./$(DEPDIR)/option.Plo -rm -f ./$(DEPDIR)/project.Plo -rm -f ./$(DEPDIR)/target.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool 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 maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool 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: gwenhywfar-5.12.0/tools/gwenbuild/types/target.c0000664000175000017500000001711114144206313016620 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/types/target_p.h" #include #include GWEN_LIST2_FUNCTIONS(GWB_TARGET, GWB_Target) GWB_TARGET *GWB_Target_new(GWB_PROJECT *project) { GWB_TARGET *target; GWEN_NEW_OBJECT(GWB_TARGET, target); target->sourceFileList=GWB_File_List2_new(); target->usedTargetNameList=GWEN_StringList_new(); target->usedLibraryList=GWEN_StringList_new(); target->usedTargetLinkSpecList=GWEN_StringList_new(); target->project=project; target->explicitBuildList=GWB_BuildCmd_List_new(); return target; } void GWB_Target_free(GWB_TARGET *target) { if (target) { free(target->installPath); free(target->installName); free(target->name); free(target->id); GWB_File_List2_free(target->sourceFileList); GWEN_StringList_free(target->usedTargetNameList); GWEN_StringList_free(target->usedTargetLinkSpecList); GWEN_StringList_free(target->usedLibraryList); GWB_BuildCmd_List_free(target->explicitBuildList); GWEN_FREE_OBJECT(target); } } GWB_PROJECT *GWB_Target_GetProject(const GWB_TARGET *target) { return target->project; } const char *GWB_Target_GetName(const GWB_TARGET *target) { return target->name; } void GWB_Target_SetName(GWB_TARGET *target, const char *s) { if (target->name) free(target->name); if (s) target->name=strdup(s); else target->name=NULL; } const char *GWB_Target_GetInstallName(const GWB_TARGET *target) { return target->installName; } void GWB_Target_SetInstallName(GWB_TARGET *target, const char *s) { if (target->installName) free(target->installName); if (s) target->installName=strdup(s); else target->installName=NULL; } const char *GWB_Target_GetId(const GWB_TARGET *target) { return target->id; } void GWB_Target_SetId(GWB_TARGET *target, const char *s) { if (target->id) free(target->id); if (s) target->id=strdup(s); else target->id=NULL; } GWBUILD_TARGETTYPE GWB_Target_GetTargetType(const GWB_TARGET *target) { return target->targetType; } void GWB_Target_SetTargetType(GWB_TARGET *target, GWBUILD_TARGETTYPE t) { target->targetType=t; } const char *GWB_Target_GetInstallPath(const GWB_TARGET *target) { return target->installPath; } void GWB_Target_SetInstallPath(GWB_TARGET *target, const char *s) { free(target->installPath); target->installPath=s?strdup(s):NULL; } void GWB_Target_SetSoVersion(GWB_TARGET *target, int vCurrent, int vAge, int vRevision) { target->soVersionCurrent=vCurrent; target->soVersionAge=vAge; target->soVersionRevision=vRevision; } int GWB_Target_GetSoVersionCurrent(const GWB_TARGET *target) { return target->soVersionCurrent; } int GWB_Target_GetSoVersionAge(const GWB_TARGET *target) { return target->soVersionAge; } int GWB_Target_GetSoVersionRevision(const GWB_TARGET *target) { return target->soVersionRevision; } GWB_CONTEXT *GWB_Target_GetContext(const GWB_TARGET *target) { return target->context; } void GWB_Target_SetContext(GWB_TARGET *target, GWB_CONTEXT *ctx) { target->context=ctx; } GWB_FILE_LIST2 *GWB_Target_GetSourceFileList(const GWB_TARGET *target) { return target->sourceFileList; } void GWB_Target_AddSourceFile(GWB_TARGET *target, GWB_FILE *file) { GWB_File_List2_PushBack(target->sourceFileList, file); } GWEN_STRINGLIST *GWB_Target_GetUsedTargetNameList(const GWB_TARGET *target) { return target->usedTargetNameList; } void GWB_Target_AddUsedTargetName(GWB_TARGET *target, const char *s) { if (target->usedTargetNameList==NULL) target->usedTargetNameList=GWEN_StringList_new(); GWEN_StringList_AppendString(target->usedTargetNameList, s, 0, 1); } GWEN_STRINGLIST *GWB_Target_GetUsedLibraryNameList(const GWB_TARGET *target) { return target->usedLibraryList; } void GWB_Target_AddUsedLibraryName(GWB_TARGET *target, const char *s) { if (target->usedLibraryList==NULL) target->usedLibraryList=GWEN_StringList_new(); GWEN_StringList_AppendString(target->usedLibraryList, s, 0, 1); } GWEN_STRINGLIST *GWB_Target_GetUsedTargetLinkSpecList(const GWB_TARGET *target) { return target->usedTargetLinkSpecList; } void GWB_Target_AddUsedTargetLinkSpec(GWB_TARGET *target, const char *s) { if (target->usedTargetLinkSpecList==NULL) target->usedTargetLinkSpecList=GWEN_StringList_new(); GWEN_StringList_AppendString(target->usedTargetLinkSpecList, s, 0, 1); } GWB_BUILDER *GWB_Target_GetBuilder(const GWB_TARGET *target) { return target->builder; } void GWB_Target_SetBuilder(GWB_TARGET *target, GWB_BUILDER *builder) { target->builder=builder; } GWB_FILE *GWB_Target_GetOutputFile(const GWB_TARGET *target) { return target->outputFile; } void GWB_Target_SetOutputFile(GWB_TARGET *target, GWB_FILE *f) { target->outputFile=f; } GWB_BUILD_CMD_LIST *GWB_Target_GetExplicitBuildList(const GWB_TARGET *target) { return target->explicitBuildList; } void GWB_Target_AddExplicitBuild(GWB_TARGET *target, GWB_BUILD_CMD *bcmd) { GWB_BuildCmd_List_Add(bcmd, target->explicitBuildList); } void GWB_Target_toXml(const GWB_TARGET *target, GWEN_XMLNODE *xmlNode) { if (target->id) GWEN_XMLNode_SetCharValue(xmlNode, "id", target->id); if (target->name) GWEN_XMLNode_SetCharValue(xmlNode, "name", target->name); if (target->installName) GWEN_XMLNode_SetCharValue(xmlNode, "installName", target->installName); GWEN_XMLNode_SetIntValue(xmlNode, "soVersionCurrent", target->soVersionCurrent); GWEN_XMLNode_SetIntValue(xmlNode, "soVersionAge", target->soVersionAge); GWEN_XMLNode_SetIntValue(xmlNode, "soVersionRevision", target->soVersionRevision); if (target->sourceFileList) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "SourceFileList"); GWB_File_List2_WriteXml(target->sourceFileList, n, "File"); GWEN_XMLNode_AddChild(xmlNode, n); } } void GWB_Target_Dump(const GWB_TARGET *target, int indent, int fullDump) { int i; for(i=0; iid, indent+2); GWBUILD_Debug_PrintValue( "name..................", target->name, indent+2); GWBUILD_Debug_PrintValue( "installName...........", target->installName, indent+2); GWBUILD_Debug_PrintValue( "type..................", GWBUILD_TargetType_toString(target->targetType), indent+2); GWBUILD_Debug_PrintIntValue( "soVersionCurrent......", target->soVersionCurrent, indent+2); GWBUILD_Debug_PrintIntValue( "soVersionAge..........", target->soVersionAge, indent+2); GWBUILD_Debug_PrintIntValue( "soVersionRevision.....", target->soVersionRevision, indent+2); GWBUILD_Debug_PrintFileList2( "sourceFileList........", target->sourceFileList, indent+2); GWBUILD_Debug_PrintStringList("usedTargetNameList....", target->usedTargetNameList, indent+2); GWBUILD_Debug_PrintStringList("usedTargetLinkSpecList", target->usedTargetLinkSpecList, indent+2); GWBUILD_Debug_PrintStringList("usedLibraryList.......", target->usedLibraryList, indent+2); GWBUILD_Debug_PrintFile( "outputFile............", target->outputFile, indent+2); if (fullDump) GWB_Context_Dump(target->context, indent+2); } gwenhywfar-5.12.0/tools/gwenbuild/types/builder.h0000664000175000017500000000365214116666046017006 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDER_H #define GWBUILD_BUILDER_H #include #include typedef struct GWB_BUILDER GWB_BUILDER; GWEN_LIST2_FUNCTION_DEFS(GWB_BUILDER, GWB_Builder) GWEN_INHERIT_FUNCTION_DEFS(GWB_BUILDER) #include "gwenbuild/types/gwenbuild.h" #include "gwenbuild/types/context.h" #include "gwenbuild/types/file.h" #include "gwenbuild/buildctx/buildctx.h" #include void GWB_Builder_free(GWB_BUILDER *builder); GWENBUILD *GWB_Builder_GetGwenbuild(const GWB_BUILDER *builder); const char *GWB_Builder_GetTypeName(const GWB_BUILDER *builder); uint32_t GWB_Builder_GetId(const GWB_BUILDER *builder); const char *GWB_Builder_GetTargetLinkSpec(const GWB_BUILDER *builder); void GWB_Builder_SetTargetLinkSpec(GWB_BUILDER *builder, const char *s); GWB_CONTEXT *GWB_Builder_GetContext(const GWB_BUILDER *builder); GWB_FILE_LIST2 *GWB_Builder_GetInputFileList2(const GWB_BUILDER *builder); GWB_FILE_LIST2 *GWB_Builder_GetOutputFileList2(const GWB_BUILDER *builder); int GWB_Builder_GetNumBlockingInputFiles(const GWB_BUILDER *builder); int GWB_Builder_IncNumBlockingInputFiles(GWB_BUILDER *builder); int GWB_Builder_DecNumBlockingInputFiles(GWB_BUILDER *builder); int GWB_Builder_IsAcceptableInput(GWB_BUILDER *builder, const GWB_FILE *file); void GWB_Builder_AddSourceFile(GWB_BUILDER *builder, GWB_FILE *f); int GWB_Builder_AddBuildCmd(GWB_BUILDER *builder, GWB_BUILD_CONTEXT *bctx); void GWB_Builder_Dump(const GWB_BUILDER *builder, int indent, int fullDump); #endif gwenhywfar-5.12.0/tools/gwenbuild/types/option.h0000664000175000017500000000367614116666046016676 00000000000000/*************************************************************************** begin : Fri Apr 02 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_OPTION_H #define GWBUILD_OPTION_H #include #include typedef struct GWB_OPTION GWB_OPTION; GWEN_LIST_FUNCTION_DEFS(GWB_OPTION, GWB_Option) enum { GWB_OptionType_Unknown=-1, GWB_OptionType_None=0, GWB_OptionType_String, GWB_OptionType_StringList }; #include "gwenbuild/types/keyvaluepair.h" GWB_OPTION *GWB_Option_new(const char *id); void GWB_Option_free(GWB_OPTION *option); const char *GWB_Option_GetId(const GWB_OPTION *option); int GWB_Option_GetOptionType(const GWB_OPTION *option); void GWB_Option_SetOptionType(GWB_OPTION *option, int i); const char *GWB_Option_GetDefaultValue(const GWB_OPTION *option); void GWB_Option_SetDefaultValue(GWB_OPTION *option, const char *s); GWB_KEYVALUEPAIR_LIST *GWB_Option_GetAliasList(const GWB_OPTION *option); void GWB_Option_AddAlias(GWB_OPTION *option, const char *name, const char *value); const char *GWB_Option_GetAlias(const GWB_OPTION *option, const char *name); GWEN_STRINGLIST *GWB_Option_GetChoiceList(const GWB_OPTION *option); int GWB_Option_HasChoices(const GWB_OPTION *option); int GWB_Option_IsValidChoice(const GWB_OPTION *option, const char *s); void GWB_Option_AddChoice(GWB_OPTION *option, const char *s); const char *GWB_Option_GetDefinePrefix(const GWB_OPTION *option); void GWB_Option_SetDefinePrefix(GWB_OPTION *option, const char *s); void GWB_Option_Dump(const GWB_OPTION *option, int indent); const char *GWB_OptionType_toString(int t); int GWB_OptionType_fromString(const char *s); #endif gwenhywfar-5.12.0/tools/gwenbuild/types/file.c0000664000175000017500000003471614460564441016275 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/types/file_p.h" #include #include #include #include GWEN_LIST2_FUNCTIONS(GWB_FILE, GWB_File) static void _writeFileFlagsToXml(uint32_t flags, GWEN_XMLNODE *xmlNode, const char *varName); static uint32_t _readFlagsFromChar(const char *flagsAsText); GWB_FILE *GWB_File_new(const char *folder, const char *fName, uint32_t id) { GWB_FILE *f; GWEN_NEW_OBJECT(GWB_FILE, f); if (folder && *folder) GWB_File_SetFolder(f, folder); if (fName && *fName) GWB_File_SetName(f, fName); f->id=id; return f; } GWB_FILE *GWB_File_dup(const GWB_FILE *oldFile) { if (oldFile) { GWB_FILE *fileOut; fileOut=GWB_File_new(oldFile->folder, oldFile->name, 0); GWB_File_SetFileType(fileOut, oldFile->fileType); GWB_File_SetInstallPath(fileOut, oldFile->installPath); GWB_File_SetBuilder(fileOut, oldFile->builder); GWB_File_SetFlags(fileOut, oldFile->flags); GWB_File_SetInstallName(fileOut, oldFile->installName); fileOut->buildCmd=oldFile->buildCmd; return fileOut; } return NULL; } void GWB_File_free(GWB_FILE *f) { if (f) { GWB_BuildCmd_List2_free(f->waitingBuildCmdList2); free(f->installName); free(f->builder); free(f->folder); free(f->name); GWEN_FREE_OBJECT(f); } } uint32_t GWB_File_GetId(const GWB_FILE *f) { return f->id; } void GWB_File_SetId(GWB_FILE *f, uint32_t i) { f->id=i; } uint32_t GWB_File_GetFlags(const GWB_FILE *f) { return f->flags; } void GWB_File_SetFlags(GWB_FILE *f, uint32_t i) { f->flags=i; } void GWB_File_AddFlags(GWB_FILE *f, uint32_t i) { f->flags|=i; } void GWB_File_DelFlags(GWB_FILE *f, uint32_t i) { f->flags&=~i; } const char *GWB_File_GetFolder(const GWB_FILE *f) { return f->folder; } void GWB_File_SetFolder(GWB_FILE *f, const char *s) { if (f->folder) free(f->folder); if (s && *s) f->folder=strdup(s); else f->folder=NULL; } const char *GWB_File_GetName(const GWB_FILE *f) { return f->name; } void GWB_File_SetName(GWB_FILE *f, const char *s) { if (f->name) free(f->name); if (s && *s) f->name=strdup(s); else f->name=NULL; } const char *GWB_File_GetInstallName(const GWB_FILE *f) { return f->installName; } void GWB_File_SetInstallName(GWB_FILE *f, const char *s) { if (f->installName) free(f->installName); if (s && *s) f->installName=strdup(s); else f->installName=NULL; } const char *GWB_File_GetExt(const GWB_FILE *f) { if (f->name) return (const char*) strrchr(f->name, '.'); return NULL; } const char *GWB_File_GetBuilder(const GWB_FILE *f) { return f->builder; } void GWB_File_SetBuilder(GWB_FILE *f, const char *s) { free(f->builder); f->builder=s?strdup(s):NULL; } const char *GWB_File_GetInstallPath(const GWB_FILE *f) { return f->installPath; } void GWB_File_SetInstallPath(GWB_FILE *f, const char *s) { if (f->installPath) free(f->installPath); if (s && *s) f->installPath=strdup(s); else f->installPath=NULL; } const char *GWB_File_GetFileType(const GWB_FILE *f) { return f->fileType; } void GWB_File_SetFileType(GWB_FILE *f, const char *s) { if (f->fileType) free(f->fileType); if (s && *s) f->fileType=strdup(s); else f->fileType=NULL; } GWB_BUILD_CMD_LIST2 *GWB_File_GetWaitingBuildCmdList2(const GWB_FILE *f) { return f->waitingBuildCmdList2; } void GWB_File_AddWaitingBuildCmd(GWB_FILE *f, GWB_BUILD_CMD *bcmd) { if (f->waitingBuildCmdList2==NULL) f->waitingBuildCmdList2=GWB_BuildCmd_List2_new(); GWB_BuildCmd_List2_PushBack(f->waitingBuildCmdList2, bcmd); } void GWB_File_ClearWaitingBuildCmds(GWB_FILE *f) { if (f->waitingBuildCmdList2) GWB_BuildCmd_List2_Clear(f->waitingBuildCmdList2); } GWB_BUILD_CMD *GWB_File_GetBuildCmd(const GWB_FILE *f) { return f->buildCmd; } void GWB_File_SetBuildCmd(GWB_FILE *f, GWB_BUILD_CMD *bcmd) { f->buildCmd=bcmd; } void GWB_File_List2_FreeAll(GWB_FILE_LIST2 *fileList2) { if (fileList2) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList2); if (it) { GWB_FILE *f; f=GWB_File_List2Iterator_Data(it); while(f) { GWB_File_free(f); f=GWB_File_List2Iterator_Next(it); } } GWB_File_List2_free(fileList2); } } void GWB_File_ReplaceExtension(GWB_FILE *file, const char *newExt) { const char *s; s=file->name; if (s && *s) { const char *ext; GWEN_BUFFER *buf; buf=GWEN_Buffer_new(0, 64, 0, 1); ext=strrchr(s, '.'); if (ext) { int len; len=(ext-s); /* exclude "." */ if (len) { GWEN_Buffer_AppendBytes(buf, s, len); } } GWEN_Buffer_AppendString(buf, newExt); GWB_File_SetName(file, GWEN_Buffer_GetStart(buf)); GWEN_Buffer_free(buf); } } GWB_FILE *GWB_File_CopyObjectAndChangeExtension(const GWB_FILE *file, const char *newExt) { GWB_FILE *fileOut; const char *s1; const char *s2; fileOut=GWB_File_dup(file); GWB_File_ReplaceExtension(fileOut, newExt); s1=GWB_File_GetName(file); s2=GWB_File_GetName(fileOut); if (strcasecmp(s1, s2)==0) { DBG_ERROR(NULL, "Output file has the same name as input file (%s)!", s1); GWB_File_free(fileOut); return NULL; } return fileOut; } GWB_FILE *GWB_File_List2_GetFileByPathAndName(const GWB_FILE_LIST2 *fileList, const char *folder, const char *fname) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { const char *currentName; currentName=GWB_File_GetName(file); if (currentName && *currentName && strcasecmp(currentName, fname)==0) { const char *currentFolder; currentFolder=GWB_File_GetFolder(file); if ((currentFolder==NULL && folder==NULL) || (currentFolder && *currentFolder && strcasecmp(currentFolder, folder)==0)) { GWB_File_List2Iterator_free(it); return file; } } file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } return NULL; } GWB_FILE *GWB_File_List2_GetOrCreateFile(GWB_FILE_LIST2 *fileList, const char *folder, const char *fname) { GWEN_BUFFER *pathBuf; char *s; const char *realFolder; const char *realFilename; GWB_FILE *file; pathBuf=GWEN_Buffer_new(0, 256, 0, 1); if (folder && *folder) { GWEN_Buffer_AppendString(pathBuf, folder); GWEN_Buffer_AppendString(pathBuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(pathBuf, fname); s=strrchr(GWEN_Buffer_GetStart(pathBuf), GWEN_DIR_SEPARATOR); if (s) { *s=0; realFolder=GWEN_Buffer_GetStart(pathBuf); realFilename=s+1; } else { realFolder=NULL; realFilename=GWEN_Buffer_GetStart(pathBuf); } file=GWB_File_List2_GetFileByPathAndName(fileList, realFolder, realFilename); if (file==NULL) { file=GWB_File_new(realFolder, realFilename, 0); GWB_File_List2_PushBack(fileList, file); } GWEN_Buffer_free(pathBuf); return file; } GWB_FILE *GWB_File_List2_GetFileById(const GWB_FILE_LIST2 *fileList, uint32_t id) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { if (GWB_File_GetId(file)==id) { GWB_File_List2Iterator_free(it); return file; } file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } return NULL; } void GWB_File_AddFileList2ToFileList2(GWB_FILE_LIST2 *sourceList, GWB_FILE_LIST2 *destList, const char *ext) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(sourceList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { if (ext && *ext) { const char *s; s=GWB_File_GetExt(file); if (s && strcasecmp(s, ext)==0) { GWB_File_List2_PushBack(destList, file); } } else GWB_File_List2_PushBack(destList, file); file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } void GWB_File_WriteFileNameToTopBuildDirString(const GWB_FILE *file, const char *initialSourceDir, GWEN_BUFFER *fbuf) { const char *s; if (!(GWB_File_GetFlags(file) & GWB_FILE_FLAGS_GENERATED)) { if (initialSourceDir && *initialSourceDir) { GWEN_Buffer_AppendString(fbuf, initialSourceDir); GWEN_Buffer_AppendString(fbuf, GWEN_DIR_SEPARATOR_S); } } s=GWB_File_GetFolder(file); if (s && *s) { GWEN_Buffer_AppendString(fbuf, s); GWEN_Buffer_AppendString(fbuf, GWEN_DIR_SEPARATOR_S); } s=GWB_File_GetName(file); GWEN_Buffer_AppendString(fbuf, s); } GWEN_STRINGLIST *GWB_File_FileListToTopBuildDirStringList(const GWB_FILE_LIST2 *fileList, const char *initialSourceDir) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWEN_STRINGLIST *sl; GWB_FILE *file; GWEN_BUFFER *fbuf; sl=GWEN_StringList_new(); fbuf=GWEN_Buffer_new(0, 256, 0, 1); file=GWB_File_List2Iterator_Data(it); while(file) { GWB_File_WriteFileNameToTopBuildDirString(file, initialSourceDir, fbuf); GWEN_StringList_AppendString(sl, GWEN_Buffer_GetStart(fbuf), 0, 1); GWEN_Buffer_Reset(fbuf); file=GWB_File_List2Iterator_Next(it); } /* while */ GWEN_Buffer_Reset(fbuf); GWB_File_List2Iterator_free(it); if (GWEN_StringList_Count(sl)==0) { GWEN_StringList_free(sl); return NULL; } return sl; } return NULL; } void GWB_File_toXml(const GWB_FILE *file, GWEN_XMLNODE *xmlNode) { GWEN_XMLNode_SetIntProperty(xmlNode, "id", (int) (file->id)); if (file->folder) GWEN_XMLNode_SetCharValue(xmlNode, "folder", file->folder); if (file->name) GWEN_XMLNode_SetCharValue(xmlNode, "name", file->name); if (file->installName) GWEN_XMLNode_SetCharValue(xmlNode, "installName", file->installName); if (file->fileType) GWEN_XMLNode_SetCharValue(xmlNode, "type", file->fileType); if (file->installPath) GWEN_XMLNode_SetCharValue(xmlNode, "installPath", file->installPath); if (file->builder) GWEN_XMLNode_SetCharValue(xmlNode, "builder", file->builder); _writeFileFlagsToXml(GWB_File_GetFlags(file), xmlNode, "flags"); } GWB_FILE *GWB_File_fromXml(GWEN_XMLNODE *xmlNode) { uint32_t id; GWB_FILE *file; const char *folder; const char *name; const char *s; id=(uint32_t) GWEN_XMLNode_GetIntProperty(xmlNode, "id", 0); folder=GWEN_XMLNode_GetCharValue(xmlNode, "folder", NULL); name=GWEN_XMLNode_GetCharValue(xmlNode, "name", NULL); file=GWB_File_new(folder, name, id); s=GWEN_XMLNode_GetCharValue(xmlNode, "flags", NULL); if (s) file->flags=_readFlagsFromChar(s); GWB_File_SetFileType(file, GWEN_XMLNode_GetCharValue(xmlNode, "type", NULL)); GWB_File_SetInstallPath(file, GWEN_XMLNode_GetCharValue(xmlNode, "installPath", NULL)); GWB_File_SetBuilder(file, GWEN_XMLNode_GetCharValue(xmlNode, "builder", NULL)); GWB_File_SetInstallName(file, GWEN_XMLNode_GetCharValue(xmlNode, "installName", NULL)); return file; } void _writeFileFlagsToXml(uint32_t flags, GWEN_XMLNODE *xmlNode, const char *varName) { if (flags) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); if (flags & GWB_FILE_FLAGS_DIST) { if (GWEN_Buffer_GetUsedBytes(dbuf)) GWEN_Buffer_AppendString(dbuf, " "); GWEN_Buffer_AppendString(dbuf, "DIST"); } if (flags & GWB_FILE_FLAGS_INSTALL) { if (GWEN_Buffer_GetUsedBytes(dbuf)) GWEN_Buffer_AppendString(dbuf, " "); GWEN_Buffer_AppendString(dbuf, "INSTALL"); } if (flags & GWB_FILE_FLAGS_GENERATED) { if (GWEN_Buffer_GetUsedBytes(dbuf)) GWEN_Buffer_AppendString(dbuf, " "); GWEN_Buffer_AppendString(dbuf, "GENERATED"); } if (GWEN_Buffer_GetUsedBytes(dbuf)) GWEN_XMLNode_SetCharValue(xmlNode, varName, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } } uint32_t _readFlagsFromChar(const char *flagsAsText) { GWEN_STRINGLIST *sl; uint32_t flags=0; sl=GWEN_StringList_fromString(flagsAsText, " ", 1); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { if (strcasecmp(s, "DIST")==0) flags|=GWB_FILE_FLAGS_DIST; else if (strcasecmp(s, "INSTALL")==0) flags|=GWB_FILE_FLAGS_INSTALL; else if (strcasecmp(s, "GENERATED")==0) flags|=GWB_FILE_FLAGS_GENERATED; else { DBG_ERROR(NULL, "Unexpected FILE flag \"%s\"", s); } } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } return flags; } GWB_FILE *GWB_File_List2_GetAt(const GWB_FILE_LIST2 *fileList, int index) { GWB_FILE_LIST2_ITERATOR *it; int i=0; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { if (i==index) { GWB_File_List2Iterator_free(it); return file; } i++; file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } return NULL; } void GWB_File_List2_WriteXml(const GWB_FILE_LIST2 *fileList, GWEN_XMLNODE *xmlNode, const char *groupName) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { GWEN_XMLNODE *entryNode; entryNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, groupName); GWB_File_toXml(file, entryNode); GWEN_XMLNode_AddChild(xmlNode, entryNode); file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } void GWB_File_List2_ReadXml(GWEN_XMLNODE *xmlNode, const char *groupName, GWB_FILE_LIST2 *destFileList) { GWEN_XMLNODE *xmlEntry; xmlEntry=GWEN_XMLNode_FindFirstTag(xmlNode, groupName, NULL, NULL); while(xmlEntry) { GWB_FILE *file; file=GWB_File_fromXml(xmlEntry); if (file) GWB_File_List2_PushBack(destFileList, file); xmlEntry=GWEN_XMLNode_FindNextTag(xmlEntry, groupName, NULL, NULL); } } gwenhywfar-5.12.0/tools/gwenbuild/types/builder_be.h0000664000175000017500000000375714116666046017462 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDER_BE_H #define GWBUILD_BUILDER_BE_H #include "gwenbuild/types/builder.h" typedef int (*GWEN_BUILDER_ISACCEPTABLEINPUT_FN)(GWB_BUILDER *builder, const GWB_FILE *file); typedef int (*GWEN_BUILDER_ADDBUILDCMD_FN)(GWB_BUILDER *builder, GWB_BUILD_CONTEXT *bctx); typedef void (*GWB_BUILDER_ADDSOURCEFILE_FN)(GWB_BUILDER *builder, GWB_FILE *f); GWB_BUILDER *GWB_Builder_new(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *typeName); void GWB_Builder_AddInputFile(GWB_BUILDER *builder, GWB_FILE *f); /** * Files like *.so and *,a should be added first, because the first entry is used * when linking with sub-targets internally. */ void GWB_Builder_AddOutputFile(GWB_BUILDER *builder, GWB_FILE *f); GWEN_BUILDER_ISACCEPTABLEINPUT_FN GWB_Builder_SetIsAcceptableInputFn(GWB_BUILDER *builder, GWEN_BUILDER_ISACCEPTABLEINPUT_FN fn); GWEN_BUILDER_ADDBUILDCMD_FN GWB_Builder_SetAddBuildCmdFn(GWB_BUILDER *builder, GWEN_BUILDER_ADDBUILDCMD_FN fn); GWB_BUILDER_ADDSOURCEFILE_FN GWB_Builder_SetAddSourceFileFn(GWB_BUILDER *builder, GWB_BUILDER_ADDSOURCEFILE_FN fn); void GWB_Builder_AddFileNamesToBuffer(const GWB_CONTEXT *context, const GWB_FILE_LIST2 *inFileList, GWEN_BUFFER *argBuffer); void GWB_Builder_AddFileNameToBuffer(const GWB_CONTEXT *context, const GWB_FILE *file, GWEN_BUFFER *argBuffer); void GWB_Builder_AddAbsFileNameToBuffer(const GWB_CONTEXT *context, const GWB_FILE *file, GWEN_BUFFER *argBuffer); void GWB_Builder_AddRelativeFolderToBuffer(const GWB_CONTEXT *context, const char *folder, int useBuildDir, GWEN_BUFFER *argBuffer); #endif gwenhywfar-5.12.0/tools/gwenbuild/types/gwenbuild.c0000664000175000017500000007542214460564441017335 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/types/gwenbuild_p.h" #include "gwenbuild/builders/genericbuilder.h" #include "gwenbuild/types/builder_be.h" #include #include #include #include /* for stat */ #include #include #include /* for strerror */ #include #include /* Changes these two functions for new target types or new source types */ static GWB_BUILDER *_genBuilderForSourceFile(GWENBUILD *gwenbuild, GWB_CONTEXT *context, GWB_FILE *file); static GWB_BUILDER *_genBuilderForTarget(GWB_PROJECT *project, GWB_TARGET *target); static GWB_BUILDER *_getBuilderByName(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *builderName); static int _addOrBuildTargetSources(GWB_PROJECT *project, GWB_TARGET *target); static int _addSourcesOrMkBuildersAndGetTheirOutputs(GWB_PROJECT *project, GWB_TARGET *target, GWB_FILE_LIST2 *sourceFileList, GWB_FILE_LIST2 *newOutputList); static int _addSubTargets(GWB_PROJECT *project); static int _addSubTargetsForTarget(GWB_PROJECT *project, GWB_TARGET *target, GWEN_STRINGLIST *usedTargetList); static int _addOneSubTargetForTarget(GWB_TARGET *target, GWB_TARGET *subTarget); static int _addBuildCommandsFromBuilder(GWB_PROJECT *project, GWB_BUILD_CONTEXT *buildCtx); static void _addExplicitBuildCommandsFromTargets(GWB_PROJECT *project, GWB_BUILD_CONTEXT *buildCtx); static void _addBuildCommands(GWB_BUILD_CONTEXT *buildCtx, const GWB_BUILD_CMD_LIST *buildCmdList); static void _addFilesToBuildCtx(GWB_BUILD_CONTEXT *buildCtx, GWB_FILE_LIST2 *fileList); GWENBUILD *GWBUILD_new(void) { GWENBUILD *gwenbuild; GWEN_NEW_OBJECT(GWENBUILD, gwenbuild); gwenbuild->buildFilenameList=GWEN_StringList_new(); return gwenbuild; } void GWBUILD_free(GWENBUILD *gwenbuild) { if (gwenbuild) { GWEN_StringList_free(gwenbuild->buildFilenameList); GWB_GBuilderDescr_List_free(gwenbuild->builderDescrList); GWEN_FREE_OBJECT(gwenbuild); } } uint32_t GWBUILD_GetFlags(const GWENBUILD *gwenbuild) { return gwenbuild->flags; } void GWBUILD_SetFlags(GWENBUILD *gwenbuild, uint32_t f) { gwenbuild->flags=f; } void GWBUILD_AddFlags(GWENBUILD *gwenbuild, uint32_t f) { gwenbuild->flags|=f; } void GWBUILD_DelFlags(GWENBUILD *gwenbuild, uint32_t f) { gwenbuild->flags&=~f; } const char *GWBUILD_GetTargetSystem(const GWENBUILD *gwenbuild) { return gwenbuild->targetSystem; } void GWBUILD_SetTargetSystem(GWENBUILD *gwenbuild, const char *s) { free(gwenbuild->targetSystem); gwenbuild->targetSystem=s?strdup(s):NULL; } int GWBUILD_GetTargetIsWindows(const GWENBUILD *gwenbuild) { return gwenbuild->targetIsWindows; } void GWBUILD_SetTargetIsWindows(GWENBUILD *gwenbuild, int i) { gwenbuild->targetIsWindows=i; } GWEN_STRINGLIST *GWBUILD_GetBuildFilenameList(const GWENBUILD *gwenbuild) { return gwenbuild->buildFilenameList; } void GWBUILD_AddBuildFilename(GWENBUILD *gwenbuild, const char *s) { GWEN_StringList_AppendString(gwenbuild->buildFilenameList, s, 0, 1); } GWEN_STRINGLIST *GWBUILD_GetPathFromEnvironment() { const char *s; s=getenv("PATH"); if (s && *s) return GWEN_StringList_fromString2(s, ":;", 1, GWEN_TEXT_FLAGS_DEL_QUOTES | GWEN_TEXT_FLAGS_CHECK_BACKSLASH | GWEN_TEXT_FLAGS_DEL_LEADING_BLANKS | GWEN_TEXT_FLAGS_DEL_TRAILING_BLANKS); return NULL; } GWBUILD_TARGETTYPE GWBUILD_TargetType_fromString(const char *s) { /* TODO: Create from builder files */ if (s && *s) { if (strcasecmp(s, "InstallLibrary")==0) return GWBUILD_TargetType_InstallLibrary; else if (strcasecmp(s, "ConvenienceLibrary")==0 || strcasecmp(s, "TempLibrary")==0) return GWBUILD_TargetType_ConvenienceLibrary; else if (strcasecmp(s, "Program")==0) return GWBUILD_TargetType_Program; else if (strcasecmp(s, "CxxProgram")==0) return GWBUILD_TargetType_CxxProgram; else if (strcasecmp(s, "Objects")==0) return GWBUILD_TargetType_Objects; else if (strcasecmp(s, "Module")==0) return GWBUILD_TargetType_Module; else if (strcasecmp(s, "I18nCatalog")==0) return GWBUILD_TargetType_I18nCatalog; else if (strcasecmp(s, "AvrHexFile")==0) return GWBUILD_TargetType_AvrHexFile; else { DBG_ERROR(NULL, "Invalid target type \"%s\"", s); } } else { DBG_ERROR(NULL, "Empty target type"); } return GWBUILD_TargetType_Invalid; } const char *GWBUILD_TargetType_toString(GWBUILD_TARGETTYPE tt) { switch(tt) { case GWBUILD_TargetType_Invalid: return "invalid"; case GWBUILD_TargetType_None: return "none"; case GWBUILD_TargetType_InstallLibrary: return "InstallLibrary"; case GWBUILD_TargetType_ConvenienceLibrary: return "ConvenienceLibrary"; case GWBUILD_TargetType_Program: return "program"; case GWBUILD_TargetType_CxxProgram: return "CxxProgram"; case GWBUILD_TargetType_Objects: return "objects"; case GWBUILD_TargetType_Module: return "module"; case GWBUILD_TargetType_I18nCatalog: return "I18nCatalog"; case GWBUILD_TargetType_AvrHexFile: return "AvrHexFile"; } return "invalid"; } void GWBUILD_Debug_PrintValue(const char *sName, const char *sValue, int indent) { int i; for(i=0; i"); } void GWBUILD_Debug_PrintIntValue(const char *sName, int value, int indent) { int i; for(i=0; i"); fprintf(stderr, " (%s)", sFileType?sFileType:"no type"); if (flags & GWB_FILE_FLAGS_DIST) fprintf(stderr, " DIST"); if (flags & GWB_FILE_FLAGS_INSTALL) fprintf(stderr, " INSTALL"); if (flags & GWB_FILE_FLAGS_GENERATED) fprintf(stderr, " GENERATED"); fprintf(stderr, " %s", sInstallPath?sInstallPath:""); if (GWB_File_GetBuildCmd(file)) fprintf(stderr, " BUILDCMD"); fprintf(stderr, "\n"); } else fprintf(stderr, "\n"); } void GWBUILD_Debug_PrintFileList2(const char *sName, const GWB_FILE_LIST2 *fileList2, int indent) { int i; for(i=0; i"); se=GWEN_StringListEntry_Next(se); } } } int GWBUILD_MakeBuildersForTargets(GWB_PROJECT *project) { GWB_TARGET_LIST2 *targetList; targetList=GWB_Project_GetTargetList(project); if (targetList) { GWB_TARGET_LIST2_ITERATOR *it; int rv; it=GWB_Target_List2_First(targetList); if (it) { GWB_TARGET *target; target=GWB_Target_List2Iterator_Data(it); while(target) { GWB_BUILDER *builder; builder=_genBuilderForTarget(project, target); if (builder==NULL) { DBG_INFO(NULL, "here)"); GWB_Target_List2Iterator_free(it); return GWEN_ERROR_GENERIC; } GWB_Target_SetBuilder(target, builder); GWB_Project_AddBuilder(project, builder); rv=_addOrBuildTargetSources(project, target); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } target=GWB_Target_List2Iterator_Next(it); } GWB_Target_List2Iterator_free(it); } rv=_addSubTargets(project); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } return 0; } int _addOrBuildTargetSources(GWB_PROJECT *project, GWB_TARGET *target) { GWB_FILE_LIST2 *fileList1; GWB_CONTEXT *context; context=GWB_Target_GetContext(target); fileList1=GWB_Context_GetSourceFileList2(context); if (!(fileList1 && GWB_File_List2_GetSize(fileList1)>0)) { DBG_ERROR(NULL, "Empty source file list in context of target \"%s\"", GWB_Target_GetId(target)); GWB_Target_Dump(target, 2, 1); return GWEN_ERROR_GENERIC; } fileList1=GWB_File_List2_dup(fileList1); while(GWB_File_List2_GetSize(fileList1)>0) { GWB_FILE_LIST2 *fileList2; int rv; fileList2=GWB_File_List2_new(); rv=_addSourcesOrMkBuildersAndGetTheirOutputs(project, target, fileList1, fileList2); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWB_File_List2_free(fileList1); GWB_File_List2_free(fileList1); return rv; } GWB_File_List2_free(fileList1); fileList1=fileList2; } GWB_File_List2_free(fileList1); return 0; } int _addSourcesOrMkBuildersAndGetTheirOutputs(GWB_PROJECT *project, GWB_TARGET *target, GWB_FILE_LIST2 *sourceFileList, GWB_FILE_LIST2 *newOutputList) { GWENBUILD *gwenbuild; GWB_BUILDER *targetBuilder; GWB_FILE_LIST2_ITERATOR *it; GWB_CONTEXT *context; gwenbuild=GWB_Project_GetGwbuild(project); context=GWB_Target_GetContext(target); targetBuilder=GWB_Target_GetBuilder(target); it=GWB_File_List2_First(sourceFileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { DBG_DEBUG(NULL, "Checking target \"%s\": file \"%s\"", GWB_Target_GetId(target), GWB_File_GetName(file)); if (GWB_Builder_IsAcceptableInput(targetBuilder, file)) { DBG_DEBUG(NULL, "- adding file \"%s\" as input for target \"%s\"", GWB_File_GetName(file), GWB_Target_GetId(target)); GWB_Builder_AddSourceFile(targetBuilder, file); } else { GWB_BUILDER *sourceBuilder; sourceBuilder=_genBuilderForSourceFile(gwenbuild, context, file); if (sourceBuilder) { GWB_FILE_LIST2 *buildersOutputFileList; buildersOutputFileList=GWB_Builder_GetOutputFileList2(sourceBuilder); GWB_Project_AddBuilder(project, sourceBuilder); GWB_File_AddFileList2ToFileList2(buildersOutputFileList, newOutputList, ".c"); GWB_File_AddFileList2ToFileList2(buildersOutputFileList, newOutputList, ".cpp"); GWB_File_AddFileList2ToFileList2(buildersOutputFileList, newOutputList, ".o"); } } file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } return 0; } int _addSubTargets(GWB_PROJECT *project) { GWB_TARGET_LIST2 *targetList; targetList=GWB_Project_GetTargetList(project); if (targetList) { GWB_TARGET_LIST2_ITERATOR *it; it=GWB_Target_List2_First(targetList); if (it) { GWB_TARGET *target; target=GWB_Target_List2Iterator_Data(it); while(target) { GWEN_STRINGLIST *usedTargetList; usedTargetList=GWB_Target_GetUsedTargetNameList(target); if (usedTargetList && GWEN_StringList_Count(usedTargetList)>0) { int rv; rv=_addSubTargetsForTarget(project, target, usedTargetList); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWB_Target_List2Iterator_free(it); return rv; } } target=GWB_Target_List2Iterator_Next(it); } GWB_Target_List2Iterator_free(it); } } return 0; } int _addSubTargetsForTarget(GWB_PROJECT *project, GWB_TARGET *target, GWEN_STRINGLIST *usedTargetList) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(usedTargetList); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { GWB_TARGET *subTarget; subTarget=GWB_Project_GetTargetById(project, s); if (subTarget) { int rv; rv=_addOneSubTargetForTarget(target, subTarget); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } } se=GWEN_StringListEntry_Next(se); } return 0; } int _addOneSubTargetForTarget(GWB_TARGET *target, GWB_TARGET *subTarget) { GWB_CONTEXT *context; GWB_BUILDER *targetBuilder; GWB_BUILDER *subTargetBuilder; GWB_FILE_LIST2 *subTargetOutputFileList; GWB_FILE *subTargetFile; const char *s; context=GWB_Target_GetContext(target); targetBuilder=GWB_Target_GetBuilder(target); if (targetBuilder==NULL) { DBG_ERROR(NULL, "No builder for target \"%s\"", GWB_Target_GetId(target)); return GWEN_ERROR_GENERIC; } subTargetBuilder=GWB_Target_GetBuilder(subTarget); if (subTargetBuilder==NULL) { DBG_ERROR(NULL, "No builder for sub-target \"%s\"", GWB_Target_GetId(subTarget)); return GWEN_ERROR_GENERIC; } subTargetOutputFileList=GWB_Builder_GetOutputFileList2(subTargetBuilder); if (subTargetOutputFileList==NULL) { DBG_ERROR(NULL, "No output file list in target \"%s\"", GWB_Target_GetId(subTarget)); return GWEN_ERROR_GENERIC; } subTargetFile=GWB_File_List2_GetFront(subTargetOutputFileList); if (subTargetFile==NULL) { DBG_ERROR(NULL, "No output file in target \"%s\"", GWB_Target_GetId(subTarget)); return GWEN_ERROR_GENERIC; } GWB_Builder_AddInputFile(targetBuilder, subTargetFile); s=GWB_Builder_GetTargetLinkSpec(subTargetBuilder); if (s && *s) { const char *folder; GWEN_BUFFER *linkSpecBuffer; /* determine path */ folder=GWB_File_GetFolder(subTargetFile); linkSpecBuffer=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(linkSpecBuffer, "-L"); GWB_Builder_AddRelativeFolderToBuffer(context, folder, 1, linkSpecBuffer); /* useBuildDir=1 */ GWEN_Buffer_AppendString(linkSpecBuffer, " "); GWEN_Buffer_AppendString(linkSpecBuffer, s); GWB_Target_AddUsedTargetLinkSpec(target, GWEN_Buffer_GetStart(linkSpecBuffer)); GWEN_Buffer_free(linkSpecBuffer); } return 0; } GWB_BUILD_CONTEXT *GWBUILD_MakeBuildCommands(GWB_PROJECT *project) { int rv; GWB_BUILD_CONTEXT *buildCtx; GWB_CONTEXT *rootContext; rootContext=GWB_Project_GetRootContext(project); buildCtx=GWB_BuildCtx_new(); GWB_BuildCtx_SetInitialSourceDir(buildCtx, GWB_Context_GetInitialSourceDir(rootContext)); rv=_addBuildCommandsFromBuilder(project, buildCtx); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWB_BuildCtx_free(buildCtx); return NULL; } _addExplicitBuildCommandsFromTargets(project, buildCtx); return buildCtx; } int _addBuildCommandsFromBuilder(GWB_PROJECT *project, GWB_BUILD_CONTEXT *buildCtx) { GWB_BUILDER_LIST2 *builderList; builderList=GWB_Project_GetBuilderList(project); if (builderList) { GWB_BUILDER_LIST2_ITERATOR *it; it=GWB_Builder_List2_First(builderList); if (it) { GWB_BUILDER *builder; builder=GWB_Builder_List2Iterator_Data(it); while(builder) { int rv; rv=GWB_Builder_AddBuildCmd(builder, buildCtx); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWB_Builder_List2Iterator_free(it); return rv; } builder=GWB_Builder_List2Iterator_Next(it); } GWB_Builder_List2Iterator_free(it); return 0; } } DBG_ERROR(NULL, "No targets in 0BUILD files"); return GWEN_ERROR_NO_DATA; } void _addExplicitBuildCommandsFromTargets(GWB_PROJECT *project, GWB_BUILD_CONTEXT *buildCtx) { GWB_TARGET_LIST2 *targetList; GWB_BUILD_CMD_LIST *explicitBuildCmdList; /* add explicit build commands from project */ explicitBuildCmdList=GWB_Project_GetExplicitBuildList(project); if (explicitBuildCmdList) _addBuildCommands(buildCtx, explicitBuildCmdList); /* add explicit build commands from targets */ targetList=GWB_Project_GetTargetList(project); if (targetList) { GWB_TARGET_LIST2_ITERATOR *it; it=GWB_Target_List2_First(targetList); if (it) { GWB_TARGET *target; target=GWB_Target_List2Iterator_Data(it); while(target) { explicitBuildCmdList=GWB_Target_GetExplicitBuildList(target); if (explicitBuildCmdList) _addBuildCommands(buildCtx, explicitBuildCmdList); target=GWB_Target_List2Iterator_Next(it); } GWB_Target_List2Iterator_free(it); } } } void _addBuildCommands(GWB_BUILD_CONTEXT *buildCtx, const GWB_BUILD_CMD_LIST *buildCmdList) { if (buildCmdList) { GWB_BUILD_CMD *cmd; cmd=GWB_BuildCmd_List_First(buildCmdList); while(cmd) { _addFilesToBuildCtx(buildCtx, GWB_BuildCmd_GetInFileList2(cmd)); /* assigns ids etc */ _addFilesToBuildCtx(buildCtx, GWB_BuildCmd_GetOutFileList2(cmd)); GWB_BuildCtx_AddCommand(buildCtx, GWB_BuildCmd_dup(cmd)); cmd=GWB_BuildCmd_List_Next(cmd); } } } void _addFilesToBuildCtx(GWB_BUILD_CONTEXT *buildCtx, GWB_FILE_LIST2 *fileList) { if (fileList) { GWB_FILE_LIST2_ITERATOR *it; it=GWB_File_List2_First(fileList); if (it) { GWB_FILE *file; file=GWB_File_List2Iterator_Data(it); while(file) { GWB_FILE *copyOfFile; copyOfFile=GWB_File_dup(file); GWB_BuildCtx_AddFile(buildCtx, copyOfFile); GWB_File_SetId(file, GWB_File_GetId(copyOfFile)); file=GWB_File_List2Iterator_Next(it); } GWB_File_List2Iterator_free(it); } } } time_t GWBUILD_GetModificationTimeOfFile(const char *filename) { struct stat st; int rv; #if _BSD_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED rv=lstat(filename, &st); #else rv=stat(filename, &st); #endif if (rv == -1) { DBG_INFO(NULL, "Error on stat(%s): %s", filename, strerror(errno)); return (time_t) 0; } return st.st_mtime; } /* code from https://stackoverflow.com/questions/152016/detecting-cpu-architecture-compile-time */ const char *GWBUILD_GetHostArch() { //Get current architecture, detectx nearly every architecture. Coded by Freak #if defined(__x86_64__) || defined(_M_X64) return "x86_64"; #elif defined(i386) || defined(__i386__) || defined(__i386) || defined(_M_IX86) return "x86_32"; #elif defined(__ARM_ARCH_2__) return "ARM2"; #elif defined(__ARM_ARCH_3__) || defined(__ARM_ARCH_3M__) return "ARM3"; #elif defined(__ARM_ARCH_4T__) || defined(__TARGET_ARM_4T) return "ARM4T"; #elif defined(__ARM_ARCH_5_) || defined(__ARM_ARCH_5E_) return "ARM5" #elif defined(__ARM_ARCH_6T2_) || defined(__ARM_ARCH_6T2_) return "ARM6T2"; #elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) return "ARM6"; #elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) return "ARM7"; #elif defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) return "ARM7A"; #elif defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) return "ARM7R"; #elif defined(__ARM_ARCH_7M__) return "ARM7M"; #elif defined(__ARM_ARCH_7S__) return "ARM7S"; #elif defined(__aarch64__) || defined(_M_ARM64) return "ARM64"; #elif defined(mips) || defined(__mips__) || defined(__mips) return "MIPS"; #elif defined(__sh__) return "SUPERH"; #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__POWERPC__) || defined(__ppc__) || defined(__PPC__) || defined(_ARCH_PPC) return "POWERPC"; #elif defined(__PPC64__) || defined(__ppc64__) || defined(_ARCH_PPC64) return "POWERPC64"; #elif defined(__sparc__) || defined(__sparc) return "SPARC"; #elif defined(__m68k__) return "M68K"; #else return "UNKNOWN"; #endif } const char *GWBUILD_GetHostSystem() { #if defined(__linux__) return "linux"; #elif defined(__sun) return "solaris"; #elif defined(__FreeBSD__) return "freebsd"; #elif defined(__NetBSD__) return "netbsd"; #elif defined(__OpenBSD__) return "openbsd"; #elif defined(__APPLE__) return "osx"; #elif defined(__hpux) return "hpux"; #elif defined(__osf__) return "tru64"; #elif defined(__sgi) return "irix"; #elif defined(_AIX) return "aix"; #elif defined(_WIN32) return "windows"; #else return "unknown"; #endif } const char *GWBUILD_GetArchFromTriplet(const char *sTriplet) { if (-1!=GWEN_Text_ComparePattern(sTriplet, "*x86_64*", 0)) return "x86_64"; else if (-1!=GWEN_Text_ComparePattern(sTriplet, "*i?86*", 0)) return "x86_32"; else return "unknown"; } const char *GWBUILD_GetSystemFromTriplet(const char *sTriplet) { if (-1!=GWEN_Text_ComparePattern(sTriplet, "*mingw*", 0)) return "windows"; else if (-1!=GWEN_Text_ComparePattern(sTriplet, "*linux*", 0)) return "linux"; else return "unknown"; } void GWBUILD_AddFilesFromStringList(GWB_FILE_LIST2 *mainFileList, const char *sFolder, const GWEN_STRINGLIST *fileNameList, GWB_FILE_LIST2 *outFileList, uint32_t flagsToAdd, int copyFileForOutList) { if (fileNameList) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(fileNameList); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { GWB_FILE *file; file=GWB_File_List2_GetOrCreateFile(mainFileList, sFolder, s); GWB_File_AddFlags(file, flagsToAdd); if (outFileList) { if (copyFileForOutList) GWB_File_List2_PushBack(outFileList, GWB_File_dup(file)); else GWB_File_List2_PushBack(outFileList, file); } } se=GWEN_StringListEntry_Next(se); } } } void _readBuilderDescrList(GWENBUILD *gwenbuild) { GWEN_BUFFER *nameBuf; nameBuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(nameBuf, BUILDERDATADIR GWEN_DIR_SEPARATOR_S); if (GWBUILD_GetTargetIsWindows(gwenbuild)) GWEN_Buffer_AppendString(nameBuf, "windows"); else GWEN_Buffer_AppendString(nameBuf, "posix"); gwenbuild->builderDescrList=GWB_GBuilderDescr_ReadAll(GWEN_Buffer_GetStart(nameBuf)); GWEN_Buffer_free(nameBuf); } GWB_BUILDER *_getBuilderByName(GWENBUILD *gwenbuild, GWB_CONTEXT *context, const char *builderName) { GWB_GBUILDER_DESCR *descr; GWEN_XMLNODE *xmlDescr; GWB_BUILDER *builder; if (gwenbuild->builderDescrList==NULL) _readBuilderDescrList(gwenbuild); descr=GWB_GBuilderDescr_List_GetByName(gwenbuild->builderDescrList, builderName); if (descr==NULL) { DBG_ERROR(NULL, "Builder \"%s\" not found", builderName); return NULL; } xmlDescr=GWEN_XMLNode_dup(GWB_GBuilderDescr_GetXmlDescr(descr)); builder=GWB_GenericBuilder_new(gwenbuild, context, xmlDescr); if (builder==NULL) { DBG_ERROR(NULL, "Error instantiating builder \"%s\"", builderName); return NULL; } return builder; } /* * -------------------------------------------------------------------------------------------- * Add new targets or known source types below. * -------------------------------------------------------------------------------------------- */ GWB_BUILDER *_genBuilderForSourceFile(GWENBUILD *gwenbuild, GWB_CONTEXT *context, GWB_FILE *file) { const char *builderName; const char *name; const char *ext; GWB_BUILDER *builder; name=GWB_File_GetName(file); if (!(name && *name)) { DBG_ERROR(NULL, "No file name."); return NULL; } ext=GWB_File_GetExt(file); if (ext==NULL) { DBG_DEBUG(NULL, "Unable to determine builder for source file \"%s\"", name); return NULL; } builderName=GWB_File_GetBuilder(file); if (!(builderName && *builderName)) { DBG_INFO(NULL, "Determining builder type for file \%s\"", name); if (strcasecmp(ext, ".c")==0) builderName="cbuilder"; else if (strcasecmp(ext, ".cpp")==0) builderName="cxxbuilder"; else if (strcasecmp(ext, ".t2d")==0 || strcasecmp(ext, ".xml")==0) builderName="tm2builder"; /* add more here */ else { DBG_DEBUG(NULL, "Unable to determine builder for source file \"%s\" (unhandled ext)", name); return NULL; } GWB_File_SetBuilder(file, builderName); } DBG_INFO(NULL, "Selected builder type is for file \%s\" is \"%s\"", name, builderName); builder=_getBuilderByName(gwenbuild, context, builderName); if (builder==NULL) { DBG_ERROR(NULL, "Could not create builder for type \"%s\"", ext); return NULL; } GWB_Builder_AddSourceFile(builder, file); return builder; } GWB_BUILDER *_genBuilderForTarget(GWB_PROJECT *project, GWB_TARGET *target) { GWB_BUILDER *builder=NULL; GWENBUILD *gwenbuild; gwenbuild=GWB_Project_GetGwbuild(project); switch(GWB_Target_GetTargetType(target)) { case GWBUILD_TargetType_Invalid: case GWBUILD_TargetType_None: break; case GWBUILD_TargetType_InstallLibrary: if (GWBUILD_GetFlags(gwenbuild) & GWENBUILD_FLAGS_STATIC) builder=_getBuilderByName(gwenbuild, GWB_Target_GetContext(target), "staticlib"); else builder=_getBuilderByName(gwenbuild, GWB_Target_GetContext(target), "sharedlib"); break; case GWBUILD_TargetType_ConvenienceLibrary: //builder=GWEN_TmpLibBuilder_new(gwenbuild, GWB_Target_GetContext(target)); builder=_getBuilderByName(gwenbuild, GWB_Target_GetContext(target), "tmplib"); break; case GWBUILD_TargetType_Program: builder=_getBuilderByName(gwenbuild, GWB_Target_GetContext(target), "app"); break; case GWBUILD_TargetType_CxxProgram: builder=_getBuilderByName(gwenbuild, GWB_Target_GetContext(target), "cxxapp"); break; case GWBUILD_TargetType_Objects: break; case GWBUILD_TargetType_Module: builder=_getBuilderByName(gwenbuild, GWB_Target_GetContext(target), "module"); break; case GWBUILD_TargetType_I18nCatalog: builder=_getBuilderByName(gwenbuild, GWB_Target_GetContext(target), "msgfmt"); break; case GWBUILD_TargetType_AvrHexFile: builder=_getBuilderByName(gwenbuild, GWB_Target_GetContext(target), "avrhexfile"); break; } if (builder==NULL) { DBG_ERROR(NULL, "Could not create builder for type \"%s\"", GWBUILD_TargetType_toString(GWB_Target_GetTargetType(target))); return NULL; } return builder; } gwenhywfar-5.12.0/tools/gwenbuild/types/context_p.h0000664000175000017500000000177414116666046017366 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_CONTEXT_P_H #define GWBUILD_CONTEXT_P_H #include "gwenbuild/types/context.h" struct GWB_CONTEXT { GWEN_TREE2_ELEMENT(GWB_CONTEXT) GWENBUILD *gwenbuild; char *initialSourceDir; char *currentRelativeDir; char *topBuildDir; char *topSourceDir; char *currentBuildDir; char *currentSourceDir; char *compilerFlags; char *linkerFlags; GWB_KEYVALUEPAIR_LIST *includeList; /* key=TYPE (e.g. tm2), value=includes */ GWB_KEYVALUEPAIR_LIST *defineList; GWEN_DB_NODE *vars; GWB_FILE_LIST2 *sourceFileList2; GWB_TARGET *currentTarget; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/types/keyvaluepair_p.h0000664000175000017500000000120414116666046020367 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_KEYVALUEPAIR_P_H #define GWBUILD_KEYVALUEPAIR_P_H #include "gwenbuild/types/keyvaluepair.h" struct GWB_KEYVALUEPAIR { GWEN_LIST_ELEMENT(GWB_KEYVALUEPAIR) char *key; char *value; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/types/file_p.h0000664000175000017500000000137014144206313016575 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_FILE_P_H #define GWBUILD_FILE_P_H #include "gwenbuild/types/file.h" struct GWB_FILE { char *folder; char *name; char *fileType; char *installPath; char *installName; char *builder; uint32_t id; uint32_t flags; GWB_BUILD_CMD_LIST2 *waitingBuildCmdList2; GWB_BUILD_CMD *buildCmd; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/types/context.c0000664000175000017500000003362714116666046017044 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/types/context_p.h" #include #include #include #include GWEN_TREE2_FUNCTIONS(GWB_CONTEXT, GWB_Context) static char *_combinedString(const char *string1, const char *string2, const char delim); static void _exportDbToXml(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode); GWB_CONTEXT *GWB_Context_new(GWENBUILD *gwenbuild) { GWB_CONTEXT *ctx; GWEN_NEW_OBJECT(GWB_CONTEXT, ctx); GWEN_TREE2_INIT(GWB_CONTEXT, ctx, GWB_Context); ctx->gwenbuild=gwenbuild; ctx->vars=GWEN_DB_Group_new("vars"); return ctx; } GWB_CONTEXT *GWB_Context_dup(const GWB_CONTEXT *originalCtx) { GWB_CONTEXT *ctx; GWEN_NEW_OBJECT(GWB_CONTEXT, ctx); GWEN_TREE2_INIT(GWB_CONTEXT, ctx, GWB_Context); ctx->gwenbuild=originalCtx->gwenbuild; ctx->currentTarget=originalCtx->currentTarget; if (originalCtx->initialSourceDir) ctx->initialSourceDir=strdup(originalCtx->initialSourceDir); if (originalCtx->currentRelativeDir) ctx->currentRelativeDir=strdup(originalCtx->currentRelativeDir); if (originalCtx->topBuildDir) ctx->topBuildDir=strdup(originalCtx->topBuildDir); if (originalCtx->topSourceDir) ctx->topSourceDir=strdup(originalCtx->topSourceDir); if (originalCtx->currentBuildDir) ctx->currentBuildDir=strdup(originalCtx->currentBuildDir); if (originalCtx->currentSourceDir) ctx->currentSourceDir=strdup(originalCtx->currentSourceDir); if (originalCtx->compilerFlags) ctx->compilerFlags=originalCtx->compilerFlags; if (originalCtx->linkerFlags) ctx->linkerFlags=originalCtx->linkerFlags; if (originalCtx->includeList) ctx->includeList=GWB_KeyValuePair_List_dup(originalCtx->includeList); if (originalCtx->defineList) ctx->defineList=GWB_KeyValuePair_List_dup(originalCtx->defineList); if (originalCtx->vars) ctx->vars=GWEN_DB_Group_dup(originalCtx->vars); return ctx; } void GWB_Context_free(GWB_CONTEXT *ctx) { if (ctx) { GWEN_TREE2_FINI(GWB_CONTEXT, ctx, GWB_Context); free(ctx->topBuildDir); free(ctx->topSourceDir); free(ctx->currentBuildDir); free(ctx->currentSourceDir); free(ctx->initialSourceDir); free(ctx->compilerFlags); free(ctx->linkerFlags); GWB_KeyValuePair_List_free(ctx->includeList); GWB_KeyValuePair_List_free(ctx->defineList); GWEN_DB_Group_free(ctx->vars); GWB_File_List2_free(ctx->sourceFileList2); GWEN_FREE_OBJECT(ctx); } } GWENBUILD *GWB_Context_GetGwenbuild(const GWB_CONTEXT *ctx) { return ctx->gwenbuild; } const char *GWB_Context_GetTopBuildDir(const GWB_CONTEXT *ctx) { return ctx->topBuildDir; } void GWB_Context_SetTopBuildDir(GWB_CONTEXT *ctx, const char *s) { if (ctx->topBuildDir) free(ctx->topBuildDir); if (s) ctx->topBuildDir=strdup(s); else ctx->topBuildDir=NULL; } void GWB_Context_InsertTopBuildDir(GWB_CONTEXT *ctx, const char *s) { char *newValue; newValue=_combinedString(s, ctx->topBuildDir, '/'); free(ctx->topBuildDir); ctx->topBuildDir=newValue; } const char *GWB_Context_GetTopSourceDir(const GWB_CONTEXT *ctx) { return ctx->topSourceDir; } void GWB_Context_SetTopSourceDir(GWB_CONTEXT *ctx, const char *s) { if (ctx->topSourceDir) free(ctx->topSourceDir); if (s) ctx->topSourceDir=strdup(s); else ctx->topSourceDir=NULL; } void GWB_Context_InsertTopSourceDir(GWB_CONTEXT *ctx, const char *s) { char *newValue; newValue=_combinedString(s, ctx->topSourceDir, '/'); free(ctx->topSourceDir); ctx->topSourceDir=newValue; } const char *GWB_Context_GetCurrentBuildDir(const GWB_CONTEXT *ctx) { return ctx->currentBuildDir; } void GWB_Context_SetCurrentBuildDir(GWB_CONTEXT *ctx, const char *s) { if (ctx->currentBuildDir) free(ctx->currentBuildDir); if (s) ctx->currentBuildDir=strdup(s); else ctx->currentBuildDir=NULL; } void GWB_Context_AddCurrentBuildDir(GWB_CONTEXT *ctx, const char *s) { char *newValue; newValue=_combinedString(ctx->currentBuildDir, s, '/'); free(ctx->currentBuildDir); ctx->currentBuildDir=newValue; } const char *GWB_Context_GetCurrentSourceDir(const GWB_CONTEXT *ctx) { return ctx->currentSourceDir; } void GWB_Context_AddCurrentSourceDir(GWB_CONTEXT *ctx, const char *s) { char *newValue; newValue=_combinedString(ctx->currentSourceDir, s, '/'); free(ctx->currentSourceDir); ctx->currentSourceDir=newValue; } void GWB_Context_InsertCurrentSourceDir(GWB_CONTEXT *ctx, const char *s) { char *newValue; newValue=_combinedString(s, ctx->currentSourceDir, '/'); free(ctx->currentSourceDir); ctx->currentSourceDir=newValue; } void GWB_Context_SetCurrentSourceDir(GWB_CONTEXT *ctx, const char *s) { if (ctx->currentSourceDir) free(ctx->currentSourceDir); if (s) ctx->currentSourceDir=strdup(s); else ctx->currentSourceDir=NULL; } const char *GWB_Context_GetCurrentRelativeDir(const GWB_CONTEXT *ctx) { return ctx->currentRelativeDir; } void GWB_Context_AddCurrentRelativeDir(GWB_CONTEXT *ctx, const char *s) { char *newValue; newValue=_combinedString(ctx->currentRelativeDir, s, '/'); free(ctx->currentRelativeDir); ctx->currentRelativeDir=newValue; } void GWB_Context_SetCurrentRelativeDir(GWB_CONTEXT *ctx, const char *s) { if (ctx->currentRelativeDir) free(ctx->currentRelativeDir); if (s) ctx->currentRelativeDir=strdup(s); else ctx->currentRelativeDir=NULL; } const char *GWB_Context_GetInitialSourceDir(const GWB_CONTEXT *ctx) { return ctx->initialSourceDir; } void GWB_Context_SetInitialSourceDir(GWB_CONTEXT *ctx, const char *s) { free(ctx->initialSourceDir); ctx->initialSourceDir=s?strdup(s):NULL; } const char *GWB_Context_GetCompilerFlags(const GWB_CONTEXT *ctx) { return ctx->compilerFlags; } void GWB_Context_SetCompilerFlags(GWB_CONTEXT *ctx, const char *s) { if (ctx->compilerFlags) free(ctx->compilerFlags); if (s) ctx->compilerFlags=strdup(s); else ctx->compilerFlags=NULL; } void GWB_Context_AddCompilerFlags(GWB_CONTEXT *ctx, const char *s) { char *newValue; newValue=_combinedString(ctx->compilerFlags, s, ' '); free(ctx->compilerFlags); ctx->compilerFlags=newValue; } const char *GWB_Context_GetLinkerFlags(const GWB_CONTEXT *ctx) { return ctx->linkerFlags; } void GWB_Context_SetLinkerFlags(GWB_CONTEXT *ctx, const char *s) { if (ctx->linkerFlags) free(ctx->linkerFlags); if (s) ctx->linkerFlags=strdup(s); else ctx->linkerFlags=NULL; } void GWB_Context_AddLinkerFlags(GWB_CONTEXT *ctx, const char *s) { char *newValue; newValue=_combinedString(ctx->linkerFlags, s, ' '); free(ctx->linkerFlags); ctx->linkerFlags=newValue; } GWB_KEYVALUEPAIR_LIST *GWB_Context_GetIncludeList(const GWB_CONTEXT *ctx) { return ctx->includeList; } void GWB_Context_AddInclude(GWB_CONTEXT *ctx, const char *genType, const char *incl) { if (genType && *genType &&incl && *incl) { GWB_KEYVALUEPAIR *kvp; if (ctx->includeList==NULL) ctx->includeList=GWB_KeyValuePair_List_new(); kvp=GWB_KeyValuePair_new(genType, incl); GWB_KeyValuePair_List_Add(kvp, ctx->includeList); } } void GWB_Context_ClearIncludeList(GWB_CONTEXT *ctx) { if (ctx->includeList==NULL) ctx->includeList=GWB_KeyValuePair_List_new(); else GWB_KeyValuePair_List_Clear(ctx->includeList); } GWB_KEYVALUEPAIR_LIST *GWB_Context_GetDefineList(const GWB_CONTEXT *ctx) { return ctx->defineList; } void GWB_Context_SetDefine(GWB_CONTEXT *ctx, const char *name, const char *value) { if (name && *name) { GWB_KEYVALUEPAIR *kvp; if (ctx->defineList==NULL) ctx->defineList=GWB_KeyValuePair_List_new(); kvp=GWB_KeyValuePair_List_GetFirstByKey(ctx->defineList, name); if (kvp) GWB_KeyValuePair_SetValue(kvp, value); else GWB_KeyValuePair_List_Add(GWB_KeyValuePair_new(name, value), ctx->defineList); } } void GWB_Context_ClearDefineList(GWB_CONTEXT *ctx) { if (ctx->defineList==NULL) ctx->defineList=GWB_KeyValuePair_List_new(); else GWB_KeyValuePair_List_Clear(ctx->defineList); } GWEN_DB_NODE *GWB_Context_GetVars(const GWB_CONTEXT *ctx) { return ctx->vars; } GWB_FILE_LIST2 *GWB_Context_GetSourceFileList2(const GWB_CONTEXT *ctx) { return ctx->sourceFileList2; } void GWB_Context_AddSourceFile(GWB_CONTEXT *ctx, GWB_FILE *f) { if (ctx->sourceFileList2==NULL) ctx->sourceFileList2=GWB_File_List2_new(); GWB_File_List2_PushBack(ctx->sourceFileList2, f); } void GWB_Context_ClearSourceFileList2(GWB_CONTEXT *ctx) { if (ctx->sourceFileList2==NULL) ctx->sourceFileList2=GWB_File_List2_new(); else GWB_File_List2_Clear(ctx->sourceFileList2); } GWB_TARGET *GWB_Context_GetCurrentTarget(const GWB_CONTEXT *ctx) { return ctx->currentTarget; } void GWB_Context_SetCurrentTarget(GWB_CONTEXT *ctx, GWB_TARGET *target) { ctx->currentTarget=target; } /* mindmap for my stupid brain... abcde abc 5 3 = 8 + 1 (blank) +1 (0) abcde abc = 9 + '0' 0123456789 */ char *_combinedString(const char *string1, const char *string2, const char delim) { if (string2 && *string2) { if (string1==NULL) return strdup(string2); else { int len1; int len2; char *newS; len1=strlen(string1); len2=strlen(string2); newS=(char*) malloc(len1+len2+2); /* blank plus trailing 0 */ assert(newS); memmove(newS, string1, len1); newS[len1]=delim; memmove(newS+len1+1, string2, len2); newS[len1+len2+1]=0; return newS; } } else { if (string1) return strdup(string1); return NULL; } } void GWB_Context_toXml(const GWB_CONTEXT *ctx, GWEN_XMLNODE *xmlNode, int withDb) { const GWB_CONTEXT *ctxChild; if (ctx->initialSourceDir) GWEN_XMLNode_SetCharValue(xmlNode, "initialSourceDir", ctx->initialSourceDir); if (ctx->currentRelativeDir) GWEN_XMLNode_SetCharValue(xmlNode, "currentRelativeDir", ctx->currentRelativeDir); if (ctx->topBuildDir) GWEN_XMLNode_SetCharValue(xmlNode, "topBuildDir", ctx->topBuildDir); if (ctx->topSourceDir) GWEN_XMLNode_SetCharValue(xmlNode, "topSourceDir", ctx->topSourceDir); if (ctx->currentBuildDir) GWEN_XMLNode_SetCharValue(xmlNode, "currentBuildDir", ctx->currentBuildDir); if (ctx->currentSourceDir) GWEN_XMLNode_SetCharValue(xmlNode, "currentSourceDir", ctx->currentSourceDir); if (ctx->compilerFlags) GWEN_XMLNode_SetCharValue(xmlNode, "compilerFlags", ctx->compilerFlags); if (ctx->linkerFlags) GWEN_XMLNode_SetCharValue(xmlNode, "linkerFlags", ctx->linkerFlags); if (ctx->includeList) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "includeList"); GWB_KeyValuePair_List_WriteXml(ctx->includeList, n, "Include"); GWEN_XMLNode_AddChild(xmlNode, n); } if (ctx->defineList) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "defineList"); GWB_KeyValuePair_List_WriteXml(ctx->defineList, n, "Define"); GWEN_XMLNode_AddChild(xmlNode, n); } if (withDb && ctx->vars) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Vars"); _exportDbToXml(ctx->vars, n); GWEN_XMLNode_AddChild(xmlNode, n); } ctxChild=GWB_Context_Tree2_GetFirstChild(ctx); if (ctxChild) { GWEN_XMLNODE *nTree; nTree=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Children"); while(ctxChild) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "Child"); GWB_Context_toXml(ctxChild, n, 0); /* only write db for root context */ GWEN_XMLNode_AddChild(nTree, n); ctxChild=GWB_Context_Tree2_GetNext(ctxChild); } GWEN_XMLNode_AddChild(xmlNode, nTree); } } void _exportDbToXml(GWEN_DB_NODE *db, GWEN_XMLNODE *xmlNode) { GWEN_BUFFER *dbuf; int rv; dbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_DB_WriteToBuffer(db, dbuf, GWEN_DB_FLAGS_DEFAULT); if (rv<0) { DBG_ERROR(NULL, "here (%d)", rv); GWEN_Buffer_free(dbuf); } else { GWEN_XMLNODE *xmlData; xmlData=GWEN_XMLNode_new(GWEN_XMLNodeTypeData, GWEN_Buffer_GetStart(dbuf)); GWEN_XMLNode_AddChild(xmlNode, xmlData); GWEN_Buffer_free(dbuf); } } void GWB_Context_Dump(const GWB_CONTEXT *ctx, int indent) { if (ctx) { int i; for(i=0; icurrentTarget)?GWB_Target_GetName(ctx->currentTarget):NULL, indent+2); GWBUILD_Debug_PrintValue("currentRelativeDir", ctx->currentRelativeDir, indent+2); GWBUILD_Debug_PrintValue("topBuildDir.......", ctx->topBuildDir, indent+2); GWBUILD_Debug_PrintValue("topSourceDir......", ctx->topSourceDir, indent+2); GWBUILD_Debug_PrintValue("currentBuildDir...", ctx->currentBuildDir, indent+2); GWBUILD_Debug_PrintValue("currentSourceDir..", ctx->currentSourceDir, indent+2); GWBUILD_Debug_PrintValue("compilerFlags.....", ctx->compilerFlags, indent+2); GWBUILD_Debug_PrintValue("linkerFlags.......", ctx->linkerFlags, indent+2); GWBUILD_Debug_PrintKvpList("includeList", ctx->includeList, indent+2); GWBUILD_Debug_PrintKvpList("defineList", ctx->defineList, indent+2); GWBUILD_Debug_PrintDb("vars", ctx->vars, indent+2); GWBUILD_Debug_PrintFileList2("sourceFileList2", ctx->sourceFileList2, indent+2); } } void GWB_Context_Tree2_Dump(const GWB_CONTEXT *ctx, int indent) { if (ctx) { const GWB_CONTEXT *childCtx; GWB_Context_Dump(ctx, indent); childCtx=GWB_Context_Tree2_GetFirstChild(ctx); while(childCtx) { GWB_Context_Tree2_Dump(childCtx, indent+2); childCtx=GWB_Context_Tree2_GetNext(childCtx); } } } gwenhywfar-5.12.0/tools/gwenbuild/types/Makefile.am0000664000175000017500000000117014125675316017234 00000000000000INCLUDES=@all_includes@ -I$(top_builddir) -I../ -I../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) DEFS=-DBUILDERDATADIR=\"$(datadir)/gwenhywfar/gwenbuild/builders\" noinst_LTLIBRARIES=libgwb_types.la libgwb_types_la_SOURCES=\ builder.c \ context.c \ file.c \ gwenbuild.c \ keyvaluepair.c \ target.c \ project.c \ option.c noinst_HEADERS=\ builder.h \ builder_be.h \ builder_p.h \ context.h \ context_p.h \ file.h \ file_p.h \ gwenbuild.h \ gwenbuild_p.h \ keyvaluepair.h \ keyvaluepair_p.h \ target.h \ target_p.h \ project.h \ project_p.h \ option.h \ option_p.h gwenhywfar-5.12.0/tools/gwenbuild/types/project.c0000664000175000017500000003202714125675316017017 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "gwenbuild/types/project_p.h" #include #include static void _writeFileFlagsToXml(uint32_t flags, GWEN_XMLNODE *xmlNode, const char *varName); /* static uint32_t _readFlagsFromChar(const char *flagsAsText); */ GWB_PROJECT *GWB_Project_new(GWENBUILD *gwbuild, GWB_CONTEXT *ctx) { GWB_PROJECT *project; GWEN_NEW_OBJECT(GWB_PROJECT, project); project->gwbuild=gwbuild; project->contextTree=ctx; project->fileList=GWB_File_List2_new(); project->targetList=GWB_Target_List2_new(); project->builderList=GWB_Builder_List2_new(); project->optionList=GWB_Option_List_new(); project->givenOptionList=GWB_KeyValuePair_List_new(); project->explicitBuildList=GWB_BuildCmd_List_new(); return project; } void GWB_Project_free(GWB_PROJECT *project) { if (project) { GWB_KeyValuePair_List_free(project->givenOptionList); GWB_Option_List_free(project->optionList); GWB_File_List2_free(project->fileList); GWB_Context_free(project->contextTree); GWB_Target_List2_free(project->targetList); GWB_Builder_List2_free(project->builderList); GWB_KeyValuePair_List_free(project->defineList); free(project->versionTag); GWB_BuildCmd_List_free(project->explicitBuildList); GWEN_FREE_OBJECT(project); } } GWENBUILD *GWB_Project_GetGwbuild(const GWB_PROJECT *project) { return project->gwbuild; } const char *GWB_Project_GetProjectName(const GWB_PROJECT *project) { return project->projectName; } void GWB_Project_SetProjectName(GWB_PROJECT *project, const char *s) { if (project->projectName) free(project->projectName); if (s) project->projectName=strdup(s); else project->projectName=NULL; } void GWB_Project_SetVersion(GWB_PROJECT *project, int vMajor, int vMinor, int vPatchlevel, int vBuild, const char *vTag) { project->versionMajor=vMajor; project->versionMinor=vMinor; project->versionPatchlevel=vPatchlevel; project->versionBuild=vBuild; free(project->versionTag); project->versionTag=vTag?strdup(vTag):NULL; } int GWB_Project_GetVersionMajor(const GWB_PROJECT *project) { return project->versionMajor; } int GWB_Project_GetVersionMinor(const GWB_PROJECT *project) { return project->versionMinor; } int GWB_Project_GetVersionPatchlevel(const GWB_PROJECT *project) { return project->versionPatchlevel; } int GWB_Project_GetVersionBuild(const GWB_PROJECT *project) { return project->versionBuild; } const char *GWB_Project_GetVersionTag(const GWB_PROJECT *project) { return project->versionTag; } void GWB_Project_SetSoVersion(GWB_PROJECT *project, int vCurrent, int vAge, int vRevision) { project->soVersionCurrent=vCurrent; project->soVersionAge=vAge; project->soVersionRevision=vRevision; } int GWB_Project_GetSoVersionCurrent(const GWB_PROJECT *project) { return project->soVersionCurrent; } int GWB_Project_GetSoVersionAge(const GWB_PROJECT *project) { return project->soVersionAge; } int GWB_Project_GetSoVersionRevision(const GWB_PROJECT *project) { return project->soVersionRevision; } uint32_t GWB_Project_GetFlags(const GWB_PROJECT *project) { return project->flags; } void GWB_Project_SetFlags(GWB_PROJECT *project, uint32_t fl) { project->flags=fl; } void GWB_Project_AddFlags(GWB_PROJECT *project, uint32_t fl) { project->flags|=fl; } void GWB_Project_DelFlags(GWB_PROJECT *project, uint32_t fl) { project->flags&=~fl; } GWB_FILE_LIST2 *GWB_Project_GetFileList(const GWB_PROJECT *project) { return project->fileList; } GWB_FILE *GWB_Project_GetFileByPathAndName(const GWB_PROJECT *project, const char *folder, const char *fname) { return GWB_File_List2_GetFileByPathAndName(project->fileList, folder, fname); } void GWB_Project_AddFile(GWB_PROJECT *project, GWB_FILE *file) { GWB_File_List2_PushBack(project->fileList, file); } GWB_CONTEXT *GWB_Project_GetRootContext(const GWB_PROJECT *project) { return project->contextTree; } GWB_TARGET_LIST2 *GWB_Project_GetTargetList(const GWB_PROJECT *project) { return project->targetList; } void GWB_Project_AddTarget(GWB_PROJECT *project, GWB_TARGET *target) { GWB_Target_List2_PushBack(project->targetList, target); } GWB_TARGET *GWB_Project_GetTargetById(const GWB_PROJECT *project, const char *id) { if (project->targetList) { GWB_TARGET_LIST2_ITERATOR *it; it=GWB_Target_List2_First(project->targetList); if (it) { GWB_TARGET *target; target=GWB_Target_List2Iterator_Data(it); while(target) { const char *s; s=GWB_Target_GetId(target); if (s && strcasecmp(s, id)==0) break; target=GWB_Target_List2Iterator_Next(it); } GWB_Target_List2Iterator_free(it); if (target) return target; } } return NULL; } GWB_BUILDER_LIST2 *GWB_Project_GetBuilderList(const GWB_PROJECT *project) { return project->builderList; } void GWB_Project_AddBuilder(GWB_PROJECT *project, GWB_BUILDER *builder) { GWB_Builder_List2_PushBack(project->builderList, builder); } GWB_KEYVALUEPAIR_LIST *GWB_Project_GetDefineList(const GWB_PROJECT *project) { return project->defineList; } void GWB_Project_SetDefine(GWB_PROJECT *project, const char *name, const char *value) { if (name && *name) { GWB_KEYVALUEPAIR *kvp; if (project->defineList==NULL) project->defineList=GWB_KeyValuePair_List_new(); kvp=GWB_KeyValuePair_List_GetFirstByKey(project->defineList, name); if (kvp) GWB_KeyValuePair_SetValue(kvp, value); else GWB_KeyValuePair_List_Add(GWB_KeyValuePair_new(name, value), project->defineList); } } void GWB_Project_SetDefineQuoted(GWB_PROJECT *project, const char *name, const char *value) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dbuf, "\""); if (value && *value) GWEN_Buffer_AppendString(dbuf, value); GWEN_Buffer_AppendString(dbuf, "\""); GWB_Project_SetDefine(project, name, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } void GWB_Project_ClearDefineList(GWB_PROJECT *project) { if (project->defineList==NULL) project->defineList=GWB_KeyValuePair_List_new(); else GWB_KeyValuePair_List_Clear(project->defineList); } GWB_OPTION_LIST *GWB_Project_GetOptionList(const GWB_PROJECT *project) { return project->optionList; } void GWB_Project_AddOption(GWB_PROJECT *project, GWB_OPTION *option) { GWB_Option_List_Add(option, project->optionList); } GWB_OPTION *GWB_Project_GetOptionById(const GWB_PROJECT *project, const char *optionId) { GWB_OPTION *option; option=GWB_Option_List_First(project->optionList); while(option) { const char *sName; sName=GWB_Option_GetId(option); if (sName && strcasecmp(sName, optionId)==0) return option; option=GWB_Option_List_Next(option); } return NULL; } GWB_KEYVALUEPAIR_LIST *GWB_Project_GetGivenOptionList(const GWB_PROJECT *project) { return project->givenOptionList; } void GWB_Project_SetGivenOptionList(GWB_PROJECT *project, GWB_KEYVALUEPAIR_LIST *kvpList) { GWB_KeyValuePair_List_free(project->givenOptionList); project->givenOptionList=kvpList; } void GWB_Project_SetGivenOption(GWB_PROJECT *project, const char *name, const char *value) { GWB_KEYVALUEPAIR *kvp; kvp=GWB_KeyValuePair_new(name, value); GWB_KeyValuePair_List_Add(kvp, project->givenOptionList); } const char *GWB_Project_GetGivenOption(const GWB_PROJECT *project, const char *name) { return GWB_KeyValuePair_List_GetValue(project->givenOptionList, name); } GWB_BUILD_CMD_LIST *GWB_Project_GetExplicitBuildList(const GWB_PROJECT *project) { return project->explicitBuildList; } void GWB_Project_AddExplicitBuild(GWB_PROJECT *project, GWB_BUILD_CMD *bcmd) { GWB_BuildCmd_List_Add(bcmd, project->explicitBuildList); } void GWB_Project_toXml(const GWB_PROJECT *project, GWEN_XMLNODE *xmlNode) { if (project->projectName) GWEN_XMLNode_SetCharValue(xmlNode, "projectName", project->projectName); GWEN_XMLNode_SetIntValue(xmlNode, "versionMajor", project->versionMajor); GWEN_XMLNode_SetIntValue(xmlNode, "versionMinor", project->versionMinor); GWEN_XMLNode_SetIntValue(xmlNode, "versionPatchlevel", project->versionPatchlevel); GWEN_XMLNode_SetIntValue(xmlNode, "versionBuild", project->versionBuild); if (project->versionTag) GWEN_XMLNode_SetCharValue(xmlNode, "versionTag", project->versionTag); GWEN_XMLNode_SetIntValue(xmlNode, "soVersionCurrent", project->soVersionCurrent); GWEN_XMLNode_SetIntValue(xmlNode, "soVersionAge", project->soVersionAge); GWEN_XMLNode_SetIntValue(xmlNode, "soVersionRevision", project->soVersionRevision); _writeFileFlagsToXml(GWB_Project_GetFlags(project), xmlNode, "flags"); if (project->defineList) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "DefineList"); GWB_KeyValuePair_List_WriteXml(project->defineList, n, "Define"); GWEN_XMLNode_AddChild(xmlNode, n); } if (project->givenOptionList) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "GivenOptionList"); GWB_KeyValuePair_List_WriteXml(project->givenOptionList, n, "GivenOption"); GWEN_XMLNode_AddChild(xmlNode, n); } if (project->explicitBuildList) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "ExplicitBuildCmdList"); GWB_BuildCmd_List_WriteXml(project->explicitBuildList, n, "BuildCmd"); GWEN_XMLNode_AddChild(xmlNode, n); } if (project->fileList) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "FileList"); GWB_File_List2_WriteXml(project->fileList, n, "File"); GWEN_XMLNode_AddChild(xmlNode, n); } } void _writeFileFlagsToXml(uint32_t flags, GWEN_XMLNODE *xmlNode, const char *varName) { if (flags) { GWEN_BUFFER *dbuf; dbuf=GWEN_Buffer_new(0, 256, 0, 1); if (flags & GWB_PROJECT_FLAGS_SHARED) { if (GWEN_Buffer_GetUsedBytes(dbuf)) GWEN_Buffer_AppendString(dbuf, " "); GWEN_Buffer_AppendString(dbuf, "SHARED"); } if (flags & GWB_PROJECT_FLAGS_CONFIG_H) { if (GWEN_Buffer_GetUsedBytes(dbuf)) GWEN_Buffer_AppendString(dbuf, " "); GWEN_Buffer_AppendString(dbuf, "CONFIG_H"); } if (GWEN_Buffer_GetUsedBytes(dbuf)) GWEN_XMLNode_SetCharValue(xmlNode, varName, GWEN_Buffer_GetStart(dbuf)); GWEN_Buffer_free(dbuf); } } #if 0 uint32_t _readFlagsFromChar(const char *flagsAsText) { GWEN_STRINGLIST *sl; uint32_t flags=0; sl=GWEN_StringList_fromString(flagsAsText, " ", 1); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while(se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { if (strcasecmp(s, "SHARED")==0) flags|=GWB_PROJECT_FLAGS_SHARED; else if (strcasecmp(s, "CONFIG_H")==0) flags|=GWB_PROJECT_FLAGS_CONFIG_H; else { DBG_ERROR(NULL, "Unexpected PROJECT flag \"%s\"", s); } } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } return flags; } #endif void GWB_Project_Dump(const GWB_PROJECT *project, int indent, int fullDump) { int i; for(i=0; iprojectName, indent+2); GWBUILD_Debug_PrintIntValue("versionMajor.....", project->versionMajor, indent+2); GWBUILD_Debug_PrintIntValue("versionMinor.....", project->versionMinor, indent+2); GWBUILD_Debug_PrintIntValue("versionPatchlevel", project->versionPatchlevel, indent+2); GWBUILD_Debug_PrintIntValue("versionBuild.....", project->versionBuild, indent+2); GWBUILD_Debug_PrintValue( "versionTag.......", project->versionTag, indent+2); GWBUILD_Debug_PrintIntValue("soVersionCurrent.", project->soVersionCurrent, indent+2); GWBUILD_Debug_PrintIntValue("soVersionAge.....", project->soVersionAge, indent+2); GWBUILD_Debug_PrintIntValue("soVersionRevision", project->soVersionRevision, indent+2); for(i=0; iflags & GWB_PROJECT_FLAGS_SHARED) fprintf(stderr, " SHARED"); fprintf(stderr, "\n"); GWB_Context_Tree2_Dump(project->contextTree, indent+2); GWBUILD_Debug_PrintFileList2("fileList", project->fileList, indent+2); GWBUILD_Debug_PrintTargetList2("targetList", project->targetList, indent+2, fullDump); GWBUILD_Debug_PrintKvpList("defineList", project->defineList, indent+2); GWBUILD_Debug_PrintKvpList("givenOptionList", project->givenOptionList, indent+2); GWBUILD_Debug_PrintBuilderList2("builderList", project->builderList, indent+2, fullDump); GWBUILD_Debug_PrintOptionList("optionList", project->optionList, indent+2); } gwenhywfar-5.12.0/tools/gwenbuild/types/keyvaluepair.h0000664000175000017500000000604014116666046020053 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_KEYVALUEPAIR_H #define GWBUILD_KEYVALUEPAIR_H #include #include #include typedef struct GWB_KEYVALUEPAIR GWB_KEYVALUEPAIR; GWEN_LIST_FUNCTION_DEFS(GWB_KEYVALUEPAIR, GWB_KeyValuePair) GWB_KEYVALUEPAIR *GWB_KeyValuePair_new(const char *key, const char *value); GWB_KEYVALUEPAIR *GWB_KeyValuePair_dup(const GWB_KEYVALUEPAIR *originalKvp); void GWB_KeyValuePair_free(GWB_KEYVALUEPAIR *kvp); const char *GWB_KeyValuePair_GetKey(const GWB_KEYVALUEPAIR *kvp); void GWB_KeyValuePair_SetKey(GWB_KEYVALUEPAIR *kvp, const char *s); const char *GWB_KeyValuePair_GetValue(const GWB_KEYVALUEPAIR *kvp); void GWB_KeyValuePair_SetValue(GWB_KEYVALUEPAIR *kvp, const char *s); GWB_KEYVALUEPAIR_LIST *GWB_KeyValuePair_List_dup(const GWB_KEYVALUEPAIR_LIST *kvpList); const char *GWB_KeyValuePair_List_GetValue(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key); GWB_KEYVALUEPAIR *GWB_KeyValuePair_List_GetFirstByKey(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key); GWB_KEYVALUEPAIR *GWB_KeyValuePair_List_GetNextByKey(const GWB_KEYVALUEPAIR *kvp, const char *key); int GWB_KeyValuePair_List_SampleValuesByKey(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *key, const char *prefix, const char *delim, GWEN_BUFFER *destBuf); /** * Adds all key-value-pairs to the given buffer. * * If you want to use the given key-value-pairs as DEFINEs for a compiler input you can set the following values * to the arguments: prefix="-D" assignmentString="=" delim=" " (space), resulting in "-DKEY1=VALUE1 -DKEY2=VALUE2". * * @return number of entries added to the buffer * @param kvpList list of key-value-pairs to add * @param prefix string to prepend before adding each key-value-pair * @param assignmentString assignment chars (e.g. "=", ":=" etc) * @param delim delimiter between each pair * @param destBuf buffer to write to */ int GWB_KeyValuePair_List_WriteAllPairsToBuffer(const GWB_KEYVALUEPAIR_LIST *kvpList, const char *prefix, const char *assignmentString, const char *delim, GWEN_BUFFER *destBuf); void GWB_KeyValuePair_toXml(const GWB_KEYVALUEPAIR *kvp, GWEN_XMLNODE *xmlNode); void GWB_KeyValuePair_List_WriteXml(const GWB_KEYVALUEPAIR_LIST *kvpList, GWEN_XMLNODE *xmlNode, const char *groupName); #endif gwenhywfar-5.12.0/tools/gwenbuild/types/builder_p.h0000664000175000017500000000167714116666046017332 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_BUILDER_P_H #define GWBUILD_BUILDER_P_H #include "gwenbuild/types/builder_be.h" struct GWB_BUILDER { GWEN_INHERIT_ELEMENT(GWB_BUILDER) uint32_t id; char *typeName; char *targetLinkSpec; GWENBUILD *gwenbuild; GWB_CONTEXT *context; GWB_FILE_LIST2 *inputFileList2; GWB_FILE_LIST2 *outputFileList2; int numBlockingInputFiles; GWEN_BUILDER_ISACCEPTABLEINPUT_FN isAcceptableInputFn; GWEN_BUILDER_ADDBUILDCMD_FN addBuildCmdFn; GWB_BUILDER_ADDSOURCEFILE_FN addSourceFileFn; }; #endif gwenhywfar-5.12.0/tools/gwenbuild/c_setup.h0000664000175000017500000000114014116666046015644 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_C_SETUP_H #define GWBUILD_C_SETUP_H #include int GWB_Setup(GWEN_DB_NODE *dbArgs); int GWB_RepeatLastSetup(const char *fileName); #endif gwenhywfar-5.12.0/tools/gwenbuild/templates/0000775000175000017500000000000014730345122016102 500000000000000gwenhywfar-5.12.0/tools/gwenbuild/templates/project.tmpl0000664000175000017500000000762714116666046020413 00000000000000 $(project_name) $(project_vmajor).$(project_vminor).$(project_vpatchlevel) $(project_vmajor).$(project_vminor).$(project_vpatchlevel).$(project_vbuild)$(project_vtag) $(option_prefix) $(option_prefix)/etc $(option_prefix)/bin $(option_prefix)/lib $(option_prefix)/include $(option_prefix)/share $(option_prefix)/share/locale $(libdir)/$(package) $(includedir)/$(package) $(datadir)/$(package) -fvisibility=hidden -fvisibility=hidden locale.h libintl.h iconv.h setlocale memmove memset strcasecmp strdup strerror snprintf src gwenhywfar-5.12.0/tools/gwenbuild/templates/Makefile.in0000664000175000017500000005050614730344662020105 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 = tools/gwenbuild/templates ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_templatedata_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h 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)$(templatedatadir)" DATA = $(dist_templatedata_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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ templatedatadir = $(datadir)/gwenbuild/templates dist_templatedata_DATA = \ project.tmpl \ convlib.tmpl \ module.tmpl 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) --gnu tools/gwenbuild/templates/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gwenbuild/templates/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_templatedataDATA: $(dist_templatedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_templatedata_DATA)'; test -n "$(templatedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(templatedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(templatedatadir)" || 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)$(templatedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(templatedatadir)" || exit $$?; \ done uninstall-dist_templatedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_templatedata_DATA)'; test -n "$(templatedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(templatedatadir)'; $(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)$(templatedatadir)"; 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 clean-libtool 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-dist_templatedataDATA 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 mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_templatedataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_templatedataDATA 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 \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_templatedataDATA .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: gwenhywfar-5.12.0/tools/gwenbuild/templates/Makefile.am0000664000175000017500000000017314144206313020054 00000000000000 templatedatadir=$(datadir)/gwenbuild/templates dist_templatedata_DATA=\ project.tmpl \ convlib.tmpl \ module.tmpl gwenhywfar-5.12.0/tools/gwenbuild/templates/module.tmpl0000664000175000017500000000254714144206313020212 00000000000000 $(gwenhywfar_cflags) -I$(topsrcdir)/src -I$(topbuilddir)/src -I$(topsrcdir) -I$(topbuilddir) -I$(builddir) --include=$(gwenhywfar_dir)/share/gwenhywfar/typemaker2/c --include=$(builddir) $(visibility_cflags) --api=CHIPCARD_API $(local/built_headers_pub) $(local/built_headers_priv) ddvcard_p.h $(local/typefiles) ddvcard.c ddvcard.xml chipcard $(gwenhywfar_libs) gwenhywfar-5.12.0/tools/gwenbuild/templates/convlib.tmpl0000664000175000017500000000247114116666046020371 00000000000000 $(gmp_cflags) $(gwenhywfar_cflags) -I$(builddir) -I$(srcdir) -I$(builddir)/.. -I$(srcdir)/.. -I$(topsrcdir)/src/libs -I$(topbuilddir)/src/libs -I$(topbuilddir) -I$(topsrcdir) --include=$(topsrcdir)/src/libs/aqbanking/typemaker2/c --include=$(topbuilddir)/src/libs/aqbanking/typemaker2/c --include=$(builddir) --include=$(srcdir) $(visibility_cflags) --api=AQBANKING_API $(local/built_headers_pub) $(local/typefiles) gwenhywfar-5.12.0/tools/gwenbuild/filenames.h0000664000175000017500000000163714144206312016143 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_C_FILENAMES_H #define GWBUILD_C_FILENAMES_H #define GWBUILD_FILE_BUILDFILES ".gwbuild.buildfiles" #define GWBUILD_FILE_CTX ".gwbuild.ctx" #define GWBUILD_FILE_FILES ".gwbuild.files" #define GWBUILD_FILE_PROJECTINFO ".gwbuild.projectinfo" #define GWBUILD_FILE_PROJECT ".gwbuild.project" #define GWBUILD_FILE_INSTALLFILES ".gwbuild.installfiles" #define GWBUILD_FILE_ARGS ".gwbuild.args" #define GWBUILD_FILE_CTXTREE ".gwbuild.ctxtree" #endif gwenhywfar-5.12.0/tools/gwenbuild/c_clean.h0000664000175000017500000000105514116666046015573 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_C_CLEAN_H #define GWBUILD_C_CLEAN_H #include int GWB_Clean(const char *fname); #endif gwenhywfar-5.12.0/tools/gwenbuild/c_prepare.c0000664000175000017500000000256614144206312016135 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "c_prepare.h" #include "c_setup.h" #include "utils.h" #include "gwenbuild/buildctx/buildctx_xml.h" #include "gwenbuild/buildctx/buildctx_run.h" #include "gwenbuild/filenames.h" #include int GWB_Prepare(GWEN_UNUSED GWEN_DB_NODE *dbArgs) { GWB_BUILD_CONTEXT *buildCtx; int rv; if (GWB_Utils_BuildFilesChanged(GWBUILD_FILE_BUILDFILES)) { fprintf(stdout, "Build files changed, repeating last setup command.\n"); rv=GWB_RepeatLastSetup(GWBUILD_FILE_ARGS); if (rv<0) { DBG_INFO(NULL, "here"); return rv; } } buildCtx=GWB_BuildCtx_ReadFromXmlFile(GWBUILD_FILE_CTX); if (buildCtx==NULL) { fprintf(stderr, "ERROR: Error reading build context from file.\n"); return 1; } /* prepare */ rv=GWB_BuildCtx_Run(buildCtx, 10, 1, NULL); if (rv<0) { fprintf(stderr, "ERROR: Error preparing builds.\n"); return 2; } return 0; } gwenhywfar-5.12.0/tools/gwenbuild/c_build.h0000664000175000017500000000106014116666046015604 00000000000000/*************************************************************************** begin : Mon Feb 08 2021 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GWBUILD_C_BUILD_H #define GWBUILD_C_BUILD_H #include int GWB_Build(GWEN_DB_NODE *dbArgs); #endif gwenhywfar-5.12.0/tools/typemaker/0000775000175000017500000000000014730345121014124 500000000000000gwenhywfar-5.12.0/tools/typemaker/code_c.c0000644000175000017500000027144213606364433015444 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "args.h" #include "typemaker_p.h" #include #include #include #include #include #include #include #include #include #include #include #include int write_c_enums(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(node, "subtypes", 0, 0); if (n) n=GWEN_XMLNode_FindFirstTag(n, "type", "mode", "enum"); if (n) { GWEN_BUFFER *tprefix; GWEN_BUFFER *tid; uint32_t ppos; uint32_t tpos; const char *s; tprefix=GWEN_Buffer_new(0, 64, 0, 1); tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_Buffer_AppendString(tprefix, "_"); ppos=GWEN_Buffer_GetPos(tprefix); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); tpos=GWEN_Buffer_GetPos(tid); while (n) { GWEN_XMLNODE *nn; s=GWEN_XMLNode_GetProperty(n, "access", "public"); s=GWEN_XMLNode_GetProperty(n, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); s=GWEN_XMLNode_GetProperty(n, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteLine(sio, "_fromString(const char *s) {"); GWEN_SyncIo_WriteLine(sio, " if (s) {"); nn=GWEN_XMLNode_FindFirstTag(n, "values", 0, 0); if (nn) nn=GWEN_XMLNode_FindFirstTag(nn, "value", 0, 0); if (nn) { uint32_t vpos; int first=1; vpos=GWEN_Buffer_GetPos(tprefix); while (nn) { GWEN_XMLNODE *nnn; nnn=GWEN_XMLNode_GetFirstData(nn); if (!nnn) { DBG_ERROR(0, "No values in enum description for \"%s\"", GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); GWEN_Buffer_free(tprefix); return -1; } if (first) GWEN_SyncIo_WriteString(sio, " if (strcasecmp(s, \""); else GWEN_SyncIo_WriteString(sio, " else if (strcasecmp(s, \""); s=GWEN_XMLNode_GetData(nnn); assert(s); GWEN_SyncIo_WriteString(sio, s); GWEN_SyncIo_WriteLine(sio, "\")==0)"); GWEN_SyncIo_WriteString(sio, " return "); GWEN_Buffer_AppendByte(tprefix, toupper(*s)); GWEN_Buffer_AppendString(tprefix, s+1); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_Buffer_Crop(tprefix, 0, vpos); GWEN_Buffer_SetPos(tprefix, vpos); first=0; nn=GWEN_XMLNode_FindNextTag(nn, "value", 0, 0); } } GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteString(sio, " return "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteLine(sio, "Unknown;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "const char *"); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteString(sio, "_toString("); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_SyncIo_WriteLine(sio, " v) {"); GWEN_SyncIo_WriteLine(sio, " switch(v) {"); nn=GWEN_XMLNode_FindFirstTag(n, "values", 0, 0); if (nn) nn=GWEN_XMLNode_FindFirstTag(nn, "value", 0, 0); if (nn) { uint32_t vpos; vpos=GWEN_Buffer_GetPos(tprefix); while (nn) { GWEN_XMLNODE *nnn; nnn=GWEN_XMLNode_GetFirstData(nn); if (!nnn) { DBG_ERROR(0, "No values in enum description for \"%s\"", GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); GWEN_Buffer_free(tprefix); return -1; } s=GWEN_XMLNode_GetData(nnn); assert(s); GWEN_Buffer_AppendByte(tprefix, toupper(*s)); GWEN_Buffer_AppendString(tprefix, s+1); GWEN_SyncIo_WriteString(sio, " case "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteLine(sio, ":"); GWEN_SyncIo_WriteString(sio, " return \""); GWEN_SyncIo_WriteString(sio, s); GWEN_SyncIo_WriteLine(sio, "\";"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_Buffer_Crop(tprefix, 0, vpos); GWEN_Buffer_SetPos(tprefix, vpos); nn=GWEN_XMLNode_FindNextTag(nn, "value", 0, 0); } } GWEN_SyncIo_WriteLine(sio, " default:"); GWEN_SyncIo_WriteLine(sio, " return \"unknown\";"); GWEN_SyncIo_WriteLine(sio, " } /* switch */"); GWEN_SyncIo_WriteLine(sio, "} "); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); GWEN_Buffer_Crop(tprefix, 0, ppos); GWEN_Buffer_Crop(tid, 0, tpos); n=GWEN_XMLNode_FindNextTag(n, "type", "mode", "enum"); } /* while n */ GWEN_Buffer_free(tid); GWEN_Buffer_free(tprefix); } /* if enum types found */ return 0; } int write_code_freeElem_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *typ; const char *name; int doCopy; int takeOver; int err; if (atoi(get_property(node, "ptr", "0"))==0) return 0; doCopy=atoi(GWEN_XMLNode_GetProperty(node, "copy", "1")); takeOver=atoi(GWEN_XMLNode_GetProperty(node, "takeOver", "0")); if (!doCopy && !takeOver) return 0; typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No type for element"); return -1; } err=GWEN_SyncIo_WriteString(sio, " if (st->"); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteString(sio, name); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteLine(sio, ")"); if (err) { DBG_ERROR_ERR(0, err); return -1; } if (strcmp(typ, "char")==0) { /* we can handle chars */ err=GWEN_SyncIo_WriteString(sio, " free(st->"); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteString(sio, name); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteLine(sio, ");"); if (err) { DBG_ERROR_ERR(0, err); return -1; } return 0; } else { const char *fname; fname=get_function_name(node, "free"); if (fname) { err=GWEN_SyncIo_WriteString(sio, " "); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteString(sio, fname); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteString(sio, "(st->"); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteString(sio, name); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteLine(sio, ");"); if (err) { DBG_ERROR_ERR(0, err); return -1; } return 0; } } DBG_ERROR(0, "Unknown \"free\" function for type \"%s\"", typ); return -1; } int write_code_freeElems_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { if (GWEN_XMLNode_GetType(node)==GWEN_XMLNodeTypeTag) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(node); while (n) { int rv; if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) rv=write_code_freeElems_c(args, n, sio); else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { rv=write_code_freeElem_c(args, n, sio); } else { rv=0; } if (rv) return rv; n=GWEN_XMLNode_GetNextTag(n); } /* while */ } return 0; } int write_code_dupArg_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *param) { const char *typ; const char *name; int err; typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No type for element"); return -1; } if (strcmp(typ, "char")==0) { /* we can handle chars */ err=GWEN_SyncIo_WriteString(sio, "strdup("); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteString(sio, param); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteLine(sio, ");"); if (err) { DBG_ERROR_ERR(0, err); return -1; } return 0; } else { const char *fname; fname=get_function_name(node, "dup"); if (!fname) { DBG_ERROR(0, "No dup function set for type %s", typ); return -1; } err=GWEN_SyncIo_WriteString(sio, fname); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteString(sio, "("); err=GWEN_SyncIo_WriteString(sio, param); if (err) { DBG_ERROR_ERR(0, err); return -1; } err=GWEN_SyncIo_WriteLine(sio, ");"); if (err) { DBG_ERROR_ERR(0, err); return -1; } return 0; } DBG_ERROR(0, "Unknown \"dup\" function for type \"%s\"", typ); return -1; } int write_code_todbArg_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *btype; const char *typ; const char *name; const char *mode; int isPtr; isPtr=atoi(get_property(node, "ptr", "0")); name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } /* "single" as opposed to "list" or "list2" */ mode=GWEN_XMLNode_GetProperty(node, "mode", "single"); if (strcasecmp(mode, "list")==0 || strcasecmp(mode, "list2")==0) /* all list modes operate on pointers */ isPtr=1; typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } if (isPtr) { const char *fname; fname=get_function_name(node, "todb"); if (fname) { GWEN_SyncIo_WriteString(sio, " if ("); GWEN_SyncIo_WriteString(sio, fname); GWEN_SyncIo_WriteString(sio, "(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, ", GWEN_DB_GetGroup(db, " "GWEN_DB_FLAGS_DEFAULT, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\")))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); } else { if (strcasecmp(typ, "char")==0) { GWEN_SyncIo_WriteString(sio, " if (GWEN_DB_SetCharValue(db, " "GWEN_DB_FLAGS_OVERWRITE_VARS, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); } else if (strcasecmp(typ, "GWEN_STRINGLIST")==0) { GWEN_SyncIo_WriteLine(sio, " {"); GWEN_SyncIo_WriteLine(sio, " GWEN_STRINGLISTENTRY *se;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " GWEN_DB_DeleteVar(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteString(sio, " se=GWEN_StringList_FirstEntry(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ");"); GWEN_SyncIo_WriteLine(sio, " while(se) {"); GWEN_SyncIo_WriteLine(sio, " const char *s;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, " s=GWEN_StringListEntry_Data(se);"); GWEN_SyncIo_WriteLine(sio, " assert(s);"); GWEN_SyncIo_WriteString(sio, " if (GWEN_DB_SetCharValue(db, " "GWEN_DB_FLAGS_DEFAULT, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\", s))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); GWEN_SyncIo_WriteLine(sio, " se=GWEN_StringListEntry_Next(se);"); GWEN_SyncIo_WriteLine(sio, " } /* while */"); GWEN_SyncIo_WriteLine(sio, " }"); } else if (strcasecmp(mode, "list")==0) { const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; /* create list code */ elemType=GWEN_XMLNode_GetProperty(node, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(node, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteLine(sio, " if (1) {"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT;"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT=GWEN_DB_GetGroup(db, " "GWEN_PATH_FLAGS_CREATE_GROUP, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " assert(dbT);"); /* e=ElemType_List_First(st->name) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List_First(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ");"); /* while (e) */ GWEN_SyncIo_WriteLine(sio, " while(e) {"); /* handle element type */ GWEN_SyncIo_WriteString(sio, " if ("); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_toDb(e, "); GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetGroup(dbT, " "GWEN_PATH_FLAGS_CREATE_GROUP, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\")))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); /* e=ElemType_List_Next(e) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List_Next(e);"); GWEN_SyncIo_WriteLine(sio, " } /* while */"); GWEN_SyncIo_WriteLine(sio, " } /* if (1) */"); } else if (strcasecmp(mode, "list2")==0) { const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; /* create list2 code */ elemType=GWEN_XMLNode_GetProperty(node, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(node, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteLine(sio, " if (1) {"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT;"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, "_LIST2_ITERATOR *it;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT=GWEN_DB_GetGroup(db, " "GWEN_PATH_FLAGS_CREATE_GROUP, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " assert(dbT);"); /* it=ElemType_List2_First(st->name) */ GWEN_SyncIo_WriteString(sio, " it="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List2_First(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ");"); /* if (it) */ GWEN_SyncIo_WriteLine(sio, " if (it) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); /* e=ElemType_List2Iterator_Data(it) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2Iterator_Data(it);"); GWEN_SyncIo_WriteString(sio, " assert(e);"); /* while (e) */ GWEN_SyncIo_WriteLine(sio, " while(e) {"); /* handle element type */ GWEN_SyncIo_WriteString(sio, " if ("); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_toDb(e, "); GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetGroup(dbT, " "GWEN_PATH_FLAGS_CREATE_GROUP, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\")))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); /* e=ElemType_List2Iterator_Next(it) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2Iterator_Next(it);"); GWEN_SyncIo_WriteLine(sio, " } /* while */"); /* free iterator */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List2Iterator_free(it);"); GWEN_SyncIo_WriteLine(sio, " } /* if (it) */"); GWEN_SyncIo_WriteLine(sio, " } /* if (1) */"); } else { DBG_ERROR(0, "No toDb function for type \"%s\"", typ); return -1; } } } else { btype=get_property(node, "basetype", 0); if (!btype) { if (strcasecmp(typ, "char")==0) btype="char"; else if (strcasecmp(typ, "uint32_t")==0) btype="int"; else if (strcasecmp(typ, "GWEN_TYPE_UINT64")==0) btype="int"; else { btype=typ; } } if (strcasecmp(btype, "int")==0) { GWEN_SyncIo_WriteString(sio, " if (GWEN_DB_SetIntValue(db, " "GWEN_DB_FLAGS_OVERWRITE_VARS, \""); } else if (strcasecmp(btype, "char")==0) { GWEN_SyncIo_WriteString(sio, " if (GWEN_DB_SetCharValue(db, " "GWEN_DB_FLAGS_OVERWRITE_VARS, \""); } else { GWEN_XMLNODE *tnode; const char *tmode; tnode=get_typedef(node, typ); if (!tnode) { DBG_ERROR(0, "Undefined type %s", typ); return -1; } tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); if (strcasecmp(tmode, "enum")==0) { GWEN_XMLNODE *tnode; const char *tmode; tnode=get_typedef(node, typ); if (!tnode) { DBG_ERROR(0, "Undefined type %s", typ); return -1; } tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); if (strcasecmp(tmode, "enum")==0) { GWEN_BUFFER *tprefix; const char *s; tprefix=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_Buffer_AppendString(tprefix, "_"); s=GWEN_XMLNode_GetProperty(tnode, "prefix", 0); assert(s); GWEN_SyncIo_WriteString(sio, " if (GWEN_DB_SetCharValue(db, "); GWEN_SyncIo_WriteString(sio, "GWEN_DB_FLAGS_OVERWRITE_VARS, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", "); GWEN_Buffer_AppendString(tprefix, s); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteString(sio, "_toString(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, ")"); GWEN_SyncIo_WriteString(sio, ")"); GWEN_SyncIo_WriteLine(sio, ") "); GWEN_SyncIo_WriteLine(sio, " return -1;"); GWEN_Buffer_free(tprefix); return 0; } /* if enum */ else { DBG_ERROR(0, "Bad non-pointer type \"%s\" (not a base type)", typ); return -1; } } else { DBG_ERROR(0, "Bad non-pointer type \"%s\" (not a base type)", typ); return -1; } } GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "))"); GWEN_SyncIo_WriteLine(sio, " return -1;"); } return 0; } int write_code_fromdbArg_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *btype; const char *typ; const char *name; const char *mode; int isPtr; const char *defval; int isVolatile; isVolatile=atoi(GWEN_XMLNode_GetProperty(node, "volatile", "0")); if (isVolatile) /* don't save volatile data */ return 0; isPtr=atoi(get_property(node, "ptr", "0")); name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } mode=GWEN_XMLNode_GetProperty(node, "mode", "single"); if (strcasecmp(mode, "single")!=0) /* all list modes operate on pointers */ isPtr=1; typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } defval=get_property(node, "default", 0); if (isPtr) { const char *fname; fname=get_function_name(node, "fromdb"); if (fname) { GWEN_SyncIo_WriteString(sio, fname); GWEN_SyncIo_WriteString(sio, "(dbT)"); } else { if (strcasecmp(typ, "char")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetCharValue(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", 0, "); if (defval) { GWEN_SyncIo_WriteString(sio, "\""); GWEN_SyncIo_WriteString(sio, defval); GWEN_SyncIo_WriteString(sio, "\""); } else { GWEN_SyncIo_WriteString(sio, "0"); } GWEN_SyncIo_WriteString(sio, ")"); } else { DBG_ERROR(0, "No fromDb function for type \"%s\"", typ); return -1; } } } else { btype=get_property(node, "basetype", 0); if (!btype) { if (strcasecmp(typ, "char")==0) btype="char"; else if (strcasecmp(typ, "uint32_t")==0) btype="int"; else if (strcasecmp(typ, "GWEN_TYPE_UINT64")==0) btype="int"; else { btype=typ; } } if (strcasecmp(btype, "int")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetIntValue(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", 0, "); if (defval) { GWEN_SyncIo_WriteString(sio, defval); } else { GWEN_SyncIo_WriteString(sio, "0"); } GWEN_SyncIo_WriteString(sio, ")"); } else if (strcasecmp(btype, "char")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetCharValue(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", 0, "); if (defval) { GWEN_SyncIo_WriteString(sio, "\""); GWEN_SyncIo_WriteString(sio, defval); GWEN_SyncIo_WriteString(sio, "\""); } else { GWEN_SyncIo_WriteString(sio, "0"); } GWEN_SyncIo_WriteString(sio, ")"); } else { GWEN_XMLNODE *tnode; const char *tmode; tnode=get_typedef(node, typ); if (!tnode) { DBG_ERROR(0, "Undefined type %s", typ); return -1; } tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); if (strcasecmp(tmode, "enum")==0) { GWEN_BUFFER *tprefix; const char *s; tprefix=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_Buffer_AppendString(tprefix, "_"); s=GWEN_XMLNode_GetProperty(tnode, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteString(sio, "_fromString("); GWEN_SyncIo_WriteString(sio, "GWEN_DB_GetCharValue(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "\", 0, "); if (defval) { GWEN_SyncIo_WriteString(sio, "\""); GWEN_SyncIo_WriteString(sio, defval); GWEN_SyncIo_WriteString(sio, "\""); } else { GWEN_SyncIo_WriteString(sio, "0"); } GWEN_SyncIo_WriteString(sio, ")"); GWEN_SyncIo_WriteString(sio, ")"); GWEN_Buffer_free(tprefix); } /* if enum */ else { DBG_ERROR(0, "Bad non-pointer type \"%s\" (not a base type)", typ); return -1; } } } return 0; } int write_code_constrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while (n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { rv=write_code_constrec_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in dup"); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { int isPtr; const char *typ; const char *name; const char *setval; const char *mode; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } setval=GWEN_XMLNode_GetProperty(n, "preset", 0); isPtr=atoi(get_property(n, "ptr", "0")); mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); if (strcasecmp(mode, "single")!=0) /* lists always use pointers */ isPtr=1; if (isPtr) { if (strcasecmp(typ, "GWEN_STRINGLIST")==0) { GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "=GWEN_StringList_new();"); } else if (strcasecmp(mode, "single")!=0) { int initVar; initVar=atoi(get_property(n, "init", "0")); if (initVar) { const char *fname; fname=get_function_name(n, "new"); if (!fname) { DBG_ERROR(0, "No new-function set for type %s", typ); return -1; } GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, fname); GWEN_SyncIo_WriteLine(sio, "();"); } /* if init requested */ } /* if !single */ else { if (setval) { GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, setval); GWEN_SyncIo_WriteLine(sio, ";"); } } } else { if (setval) { /* TODO: check for enum values */ GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, setval); GWEN_SyncIo_WriteLine(sio, ";"); } } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "func")==0) { } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_code_const_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *prefix; const char *styp; const char *constName; int rv; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } constName=get_struct_property(node, "constructor-name", 0); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (constName && *constName) GWEN_SyncIo_WriteString(sio, constName); else GWEN_SyncIo_WriteString(sio, "_new"); GWEN_SyncIo_WriteLine(sio, "(void) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " GWEN_NEW_OBJECT("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, ", st)"); GWEN_SyncIo_WriteLine(sio, " st->_usage=1;"); // add inherit functions if (get_struct_property(node, "inherit", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_INHERIT_INIT("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, ", st)"); } // add list functions if (get_struct_property(node, "list", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_LIST_INIT("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, ", st)"); } rv=write_code_constrec_c(args, node, sio); if (rv) return rv; GWEN_SyncIo_WriteLine(sio, " return st;"); GWEN_SyncIo_WriteLine(sio, "}"); return 0; } int write_code_dest_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *prefix; const char *styp; int rv; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_free("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteLine(sio, " if (st) {"); GWEN_SyncIo_WriteLine(sio, " assert(st->_usage);"); GWEN_SyncIo_WriteLine(sio, " if (--(st->_usage)==0) {"); // add inherit functions if (get_struct_property(node, "inherit", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_INHERIT_FINI("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, ", st)"); } rv=write_code_freeElems_c(args, node, sio); if (rv) { DBG_ERROR(0, "Error in freeElems"); return rv; } // add list functions if (get_struct_property(node, "list", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_LIST_FINI("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, ", st)"); } GWEN_SyncIo_WriteLine(sio, " GWEN_FREE_OBJECT(st);"); GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "}"); return 0; } int write_code_setget_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while (n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { rv=write_code_setget_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in setget"); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { int isPtr; const char *typ; const char *name; const char *mode; GWEN_XMLNODE *tnode; const char *tmode; int isConst; int doCopy; GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); isConst=atoi(get_property(n, "const", "1")); doCopy=atoi(get_property(n, "copy", "1")); mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); tnode=get_typedef(node, typ); if (tnode) tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); else tmode=mode; if (isPtr && (/*strcasecmp(mode, "single")==0 ||*/ isConst)) { GWEN_SyncIo_WriteString(sio, "const "); } if (strcasecmp(tmode, "enum")!=0) GWEN_SyncIo_WriteString(sio, typ); else { GWEN_BUFFER *tid; const char *s; tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); GWEN_Buffer_AppendString(tid, typ); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); } if (isPtr) { GWEN_SyncIo_WriteString(sio, " *"); } else { GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Get"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteString(sio, " return st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* write setter */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st, "); if (isPtr && isConst) { GWEN_SyncIo_WriteString(sio, "const "); } if (strcasecmp(tmode, "enum")!=0) GWEN_SyncIo_WriteString(sio, typ); else { GWEN_BUFFER *tid; const char *s; tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); GWEN_Buffer_AppendString(tid, typ); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); } if (isPtr) { GWEN_SyncIo_WriteString(sio, " *"); } else { GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteLine(sio, "d) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); if (isPtr) { /* free old pointer if any */ rv=write_code_freeElem_c(args, n, sio); if (rv) return rv; /* copy argument if any */ if (strcasecmp(mode, "single")==0) { if (strcasecmp(typ, "char")==0) GWEN_SyncIo_WriteLine(sio, " if (d && *d)"); else GWEN_SyncIo_WriteLine(sio, " if (d)"); GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); if (doCopy) { rv=write_code_dupArg_c(args, n, sio, "d"); if (rv) return rv; } else { GWEN_SyncIo_WriteLine(sio, "d;"); } } else { if (doCopy) { rv=write_code_dupList_c(args, n, sio, "d"); if (rv) return rv; } else { if (isConst) { DBG_ERROR(0, "Properties: CONST but not COPY"); return -1; } GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "=d;"); } } GWEN_SyncIo_WriteLine(sio, " else"); GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "=0;"); } else { GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "=d;"); } GWEN_SyncIo_WriteLine(sio, " st->_modified=1;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); if (strcasecmp(typ, "GWEN_STRINGLIST")==0) { /* special functions for string lists */ GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Add"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d, int chk){"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " assert(d);"); GWEN_SyncIo_WriteString(sio, " if (GWEN_StringList_AppendString(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", d, 0, chk))"); GWEN_SyncIo_WriteLine(sio, " st->_modified=1;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* remove */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Remove"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d) {"); GWEN_SyncIo_WriteString(sio, " if (GWEN_StringList_RemoveString(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", d))"); GWEN_SyncIo_WriteLine(sio, " st->_modified=1;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* clear */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Clear"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteString(sio, " if (GWEN_StringList_Count(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ")) {"); GWEN_SyncIo_WriteString(sio, " GWEN_StringList_Clear(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ");"); GWEN_SyncIo_WriteLine(sio, " st->_modified=1;"); GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* has */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Has"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d) {"); GWEN_SyncIo_WriteString(sio, " return GWEN_StringList_HasString(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", d);"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "func")==0) { const char *typ; const char *name; const char *rettype; const char *defret; GWEN_XMLNODE *anode; int isPtr; int isVoid; int idx; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } rettype=GWEN_XMLNode_GetProperty(n, "return", 0); if (!rettype) { DBG_ERROR(0, "No return type for function"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); isVoid=(!isPtr && strcasecmp(rettype, "void")==0); defret=GWEN_XMLNode_GetProperty(n, "default", 0); if (!defret && !isVoid) { DBG_ERROR(0, "No default return value for function %s", name); return -1; } /* getter */ GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Get"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteString(sio, " return st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* setter */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st, "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteLine(sio, " d) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "=d;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* function call */ GWEN_SyncIo_WriteString(sio, rettype); if (isPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st"); anode=GWEN_XMLNode_FindFirstTag(n, "arg", 0, 0); idx=0; while (anode) { const char *aname; const char *atype; int aisPtr; GWEN_SyncIo_WriteString(sio, ", "); aisPtr=atoi(GWEN_XMLNode_GetProperty(anode, "ptr", "0")); aname=GWEN_XMLNode_GetProperty(anode, "name", 0); if (!aname || !*aname) { DBG_ERROR(0, "No name for argument %d in function %s", idx, name); return -1; } atype=GWEN_XMLNode_GetProperty(anode, "type", 0); if (!atype || !*atype) { DBG_ERROR(0, "No type for argument %d in function %s", idx, name); return -1; } GWEN_SyncIo_WriteString(sio, atype); if (aisPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, aname); idx++; anode=GWEN_XMLNode_FindNextTag(anode, "arg", 0, 0); } GWEN_SyncIo_WriteLine(sio, ") {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteString(sio, " if (st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ")"); GWEN_SyncIo_WriteString(sio, " "); if (!isVoid) GWEN_SyncIo_WriteString(sio, "return "); GWEN_SyncIo_WriteString(sio, "st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(st"); anode=GWEN_XMLNode_FindFirstTag(n, "arg", 0, 0); while (anode) { const char *aname; GWEN_SyncIo_WriteString(sio, ", "); aname=GWEN_XMLNode_GetProperty(anode, "name", 0); GWEN_SyncIo_WriteString(sio, aname); anode=GWEN_XMLNode_FindNextTag(anode, "arg", 0, 0); } GWEN_SyncIo_WriteLine(sio, ");"); if (!isVoid) { GWEN_SyncIo_WriteString(sio, "return "); GWEN_SyncIo_WriteString(sio, defret); GWEN_SyncIo_WriteLine(sio, ";"); } GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_code_dupList_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *n, GWEN_SYNCIO *sio, const char *listName) { int isPtr; const char *typ; const char *name; const char *mode; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); if (strcasecmp(mode, "single")!=0) /* lists are always pointers */ isPtr=1; if (isPtr) { if (strcasecmp(mode, "list")==0) { const char *prefix; const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; prefix=get_struct_property(n, "prefix", 0); assert(prefix); /* create list code */ elemType=GWEN_XMLNode_GetProperty(n, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(n, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteString(sio, " if ("); GWEN_SyncIo_WriteString(sio, listName); GWEN_SyncIo_WriteLine(sio, ") {"); /* ELEMTYPE *e; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); /* st->LIST=LIST_new() */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, "st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List_new();"); /* e=ElemType_List_First */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List_First("); GWEN_SyncIo_WriteString(sio, listName); GWEN_SyncIo_WriteLine(sio, ");"); /* while (e) ; */ GWEN_SyncIo_WriteLine(sio, " while(e) {"); /* ELEMTYPE *ne; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *ne;"); GWEN_SyncIo_WriteLine(sio, ""); /* ne=ElemType_dup; assert(ne); */ GWEN_SyncIo_WriteString(sio, " ne="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_dup(e);"); GWEN_SyncIo_WriteLine(sio, " assert(ne);"); /* ElemType_List_Add(ne, st->NAME); */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List_Add(ne, st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ");"); /* e=ElemType_List_Next */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List_Next(e);"); GWEN_SyncIo_WriteLine(sio, " } /* while (e) */"); GWEN_SyncIo_WriteLine(sio, " } /* if LIST */"); } else if (strcasecmp(mode, "list2")==0) { const char *prefix; const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; prefix=get_struct_property(n, "prefix", 0); assert(prefix); /* create list code */ elemType=GWEN_XMLNode_GetProperty(n, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(n, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2_new();"); GWEN_SyncIo_WriteString(sio, " if ("); GWEN_SyncIo_WriteString(sio, listName); GWEN_SyncIo_WriteLine(sio, ") {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, "_LIST2_ITERATOR *it;"); GWEN_SyncIo_WriteLine(sio, ""); /* it=ElemType_List2_First */ GWEN_SyncIo_WriteString(sio, " it="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List2_First("); GWEN_SyncIo_WriteString(sio, listName); GWEN_SyncIo_WriteLine(sio, ");"); /* if (it) */ GWEN_SyncIo_WriteLine(sio, " if (it) {"); /* ELEMTYPE *e; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); /* e=ElemType_List2Iterator_Data */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2Iterator_Data(it);"); GWEN_SyncIo_WriteLine(sio, " assert(e);"); /* while (e) ; */ GWEN_SyncIo_WriteLine(sio, " while(e) {"); /* ELEMTYPE *ne; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *ne;"); GWEN_SyncIo_WriteLine(sio, ""); /* ne=ElemType_dup; assert(ne); */ GWEN_SyncIo_WriteString(sio, " ne="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_dup(e);"); GWEN_SyncIo_WriteLine(sio, " assert(ne);"); /* ElemType_List2_PushBack(st->NAME, ne); */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List2_PushBack(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", ne);"); /* e=ElemType_List2Iterator_Next */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2Iterator_Next(it);"); GWEN_SyncIo_WriteLine(sio, " } /* while (e) */"); /* ElemType_List2Iterator_free */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2Iterator_free(it);"); GWEN_SyncIo_WriteLine(sio, " } /* if (it) */"); GWEN_SyncIo_WriteLine(sio, " } /* LIST */"); } } return 0; } int write_code_duprec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while (n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { rv=write_code_duprec_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in dup"); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { int isPtr; const char *typ; const char *name; const char *mode; int doCopy; int takeOver; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); doCopy=atoi(get_property(n, "copy", "1")); takeOver=atoi(get_property(n, "takeOver", "0")); mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); if (strcasecmp(mode, "single")!=0) /* lists are always pointers */ isPtr=1; if (isPtr) { GWEN_BUFFER *pbuf; const char *fname; fname=get_function_name(n, "dup"); pbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(pbuf, "d->"); GWEN_Buffer_AppendByte(pbuf, tolower(*name)); GWEN_Buffer_AppendString(pbuf, name+1); if (strcasecmp(mode, "single")!=0 && !fname) { rv=write_code_dupList_c(args, n, sio, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_free(pbuf); if (rv) return rv; } else { /* copy argument if any */ GWEN_SyncIo_WriteString(sio, " if (d->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ")"); GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); if (doCopy || takeOver) { rv=write_code_dupArg_c(args, n, sio, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_free(pbuf); if (rv) return rv; } else { GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(pbuf)); GWEN_Buffer_free(pbuf); GWEN_SyncIo_WriteString(sio, ";"); } } } else { GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "=d->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ";"); } } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_code_dup_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { int rv; const char *prefix; const char *styp; const char *dupAcc; const char *dupName; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } dupAcc=get_struct_property(node, "dup-access", get_struct_property(node, "access", 0)); dupName=get_struct_property(node, "dup-name", 0); if (dupAcc && strcasecmp(dupAcc, "none")!=0) { GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (dupName) GWEN_SyncIo_WriteString(sio, dupName); else GWEN_SyncIo_WriteString(sio, "_dup"); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *d) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, " assert(d);"); GWEN_SyncIo_WriteString(sio, " st="); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_new();"); rv=write_code_duprec_c(args, node, sio); if (rv) { DBG_ERROR(0, "Error in dup"); return rv; } GWEN_SyncIo_WriteLine(sio, " return st;"); GWEN_SyncIo_WriteLine(sio, "}"); } return 0; } int write_code_todbrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while (n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { rv=write_code_todbrec_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in todb"); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { int isVolatile; isVolatile=atoi(GWEN_XMLNode_GetProperty(n, "volatile", "0")); if (isVolatile==0) { int isPtr; const char *typ; const char *name; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); if (isPtr) { GWEN_SyncIo_WriteString(sio, " if (st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ")"); } rv=write_code_todbArg_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in toDb function"); return rv; } } } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_code_todb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_toDb(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " assert(db);"); rv=write_code_todbrec_c(args, node, sio); if (rv) { DBG_ERROR(0, "Error in todb"); return rv; } GWEN_SyncIo_WriteLine(sio, " return 0;"); GWEN_SyncIo_WriteLine(sio, "}"); return 0; } int write_code_fromdbrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; int isVolatile; isVolatile=atoi(GWEN_XMLNode_GetProperty(node, "volatile", "0")); if (isVolatile) /* don't save volatile data */ return 0; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while (n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { rv=write_code_fromdbrec_c(args, n, sio); if (rv) { DBG_ERROR(0, "Error in fromdb"); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { int isVolatile; isVolatile=atoi(GWEN_XMLNode_GetProperty(n, "volatile", "0")); if (isVolatile==0) { int isPtr; const char *typ; const char *name; const char *mode; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } if (strcasecmp(mode, "list")==0) { const char *prefix; const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; prefix=get_struct_property(node, "prefix", 0); assert(prefix); /* create list code */ elemType=GWEN_XMLNode_GetProperty(n, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(n, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List_new();"); GWEN_SyncIo_WriteLine(sio, " if (1) {/* just for local vars */"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT;"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT=GWEN_DB_GetGroup(db, " "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " if (dbT) {"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT2;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT2=GWEN_DB_FindFirstGroup(dbT, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\");"); /* while (e) */ GWEN_SyncIo_WriteLine(sio, " while(dbT2) {"); /* e=ElemType_fromDb(e) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_fromDb(dbT2);"); /* if (!e) */ GWEN_SyncIo_WriteLine(sio, " if (!e) {"); GWEN_SyncIo_WriteString(sio, " " "DBG_ERROR(0, \"Bad element for type \\\""); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, "\\\"\");"); GWEN_SyncIo_WriteLine(sio, " " "if (GWEN_Logger_GetLevel(0)>=" "GWEN_LoggerLevel_Debug)"); GWEN_SyncIo_WriteLine(sio, " " "GWEN_DB_Dump(dbT2, 2);"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_free(st);"); GWEN_SyncIo_WriteLine(sio, " return 0;"); GWEN_SyncIo_WriteLine(sio, " }"); /* ElemType_List_Add(e, st->NAME); */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List_Add(e, st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, ");"); GWEN_SyncIo_WriteString(sio, " dbT2=GWEN_DB_FindNextGroup(dbT2, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " } /* while */"); GWEN_SyncIo_WriteLine(sio, " } /* if (dbT) */"); GWEN_SyncIo_WriteLine(sio, " } /* if (1) */"); } else if (strcasecmp(mode, "list2")==0) { const char *prefix; const char *elemType; const char *elemPrefix; GWEN_XMLNODE *elemNode; prefix=get_struct_property(node, "prefix", 0); assert(prefix); /* create list code */ elemType=GWEN_XMLNode_GetProperty(n, "elemType", 0); if (!elemType) { DBG_ERROR(0, "No \"type\" for list type \"%s\"", typ); return -1; } elemNode=get_typedef(node, elemType); if (!elemNode) { DBG_ERROR(0, "Undefined type %s", elemType); return -1; } elemPrefix=GWEN_XMLNode_GetProperty(elemNode, "prefix", 0); if (!elemPrefix) { DBG_ERROR(0, "No \"prefix\" for type \"%s\" (within %s)", elemType, typ); return -1; } /* actually generate the code */ GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_List2_new();"); GWEN_SyncIo_WriteLine(sio, " if (1) {"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT;"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT=GWEN_DB_GetGroup(db, " "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " if (dbT) {"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT2;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT2=GWEN_DB_FindFirstGroup(dbT, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\");"); /* while (e) */ GWEN_SyncIo_WriteLine(sio, " while(dbT2) {"); /* e=ElemType_fromDb(e) */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteLine(sio, "_fromDb(dbT2);"); /* if (!e) */ GWEN_SyncIo_WriteLine(sio, " if (!e) {"); GWEN_SyncIo_WriteString(sio, " " "DBG_ERROR(0, \"Bad element for type \\\""); GWEN_SyncIo_WriteString(sio, elemType); GWEN_SyncIo_WriteLine(sio, "\\\"\");"); GWEN_SyncIo_WriteLine(sio, " " "if (GWEN_Logger_GetLevel(0)>=" "GWEN_LoggerLevel_Debug)"); GWEN_SyncIo_WriteLine(sio, " " "GWEN_DB_Dump(dbT2, 2);"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_free(st);"); GWEN_SyncIo_WriteLine(sio, " return 0;"); GWEN_SyncIo_WriteLine(sio, " } /* if !e */"); /* ElemType_List_Add(e, st->NAME); */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, elemPrefix); GWEN_SyncIo_WriteString(sio, "_List2_PushBack(st->"); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", e);"); GWEN_SyncIo_WriteString(sio, " " "dbT2=GWEN_DB_FindNextGroup(dbT2, \""); GWEN_SyncIo_WriteString(sio, "element"); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteLine(sio, " } /* while */"); GWEN_SyncIo_WriteLine(sio, " } /* if (dbT) */"); GWEN_SyncIo_WriteLine(sio, " } /* if (1) */"); } else if (strcasecmp(typ, "GWEN_STRINGLIST")==0) { GWEN_SyncIo_WriteLine(sio, " if (1) {"); GWEN_SyncIo_WriteLine(sio, " int i;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, " for (i=0; ; i++) {"); GWEN_SyncIo_WriteLine(sio, " const char *s;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " s=GWEN_DB_GetCharValue(db, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\", i, 0);"); GWEN_SyncIo_WriteLine(sio, " if (!s)"); GWEN_SyncIo_WriteLine(sio, " break;"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Add"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "(st, s, 0);"); GWEN_SyncIo_WriteLine(sio, " } /* for */"); GWEN_SyncIo_WriteLine(sio, " }"); } else { isPtr=atoi(get_property(n, "ptr", "0")); if (isPtr) { if (strcasecmp(typ, "char")!=0) { GWEN_SyncIo_WriteLine(sio, " if (1) { /* for local vars */"); GWEN_SyncIo_WriteLine(sio, " GWEN_DB_NODE *dbT;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, " dbT=GWEN_DB_GetGroup(db, " "GWEN_PATH_FLAGS_NAMEMUSTEXIST, \""); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, "\");"); GWEN_SyncIo_WriteString(sio, " if (dbT)"); } } if (isPtr && strcasecmp(typ, "char")!=0) { GWEN_SyncIo_WriteLine(sio, " {"); rv=write_code_freeElem_c(args, n, sio); if (rv) return rv; GWEN_SyncIo_WriteString(sio, " st->"); GWEN_SyncIo_WriteString(sio, name); GWEN_SyncIo_WriteString(sio, "="); rv=write_code_fromdbArg_c(args, n, sio); if (rv) return rv; GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, "}"); } else { GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(st, "); rv=write_code_fromdbArg_c(args, n, sio); if (rv) return rv; GWEN_SyncIo_WriteLine(sio, ");"); } if (isPtr && strcasecmp(typ, "char")!=0) { GWEN_SyncIo_WriteLine(sio, " }"); } } } } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_code_readdb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_ReadDb("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " assert(db);"); rv=write_code_fromdbrec_c(args, node, sio); if (rv) { DBG_ERROR(0, "Error in fromdb"); return rv; } GWEN_SyncIo_WriteLine(sio, " return 0;"); GWEN_SyncIo_WriteLine(sio, "}"); return 0; } int write_code_fromdb_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *prefix; const char *styp; const char *fromDbName; const char *fromDbAcc; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } fromDbAcc=get_struct_property(node, "dup-access", get_struct_property(node, "access", 0)); fromDbName=get_struct_property(node, "fromdb-name", 0); if (fromDbAcc && strcasecmp(fromDbAcc, "none")!=0) { GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (fromDbName) GWEN_SyncIo_WriteString(sio, fromDbName); else GWEN_SyncIo_WriteString(sio, "_fromDb"); GWEN_SyncIo_WriteLine(sio, "(GWEN_DB_NODE *db) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st;"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, " assert(db);"); GWEN_SyncIo_WriteString(sio, " st="); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_new();"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_ReadDb(st, db);"); GWEN_SyncIo_WriteLine(sio, " st->_modified=0;"); GWEN_SyncIo_WriteLine(sio, " return st;"); GWEN_SyncIo_WriteLine(sio, "}"); } /* if fromDb wanted */ return 0; } int write_code_builtin_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *prefix; const char *styp; const char *dupAcc; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } dupAcc=get_struct_property(node, "dup-access", get_struct_property(node, "access", 0)); /* IsModified */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_IsModified(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " return st->_modified;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* SetModified */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_SetModified("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, int i) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " st->_modified=i;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* Attach */ GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Attach("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st) {"); GWEN_SyncIo_WriteLine(sio, " assert(st);"); GWEN_SyncIo_WriteLine(sio, " st->_usage++;"); GWEN_SyncIo_WriteLine(sio, "}"); /* list2 functions */ if (get_struct_property(node, "list2", 0)) { /* List2_freeAll */ GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List2__freeAll_cb("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteLine(sio, "st, void *user_data) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_free(st);"); GWEN_SyncIo_WriteLine(sio, "return 0;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List2_freeAll("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, "_LIST2 *stl) {"); GWEN_SyncIo_WriteLine(sio, " if (stl) {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List2_ForEach(stl, "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List2__freeAll_cb, 0);"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List2_free(stl); "); GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } /* list functions */ if (get_struct_property(node, "list", 0)) { /* LIST_dup functions */ if (dupAcc && strcasecmp(dupAcc, "none")!=0) { const char *dupName; dupName=get_struct_property(node, "dup-name", 0); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_LIST *"); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List_dup(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, "_LIST *stl) {"); GWEN_SyncIo_WriteLine(sio, " if (stl) {"); /* ELEMTYPE_LIST *nl; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, "_LIST *nl;"); /* ELEMTYPE *e; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *e;"); GWEN_SyncIo_WriteLine(sio, ""); /* nl=ElemType_List */ GWEN_SyncIo_WriteString(sio, " nl="); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List_new();"); /* e=ElemType_List_First */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List_First(stl);"); /* while (e) ; */ GWEN_SyncIo_WriteLine(sio, " while(e) {"); /* ELEMTYPE *ne; */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *ne;"); GWEN_SyncIo_WriteLine(sio, ""); /* ne=ElemType_dup; assert(ne); */ GWEN_SyncIo_WriteString(sio, " ne="); GWEN_SyncIo_WriteString(sio, prefix); if (dupName) GWEN_SyncIo_WriteString(sio, dupName); else GWEN_SyncIo_WriteString(sio, "_dup"); GWEN_SyncIo_WriteLine(sio, "(e);"); GWEN_SyncIo_WriteLine(sio, " assert(ne);"); /* ElemType_List_Add(ne, st->NAME); */ GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List_Add(ne, nl);"); /* e=ElemType_List_Next */ GWEN_SyncIo_WriteString(sio, " e="); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, "_List_Next(e);"); GWEN_SyncIo_WriteLine(sio, " } /* while (e) */"); GWEN_SyncIo_WriteLine(sio, " return nl;"); GWEN_SyncIo_WriteLine(sio, " }"); GWEN_SyncIo_WriteLine(sio, " else"); GWEN_SyncIo_WriteLine(sio, " return 0;"); GWEN_SyncIo_WriteLine(sio, "}"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } /* if we have a dup function */ } return 0; } int write_code_file_c(ARGUMENTS *args, GWEN_XMLNODE *node) { int rv; const char *f; GWEN_BUFFER *fname; /*const char *nacc;*/ GWEN_SYNCIO *sio; int err; const char *id; const char *prefix; GWEN_XMLNODE *n; id=get_struct_property(node, "id", 0); if (!id) { DBG_ERROR(0, "No id for struct"); return -1; } f=get_struct_property(node, "filename", 0); if (!f) { DBG_ERROR(0, "No filename given"); return -1; } prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } /*nacc=get_struct_property(node, "access", "public");*/ fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, ".c"); sio=GWEN_SyncIo_File_new(GWEN_Buffer_GetStart(fname), GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "open(%s): %s", GWEN_Buffer_GetStart(fname), strerror(errno)); GWEN_Buffer_free(fname); GWEN_SyncIo_free(sio); return -1; } GWEN_Buffer_free(fname); /* Insert the auto-generation warning */ GWEN_SyncIo_WriteString(sio, "/* This file is auto-generated from \""); GWEN_SyncIo_WriteString(sio, f); GWEN_SyncIo_WriteLine(sio, ".xml\" by the typemaker"); GWEN_SyncIo_WriteLine(sio, " tool of Gwenhywfar. "); GWEN_SyncIo_WriteLine(sio, " Do not edit this file -- all changes will be lost! */"); GWEN_SyncIo_WriteLine(sio, "#ifdef HAVE_CONFIG_H"); GWEN_SyncIo_WriteLine(sio, "# include \"config.h\""); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, "_p.h"); GWEN_SyncIo_WriteString(sio, "#include \""); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(fname)); GWEN_SyncIo_WriteLine(sio, "\""); GWEN_Buffer_free(fname); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, "#include "); GWEN_SyncIo_WriteLine(sio, ""); /* write headers */ n=GWEN_XMLNode_FindFirstTag(node, "headers", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "header", 0, 0); while (n) { write_h_header(args, n, sio, "source"); n=GWEN_XMLNode_FindNextTag(n, "header", 0, 0); } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } /* write c-headers */ n=GWEN_XMLNode_FindFirstTag(node, "c-headers", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "header", 0, 0); while (n) { write_h_header(args, n, sio, "source"); n=GWEN_XMLNode_FindNextTag(n, "header", 0, 0); } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } if (get_struct_property(node, "inherit", 0)) { GWEN_SyncIo_WriteString(sio, "GWEN_INHERIT_FUNCTIONS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ")"); } if (get_struct_property(node, "list", 0)) { GWEN_SyncIo_WriteString(sio, "GWEN_LIST_FUNCTIONS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, ")"); } if (get_struct_property(node, "list2", 0)) { GWEN_SyncIo_WriteString(sio, "GWEN_LIST2_FUNCTIONS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, ")"); } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_c_enums(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_const_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_dest_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_dup_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_todb_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_readdb_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_fromdb_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_setget_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); rv=write_code_builtin_c(args, node, sio); if (rv) { GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); /* close stream */ err=GWEN_SyncIo_Disconnect(sio); if (err) { DBG_ERROR_ERR(0, err); GWEN_SyncIo_free(sio); return -1; } GWEN_SyncIo_free(sio); return 0; } int write_code_files_c(ARGUMENTS *args, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; int rv; n=GWEN_XMLNode_FindFirstTag(node, "type", 0, 0); while (n) { rv=write_code_file_c(args, n); if (rv) return rv; n=GWEN_XMLNode_FindNextTag(n, "type", 0, 0); } return 0; } gwenhywfar-5.12.0/tools/typemaker/args.c0000644000175000017500000001073713606364313015157 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* Internationalization */ #ifdef ENABLE_NLS # include # include # define I18N(m) dgettext("gwenhywfar", m) # define I18S(m) m #else # define I18N(m) m # define I18S(m) m #endif #include "args.h" #include #include #include #include ARGUMENTS *Arguments_new() { ARGUMENTS *ar; ar=(ARGUMENTS *)malloc(sizeof(ARGUMENTS)); assert(ar); memset(ar, 0, sizeof(ARGUMENTS)); ar->verbous=0; ar->logLevel=GWEN_LoggerLevel_Notice; ar->logType=GWEN_LoggerType_Console; ar->compact=0; return ar; } FREEPARAM *FreeParam_new(const char *s) { FREEPARAM *fr; fr=(FREEPARAM *)malloc(sizeof(FREEPARAM)); assert(fr); memset(fr, 0, sizeof(FREEPARAM)); fr->param=s; return fr; } void FreeParam_free(FREEPARAM *fr) { if (fr) free(fr); } void Arguments_AddParam(ARGUMENTS *ar, const char *pr) { FREEPARAM *curr; FREEPARAM *nfp; DBG_ENTER; assert(ar); assert(pr); nfp=FreeParam_new(pr); curr=ar->params; if (!curr) { ar->params=nfp; } else { /* find last */ while (curr->next) { curr=curr->next; } /* while */ curr->next=nfp; } DBG_LEAVE; } void Arguments_free(ARGUMENTS *ar) { if (ar) { FREEPARAM *fr; FREEPARAM *next; fr=ar->params; while (fr) { next=fr->next; FreeParam_free(fr); fr=next; } /* while */ free(ar); } } void usage(GWEN_UNUSED const char *prgname) { fprintf(stdout, "%s%s", k_PRG_VERSION_INFO "\n", I18N( "-v verbous\n" "--logfile ARG name of the logfile\n" "--logtype ARG log type\n" "--loglevel ARG log level\n" "-d ARG use ARG as domain prefix macro for function declarations\n" "-o ARG name of output file (stdout if omitted)\n" "--compact write a more compact file\n" "-V | --version print version of this tool and exit\n" ) ); } int checkArgs(ARGUMENTS *args, int argc, char **argv) { int i; i=1; while (i=argc) return RETURNVALUE_PARAM; args->logFile=argv[i]; } else if (strcmp(argv[i], "--logtype")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->logType=GWEN_Logger_Name2Logtype(argv[i]); if (args->logType==GWEN_LoggerType_Unknown) { fprintf(stderr, I18N("Unknown log type \"%s\"\n"), argv[i]); return RETURNVALUE_PARAM; } } else if (strcmp(argv[i], "--loglevel")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->logLevel=GWEN_Logger_Name2Level(argv[i]); if (args->logLevel==GWEN_LoggerLevel_Unknown) { fprintf(stderr, I18N("Unknown log level \"%s\"\n"), argv[i]); return RETURNVALUE_PARAM; } } else if (strcmp(argv[i], "-o")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->outputFile=argv[i]; } else if (strcmp(argv[i], "-d")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->domain=argv[i]; } else if (strcmp(argv[i], "--compact")==0) { args->compact=1; } else if (strcmp(argv[i], "-h")==0 || strcmp(argv[i], "--help")==0) { usage(argv[0]); return -2; } else if (strcmp(argv[i], "-V")==0 || strcmp(argv[i], "--version")==0) { fprintf(stdout, k_PRG_VERSION_INFO); return -2; } else if (strcmp(argv[i], "-v")==0) { args->verbous=1; } else { // otherwise add param if (argv[i][0]=='-') { fprintf(stderr, I18N("Unknown option \"%s\"\n"), argv[i]); return RETURNVALUE_PARAM; } else Arguments_AddParam(args, argv[i]); } i++; } /* while */ /* that's it */ return 0; } gwenhywfar-5.12.0/tools/typemaker/lhc.c0000644000175000017500000002734213142134476014771 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "args.h" #include "typemaker_p.h" #include #include #include #include #include #include #include #include #include #include #include #include int write_hl_file_c(ARGUMENTS *args, GWEN_XMLNODE *node) { int rv; const char *f; GWEN_BUFFER *fname; GWEN_BUFFER *hbuf; const char *s; const char *nacc; const char *constAcc; const char *constName; const char *fromDbAcc; const char *fromDbName; const char *dupAcc; const char *dupName; GWEN_SYNCIO *sio; int err; GWEN_XMLNODE *n; const char *id; const char *prefix; id=get_struct_property(node, "id", 0); if (!id) { DBG_ERROR(0, "No id for struct"); return -1; } prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix for struct"); return -1; } f=get_struct_property(node, "filename", 0); if (!f) { DBG_ERROR(0, "No filename given"); return -1; } nacc=get_struct_property(node, "access", "public"); constAcc=get_struct_property(node, "constructor-access", nacc); constName=get_struct_property(node, "constructor-name", 0); fromDbAcc=get_struct_property(node, "fromdb-access", nacc); fromDbName=get_struct_property(node, "fromdb-name", 0); dupAcc=get_struct_property(node, "dup-access", nacc); dupName=get_struct_property(node, "fromdb-name", 0); fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, "_l.h"); sio=GWEN_SyncIo_File_new(GWEN_Buffer_GetStart(fname), GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "open(%s): %s", GWEN_Buffer_GetStart(fname), strerror(errno)); GWEN_Buffer_free(fname); GWEN_SyncIo_free(sio); return -1; } GWEN_Buffer_free(fname); /* Insert the auto-generation warning */ GWEN_SyncIo_WriteString(sio, "/* This file is auto-generated from \""); GWEN_SyncIo_WriteString(sio, f); GWEN_SyncIo_WriteLine(sio, ".xml\" by the typemaker"); GWEN_SyncIo_WriteLine(sio, " tool of Gwenhywfar. "); GWEN_SyncIo_WriteLine(sio, " Do not edit this file -- all changes will be lost! */"); hbuf=GWEN_Buffer_new(0, 256, 0, 1); s=f; while (*s) { GWEN_Buffer_AppendByte(hbuf, toupper(*s)); s++; } GWEN_Buffer_AppendString(hbuf, "_L_H"); GWEN_SyncIo_WriteString(sio, "#ifndef "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteString(sio, "#define "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteLine(sio, ""); rv=write_apidoc_c(args, node, sio, "lib"); if (rv) return rv; if (strcasecmp(nacc, "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "extern \"C\" {"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "typedef struct "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "} /* __cplusplus */"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); } if (strcasecmp(get_struct_property(node, "inherit", ""), "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list", ""), "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list2", ""), "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(nacc, "public")==0) { fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, ".h"); GWEN_SyncIo_WriteString(sio, "#include \""); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(fname)); GWEN_SyncIo_WriteLine(sio, "\""); GWEN_Buffer_free(fname); } if (strcasecmp(get_struct_property(node, "list", ""), "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(nacc, "lib")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); n=GWEN_XMLNode_FindFirstTag(node, "pre-headers", 0, 0); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetFirstTag(n); while (nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ } n=GWEN_XMLNode_FindFirstTag(node, "headers", 0, 0); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetFirstTag(n); while (nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ } n=GWEN_XMLNode_FindFirstTag(node, "post-headers", 0, 0); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_GetFirstTag(n); while (nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ } } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "extern \"C\" {"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); if (write_h_enums(args, node, sio, "lib")) { DBG_ERROR(0, "Error writing enum types"); return -1; } if (write_h_funcs(args, node, sio, "lib")) { DBG_ERROR(0, "Error writing function types"); return -1; } if (strcasecmp(get_struct_property(node, "inherit", ""), "lib")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_INHERIT_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ")"); } if (strcasecmp(get_struct_property(node, "list", ""), "lib")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_LIST_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, ")"); if (dupAcc && strcasecmp(dupAcc, "none")!=0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, "_LIST *"); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List_dup(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "_LIST *stl);"); GWEN_SyncIo_WriteLine(sio, ""); } } if (strcasecmp(get_struct_property(node, "list2", ""), "lib")==0) { GWEN_SyncIo_WriteString(sio, "GWEN_LIST2_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteLine(sio, ")"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List2_freeAll("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "_LIST2 *stl);"); GWEN_SyncIo_WriteLine(sio, ""); } if (strcasecmp(constAcc, "lib")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (constName) GWEN_SyncIo_WriteString(sio, constName); else GWEN_SyncIo_WriteString(sio, "_new"); GWEN_SyncIo_WriteLine(sio, "(void);"); } /* FromDb */ if (strcasecmp(fromDbAcc, "lib")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (fromDbName) GWEN_SyncIo_WriteString(sio, fromDbName); else GWEN_SyncIo_WriteString(sio, "_fromDb"); GWEN_SyncIo_WriteLine(sio, "(GWEN_DB_NODE *db);"); } /* dup */ if (strcasecmp(dupAcc, "lib")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (dupName) GWEN_SyncIo_WriteString(sio, dupName); else GWEN_SyncIo_WriteString(sio, "_dup"); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "*st);"); } if (strcasecmp(nacc, "lib")==0) { GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_free("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Attach("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); /* ReadDb */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_ReadDb("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db);"); /* ToDb */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_toDb(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "*st, GWEN_DB_NODE *db);"); GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_IsModified(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_SetModified("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, int i);"); } rv=write_h_setget_c(args, node, sio, "lib"); if (rv) { GWEN_Buffer_free(hbuf); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "} /* __cplusplus */"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); /* write trailing endif */ GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "#endif /* "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteLine(sio, " */"); err=GWEN_SyncIo_Disconnect(sio); if (err) { DBG_ERROR_ERR(0, err); GWEN_SyncIo_free(sio); GWEN_Buffer_free(hbuf); return -1; } GWEN_Buffer_free(hbuf); return 0; } int write_hl_files_c(ARGUMENTS *args, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; int rv; n=GWEN_XMLNode_FindFirstTag(node, "type", 0, 0); while (n) { rv=write_hl_file_c(args, n); if (rv) return rv; n=GWEN_XMLNode_FindNextTag(n, "type", 0, 0); } return 0; } gwenhywfar-5.12.0/tools/typemaker/phc.c0000644000175000017500000003231213606364356014775 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "args.h" #include "typemaker_p.h" #include #include #include #include #include #include #include #include #include #include #include #include #include int write_h_elem_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *name; const char *typ; const char *mode; GWEN_XMLNODE *tnode; const char *tmode; int err; int isPtr; name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } mode=GWEN_XMLNode_GetProperty(node, "mode", "single"); tnode=get_typedef(node, typ); if (tnode) tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); else tmode=mode; isPtr=atoi(get_property(node, "ptr", "0")); err=GWEN_SyncIo_WriteString(sio, " "); if (err) { DBG_ERROR_ERR(0, err); return -1; } if (strcasecmp(tmode, "enum")!=0) GWEN_SyncIo_WriteString(sio, typ); else { GWEN_BUFFER *tid; const char *s; tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); GWEN_Buffer_AppendString(tid, typ); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); } GWEN_SyncIo_WriteString(sio, " "); if (isPtr) { GWEN_SyncIo_WriteString(sio, "*"); } GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ";"); return 0; } int write_h_func_c(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { const char *name; const char *typ; const char *styp; styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } name=GWEN_XMLNode_GetProperty(node, "name", 0); if (!name) { DBG_ERROR(0, "No name for function"); return -1; } typ=GWEN_XMLNode_GetProperty(node, "type", 0); if (!typ) { DBG_ERROR(0, "No type for function"); return -1; } GWEN_SyncIo_WriteString(sio, " "); /* rettype name; */ GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteChar(sio, tolower(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ";"); return 0; } int write_h_struct_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { GWEN_XMLNODE *n; const char *id; const char *acc; const char *prefix; id=get_struct_property(node, "id", 0); if (!id) { DBG_ERROR(0, "No id for struct"); return -1; } prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix for struct"); return -1; } if (write_h_enums(args, node, sio, "private")) { DBG_ERROR(0, "Error writing enum types"); return -1; } if (write_h_funcs(args, node, sio, "private")) { DBG_ERROR(0, "Error writing function types"); return -1; } acc=get_struct_property(node, "access", "public"); if (strcasecmp(acc, "private")==0) { GWEN_SyncIo_WriteString(sio, "typedef struct "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ";"); } GWEN_SyncIo_WriteString(sio, "struct "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " {"); if (get_struct_property(node, "inherit", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_INHERIT_ELEMENT("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ")"); } if (get_struct_property(node, "list", 0)) { GWEN_SyncIo_WriteString(sio, " GWEN_LIST_ELEMENT("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ")"); } GWEN_SyncIo_WriteLine(sio, " int _usage;"); GWEN_SyncIo_WriteLine(sio, " int _modified;"); GWEN_SyncIo_WriteLine(sio, ""); n=GWEN_XMLNode_GetFirstTag(node); while (n) { int rv; rv=write_hp_group_c(args, n, sio); if (rv) return rv; n=GWEN_XMLNode_GetNextTag(n); } /* while */ GWEN_SyncIo_WriteLine(sio, "};"); return 0; } int write_hp_group_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio) { int rv; if (GWEN_XMLNode_GetType(node)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(node), "type")==0) return write_h_struct_c(args, node, sio); else if (strcasecmp(GWEN_XMLNode_GetData(node), "elem")==0) { return write_h_elem_c(args, node, sio); } else if (strcasecmp(GWEN_XMLNode_GetData(node), "func")==0) { return write_h_func_c(args, node, sio); } else if (strcasecmp(GWEN_XMLNode_GetData(node), "header")==0) { return write_h_header(args, node, sio, "header"); } else if (strcasecmp(GWEN_XMLNode_GetData(node), "group")==0) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag(node); while (n) { rv=write_hp_group_c(args, n, sio); if (rv) return rv; n=GWEN_XMLNode_GetNextTag(n); } /* while */ } /* if group */ } return 0; } int write_hp_file_c(ARGUMENTS *args, GWEN_XMLNODE *node) { int rv; const char *f; GWEN_BUFFER *fname; GWEN_BUFFER *hbuf; const char *s; GWEN_SYNCIO *sio; int err; const char *nacc; const char *constAcc; const char *constName; const char *fromDbAcc; const char *fromDbName; const char *dupAcc; const char *dupName; const char *id; const char *prefix; id=get_struct_property(node, "id", 0); if (!id) { DBG_ERROR(0, "No id for struct"); return -1; } prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix for struct"); return -1; } f=get_struct_property(node, "filename", 0); if (!f) { DBG_ERROR(0, "No filename given"); return -1; } nacc=get_struct_property(node, "access", "public"); constAcc=get_struct_property(node, "constructor-access", nacc); constName=get_struct_property(node, "constructor-name", 0); fromDbAcc=get_struct_property(node, "fromdb-access", nacc); fromDbName=get_struct_property(node, "fromdb-name", 0); dupAcc=get_struct_property(node, "dup-access", nacc); dupName=get_struct_property(node, "fromdb-name", 0); fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, "_p.h"); sio=GWEN_SyncIo_File_new(GWEN_Buffer_GetStart(fname), GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "open(%s): %s", GWEN_Buffer_GetStart(fname), strerror(errno)); GWEN_Buffer_free(fname); GWEN_SyncIo_free(sio); return -1; } GWEN_Buffer_free(fname); /* Insert the auto-generation warning */ GWEN_SyncIo_WriteString(sio, "/* This file is auto-generated from \""); GWEN_SyncIo_WriteString(sio, f); GWEN_SyncIo_WriteLine(sio, ".xml\" by the typemaker"); GWEN_SyncIo_WriteLine(sio, " tool of Gwenhywfar. "); GWEN_SyncIo_WriteLine(sio, " Do not edit this file -- all changes will be lost! */"); hbuf=GWEN_Buffer_new(0, 256, 0, 1); s=f; while (*s) { GWEN_Buffer_AppendByte(hbuf, toupper(*s)); s++; } GWEN_Buffer_AppendString(hbuf, "_P_H"); GWEN_SyncIo_WriteString(sio, "#ifndef "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteString(sio, "#define "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteLine(sio, ""); if (strcasecmp(get_struct_property(node, "inherit", ""), "private")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list", ""), "private")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list2", ""), "private")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, "_l.h"); GWEN_SyncIo_WriteString(sio, "#include \""); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(fname)); GWEN_SyncIo_WriteLine(sio, "\""); GWEN_Buffer_free(fname); GWEN_SyncIo_WriteLine(sio, ""); rv=write_h_struct_c(args, node, sio); if (rv) { GWEN_Buffer_free(hbuf); GWEN_SyncIo_free(sio); return rv; } GWEN_SyncIo_WriteLine(sio, ""); /* include private functions */ if (strcasecmp(constAcc, "private")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (constName) GWEN_SyncIo_WriteString(sio, constName); else GWEN_SyncIo_WriteString(sio, "_new"); GWEN_SyncIo_WriteLine(sio, "(void);"); } /* FromDb */ if (strcasecmp(fromDbAcc, "private")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (fromDbName) GWEN_SyncIo_WriteString(sio, fromDbName); else GWEN_SyncIo_WriteString(sio, "_fromDb"); GWEN_SyncIo_WriteLine(sio, "(GWEN_DB_NODE *db);"); } /* dup */ if (strcasecmp(dupAcc, "private")==0) { GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (dupName) GWEN_SyncIo_WriteString(sio, dupName); else GWEN_SyncIo_WriteString(sio, "_dup"); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "*st);"); } if (strcasecmp(nacc, "private")==0) { GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_free("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Attach("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); /* ReadDb */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_ReadDb("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db);"); /* ToDb */ GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_toDb(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, "*st, GWEN_DB_NODE *db);"); GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_IsModified(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_SetModified("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, int i);"); } rv=write_h_setget_c(args, node, sio, "private"); if (rv) { GWEN_Buffer_free(hbuf); GWEN_SyncIo_free(sio); return rv; } /* write trailing endif */ err=GWEN_SyncIo_WriteLine(sio, ""); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteString(sio, "#endif /* "); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(hbuf)); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, " */"); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_Disconnect(sio); if (err) { DBG_ERROR_ERR(0, err); GWEN_SyncIo_free(sio); GWEN_Buffer_free(hbuf); return -1; } GWEN_Buffer_free(hbuf); return 0; } int write_hp_files_c(ARGUMENTS *args, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; int rv; n=GWEN_XMLNode_FindFirstTag(node, "type", 0, 0); while (n) { rv=write_hp_file_c(args, n); if (rv) return rv; n=GWEN_XMLNode_FindNextTag(n, "type", 0, 0); } return 0; } gwenhywfar-5.12.0/tools/typemaker/ahc.c0000644000175000017500000004025013142134476014747 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "args.h" #include "typemaker_p.h" #include #include #include #include #include #include #include #include #include #include #include #include int write_ha_file_c(ARGUMENTS *args, GWEN_XMLNODE *node) { int rv; const char *f; GWEN_BUFFER *fname; GWEN_BUFFER *hbuf; const char *s; const char *nacc; const char *constAcc; const char *constName; const char *fromDbAcc; const char *fromDbName; const char *dupAcc; const char *dupName; GWEN_SYNCIO *sio; int err; GWEN_XMLNODE *n; const char *id; const char *prefix; id=get_struct_property(node, "id", 0); if (!id) { DBG_ERROR(0, "No id for struct"); return -1; } prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix for struct"); return -1; } f=get_struct_property(node, "filename", 0); if (!f) { DBG_ERROR(0, "No filename given"); return -1; } nacc=get_struct_property(node, "access", "public"); constAcc=get_struct_property(node, "constructor-access", nacc); constName=get_struct_property(node, "constructor-name", 0); fromDbAcc=get_struct_property(node, "fromdb-access", nacc); fromDbName=get_struct_property(node, "fromdb-name", 0); dupAcc=get_struct_property(node, "dup-access", nacc); dupName=get_struct_property(node, "fromdb-name", 0); fname=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(fname, f); GWEN_Buffer_AppendString(fname, ".h"); sio=GWEN_SyncIo_File_new(GWEN_Buffer_GetStart(fname), GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { DBG_ERROR(0, "open(%s): %s", GWEN_Buffer_GetStart(fname), strerror(errno)); GWEN_Buffer_free(fname); GWEN_SyncIo_free(sio); return -1; } GWEN_Buffer_free(fname); /* Insert the auto-generation warning */ GWEN_SyncIo_WriteString(sio, "/* This file is auto-generated from \""); GWEN_SyncIo_WriteString(sio, f); GWEN_SyncIo_WriteLine(sio, ".xml\" by the typemaker"); GWEN_SyncIo_WriteLine(sio, " tool of Gwenhywfar. "); GWEN_SyncIo_WriteLine(sio, " Do not edit this file -- all changes will be lost! */"); hbuf=GWEN_Buffer_new(0, 256, 0, 1); s=f; while (*s) { GWEN_Buffer_AppendByte(hbuf, toupper(*s)); s++; } GWEN_Buffer_AppendString(hbuf, "_H"); GWEN_SyncIo_WriteString(sio, "#ifndef "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteString(sio, "#define "); GWEN_SyncIo_WriteLine(sio, GWEN_Buffer_GetStart(hbuf)); GWEN_SyncIo_WriteLine(sio, ""); rv=write_apidoc_c(args, node, sio, "public"); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } if (strcasecmp(nacc, "public")==0) { GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "extern \"C\" {"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "typedef struct "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "} /* __cplusplus */"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); } GWEN_SyncIo_WriteLine(sio, "#include "); if (strcasecmp(get_struct_property(node, "inherit", ""), "public")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list", ""), "public")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } if (strcasecmp(get_struct_property(node, "list2", ""), "public")==0) { GWEN_SyncIo_WriteLine(sio, "#include "); } n=GWEN_XMLNode_FindFirstTag(node, "pre-headers", 0, 0); if (n) { GWEN_XMLNODE *nn; GWEN_SyncIo_WriteLine(sio, "/* pre-headers */"); nn=GWEN_XMLNode_GetFirstTag(n); while (nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ GWEN_SyncIo_WriteLine(sio, ""); } n=GWEN_XMLNode_FindFirstTag(node, "headers", 0, 0); if (n) { GWEN_XMLNODE *nn; GWEN_SyncIo_WriteLine(sio, "/* headers */"); nn=GWEN_XMLNode_GetFirstTag(n); while (nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); DBG_INFO(0, "here (%d)", rv); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ GWEN_SyncIo_WriteLine(sio, ""); } GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); GWEN_SyncIo_WriteLine(sio, "extern \"C\" {"); GWEN_SyncIo_WriteLine(sio, "#endif"); GWEN_SyncIo_WriteLine(sio, ""); if (write_h_enums(args, node, sio, "public")) { DBG_ERROR(0, "Error writing enum types"); return -1; } if (write_h_funcs(args, node, sio, "public")) { DBG_ERROR(0, "Error writing function types"); return -1; } if (strcasecmp(get_struct_property(node, "inherit", ""), "public")==0) { if (args->domain) GWEN_SyncIo_WriteString(sio, "GWEN_INHERIT_FUNCTION_LIB_DEFS("); else GWEN_SyncIo_WriteString(sio, "GWEN_INHERIT_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); if (args->domain) { GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, args->domain); } GWEN_SyncIo_WriteLine(sio, ")"); } if (strcasecmp(get_struct_property(node, "list", ""), "public")==0) { if (args->domain) GWEN_SyncIo_WriteString(sio, "GWEN_LIST_FUNCTION_LIB_DEFS("); else GWEN_SyncIo_WriteString(sio, "GWEN_LIST_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); if (args->domain) { GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, args->domain); } GWEN_SyncIo_WriteLine(sio, ")"); if (dupAcc && strcasecmp(dupAcc, "none")!=0) { if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, "_LIST *"); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List_dup(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "_LIST *stl);"); GWEN_SyncIo_WriteLine(sio, ""); } } if (strcasecmp(get_struct_property(node, "list2", ""), "public")==0) { if (args->domain) GWEN_SyncIo_WriteString(sio, "GWEN_LIST2_FUNCTION_LIB_DEFS("); else GWEN_SyncIo_WriteString(sio, "GWEN_LIST2_FUNCTION_DEFS("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, prefix); if (args->domain) { GWEN_SyncIo_WriteString(sio, ", "); GWEN_SyncIo_WriteString(sio, args->domain); } GWEN_SyncIo_WriteLine(sio, ")"); GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, "/** Destroys all objects stored in the given " "LIST2 and the list itself"); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_List2_freeAll("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "_LIST2 *stl);"); GWEN_SyncIo_WriteLine(sio, ""); } n=GWEN_XMLNode_FindFirstTag(node, "post-headers", 0, 0); if (n) { GWEN_XMLNODE *nn; GWEN_SyncIo_WriteLine(sio, "/* post-headers */"); nn=GWEN_XMLNode_GetFirstTag(n); while (nn) { rv=write_hp_group_c(args, nn, sio); if (rv) { GWEN_Buffer_free(hbuf); DBG_INFO(0, "here (%d)", rv); return -1; } nn=GWEN_XMLNode_GetNextTag(nn); } /* while */ GWEN_SyncIo_WriteLine(sio, ""); } if (strcasecmp(constAcc, "public")==0) { GWEN_SyncIo_WriteLine(sio, "/** Creates a new object."); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (constName) GWEN_SyncIo_WriteString(sio, constName); else GWEN_SyncIo_WriteString(sio, "_new"); GWEN_SyncIo_WriteLine(sio, "(void);"); } /* FromDb */ if (strcasecmp(fromDbAcc, "public")==0) { GWEN_SyncIo_WriteLine(sio, "/** Creates an object from the data in the" " given GWEN_DB_NODE"); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (fromDbName) GWEN_SyncIo_WriteString(sio, fromDbName); else GWEN_SyncIo_WriteString(sio, "_fromDb"); GWEN_SyncIo_WriteLine(sio, "(GWEN_DB_NODE *db);"); } /* dup */ if (strcasecmp(dupAcc, "public")==0) { GWEN_SyncIo_WriteLine(sio, "/** Creates and returns a deep copy of the" "given object."); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteString(sio, " *"); GWEN_SyncIo_WriteString(sio, prefix); if (dupName) GWEN_SyncIo_WriteString(sio, dupName); else GWEN_SyncIo_WriteString(sio, "_dup"); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "*st);"); } if (strcasecmp(nacc, "public")==0) { GWEN_SyncIo_WriteLine(sio, "/** Destroys the given object."); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_free("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteLine(sio, "/** Increments the usage counter of the " "given object, so an additional free() is" " needed to destroy the object."); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Attach("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); /* ReadDb */ GWEN_SyncIo_WriteLine(sio, "/** Reads data from a GWEN_DB."); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_ReadDb("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, GWEN_DB_NODE *db);"); /* ToDb */ GWEN_SyncIo_WriteLine(sio, "/** Stores an object in the" " given GWEN_DB_NODE"); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_toDb(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, "*st, GWEN_DB_NODE *db);"); GWEN_SyncIo_WriteLine(sio, "/** Returns 0 if this object has not been" " modified, !=0 otherwise"); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_IsModified(const "); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st);"); GWEN_SyncIo_WriteLine(sio, "/** Sets the modified state of the given " "object"); GWEN_SyncIo_WriteLine(sio, "*/"); if (args->domain) { GWEN_SyncIo_WriteString(sio, args->domain); GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_SetModified("); GWEN_SyncIo_WriteString(sio, id); GWEN_SyncIo_WriteLine(sio, " *st, int i);"); } rv=write_h_setget_c(args, node, sio, "public"); if (rv) { GWEN_Buffer_free(hbuf); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); DBG_INFO(0, "here (%d)", rv); return rv; } err=GWEN_SyncIo_WriteLine(sio, ""); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, "#ifdef __cplusplus"); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, "} /* __cplusplus */"); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, "#endif"); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, ""); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } /* write trailing endif */ err=GWEN_SyncIo_WriteLine(sio, ""); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteString(sio, "#endif /* "); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(hbuf)); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_WriteLine(sio, " */"); if (err) { DBG_ERROR_ERR(0, err); GWEN_Buffer_free(hbuf); return -1; } err=GWEN_SyncIo_Disconnect(sio); if (err) { DBG_ERROR_ERR(0, err); GWEN_SyncIo_free(sio); GWEN_Buffer_free(hbuf); return -1; } GWEN_Buffer_free(hbuf); return 0; } int write_ha_files_c(ARGUMENTS *args, GWEN_XMLNODE *node) { GWEN_XMLNODE *n; int rv; n=GWEN_XMLNode_FindFirstTag(node, "type", 0, 0); while (n) { const char *nacc; nacc=get_struct_property(n, "access", "public"); if (strcasecmp(nacc, "public")==0) { rv=write_ha_file_c(args, n); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } } n=GWEN_XMLNode_FindNextTag(n, "type", 0, 0); } return 0; } gwenhywfar-5.12.0/tools/typemaker/README0000644000175000017500000000160213142134464014723 00000000000000 This tool generates source and header files for simple data containers from XML files. It creates fromDb and toDb functions for structs and getters and setters for any member. This makes it easier to maintain data containers with many members (as in AB_TRANSACTION). A member you add to the XML file will immidiately be loaded, saved, destroyed and copied with the rest of the struct upon request (e.g. _fromDb() will load all members from a GWEN_DB). The current version creates a C file and headers for it. Maybe I will later write code to create C++ files as well. It also creates appropriate API documentation if provided with the source XML file. Usage: typemaker [-d DOMAIN] infile1 infile2 [...] infileN Domain is the name of the API, e.g. for AqBanking you would choose AQBANKING_API, for Gwen GWENHYWFAR_API etc. This is used with the list and heritage macros. Martin Preuss gwenhywfar-5.12.0/tools/typemaker/Makefile.in0000664000175000017500000006574414730344662016142 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@ bin_PROGRAMS = typemaker$(EXEEXT) @IS_WINDOWS_TRUE@am__append_1 = -mconsole @IS_WINDOWS_TRUE@am__append_2 = $(PROG_LIBRARIES) subdir = tools/typemaker ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_typemaker_OBJECTS = args.$(OBJEXT) main.$(OBJEXT) phc.$(OBJEXT) \ lhc.$(OBJEXT) ahc.$(OBJEXT) code_c.$(OBJEXT) typemaker_OBJECTS = $(am_typemaker_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) typemaker_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = typemaker_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(typemaker_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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/ahc.Po ./$(DEPDIR)/args.Po \ ./$(DEPDIR)/code_c.Po ./$(DEPDIR)/lhc.Po ./$(DEPDIR)/main.Po \ ./$(DEPDIR)/phc.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(typemaker_SOURCES) DIST_SOURCES = $(typemaker_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ AM_CPPFLAGS = @all_includes@ -I$(gwenhywfar_symlinkdir) EXTRA_DIST = test.xml noinst_HEADERS = args.h typemaker_p.h typemaker_SOURCES = args.c main.c phc.c lhc.c ahc.c code_c.c typemaker_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__append_2) typemaker_LDFLAGS = @i18n_libs@ $(am__append_1) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/typemaker/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/typemaker/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-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 \ || test -f $$p1 \ ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list typemaker$(EXEEXT): $(typemaker_OBJECTS) $(typemaker_DEPENDENCIES) $(EXTRA_typemaker_DEPENDENCIES) @rm -f typemaker$(EXEEXT) $(AM_V_CCLD)$(typemaker_LINK) $(typemaker_OBJECTS) $(typemaker_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/code_c.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lhc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/phc.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; 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-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/ahc.Po -rm -f ./$(DEPDIR)/args.Po -rm -f ./$(DEPDIR)/code_c.Po -rm -f ./$(DEPDIR)/lhc.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/phc.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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-binPROGRAMS 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 ./$(DEPDIR)/ahc.Po -rm -f ./$(DEPDIR)/args.Po -rm -f ./$(DEPDIR)/code_c.Po -rm -f ./$(DEPDIR)/lhc.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/phc.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile sources: for f in $(typemaker_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # 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: gwenhywfar-5.12.0/tools/typemaker/typemaker_p.h0000644000175000017500000001014113142134476016535 00000000000000 #ifndef TYPEMAKER_P_H #define TYPEMAKER_P_H #include int write_xml_to_bio(GWEN_XMLNODE *n, GWEN_SYNCIO *sio, uint32_t flags); int write_hp_group_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_hp_file_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_h_setget_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc); int write_h_header(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *where); int write_h_enums(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc); int write_h_funcs(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc); int write_c_enums(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_h_elem_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_h_func_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_h_struct_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_hp_group_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_hp_file_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_hp_files_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_hl_file_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_hl_files_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_ha_file_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_ha_files_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_code_const_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_setget_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_file_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_code_files_c(ARGUMENTS *args, GWEN_XMLNODE *node); int write_code_freeElem_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_freeElems_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_dupArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *param); int write_code_dupList_c(ARGUMENTS *args, GWEN_XMLNODE *n, GWEN_SYNCIO *sio, const char *listName); int write_code_dup_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_todb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_todbArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_fromdbArg_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_fromdb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); int write_code_readdb_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); const char *get_function_name(GWEN_XMLNODE *node, const char *ftype); const char *get_function_name2(GWEN_XMLNODE *node, const char *ftype, const char *name); GWEN_XMLNODE *get_typedef(GWEN_XMLNODE *node, const char *name); int write_code_builtin_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio); const char *get_property(GWEN_XMLNODE *node, const char *pname, const char *defval); const char *get_struct_property(GWEN_XMLNODE *node, const char *pname, const char *defval); GWEN_XMLNODE *get_struct_node(GWEN_XMLNODE *node); int write_apidoc_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc); #endif gwenhywfar-5.12.0/tools/typemaker/args.h0000644000175000017500000000313613142134464015154 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef XMLMERGE_ARGS_H #define XMLMERGE_ARGS_H #include #define k_PRG "xmlmerge" #define k_PRG_VERSION_INFO \ "xmlmerge v0.1\n"\ "(c) 2004 Martin Preuss\n"\ "This program is free software licensed under GPL.\n"\ "See COPYING for details.\n" #define RETURNVALUE_PARAM 1 #define RETURNVALUE_SETUP 2 #define RETURNVALUE_NOSTART 3 #define RETURNVALUE_DEINIT 4 #define RETURNVALUE_HANGUP 9 typedef struct _S_PARAM FREEPARAM; typedef struct _S_ARGS ARGUMENTS; struct _S_PARAM { FREEPARAM *next; const char *param; }; struct _S_ARGS { FREEPARAM *params; int verbous; /* -v */ char *logFile; /* --logfile ARG */ GWEN_LOGGER_LOGTYPE logType; /* --logtype ARG */ GWEN_LOGGER_LEVEL logLevel; /* --loglevel ARG */ const char *outputFile; /* -o ARG */ const char *domain; /* -d ARG */ int compact; /* --compact */ }; ARGUMENTS *Arguments_new(); void Arguments_free(ARGUMENTS *ar); int checkArgs(ARGUMENTS *args, int argc, char **argv); #endif /* XMLMERGE_ARGS_H */ gwenhywfar-5.12.0/tools/typemaker/Makefile.am0000664000175000017500000000104414170115332016074 00000000000000AM_CPPFLAGS=@all_includes@ -I$(gwenhywfar_symlinkdir) EXTRA_DIST=test.xml bin_PROGRAMS=typemaker noinst_HEADERS=args.h typemaker_p.h typemaker_SOURCES=args.c main.c phc.c lhc.c ahc.c code_c.c typemaker_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) typemaker_LDFLAGS=@i18n_libs@ if IS_WINDOWS typemaker_LDFLAGS+=-mconsole typemaker_LDADD+= $(PROG_LIBRARIES) endif sources: for f in $(typemaker_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-5.12.0/tools/typemaker/main.c0000644000175000017500000010436613606364337015157 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* Internationalization */ #ifdef ENABLE_NLS # include # include # define I18N(m) dgettext("gwenhywfar", m) # define I18S(m) m #else # define I18N(m) m # define I18S(m) m #endif #include "args.h" #include "typemaker_p.h" #include #include #include #include #include #include #include #include #include #include #include int write_xml_to_bio(GWEN_XMLNODE *n, GWEN_SYNCIO *sio, uint32_t flags) { GWEN_BUFFER *buf; int rv; buf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(n, buf, flags); if (rv) { GWEN_Buffer_free(buf); return rv; } rv=GWEN_SyncIo_WriteForced(sio, (const uint8_t *) GWEN_Buffer_GetStart(buf), GWEN_Buffer_GetUsedBytes(buf)); GWEN_Buffer_free(buf); if (rv<0) { DBG_INFO(0, "here (%d)", rv); return rv; } return 0; } int write_h_header(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, GWEN_UNUSED const char *where) { int isSys; int err; const char *d; GWEN_XMLNODE *dn; /*const char *nwhere;*/ /*nwhere=GWEN_XMLNode_GetProperty(node, "out", "header"); if (strcasecmp(nwhere, where)==0) {*/ dn=GWEN_XMLNode_GetFirstData(node); if (!dn) { DBG_ERROR(0, "Empty
"); return -1; } d=GWEN_XMLNode_GetData(dn); if (!d) { DBG_ERROR(0, "Empty
"); return -1; } isSys=(strcasecmp(GWEN_XMLNode_GetProperty(node, "type", ""), "sys")==0); err=GWEN_SyncIo_WriteString(sio, "#include "); if (err) { DBG_ERROR_ERR(0, err); return -1; } if (isSys) { err=GWEN_SyncIo_WriteString(sio, "<"); if (err) { DBG_ERROR_ERR(0, err); return -1; } } else { err=GWEN_SyncIo_WriteString(sio, "\""); if (err) { DBG_ERROR_ERR(0, err); return -1; } } err=GWEN_SyncIo_WriteString(sio, d); if (err) { DBG_ERROR_ERR(0, err); return -1; } if (isSys) { err=GWEN_SyncIo_WriteLine(sio, ">"); if (err) { DBG_ERROR_ERR(0, err); return -1; } } else { err=GWEN_SyncIo_WriteLine(sio, "\""); if (err) { DBG_ERROR_ERR(0, err); return -1; } } /*} */ return 0; } void write_if_nonnull(GWEN_SYNCIO *sio, const char *str) { if (str) { GWEN_SyncIo_WriteString(sio, str); GWEN_SyncIo_WriteString(sio, " "); } } int write_h_setget_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; const char *sacc; sacc=get_struct_property(node, "access", "public"); prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while (n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { const char *name; int hasDoc; GWEN_XMLNODE *dn; hasDoc=0; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (name) { hasDoc=1; GWEN_SyncIo_WriteString(sio, "/** @name "); GWEN_SyncIo_WriteLine(sio, name); dn=GWEN_XMLNode_FindFirstTag(n, "descr", 0, 0); if (dn) { GWEN_SyncIo_WriteLine(sio, " *"); if (write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT)) return -1; } GWEN_SyncIo_WriteLine(sio, "*/"); GWEN_SyncIo_WriteLine(sio, "/*@{*/"); } rv=write_h_setget_c(args, n, sio, acc); if (rv) return rv; if (hasDoc) { GWEN_SyncIo_WriteLine(sio, "/*@}*/"); } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { if (strcasecmp(GWEN_XMLNode_GetProperty(n, "access", sacc), acc)==0) { int isPtr; const char *typ; const char *name; const char *mode; const char *tmode; int isConst; /*int doCopy;*/ GWEN_XMLNODE *tnode; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); isConst=atoi(get_property(n, "const", "1")); /*doCopy=atoi(get_property(n, "copy", "1"));*/ mode=GWEN_XMLNode_GetProperty(n, "mode", "single"); if (strcasecmp(mode, "single")!=0) isPtr=1; tnode=get_typedef(node, typ); if (tnode) tmode=GWEN_XMLNode_GetProperty(tnode, "mode", "single"); else tmode=mode; /* getter */ GWEN_SyncIo_WriteLine(sio, "/**"); GWEN_SyncIo_WriteString(sio, "* Returns the property @ref "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteLine(sio, "*/"); write_if_nonnull(sio, args->domain); if (isPtr && (/*strcasecmp(mode, "single")==0 ||*/ isConst)) { GWEN_SyncIo_WriteString(sio, "const "); } if (strcasecmp(tmode, "enum")!=0) GWEN_SyncIo_WriteString(sio, typ); else { GWEN_BUFFER *tid; const char *s; tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); GWEN_Buffer_AppendString(tid, typ); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); } if (isPtr) { GWEN_SyncIo_WriteString(sio, " *"); } else { GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Get"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *el);"); /* setter */ GWEN_SyncIo_WriteLine(sio, "/**"); GWEN_SyncIo_WriteString(sio, "* Set the property @ref "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteLine(sio, "*/"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *el, "); if (isPtr && isConst) { GWEN_SyncIo_WriteString(sio, "const "); } if (strcasecmp(tmode, "enum")!=0) GWEN_SyncIo_WriteString(sio, typ); else { GWEN_BUFFER *tid; const char *s; tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); GWEN_Buffer_AppendString(tid, typ); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); } if (isPtr) { GWEN_SyncIo_WriteString(sio, " *"); } else { GWEN_SyncIo_WriteString(sio, " "); } GWEN_SyncIo_WriteLine(sio, "d);"); if (strcasecmp(typ, "GWEN_STRINGLIST")==0) { /* special functions for string lists */ write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Add"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d, int chk);"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Remove"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d);"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Clear"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st);"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "int "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Has"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st, const char *d);"); } } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "func")==0) { if (strcasecmp(GWEN_XMLNode_GetProperty(n, "access", sacc), acc)==0) { const char *typ; const char *name; const char *rettype; GWEN_XMLNODE *anode; int isPtr; /*int isVoid;*/ int idx; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } rettype=GWEN_XMLNode_GetProperty(n, "return", 0); if (!rettype) { DBG_ERROR(0, "No return type for function"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); /*isVoid=(!isPtr && strcasecmp(rettype, "void")==0);*/ /* getter */ GWEN_SyncIo_WriteLine(sio, "/**"); GWEN_SyncIo_WriteString(sio, "* Returns the property @ref "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteLine(sio, "*/"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Get"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "(const "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteLine(sio, " *st);"); /* setter */ GWEN_SyncIo_WriteLine(sio, "/**"); GWEN_SyncIo_WriteString(sio, "* Set the property @ref "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteLine(sio, "*/"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "void "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name));; GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st, "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteLine(sio, " d);"); /* function call */ GWEN_SyncIo_WriteLine(sio, "/**"); /* TODO: Write API doc for this function */ GWEN_SyncIo_WriteLine(sio, "*/"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, rettype); if (isPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, "("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st"); anode=GWEN_XMLNode_FindFirstTag(n, "arg", 0, 0); idx=0; while (anode) { const char *aname; const char *atype; int aisPtr; GWEN_SyncIo_WriteString(sio, ", "); aisPtr=atoi(GWEN_XMLNode_GetProperty(anode, "ptr", "0")); aname=GWEN_XMLNode_GetProperty(anode, "name", 0); if (!aname || !*aname) { DBG_ERROR(0, "No name for argument %d in function %s", idx, name); return -1; } atype=GWEN_XMLNode_GetProperty(anode, "type", 0); if (!atype || !*atype) { DBG_ERROR(0, "No type for argument %d in function %s", idx, name); return -1; } GWEN_SyncIo_WriteString(sio, atype); if (aisPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, aname); idx++; anode=GWEN_XMLNode_FindNextTag(anode, "arg", 0, 0); } GWEN_SyncIo_WriteLine(sio, ");"); } } } GWEN_SyncIo_WriteLine(sio, ""); n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_h_enums(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc) { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(node, "subtypes", 0, 0); if (n) n=GWEN_XMLNode_FindFirstTag(n, "type", "mode", "enum"); if (n) { GWEN_BUFFER *tprefix; GWEN_BUFFER *tid; uint32_t ppos; uint32_t tpos; const char *s; tprefix=GWEN_Buffer_new(0, 64, 0, 1); tid=GWEN_Buffer_new(0, 64, 0, 1); s=get_struct_property(node, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_Buffer_AppendString(tprefix, "_"); ppos=GWEN_Buffer_GetPos(tprefix); s=get_struct_property(node, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); GWEN_Buffer_AppendString(tid, "_"); tpos=GWEN_Buffer_GetPos(tid); while (n) { s=GWEN_XMLNode_GetProperty(n, "access", "public"); if (strcasecmp(s, acc)==0) { GWEN_XMLNODE *nn; s=GWEN_XMLNode_GetProperty(n, "id", 0); assert(s); GWEN_Buffer_AppendString(tid, s); s=GWEN_XMLNode_GetProperty(n, "prefix", 0); assert(s); GWEN_Buffer_AppendString(tprefix, s); GWEN_SyncIo_WriteLine(sio, "typedef enum {"); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteString(sio, "Unknown=-1"); nn=GWEN_XMLNode_FindFirstTag(n, "values", 0, 0); if (nn) nn=GWEN_XMLNode_FindFirstTag(nn, "value", 0, 0); if (nn) { uint32_t vpos; vpos=GWEN_Buffer_GetPos(tprefix); while (nn) { GWEN_XMLNODE *nnn; GWEN_XMLNODE *dn; nnn=GWEN_XMLNode_GetFirstData(nn); if (!nnn) { DBG_ERROR(0, "No values in enum description for \"%s\"", GWEN_Buffer_GetStart(tid)); GWEN_Buffer_free(tid); GWEN_Buffer_free(tprefix); return -1; } GWEN_SyncIo_WriteLine(sio, ","); dn=GWEN_XMLNode_FindFirstTag(nn, "descr", 0, 0); if (dn) { GWEN_SyncIo_WriteString(sio, " /** "); if (write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT)) return -1; GWEN_SyncIo_WriteLine(sio, " */"); } GWEN_SyncIo_WriteString(sio, " "); s=GWEN_XMLNode_GetData(nnn); assert(s); GWEN_Buffer_AppendByte(tprefix, toupper(*s)); GWEN_Buffer_AppendString(tprefix, s+1); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); s=GWEN_XMLNode_GetProperty(nn, "value", 0); if (s) { GWEN_SyncIo_WriteString(sio, "="); GWEN_SyncIo_WriteString(sio, s); } GWEN_Buffer_Crop(tprefix, 0, vpos); nn=GWEN_XMLNode_FindNextTag(nn, "value", 0, 0); } } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteString(sio, "} "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_SyncIo_WriteLine(sio, ";"); GWEN_SyncIo_WriteLine(sio, ""); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteLine(sio, "_fromString(const char *s);"); write_if_nonnull(sio, args->domain); GWEN_SyncIo_WriteString(sio, "const char *"); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tprefix)); GWEN_SyncIo_WriteString(sio, "_toString("); GWEN_SyncIo_WriteString(sio, GWEN_Buffer_GetStart(tid)); GWEN_SyncIo_WriteLine(sio, " v);"); GWEN_Buffer_Crop(tprefix, 0, ppos); GWEN_Buffer_Crop(tid, 0, tpos); GWEN_SyncIo_WriteLine(sio, ""); } /* if access type matches */ n=GWEN_XMLNode_FindNextTag(n, "type", "mode", "enum"); } /* while n */ GWEN_Buffer_free(tid); GWEN_Buffer_free(tprefix); } /* if enum types found */ return 0; } int write_h_funcs(GWEN_UNUSED ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc) { GWEN_XMLNODE *n; const char *styp; styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_FindFirstTag(node, "func", 0, 0); while (n) { const char *sacc; sacc=get_struct_property(n, "access", "public"); assert(sacc); if (strcasecmp(sacc, acc)==0) { const char *prefix; const char *name; const char *rettype; const char *typ; GWEN_XMLNODE *anode; int isPtr; int idx; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for function"); return -1; } rettype=GWEN_XMLNode_GetProperty(n, "return", 0); if (!rettype) { DBG_ERROR(0, "No return type for function"); return -1; } prefix=get_struct_property(n, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } isPtr=atoi(get_property(n, "ptr", "0")); typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for function"); return -1; } /* typdef rettype (*typ)(args) */ GWEN_SyncIo_WriteString(sio, "typedef "); GWEN_SyncIo_WriteString(sio, rettype); if (isPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, " (*"); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteString(sio, typ); GWEN_SyncIo_WriteString(sio, ")("); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, " *st"); anode=GWEN_XMLNode_FindFirstTag(n, "arg", 0, 0); idx=0; while (anode) { const char *aname; const char *atype; int aisPtr; GWEN_SyncIo_WriteString(sio, ", "); aisPtr=atoi(GWEN_XMLNode_GetProperty(anode, "ptr", "0")); aname=GWEN_XMLNode_GetProperty(anode, "name", 0); if (!aname || !*aname) { DBG_ERROR(0, "No name for argument %d in function %s", idx, name); return -1; } atype=GWEN_XMLNode_GetProperty(anode, "type", 0); if (!atype || !*atype) { DBG_ERROR(0, "No type for argument %d in function %s", idx, name); return -1; } GWEN_SyncIo_WriteString(sio, atype); GWEN_SyncIo_WriteString(sio, " "); if (aisPtr) GWEN_SyncIo_WriteString(sio, "*"); GWEN_SyncIo_WriteString(sio, aname); idx++; anode=GWEN_XMLNode_FindNextTag(anode, "arg", 0, 0); } GWEN_SyncIo_WriteLine(sio, ");"); } n=GWEN_XMLNode_FindNextTag(n, "func", 0, 0); } /* while functions */ GWEN_SyncIo_WriteLine(sio, ""); return 0; } int write_apidocrec_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc, int level) { GWEN_XMLNODE *n; int rv; const char *prefix; const char *styp; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } n=GWEN_XMLNode_GetFirstTag(node); while (n) { if (GWEN_XMLNode_GetType(n)==GWEN_XMLNodeTypeTag) { if (strcasecmp(GWEN_XMLNode_GetData(n), "group")==0) { const char *name; GWEN_XMLNODE *dn; char numbuf[16]; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } snprintf(numbuf, sizeof(numbuf), "%d", level); GWEN_SyncIo_WriteString(sio, ""); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, ""); GWEN_SyncIo_WriteLine(sio, "

"); dn=GWEN_XMLNode_FindFirstTag(n, "descr", 0, 0); if (dn) { if (write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT)) { DBG_INFO(0, "here"); return -1; } } GWEN_SyncIo_WriteLine(sio, "

"); rv=write_apidocrec_c(args, n, sio, acc, level+1); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } } else if (strcasecmp(GWEN_XMLNode_GetData(n), "elem")==0) { if (strcasecmp(GWEN_XMLNode_GetProperty(n, "access", "public"), acc)==0) { const char *typ; const char *name; GWEN_XMLNODE *dn; char numbuf[16]; name=GWEN_XMLNode_GetProperty(n, "name", 0); if (!name) { DBG_ERROR(0, "No name for element"); return -1; } typ=GWEN_XMLNode_GetProperty(n, "type", 0); if (!typ) { DBG_ERROR(0, "No type for element"); return -1; } snprintf(numbuf, sizeof(numbuf), "%d", level); GWEN_SyncIo_WriteString(sio, "@anchor "); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteString(sio, ""); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteString(sio, ""); dn=GWEN_XMLNode_FindFirstTag(n, "brief", 0, 0); if (dn) { GWEN_SyncIo_WriteString(sio, "@short "); if (write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT)) { DBG_INFO(0, "here"); return -1; } GWEN_SyncIo_WriteLine(sio, ""); GWEN_SyncIo_WriteLine(sio, ""); } GWEN_SyncIo_WriteLine(sio, "

"); dn=GWEN_XMLNode_FindFirstTag(n, "descr", 0, 0); if (dn) { rv=write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT); if (rv) { DBG_INFO(0, "here (%d)", rv); return -1; } } GWEN_SyncIo_WriteLine(sio, "

"); GWEN_SyncIo_WriteLine(sio, "

"); GWEN_SyncIo_WriteString(sio, "Set this property with @ref "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Set"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteString(sio, name+1); GWEN_SyncIo_WriteLine(sio, ", "); GWEN_SyncIo_WriteString(sio, "get it with @ref "); GWEN_SyncIo_WriteString(sio, prefix); GWEN_SyncIo_WriteString(sio, "_Get"); GWEN_SyncIo_WriteChar(sio, toupper(*name)); GWEN_SyncIo_WriteLine(sio, name+1); GWEN_SyncIo_WriteLine(sio, "

"); GWEN_SyncIo_WriteLine(sio, ""); } } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int write_apidoc_c(ARGUMENTS *args, GWEN_XMLNODE *node, GWEN_SYNCIO *sio, const char *acc) { const char *prefix; const char *styp; GWEN_XMLNODE *dn; const char *brief; const char *s; int rv; prefix=get_struct_property(node, "prefix", 0); if (!prefix) { DBG_ERROR(0, "No prefix in struct"); return -1; } styp=get_struct_property(node, "id", 0); if (!styp) { DBG_ERROR(0, "No id in struct"); return -1; } GWEN_SyncIo_WriteString(sio, "/** @page P_"); GWEN_SyncIo_WriteString(sio, styp); GWEN_SyncIo_WriteString(sio, "_"); s=acc; while (*s) { GWEN_SyncIo_WriteChar(sio, toupper(*s)); s++; } brief=GWEN_XMLNode_GetProperty(node, "name", prefix); GWEN_SyncIo_WriteString(sio, " "); GWEN_SyncIo_WriteString(sio, brief); GWEN_SyncIo_WriteString(sio, " ("); GWEN_SyncIo_WriteString(sio, acc); GWEN_SyncIo_WriteLine(sio, ")"); GWEN_SyncIo_WriteString(sio, "This page describes the properties of "); GWEN_SyncIo_WriteLine(sio, styp); dn=GWEN_XMLNode_FindFirstTag(node, "descr", 0, 0); if (dn) { if (write_xml_to_bio(dn, sio, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_INDENT)) { DBG_INFO(0, "here"); return -1; } } rv=write_apidocrec_c(args, node, sio, acc, 3); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } GWEN_SyncIo_WriteLine(sio, "*/"); return 0; } int write_files(ARGUMENTS *args, GWEN_XMLNODE *node) { int rv; GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag(node, "types", 0, 0); if (!n) { DBG_WARN(0, "Empty file"); return 0; } rv=write_hp_files_c(args, n); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } rv=write_hl_files_c(args, n); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } rv=write_ha_files_c(args, n); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } rv=write_code_files_c(args, n); if (rv) { DBG_INFO(0, "here (%d)", rv); return rv; } return 0; } const char *get_function_name2(GWEN_XMLNODE *node, const char *ftype, const char *name) { GWEN_XMLNODE *n; /* find typedef for this type */ n=node; /* get root */ while (GWEN_XMLNode_GetParent(n)) n=GWEN_XMLNode_GetParent(n); n=GWEN_XMLNode_FindFirstTag(n, "typedefs", 0, 0); if (!n) return 0; n=GWEN_XMLNode_FindFirstTag(n, "type", "id", name); if (!n) return 0; n=GWEN_XMLNode_FindFirstTag(n, "functions", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "function", "type", ftype); if (n) return GWEN_XMLNode_GetProperty(n, "name", 0); } return 0; } const char *get_function_name(GWEN_XMLNODE *node, const char *ftype) { GWEN_XMLNODE *n; const char *name; n=GWEN_XMLNode_FindFirstTag(node, "functions", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "function", "type", ftype); if (n) return GWEN_XMLNode_GetProperty(n, "name", 0); } name=GWEN_XMLNode_GetProperty(node, "type", 0); if (!name) { DBG_ERROR(0, "no type for element"); return 0; } /* find typedef for this type */ n=node; /* get root */ while (GWEN_XMLNode_GetParent(n)) n=GWEN_XMLNode_GetParent(n); n=GWEN_XMLNode_FindFirstTag(n, "typedefs", 0, 0); if (!n) return 0; n=GWEN_XMLNode_FindFirstTag(n, "type", "id", name); if (!n) return 0; n=GWEN_XMLNode_FindFirstTag(n, "functions", 0, 0); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "function", "type", ftype); if (n) return GWEN_XMLNode_GetProperty(n, "name", 0); } return 0; } GWEN_XMLNODE *get_typedef(GWEN_XMLNODE *node, const char *name) { GWEN_XMLNODE *n; GWEN_XMLNODE *n2; assert(name); /* find typedef for this type */ n=node; /* get root */ while (GWEN_XMLNode_GetParent(n)) n=GWEN_XMLNode_GetParent(n); n2=GWEN_XMLNode_FindFirstTag(n, "typedefs", 0, 0); if (n2) n2=GWEN_XMLNode_FindFirstTag(n2, "type", "id", name); if (n2) return n2; n2=GWEN_XMLNode_FindFirstTag(n, "types", 0, 0); if (n2) n2=GWEN_XMLNode_FindFirstTag(n2, "type", "id", name); if (n2) return n2; n2=get_struct_node(node); assert(n2); n2=GWEN_XMLNode_FindFirstTag(n2, "subtypes", 0, 0); if (n2) n2=GWEN_XMLNode_FindFirstTag(n2, "type", "id", name); if (n2) return n2; return 0; } const char *get_property(GWEN_XMLNODE *node, const char *pname, const char *defval) { GWEN_XMLNODE *n; const char *name; const char *r; r=GWEN_XMLNode_GetProperty(node, pname, 0); if (r) return r; name=GWEN_XMLNode_GetProperty(node, "type", 0); if (!name) { DBG_ERROR(0, "no type for element"); return defval; } /* find typedef for this type */ n=node; /* get root */ while (GWEN_XMLNode_GetParent(n)) n=GWEN_XMLNode_GetParent(n); n=GWEN_XMLNode_FindFirstTag(n, "typedefs", 0, 0); if (!n) return defval; n=GWEN_XMLNode_FindFirstTag(n, "type", "id", name); if (!n) return defval; return GWEN_XMLNode_GetProperty(n, pname, defval); } const char *get_struct_property(GWEN_XMLNODE *node, const char *pname, const char *defval) { GWEN_XMLNODE *n; if (GWEN_XMLNode_GetType(node)==GWEN_XMLNodeTypeTag) if (strcasecmp(GWEN_XMLNode_GetData(node), "type")==0) { return GWEN_XMLNode_GetProperty(node, pname, defval); } /* find typedef for this type */ n=GWEN_XMLNode_GetParent(node); if (n) return get_struct_property(n, pname, defval); return defval; } GWEN_XMLNODE *get_struct_node(GWEN_XMLNODE *node) { while (node) { if (GWEN_XMLNode_GetType(node)==GWEN_XMLNodeTypeTag) if (strcasecmp(GWEN_XMLNode_GetData(node), "type")==0) { return node; } node=GWEN_XMLNode_GetParent(node); } return 0; } int main(int argc, char **argv) { ARGUMENTS *args; int rv; FREEPARAM *inFile; args=Arguments_new(); rv=checkArgs(args, argc, argv); if (rv==-1) { fprintf(stderr, "Parameter error\n"); return rv; } else if (rv==-2) { return 0; } GWEN_Logger_Open(0, "typemaker", args->logFile, args->logType, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, args->logLevel); inFile=args->params; if (!inFile) { fprintf(stderr, "No input file given.\n"); Arguments_free(args); return 1; } /* read all files */ while (inFile) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "inFile"); if (GWEN_XML_ReadFile(n, inFile->param, GWEN_XML_FLAGS_DEFAULT)) { fprintf(stderr, "ERROR: Error reading file \"%s\"\n", inFile->param); GWEN_XMLNode_free(n); return 2; } /* write file(s) */ rv=write_files(args, n); if (rv) { DBG_ERROR(0, "Error in file \"%s\"", inFile->param); GWEN_XMLNode_free(n); return 2; } GWEN_XMLNode_free(n); inFile=inFile->next; } /* while */ Arguments_free(args); return 0; } gwenhywfar-5.12.0/tools/typemaker/test.xml0000644000175000017500000000631113142134464015546 00000000000000
gwenhywfar/types.h
gwenhywfar/gwentime.h
gwenhywfar/stringlist.h
aqbanking/value.h
This group contains information about the local account. This is the code of the local bank (i.e. your bank). This group contains information about the remote account.

This group contains information which differ between backends.

Some of this information might not even be supported by every backends.

gwenhywfar-5.12.0/tools/typemaker2/0000775000175000017500000000000014730345121014206 500000000000000gwenhywfar-5.12.0/tools/typemaker2/tm_item.h0000644000175000017500000000371613142134464015744 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_item.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_ITEM_H #define TM_ITEM_H #ifdef __cplusplus extern "C" { #endif /* needed system headers */ #include #include #include #include typedef struct TYPEMAKER2_ITEM TYPEMAKER2_ITEM; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_ITEM, Typemaker2_Item) GWEN_LIST2_FUNCTION_DEFS(TYPEMAKER2_ITEM, Typemaker2_Item) /** Constructor. */ TYPEMAKER2_ITEM *Typemaker2_Item_new(void); /** Destructor. */ void Typemaker2_Item_free(TYPEMAKER2_ITEM *p_struct); TYPEMAKER2_ITEM *Typemaker2_Item_dup(const TYPEMAKER2_ITEM *p_struct); TYPEMAKER2_ITEM *Typemaker2_Item_copy(TYPEMAKER2_ITEM *p_struct, const TYPEMAKER2_ITEM *p_src); /** Getter. * Use this function to get the member "name" */ const char *Typemaker2_Item_GetName(const TYPEMAKER2_ITEM *p_struct); /** Getter. * Use this function to get the member "value" */ const char *Typemaker2_Item_GetValue(const TYPEMAKER2_ITEM *p_struct); /** Setter. * Use this function to set the member "name" */ void Typemaker2_Item_SetName(TYPEMAKER2_ITEM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "value" */ void Typemaker2_Item_SetValue(TYPEMAKER2_ITEM *p_struct, const char *p_src); TYPEMAKER2_ITEM_LIST *Typemaker2_Item_List_dup(const TYPEMAKER2_ITEM_LIST *p_src); void Typemaker2_Item_ReadXml(TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Item_WriteXml(const TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Item_toXml(const TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_ITEM *Typemaker2_Item_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/builddefs.c0000664000175000017500000000752514116666046016256 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "typemaker2.h" #include "tm_typemanager.h" #include "tm_builder_c.h" #include #include #include int doBuildDefs(GWEN_DB_NODE *dbArgs, const char *fname) { TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_BUILDER *tb=NULL; TYPEMAKER2_TYPE *ty; GWEN_STRINGLIST *sl; TYPEMAKER2_TYPE_LIST2 *tlist; TYPEMAKER2_TYPE_LIST2_ITERATOR *it; const char *s; int i; int rv; tym=Typemaker2_TypeManager_new(); s=GWEN_DB_GetCharValue(dbArgs, "api", 0, NULL); if (s && *s) Typemaker2_TypeManager_SetApiDeclaration(tym, s); s=GWEN_DB_GetCharValue(dbArgs, "language", 0, "c"); if (s && *s) { Typemaker2_TypeManager_SetLanguage(tym, s); if (strcasecmp(s, "c")==0) { tb=Typemaker2_Builder_C_new(); Typemaker2_Builder_SetTypeManager(tb, tym); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported language [%s]", s); return 1; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Missing language specification"); return 1; } s = GWEN_DB_GetCharValue(dbArgs, "destFolder", 0, NULL); if (s) Typemaker2_Builder_SetDestFolderName(tb, s); Typemaker2_Builder_SetSourceFileName(tb, fname); for (i=0; i<99; i++) { s=GWEN_DB_GetCharValue(dbArgs, "include", i, NULL); if (s && *s) Typemaker2_TypeManager_AddFolder(tym, s); else break; } sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_DATADIR); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while (se) { s=GWEN_StringListEntry_Data(se); if (s) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, "/typemaker2/"); s=Typemaker2_TypeManager_GetLanguage(tym); if (s && *s) GWEN_Buffer_AppendString(xbuf, s); Typemaker2_TypeManager_AddFolder(tym, GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } tlist=Typemaker2_Type_List2_new(); rv=Typemaker2_TypeManager_LoadTypeFileNoLookup(tym, fname, tlist); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to load file [%s] (%d)", fname, rv); return 2; } it=Typemaker2_Type_List2_First(tlist); if (it) { ty=Typemaker2_Type_List2Iterator_Data(it); while (ty) { /* DEBUG */ #if 0 Typemaker2_TypeManager_Dump(tym, stderr, 2); #endif /* only write typedef files */ rv=Typemaker2_Builder_WriteFiles(tb, ty, TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_DEFS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } /* handle next type */ ty=Typemaker2_Type_List2Iterator_Next(it); } Typemaker2_Type_List2Iterator_free(it); } Typemaker2_Type_List2_free(tlist); return 0; } int buildDefs(GWEN_DB_NODE *dbArgs) { int i; for (i=0; i<99; i++) { const char *fileName; fileName=GWEN_DB_GetCharValue(dbArgs, "params", i, NULL); if (fileName) { int rv=doBuildDefs(dbArgs, fileName); if (rv != 0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error building type from [%s]", fileName); return 2; } } else { if (i==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No input"); GWEN_DB_Dump(dbArgs, 2); return 1; } } } return 0; } gwenhywfar-5.12.0/tools/typemaker2/README0000664000175000017500000002460614460564441015026 00000000000000TODO: - maybe define inlines to be used when used as member of other types (using the normal element doesn't work in structs because that duplicates code) TEST Test with_db with_xml with_object with_list1 with_list2 with_inherit with_idmap
gwenhywfar/types.h
test/user.h
test_l.h
0 0 library volatile NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL protected own nodup const dup const NULL NULL private own const dup const Test_Enum_Mode_Unknown Test_Enum_Mode_Unknown public attribute enum none none
int AQDB_DataType_Int int $(memberName); $(dest)=$(src) $(dest)=$(src) $(dest)=0; $(api) int $(typePrefix)_Get$(memberNameToUpper)(const $(typeId) *p_struct); int $(typePrefix)_Get$(memberNameToUpper)(const $(typeId) *p_struct) { return p_struct->$(memberName); } $(api) void $(typePrefix)_Set$(memberNameToUpper)($(typeId) *p_struct, int p_src); void $(typePrefix)_Set$(memberNameToUpper)($(typeId) *p_struct, int p_src) { p_struct->$(memberName); } 0 0 int AQDB_DataType_String if ($(src)) $(dest)=strdup($(src)); else $(dest)=NULL; if ($(src)) $(dest)=strdup($(src)); else $(dest)=NULL; $(dest)=NULL; if ($(src)) free($(src)) $(src)=NULL; extending types: { int64_t v64=(int64_t) ($(src)); $(retval)=AQDB_Object_SetFieldInt64($(object), $(fieldId), v64); } { int64_t v64; $(retval)=AQDB_Object_GetFieldInt64($(object), $(fieldId), &v64); if ($(retval)>=0) $(dst)=(int) v64; } init fini get set toDb fromDb $(api) int $(typePrefix)_toDb(const $(typeId) *p_struct, GWEN_DB_NODE *p_db); int $(typePrefix)_toDb(const $(typeId) *p_struct, GWEN_DB_NODE *p_db) { if (p_struct->$(memberName)) { int p_rv; if (p_rv<0) { DBG_ERROR($(logdomain), "here (%d)", p_rv); return p_rv; } } return 0; } char *$(memberName); p_struct->$(memberName)=$(preset); if (p_struct->$(memberName)) free(p_struct->$(memberName)); p_struct->$(memberName)=NULL; $(api) const char *$(typePrefix)_Get$(memberNameToUpper)(const $(typeId) *p_struct); const char *$(typePrefix)_Get$(memberNameToUpper)(const $(typeId) *p_struct) { return p_struct->$(memberName); } $(api) void $(typePrefix)_Set$(memberNameToUpper)($(typeId) *p_struct, const char *p_src); $(api) void $(typePrefix)_Set$(memberNameToUpper)($(typeId) *p_struct, char *p_src); void $(typePrefix)_Set$(memberNameToUpper)($(typeId) *p_struct, const char *p_src) void $(typePrefix)_Set$(memberNameToUpper)($(typeId) *p_struct, char *p_src) { if (p_struct->$(memberName)) free(p_struct->$(memberName)); if (p_src) p_struct->$(memberName)=strdup(p_src); else p_struct->$(memberName)=NULL; p_struct->$(memberName)=p_src; } if ($(struct_data)->$(memberName)) { int rv; rv=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(memberName)", $(src)); if (rv<0) { DBG_INFO($(logdomain), "here (%d)", rv); return rv; } } else GWEN_DB_DeleteVar($(db), "$(name)"); { const char *s; if (p_struct->$(memberName)) free(p_struct->$(memberName)); s=GWEN_DB_GetCharValue($(db), "$(memberName)", 0, $(default)); if (s) $(dst)=strdup(s); else $(dst)=NULL; } 0 0 $(api) int $(typePrefix)_toDb(const $(typeId) *p_struct, GWEN_DB_NODE *p_db); int $(typePrefix)_toDb(const $(typeId) *p_struct, GWEN_DB_NODE *p_db) { if (p_struct->$(memberName)) { int p_rv; if (p_rv<0) { DBG_ERROR($(logdomain), "here (%d)", p_rv); return p_rv; } } return 0; } gwenhywfar-5.12.0/tools/typemaker2/tm_code.xml0000644000175000017500000000412113142134464016260 00000000000000 TYPEMAKER2_CODE Typemaker2_Code tm_code with_list1 with_xml
tm_item.h
NULL NULL public own attribute const dup const NULL NULL public own const dup const NULL NULL public own const dup const NULL NULL public own const dup const 0 0 public volatile none none 0 0 public volatile none none
gwenhywfar-5.12.0/tools/typemaker2/tm_member.h0000644000175000017500000001051713312251310016237 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_MEMBER_H #define TYPEMAKER2_MEMBER_H #include #include #include typedef struct TYPEMAKER2_MEMBER TYPEMAKER2_MEMBER; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_MEMBER, Typemaker2_Member); #include "tm_type.h" #include "tm_enum.h" #include "tm_define.h" #include "tm_group.h" #include "tm_code.h" TYPEMAKER2_MEMBER *Typemaker2_Member_new(); void Typemaker2_Member_free(TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_Attach(TYPEMAKER2_MEMBER *tm); const char *Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetName(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetTypeName(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetTypeName(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetElementName(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetElementName(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetDescription(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetDescription(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetFieldId(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetEnumId(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetEnumId(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetDefineId(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetDefineId(TYPEMAKER2_MEMBER *tm, const char *s); uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i); uint32_t Typemaker2_Member_GetSetFlags(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetSetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i); uint32_t Typemaker2_Member_GetGetFlags(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetGetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i); uint32_t Typemaker2_Member_GetDupFlags(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetDupFlags(TYPEMAKER2_MEMBER *tm, uint32_t i); uint32_t Typemaker2_Member_GetCopyFlags(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetCopyFlags(TYPEMAKER2_MEMBER *tm, uint32_t i); TYPEMAKER2_TYPE *Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetTypePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_TYPE *ty); TYPEMAKER2_ENUM *Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetEnumPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_ENUM *te); TYPEMAKER2_DEFINE *Typemaker2_Member_GetDefinePtr(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetDefinePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_DEFINE *td); TYPEMAKER2_GROUP *Typemaker2_Member_GetGroupPtr(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetGroupPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_GROUP *gr); int Typemaker2_Member_GetAccess(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetAccess(TYPEMAKER2_MEMBER *tm, int i); const char *Typemaker2_Member_GetDefaultValue(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetDefaultValue(TYPEMAKER2_MEMBER *tm, const char *s); const char *Typemaker2_Member_GetPresetValue(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetPresetValue(TYPEMAKER2_MEMBER *tm, const char *s); int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetMaxLen(TYPEMAKER2_MEMBER *tm, int i); const char *Typemaker2_Member_GetAqDbType(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetAqDbType(TYPEMAKER2_MEMBER *tm, const char *s); int Typemaker2_Member_GetMemberPosition(const TYPEMAKER2_MEMBER *tm); void Typemaker2_Member_SetMemberPosition(TYPEMAKER2_MEMBER *tm, int i); TYPEMAKER2_CODE_LIST *Typemaker2_Member_GetCodeDefs(const TYPEMAKER2_MEMBER *tm); int Typemaker2_Member_readXml(TYPEMAKER2_MEMBER *tm, GWEN_XMLNODE *node, const char *wantedLang); void Typemaker2_Member_Dump(TYPEMAKER2_MEMBER *tm, FILE *f, int indent); #endif gwenhywfar-5.12.0/tools/typemaker2/tm_header_p.h0000644000175000017500000000122713142134464016550 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_HEADER_P_H #define TYPEMAKER2_HEADER_P_H #include "tm_header.h" struct TYPEMAKER2_HEADER { GWEN_LIST_ELEMENT(TYPEMAKER2_HEADER) char *fileName; int type; int location; int refCount; }; #endif gwenhywfar-5.12.0/tools/typemaker2/tm_slot.h0000644000175000017500000000571313142134464015766 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_slot.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_SLOT_H #define TM_SLOT_H #ifdef __cplusplus extern "C" { #endif /* define TYPEMAKER2_SLOT_FLAGS */ #define TYPEMAKER2_SLOT_FLAGS_USE_PARAM3 0x00000001 #define TYPEMAKER2_SLOT_FLAGS_USE_PARAM4 0x00000002 /* needed system headers */ #include #include #include #include typedef struct TYPEMAKER2_SLOT TYPEMAKER2_SLOT; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_SLOT, Typemaker2_Slot) GWEN_LIST2_FUNCTION_DEFS(TYPEMAKER2_SLOT, Typemaker2_Slot) /** Constructor. */ TYPEMAKER2_SLOT *Typemaker2_Slot_new(void); /** Destructor. */ void Typemaker2_Slot_free(TYPEMAKER2_SLOT *p_struct); TYPEMAKER2_SLOT *Typemaker2_Slot_dup(const TYPEMAKER2_SLOT *p_struct); TYPEMAKER2_SLOT *Typemaker2_Slot_copy(TYPEMAKER2_SLOT *p_struct, const TYPEMAKER2_SLOT *p_src); /** Getter. * Use this function to get the member "name" */ const char *Typemaker2_Slot_GetName(const TYPEMAKER2_SLOT *p_struct); /** Getter. * Use this function to get the member "paramType1" */ const char *Typemaker2_Slot_GetParamType1(const TYPEMAKER2_SLOT *p_struct); /** Getter. * Use this function to get the member "paramType2" */ const char *Typemaker2_Slot_GetParamType2(const TYPEMAKER2_SLOT *p_struct); /** Getter. * Use this function to get the member "flags" */ uint32_t Typemaker2_Slot_GetFlags(const TYPEMAKER2_SLOT *p_struct); /** Setter. * Use this function to set the member "name" */ void Typemaker2_Slot_SetName(TYPEMAKER2_SLOT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "paramType1" */ void Typemaker2_Slot_SetParamType1(TYPEMAKER2_SLOT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "paramType2" */ void Typemaker2_Slot_SetParamType2(TYPEMAKER2_SLOT *p_struct, const char *p_src); /** Setter. * Use this function to set the member "flags" */ void Typemaker2_Slot_SetFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to the member "flags" */ void Typemaker2_Slot_AddFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src); /** Sub flags. * Use this function to sub flags to the member "flags" */ void Typemaker2_Slot_SubFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src); TYPEMAKER2_SLOT_LIST *Typemaker2_Slot_List_dup(const TYPEMAKER2_SLOT_LIST *p_src); void Typemaker2_Slot_ReadXml(TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Slot_WriteXml(const TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Slot_toXml(const TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_SLOT *Typemaker2_Slot_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/tm_code_p.h0000644000175000017500000000127413142134464016234 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_code.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_CODE_P_H #define TM_CODE_P_H #include "tm_code.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_CODE { GWEN_LIST_ELEMENT(TYPEMAKER2_CODE) char *id; char *memberFlagsMask; char *memberFlagsValue; char *code; uint32_t memberFlagsMaskInt; /* volatile */ uint32_t memberFlagsValueInt; /* volatile */ }; #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/tm_type_p.h0000664000175000017500000000324714460564441016315 00000000000000/*************************************************************************** begin : Wed Jul 01 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_TYPE_P_H #define TYPEMAKER2_TYPE_P_H #include "tm_type.h" struct TYPEMAKER2_TYPE { GWEN_LIST_ELEMENT(TYPEMAKER2_TYPE) char *name; char *descr; uint32_t flags; uint32_t setFlags; uint32_t getFlags; uint32_t dupFlags; uint32_t copyFlags; int access; int usePrivateConstructor; int structAccess; int type; char *extends; char *baseType; char *inherits; char *identifier; char *prefix; char *defaultValue; char *presetValue; char *aqdb_type; char *baseFileName; char *freeHook; int pack; TYPEMAKER2_HEADER_LIST *headers; TYPEMAKER2_ENUM_LIST *enums; TYPEMAKER2_DEFINE_LIST *defines; TYPEMAKER2_CODE_LIST *codeDefs; TYPEMAKER2_INLINE_LIST *inlines; TYPEMAKER2_VIRTUALFN_LIST *virtualFns; TYPEMAKER2_SIGNAL_LIST *signals; TYPEMAKER2_SLOT_LIST *slots; TYPEMAKER2_GROUP_TREE *groupTree; GWEN_STRINGLIST *structIncludes; GWEN_STRINGLIST *privateIncludes; GWEN_STRINGLIST *libraryIncludes; GWEN_STRINGLIST *publicIncludes; GWEN_STRINGLIST *codeIncludes; TYPEMAKER2_MEMBER_LIST *members; TYPEMAKER2_TYPE *extendsPtr; TYPEMAKER2_TYPE *baseTypePtr; TYPEMAKER2_TYPE *inheritsPtr; int nonVolatileMemberCount; char *fieldCountId; int refCount; }; #endif gwenhywfar-5.12.0/tools/typemaker2/tm_type.c0000664000175000017500000007703014460564441015772 00000000000000/*************************************************************************** begin : Wed Jul 01 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_type_p.h" #include "tm_util.h" #include #include #include GWEN_LIST_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type); GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type); TYPEMAKER2_TYPE *Typemaker2_Type_new() { TYPEMAKER2_TYPE *ty; GWEN_NEW_OBJECT(TYPEMAKER2_TYPE, ty); ty->refCount=1; GWEN_LIST_INIT(TYPEMAKER2_TYPE, ty); ty->headers=Typemaker2_Header_List_new(); ty->enums=Typemaker2_Enum_List_new(); ty->defines=Typemaker2_Define_List_new(); ty->codeDefs=Typemaker2_Code_List_new(); ty->inlines=Typemaker2_Inline_List_new(); ty->virtualFns=Typemaker2_VirtualFn_List_new(); ty->signals=Typemaker2_Signal_List_new(); ty->slots=Typemaker2_Slot_List_new(); ty->structIncludes=GWEN_StringList_new(); ty->privateIncludes=GWEN_StringList_new(); ty->libraryIncludes=GWEN_StringList_new(); ty->publicIncludes=GWEN_StringList_new(); ty->codeIncludes=GWEN_StringList_new(); ty->members=Typemaker2_Member_List_new(); ty->groupTree=Typemaker2_Group_Tree_new(); return ty; } void Typemaker2_Type_free(TYPEMAKER2_TYPE *ty) { if (ty) { assert(ty->refCount); if (ty->refCount==1) { GWEN_LIST_FINI(TYPEMAKER2_TYPE, ty); free(ty->name); free(ty->extends); free(ty->baseType); free(ty->inherits); free(ty->identifier); free(ty->prefix); free(ty->defaultValue); free(ty->presetValue); free(ty->aqdb_type); free(ty->baseFileName); free(ty->freeHook); free(ty->descr); Typemaker2_Header_List_free(ty->headers); Typemaker2_Enum_List_free(ty->enums); Typemaker2_Define_List_free(ty->defines); Typemaker2_Code_List_free(ty->codeDefs); Typemaker2_Inline_List_free(ty->inlines); Typemaker2_VirtualFn_List_free(ty->virtualFns); Typemaker2_Signal_List_free(ty->signals); Typemaker2_Slot_List_free(ty->slots); GWEN_StringList_free(ty->structIncludes); GWEN_StringList_free(ty->privateIncludes); GWEN_StringList_free(ty->libraryIncludes); GWEN_StringList_free(ty->publicIncludes); GWEN_StringList_free(ty->codeIncludes); Typemaker2_Member_List_free(ty->members); Typemaker2_Group_Tree_free(ty->groupTree); free(ty->fieldCountId); ty->refCount=0; GWEN_FREE_OBJECT(ty); } else ty->refCount--; } } void Typemaker2_Type_Attach(TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); ty->refCount++; } const char *Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->name; } void Typemaker2_Type_SetName(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->name); if (s && *s) ty->name=strdup(s); else ty->name=NULL; } const char *Typemaker2_Type_GetDescription(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->descr; } void Typemaker2_Type_SetDescription(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->descr); if (s && *s) ty->descr=strdup(s); else ty->descr=NULL; } int Typemaker2_Type_GetType(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); /* nothing here? ask extended type */ if (ty->type==TypeMaker2_Type_Unknown && ty->extendsPtr) return Typemaker2_Type_GetType(ty->extendsPtr); return ty->type; } void Typemaker2_Type_SetType(TYPEMAKER2_TYPE *ty, int i) { assert(ty); assert(ty->refCount); ty->type=i; } const char *Typemaker2_Type_GetAqDbType(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->aqdb_type==NULL && ty->extendsPtr) return Typemaker2_Type_GetAqDbType(ty->extendsPtr); return ty->aqdb_type; } void Typemaker2_Type_SetAqDbType(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->aqdb_type); if (s && *s) ty->aqdb_type=strdup(s); else ty->aqdb_type=NULL; } const char *Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->baseFileName; } void Typemaker2_Type_SetBaseFileName(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->baseFileName); if (s && *s) ty->baseFileName=strdup(s); else ty->baseFileName=NULL; } const char *Typemaker2_Type_GetFreeHook(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->freeHook; } void Typemaker2_Type_SetFreeHook(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->freeHook); if (s && *s) ty->freeHook=strdup(s); else ty->freeHook=NULL; } const char *Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->extends; } void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->extends); if (s && *s) ty->extends=strdup(s); else ty->extends=NULL; } int Typemaker2_Type_GetPack(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->pack; } void Typemaker2_Type_SetPack(TYPEMAKER2_TYPE *ty, int i) { assert(ty); assert(ty->refCount); ty->pack=i; } const char *Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->baseType==NULL && ty->extendsPtr) return Typemaker2_Type_GetBaseType(ty->extendsPtr); return ty->baseType; } void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->baseType); if (s && *s) ty->baseType=strdup(s); else ty->baseType=NULL; } const char *Typemaker2_Type_GetInherits(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->inherits==NULL && ty->extendsPtr) return Typemaker2_Type_GetInherits(ty->extendsPtr); return ty->inherits; } void Typemaker2_Type_SetInherits(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->inherits); if (s && *s) ty->inherits=strdup(s); else ty->inherits=NULL; } uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->flags==0 && ty->extendsPtr) return Typemaker2_Type_GetFlags(ty->extendsPtr); return ty->flags; } void Typemaker2_Type_SetFlags(TYPEMAKER2_TYPE *ty, uint32_t i) { assert(ty); assert(ty->refCount); ty->flags=i; } uint32_t Typemaker2_Type_GetSetFlags(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->setFlags==0 && ty->extendsPtr) return Typemaker2_Type_GetSetFlags(ty->extendsPtr); return ty->setFlags; } void Typemaker2_Type_SetSetFlags(TYPEMAKER2_TYPE *ty, uint32_t i) { assert(ty); assert(ty->refCount); ty->setFlags=i; } uint32_t Typemaker2_Type_GetGetFlags(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->getFlags==0 && ty->extendsPtr) return Typemaker2_Type_GetGetFlags(ty->extendsPtr); return ty->getFlags; } void Typemaker2_Type_SetGetFlags(TYPEMAKER2_TYPE *ty, uint32_t i) { assert(ty); assert(ty->refCount); ty->getFlags=i; } uint32_t Typemaker2_Type_GetDupFlags(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->dupFlags==0 && ty->extendsPtr) return Typemaker2_Type_GetDupFlags(ty->extendsPtr); return ty->dupFlags; } void Typemaker2_Type_SetDupFlags(TYPEMAKER2_TYPE *ty, uint32_t i) { assert(ty); assert(ty->refCount); ty->dupFlags=i; } uint32_t Typemaker2_Type_GetCopyFlags(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->copyFlags==0 && ty->extendsPtr) return Typemaker2_Type_GetCopyFlags(ty->extendsPtr); return ty->copyFlags; } void Typemaker2_Type_SetCopyFlags(TYPEMAKER2_TYPE *ty, uint32_t i) { assert(ty); assert(ty->refCount); ty->copyFlags=i; } int Typemaker2_Type_GetAccess(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->access==TypeMaker2_Access_Unknown && ty->extendsPtr) return Typemaker2_Type_GetAccess(ty->extendsPtr); return ty->access; } void Typemaker2_Type_SetAccess(TYPEMAKER2_TYPE *ty, int i) { assert(ty); assert(ty->refCount); ty->access=i; } int Typemaker2_Type_GetStructAccess(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->structAccess==TypeMaker2_Access_Unknown && ty->extendsPtr) return Typemaker2_Type_GetStructAccess(ty->extendsPtr); return ty->structAccess; } void Typemaker2_Type_SetStructAccess(TYPEMAKER2_TYPE *ty, int i) { assert(ty); assert(ty->refCount); ty->structAccess=i; } int Typemaker2_Type_GetUsePrivateConstructor(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->usePrivateConstructor; } void Typemaker2_Type_SetUsePrivateConstructor(TYPEMAKER2_TYPE *ty, int i) { assert(ty); assert(ty->refCount); ty->usePrivateConstructor=i; } const char *Typemaker2_Type_GetDefaultValue(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->defaultValue==NULL && ty->extendsPtr) return Typemaker2_Type_GetDefaultValue(ty->extendsPtr); return ty->defaultValue; } void Typemaker2_Type_SetDefaultValue(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->defaultValue); if (s && *s) ty->defaultValue=strdup(s); else ty->defaultValue=NULL; } const char *Typemaker2_Type_GetPresetValue(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); if (ty->presetValue==NULL && ty->extendsPtr) return Typemaker2_Type_GetPresetValue(ty->extendsPtr); return ty->presetValue; } void Typemaker2_Type_SetPresetValue(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->presetValue); if (s && *s) ty->presetValue=strdup(s); else ty->presetValue=NULL; } const char *Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->identifier; } void Typemaker2_Type_SetIdentifier(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->identifier); if (s && *s) ty->identifier=strdup(s); else ty->identifier=NULL; } const char *Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->prefix; } void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->prefix); if (s && *s) ty->prefix=strdup(s); else ty->prefix=NULL; } TYPEMAKER2_TYPE *Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->extendsPtr; } void Typemaker2_Type_SetExtendsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p) { assert(ty); assert(ty->refCount); ty->extendsPtr=p; } TYPEMAKER2_TYPE *Typemaker2_Type_GetInheritsPtr(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->inheritsPtr; } void Typemaker2_Type_SetInheritsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p) { assert(ty); assert(ty->refCount); ty->inheritsPtr=p; } TYPEMAKER2_TYPE *Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->baseTypePtr; } void Typemaker2_Type_SetBaseTypePtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p) { assert(ty); assert(ty->refCount); ty->baseTypePtr=p; } TYPEMAKER2_MEMBER_LIST *Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->members; } TYPEMAKER2_HEADER_LIST *Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->headers; } TYPEMAKER2_ENUM_LIST *Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->enums; } TYPEMAKER2_DEFINE_LIST *Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->defines; } TYPEMAKER2_CODE_LIST *Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->codeDefs; } TYPEMAKER2_INLINE_LIST *Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->inlines; } TYPEMAKER2_VIRTUALFN_LIST *Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->virtualFns; } TYPEMAKER2_SIGNAL_LIST *Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->signals; } TYPEMAKER2_SLOT_LIST *Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->slots; } TYPEMAKER2_GROUP_TREE *Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->groupTree; } int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->nonVolatileMemberCount; } void Typemaker2_Type_SetNonVolatileMemberCount(TYPEMAKER2_TYPE *ty, int i) { assert(ty); assert(ty->refCount); ty->nonVolatileMemberCount=i; } const char *Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty) { assert(ty); assert(ty->refCount); return ty->fieldCountId; } void Typemaker2_Type_SetFieldCountId(TYPEMAKER2_TYPE *ty, const char *s) { assert(ty); assert(ty->refCount); free(ty->fieldCountId); if (s) ty->fieldCountId=strdup(s); else ty->fieldCountId=NULL; } int Typemaker2_Type_readMembersAndGroupsXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, TYPEMAKER2_GROUP *parentGroup, const char *wantedLang) { GWEN_XMLNODE *n; /* read members */ n=GWEN_XMLNode_GetFirstTag(node); while (n) { const char *s; /* get tag name */ s=GWEN_XMLNode_GetData(n); if (s) { if (strcasecmp(s, "member")==0) { TYPEMAKER2_MEMBER *tm; int rv; tm=Typemaker2_Member_new(); rv=Typemaker2_Member_readXml(tm, n, wantedLang); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Member_free(tm); return rv; } /* set current parentGroup as group */ Typemaker2_Member_SetGroupPtr(tm, parentGroup); Typemaker2_Member_List_Add(tm, ty->members); } else if (strcasecmp(s, "group")==0) { TYPEMAKER2_GROUP *group; int rv; /* create and read group */ group=Typemaker2_Group_new(); rv=Typemaker2_Group_readXml(group, n, wantedLang); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Group_free(group); return rv; } Typemaker2_Group_Tree_AddChild(parentGroup, group); /* read sub-groups and -members */ rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, group, wantedLang); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } n=GWEN_XMLNode_GetNextTag(n); } return 0; } int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang) { GWEN_XMLNODE *langNode=NULL; GWEN_XMLNODE *n; const char *s; TYPEMAKER2_GROUP *rootGroup=NULL; /* parse type */ s=GWEN_XMLNode_GetProperty(node, "type", "opaque"); if (strcasecmp(s, "opaque")==0) Typemaker2_Type_SetType(ty, TypeMaker2_Type_Opaque); else if (strcasecmp(s, "pointer")==0) Typemaker2_Type_SetType(ty, TypeMaker2_Type_Pointer); else if (strcasecmp(s, "array")==0) Typemaker2_Type_SetType(ty, TypeMaker2_Type_Array); else { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown type [%s]", s); return GWEN_ERROR_BAD_DATA; } s=GWEN_XMLNode_GetProperty(node, "id", NULL); Typemaker2_Type_SetName(ty, s); s=GWEN_XMLNode_GetProperty(node, "extends", NULL); Typemaker2_Type_SetExtends(ty, s); s=GWEN_XMLNode_GetProperty(node, "basetype", NULL); Typemaker2_Type_SetBaseType(ty, s); if (wantedLang) langNode=GWEN_XMLNode_FindFirstTag(node, "lang", "id", wantedLang); if (langNode==NULL) langNode=node; /* read identifier and prefix */ s=GWEN_XMLNode_GetCharValue(langNode, "identifier", NULL); Typemaker2_Type_SetIdentifier(ty, s); s=GWEN_XMLNode_GetCharValue(langNode, "prefix", NULL); Typemaker2_Type_SetPrefix(ty, s); s=GWEN_XMLNode_GetCharValue(langNode, "aqdb_type", NULL); Typemaker2_Type_SetAqDbType(ty, s); /* read base file name (used to derive other output filenames) */ s=GWEN_XMLNode_GetCharValue(langNode, "basefilename", NULL); Typemaker2_Type_SetBaseFileName(ty, s); s=GWEN_XMLNode_GetCharValue(langNode, "freeHook", NULL); Typemaker2_Type_SetFreeHook(ty, s); ty->pack=GWEN_XMLNode_GetIntValue(langNode, "pack", 0); s=GWEN_XMLNode_GetCharValue(langNode, "structAccess", "private"); if (s && *s) { ty->structAccess=Typemaker2_AccessFromString(s); if (ty->structAccess==TypeMaker2_Access_Unknown) { DBG_ERROR(0, "Invalid structAcces entry [%s]", s); return GWEN_ERROR_BAD_DATA; } } else ty->structAccess=TypeMaker2_Access_Private; /* read flags. this element exists for elements. * For elements the flags are stored in the group. */ s=GWEN_XMLNode_GetCharValue(langNode, "flags", NULL); if (s && *s) Typemaker2_Type_SetFlags(ty, Typemaker2_TypeFlagsFromString(s)); /* read headers */ n=GWEN_XMLNode_FindFirstTag(langNode, "headers", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "header", NULL, NULL); while (nn) { TYPEMAKER2_HEADER *th; int rv; th=Typemaker2_Header_new(); rv=Typemaker2_Header_readXml(th, nn); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Header_free(th); return rv; } Typemaker2_Header_List_Add(th, ty->headers); nn=GWEN_XMLNode_FindNextTag(nn, "header", NULL, NULL); } } /* read description */ n=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL); if (n) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(n, tbuf, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_COMMENTS); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); } else { Typemaker2_Type_SetDescription(ty, GWEN_Buffer_GetStart(tbuf)); } GWEN_Buffer_free(tbuf); } /* create and add root group */ Typemaker2_Group_Tree_Clear(ty->groupTree); rootGroup=Typemaker2_Group_new(); Typemaker2_Group_SetTitle(rootGroup, Typemaker2_Type_GetName(ty)); Typemaker2_Group_SetDescription(rootGroup, Typemaker2_Type_GetDescription(ty)); Typemaker2_Group_Tree_Add(ty->groupTree, rootGroup); /* read members */ n=GWEN_XMLNode_FindFirstTag(node, "members", NULL, NULL); if (n) { int rv; rv=Typemaker2_Type_readMembersAndGroupsXml(ty, n, rootGroup, wantedLang); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* read codedefs */ n=GWEN_XMLNode_FindFirstTag(langNode, "codedefs", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "codedef", NULL, NULL); while (nn) { TYPEMAKER2_CODE *tc; tc=Typemaker2_Code_fromXml(nn); if (tc) { const char *s; s=Typemaker2_Code_GetMemberFlagsMask(tc); if (s && *s) Typemaker2_Code_SetMemberFlagsMaskInt(tc, Typemaker2_FlagsFromString(s)); s=Typemaker2_Code_GetMemberFlagsValue(tc); if (s && *s) Typemaker2_Code_SetMemberFlagsValueInt(tc, Typemaker2_FlagsFromString(s)); } Typemaker2_Code_List_Add(tc, ty->codeDefs); nn=GWEN_XMLNode_FindNextTag(nn, "codedef", NULL, NULL); } } /* read inlines */ n=GWEN_XMLNode_FindFirstTag(langNode, "inlines", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "inline", NULL, NULL); while (nn) { TYPEMAKER2_INLINE *ti; ti=Typemaker2_Inline_fromXml(nn); Typemaker2_Inline_List_Add(ti, ty->inlines); nn=GWEN_XMLNode_FindNextTag(nn, "inline", NULL, NULL); } } /* read enums */ n=GWEN_XMLNode_FindFirstTag(node, "enums", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "enum", NULL, NULL); while (nn) { TYPEMAKER2_ENUM *te; GWEN_XMLNODE *nnn; te=Typemaker2_Enum_fromXml(nn); /* read items */ nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL); while (nnn) { TYPEMAKER2_ITEM *ti; ti=Typemaker2_Item_fromXml(nnn); Typemaker2_Item_List_Add(ti, Typemaker2_Enum_GetItems(te)); nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL); } Typemaker2_Enum_List_Add(te, ty->enums); nn=GWEN_XMLNode_FindNextTag(nn, "enum", NULL, NULL); } } /* read defines */ n=GWEN_XMLNode_FindFirstTag(node, "defines", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "define", NULL, NULL); while (nn) { TYPEMAKER2_DEFINE *td; GWEN_XMLNODE *nnn; td=Typemaker2_Define_fromXml(nn); /* read items */ nnn=GWEN_XMLNode_FindFirstTag(nn, "item", NULL, NULL); while (nnn) { TYPEMAKER2_ITEM *ti; ti=Typemaker2_Item_fromXml(nnn); Typemaker2_Item_List_Add(ti, Typemaker2_Define_GetItems(td)); nnn=GWEN_XMLNode_FindNextTag(nnn, "item", NULL, NULL); } Typemaker2_Define_List_Add(td, ty->defines); nn=GWEN_XMLNode_FindNextTag(nn, "define", NULL, NULL); } } /* read virtual functions */ n=GWEN_XMLNode_FindFirstTag(node, "virtualFns", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "fn", NULL, NULL); while (nn) { TYPEMAKER2_VIRTUALFN *vf; int rv; vf=Typemaker2_VirtualFn_new(); rv=Typemaker2_VirtualFn_readXml(vf, nn); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_VirtualFn_free(vf); return rv; } Typemaker2_VirtualFn_List_Add(vf, ty->virtualFns); nn=GWEN_XMLNode_FindNextTag(nn, "fn", NULL, NULL); } } /* read signals */ n=GWEN_XMLNode_FindFirstTag(node, "signals", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "signal", NULL, NULL); while (nn) { TYPEMAKER2_SIGNAL *sig; GWEN_XMLNODE *nnn; int i; s=GWEN_XMLNode_GetProperty(nn, "name", NULL); if (!(s && *s)) { DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed signal"); return GWEN_ERROR_INVALID; } sig=Typemaker2_Signal_new(); Typemaker2_Signal_SetName(sig, s); Typemaker2_Signal_SetParamType1(sig, "none"); Typemaker2_Signal_SetParamType2(sig, "none"); i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0); if (i) Typemaker2_Signal_AddFlags(sig, TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3); i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0); if (i) Typemaker2_Signal_AddFlags(sig, TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4); nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL); if (nnn) { GWEN_XMLNODE *nnnn; int i; nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL); i=1; while (nnnn && i<3) { const char *s; s=GWEN_XMLNode_GetProperty(nnnn, "type", "none"); if (i==1) Typemaker2_Signal_SetParamType1(sig, s); else Typemaker2_Signal_SetParamType2(sig, s); i++; nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL); } } Typemaker2_Signal_List_Add(sig, ty->signals); nn=GWEN_XMLNode_FindNextTag(nn, "signal", NULL, NULL); } } /* read slots */ n=GWEN_XMLNode_FindFirstTag(node, "slots", NULL, NULL); if (n) { GWEN_XMLNODE *nn; nn=GWEN_XMLNode_FindFirstTag(n, "slot", NULL, NULL); while (nn) { TYPEMAKER2_SLOT *slot; GWEN_XMLNODE *nnn; int i; s=GWEN_XMLNode_GetProperty(nn, "name", NULL); if (!(s && *s)) { DBG_ERROR(GWEN_LOGDOMAIN, "Unnamed slot"); return GWEN_ERROR_INVALID; } slot=Typemaker2_Slot_new(); Typemaker2_Slot_SetName(slot, s); Typemaker2_Slot_SetParamType1(slot, "none"); Typemaker2_Slot_SetParamType2(slot, "none"); i=GWEN_XMLNode_GetIntProperty(nn, "useParam3", 0); if (i) Typemaker2_Slot_AddFlags(slot, TYPEMAKER2_SLOT_FLAGS_USE_PARAM3); i=GWEN_XMLNode_GetIntProperty(nn, "useParam4", 0); if (i) Typemaker2_Slot_AddFlags(slot, TYPEMAKER2_SLOT_FLAGS_USE_PARAM4); nnn=GWEN_XMLNode_FindFirstTag(nn, "params", NULL, NULL); if (nnn) { GWEN_XMLNODE *nnnn; int i; nnnn=GWEN_XMLNode_FindFirstTag(nnn, "param", NULL, NULL); i=1; while (nnnn && i<3) { const char *s; s=GWEN_XMLNode_GetProperty(nnnn, "type", "none"); if (i==1) Typemaker2_Slot_SetParamType1(slot, s); else Typemaker2_Slot_SetParamType2(slot, s); i++; nnnn=GWEN_XMLNode_FindNextTag(nnnn, "param", NULL, NULL); } } Typemaker2_Slot_List_Add(slot, ty->slots); nn=GWEN_XMLNode_FindNextTag(nn, "slot", NULL, NULL); } } /* read defaults */ n=GWEN_XMLNode_FindFirstTag(langNode, "defaults", NULL, NULL); if (n) { s=GWEN_XMLNode_GetCharValue(n, "default", NULL); Typemaker2_Type_SetDefaultValue(ty, s); s=GWEN_XMLNode_GetCharValue(n, "preset", NULL); Typemaker2_Type_SetPresetValue(ty, s); /* read flags */ s=GWEN_XMLNode_GetCharValue(n, "flags", NULL); if (s && *s) Typemaker2_Type_SetFlags(ty, Typemaker2_TypeFlagsFromString(s)); /* read setflags */ s=GWEN_XMLNode_GetCharValue(n, "setflags", NULL); if (s && *s) Typemaker2_Type_SetSetFlags(ty, Typemaker2_FlagsFromString(s)); /* read getflags */ s=GWEN_XMLNode_GetCharValue(n, "getflags", NULL); if (s && *s) Typemaker2_Type_SetGetFlags(ty, Typemaker2_FlagsFromString(s)); /* read dupflags */ s=GWEN_XMLNode_GetCharValue(n, "dupflags", NULL); if (s && *s) Typemaker2_Type_SetDupFlags(ty, Typemaker2_FlagsFromString(s)); /* read copyflags */ s=GWEN_XMLNode_GetCharValue(n, "copyflags", NULL); if (s && *s) Typemaker2_Type_SetCopyFlags(ty, Typemaker2_FlagsFromString(s)); /* read access */ s=GWEN_XMLNode_GetCharValue(n, "access", NULL); if (s && *s) { int i=Typemaker2_AccessFromString(s); if (i==TypeMaker2_Access_Unknown) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s); return GWEN_ERROR_BAD_DATA; } Typemaker2_Type_SetAccess(ty, i); } } s=GWEN_XMLNode_GetProperty(langNode, "usePrivateConstructor", "0"); if (s && *s) Typemaker2_Type_SetUsePrivateConstructor(ty, atoi(s)); return 0; } void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent) { if (ty) { int i; TYPEMAKER2_MEMBER *tm; const char *s1, *s2; for (i=0; iname)?(ty->name):""); for (i=0; iidentifier)?(ty->identifier):""); for (i=0; iaqdb_type)?(ty->aqdb_type):""); for (i=0; iextends)?(ty->extends):""); for (i=0; iinherits; s2=Typemaker2_Type_GetInherits(ty); fprintf(f, "Inherits : %s [%s]\n", s1?s1:"", s2?s2:""); for (i=0; ibaseType)?(ty->baseType):""); for (i=0; iprefix)?(ty->prefix):""); for (i=0; iaccess, Typemaker2_Type_GetAccess(ty)); for (i=0; iflags, Typemaker2_Type_GetFlags(ty)); for (i=0; isetFlags, Typemaker2_Type_GetSetFlags(ty)); for (i=0; igetFlags, Typemaker2_Type_GetGetFlags(ty)); for (i=0; idupFlags, Typemaker2_Type_GetDupFlags(ty)); for (i=0; icopyFlags, Typemaker2_Type_GetCopyFlags(ty)); for (i=0; idefaultValue; s2=Typemaker2_Type_GetDefaultValue(ty); fprintf(f, "Default : %s [%s]\n", s1?s1:"", s2?s2:""); for (i=0; ipresetValue; s2=Typemaker2_Type_GetPresetValue(ty); fprintf(f, "Preset : %s [%s]\n", s1?s1:"", s2?s2:""); for (i=0; imembers); if (tm==NULL) { for (i=0; ifieldCountId)?(ty->fieldCountId):""); for (i=0; idescr)?(ty->descr):""); } } TYPEMAKER2_ENUM *Typemaker2_Type_FindEnum(TYPEMAKER2_TYPE *ty, const char *s) { TYPEMAKER2_ENUM *te; assert(ty); te=Typemaker2_Enum_List_First(ty->enums); while (te) { const char *n; n=Typemaker2_Enum_GetId(te); if (n && strcasecmp(s, n)==0) break; te=Typemaker2_Enum_List_Next(te); } return te; } TYPEMAKER2_CODE *Typemaker2_Type_FindCodeForMember(const TYPEMAKER2_TYPE *ty, const TYPEMAKER2_MEMBER *tm, const char *id) { TYPEMAKER2_CODE *tc=NULL; uint32_t flags=0; if (tm) flags=Typemaker2_Member_GetFlags(tm); /* try code within member definition first, if any */ if (tm) { tc=Typemaker2_Code_List_First(Typemaker2_Member_GetCodeDefs(tm)); while (tc) { const char *s; s=Typemaker2_Code_GetId(tc); if (s && strcasecmp(s, id)==0) { if ((flags & Typemaker2_Code_GetMemberFlagsMaskInt(tc))==Typemaker2_Code_GetMemberFlagsValueInt(tc)) return tc; } tc=Typemaker2_Code_List_Next(tc); } } while (ty) { tc=Typemaker2_Code_List_First(ty->codeDefs); while (tc) { const char *s; s=Typemaker2_Code_GetId(tc); if (s && strcasecmp(s, id)==0) { if ((flags & Typemaker2_Code_GetMemberFlagsMaskInt(tc))==Typemaker2_Code_GetMemberFlagsValueInt(tc)) return tc; } tc=Typemaker2_Code_List_Next(tc); } ty=ty->extendsPtr; } return NULL; } gwenhywfar-5.12.0/tools/typemaker2/tm_code.c0000644000175000017500000002145613142134476015717 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_code.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_code_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_CODE, Typemaker2_Code) TYPEMAKER2_CODE *Typemaker2_Code_new(void) { TYPEMAKER2_CODE *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_CODE, p_struct) GWEN_LIST_INIT(TYPEMAKER2_CODE, p_struct) /* members */ p_struct->id=NULL; p_struct->memberFlagsMask=NULL; p_struct->memberFlagsValue=NULL; p_struct->code=NULL; p_struct->memberFlagsMaskInt=0; p_struct->memberFlagsValueInt=0; /* virtual functions */ return p_struct; } void Typemaker2_Code_free(TYPEMAKER2_CODE *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_CODE, p_struct) /* members */ free(p_struct->id); free(p_struct->memberFlagsMask); free(p_struct->memberFlagsValue); free(p_struct->code); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_CODE *Typemaker2_Code_dup(const TYPEMAKER2_CODE *p_src) { TYPEMAKER2_CODE *p_struct; assert(p_src); p_struct=Typemaker2_Code_new(); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "memberFlagsMask" */ if (p_struct->memberFlagsMask) { free(p_struct->memberFlagsMask); p_struct->memberFlagsMask=NULL; } if (p_src->memberFlagsMask) { p_struct->memberFlagsMask=strdup(p_src->memberFlagsMask); } /* member "memberFlagsValue" */ if (p_struct->memberFlagsValue) { free(p_struct->memberFlagsValue); p_struct->memberFlagsValue=NULL; } if (p_src->memberFlagsValue) { p_struct->memberFlagsValue=strdup(p_src->memberFlagsValue); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "memberFlagsMaskInt" */ p_struct->memberFlagsMaskInt=p_src->memberFlagsMaskInt; /* member "memberFlagsValueInt" */ p_struct->memberFlagsValueInt=p_src->memberFlagsValueInt; return p_struct; } TYPEMAKER2_CODE *Typemaker2_Code_copy(TYPEMAKER2_CODE *p_struct, const TYPEMAKER2_CODE *p_src) { assert(p_struct); assert(p_src); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "memberFlagsMask" */ if (p_struct->memberFlagsMask) { free(p_struct->memberFlagsMask); p_struct->memberFlagsMask=NULL; } if (p_src->memberFlagsMask) { p_struct->memberFlagsMask=strdup(p_src->memberFlagsMask); } /* member "memberFlagsValue" */ if (p_struct->memberFlagsValue) { free(p_struct->memberFlagsValue); p_struct->memberFlagsValue=NULL; } if (p_src->memberFlagsValue) { p_struct->memberFlagsValue=strdup(p_src->memberFlagsValue); } /* member "code" */ if (p_struct->code) { free(p_struct->code); p_struct->code=NULL; } if (p_src->code) { p_struct->code=strdup(p_src->code); } /* member "memberFlagsMaskInt" */ p_struct->memberFlagsMaskInt=p_src->memberFlagsMaskInt; /* member "memberFlagsValueInt" */ p_struct->memberFlagsValueInt=p_src->memberFlagsValueInt; return p_struct; } const char *Typemaker2_Code_GetId(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->id; } const char *Typemaker2_Code_GetMemberFlagsMask(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->memberFlagsMask; } const char *Typemaker2_Code_GetMemberFlagsValue(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->memberFlagsValue; } const char *Typemaker2_Code_GetCode(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->code; } uint32_t Typemaker2_Code_GetMemberFlagsMaskInt(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->memberFlagsMaskInt; } uint32_t Typemaker2_Code_GetMemberFlagsValueInt(const TYPEMAKER2_CODE *p_struct) { assert(p_struct); return p_struct->memberFlagsValueInt; } void Typemaker2_Code_SetId(TYPEMAKER2_CODE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->id) { free(p_struct->id); } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void Typemaker2_Code_SetMemberFlagsMask(TYPEMAKER2_CODE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->memberFlagsMask) { free(p_struct->memberFlagsMask); } if (p_src) { p_struct->memberFlagsMask=strdup(p_src); } else { p_struct->memberFlagsMask=NULL; } } void Typemaker2_Code_SetMemberFlagsValue(TYPEMAKER2_CODE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->memberFlagsValue) { free(p_struct->memberFlagsValue); } if (p_src) { p_struct->memberFlagsValue=strdup(p_src); } else { p_struct->memberFlagsValue=NULL; } } void Typemaker2_Code_SetCode(TYPEMAKER2_CODE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->code) { free(p_struct->code); } if (p_src) { p_struct->code=strdup(p_src); } else { p_struct->code=NULL; } } void Typemaker2_Code_SetMemberFlagsMaskInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src) { assert(p_struct); p_struct->memberFlagsMaskInt=p_src; } void Typemaker2_Code_SetMemberFlagsValueInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src) { assert(p_struct); p_struct->memberFlagsValueInt=p_src; } TYPEMAKER2_CODE_LIST *Typemaker2_Code_List_dup(const TYPEMAKER2_CODE_LIST *p_src) { TYPEMAKER2_CODE_LIST *p_dest; TYPEMAKER2_CODE *p_elem; assert(p_src); p_dest=Typemaker2_Code_List_new(); p_elem=Typemaker2_Code_List_First(p_src); while (p_elem) { TYPEMAKER2_CODE *p_cpy; p_cpy=Typemaker2_Code_dup(p_elem); Typemaker2_Code_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Code_List_Next(p_elem); } return p_dest; } void Typemaker2_Code_ReadXml(TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ if (p_struct->id) { free(p_struct->id); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "id", NULL); if (s) p_struct->id=strdup(s); } if (p_struct->id==NULL) { /* member "id" is volatile, just presetting */ p_struct->id=NULL; } /* member "memberFlagsMask" */ if (p_struct->memberFlagsMask) { free(p_struct->memberFlagsMask); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "memberFlagsMask", NULL); if (s) p_struct->memberFlagsMask=strdup(s); } if (p_struct->memberFlagsMask==NULL) { /* member "memberFlagsMask" is volatile, just presetting */ p_struct->memberFlagsMask=NULL; } /* member "memberFlagsValue" */ if (p_struct->memberFlagsValue) { free(p_struct->memberFlagsValue); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "memberFlagsValue", NULL); if (s) p_struct->memberFlagsValue=strdup(s); } if (p_struct->memberFlagsValue==NULL) { /* member "memberFlagsValue" is volatile, just presetting */ p_struct->memberFlagsValue=NULL; } /* member "code" */ if (p_struct->code) { free(p_struct->code); } { const char *s; s=GWEN_XMLNode_GetCharValue(p_db, "code", NULL); if (s) p_struct->code=strdup(s); } if (p_struct->code==NULL) { /* member "code" is volatile, just presetting */ p_struct->code=NULL; } /* member "memberFlagsMaskInt" */ /* member "memberFlagsMaskInt" is volatile, just presetting */ p_struct->memberFlagsMaskInt=0; /* member "memberFlagsValueInt" */ /* member "memberFlagsValueInt" is volatile, just presetting */ p_struct->memberFlagsValueInt=0; } void Typemaker2_Code_WriteXml(const TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ GWEN_XMLNode_SetProperty(p_db, "id", p_struct->id); /* member "memberFlagsMask" */ GWEN_XMLNode_SetCharValue(p_db, "memberFlagsMask", p_struct->memberFlagsMask); /* member "memberFlagsValue" */ GWEN_XMLNode_SetCharValue(p_db, "memberFlagsValue", p_struct->memberFlagsValue); /* member "code" */ GWEN_XMLNode_SetCharValue(p_db, "code", p_struct->code); /* member "memberFlagsMaskInt" is volatile, not writing to xml */ /* member "memberFlagsValueInt" is volatile, not writing to xml */ } void Typemaker2_Code_toXml(const TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Code_WriteXml(p_struct, p_db); } TYPEMAKER2_CODE *Typemaker2_Code_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_CODE *p_struct; p_struct=Typemaker2_Code_new(); Typemaker2_Code_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-5.12.0/tools/typemaker2/tm_enum.h0000644000175000017500000000607213142134464015750 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_enum.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_ENUM_H #define TM_ENUM_H #ifdef __cplusplus extern "C" { #endif /* needed system headers */ #include #include #include /* pre-headers */ #include "tm_item.h" typedef struct TYPEMAKER2_ENUM TYPEMAKER2_ENUM; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_ENUM, Typemaker2_Enum) /* post-headers */ /** Constructor. */ TYPEMAKER2_ENUM *Typemaker2_Enum_new(void); /** Destructor. */ void Typemaker2_Enum_free(TYPEMAKER2_ENUM *p_struct); TYPEMAKER2_ENUM *Typemaker2_Enum_dup(const TYPEMAKER2_ENUM *p_struct); TYPEMAKER2_ENUM *Typemaker2_Enum_copy(TYPEMAKER2_ENUM *p_struct, const TYPEMAKER2_ENUM *p_src); /** Getter. * Use this function to get the member "id" */ const char *Typemaker2_Enum_GetId(const TYPEMAKER2_ENUM *p_struct); /** Getter. * Use this function to get the member "prefix" */ const char *Typemaker2_Enum_GetPrefix(const TYPEMAKER2_ENUM *p_struct); /** Getter. * Use this function to get the member "type" */ const char *Typemaker2_Enum_GetType(const TYPEMAKER2_ENUM *p_struct); /** Getter. * Use this function to get the member "items" */ TYPEMAKER2_ITEM_LIST *Typemaker2_Enum_GetItems(const TYPEMAKER2_ENUM *p_struct); /** Getter. * Use this function to get the member "toStringFn" */ const char *Typemaker2_Enum_GetToStringFn(const TYPEMAKER2_ENUM *p_struct); /** Getter. * Use this function to get the member "fromStringFn" */ const char *Typemaker2_Enum_GetFromStringFn(const TYPEMAKER2_ENUM *p_struct); /** Setter. * Use this function to set the member "id" */ void Typemaker2_Enum_SetId(TYPEMAKER2_ENUM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "prefix" */ void Typemaker2_Enum_SetPrefix(TYPEMAKER2_ENUM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "type" */ void Typemaker2_Enum_SetType(TYPEMAKER2_ENUM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "items" */ void Typemaker2_Enum_SetItems(TYPEMAKER2_ENUM *p_struct, const TYPEMAKER2_ITEM_LIST *p_src); /** Setter. * Use this function to set the member "toStringFn" */ void Typemaker2_Enum_SetToStringFn(TYPEMAKER2_ENUM *p_struct, const char *p_src); /** Setter. * Use this function to set the member "fromStringFn" */ void Typemaker2_Enum_SetFromStringFn(TYPEMAKER2_ENUM *p_struct, const char *p_src); TYPEMAKER2_ENUM_LIST *Typemaker2_Enum_List_dup(const TYPEMAKER2_ENUM_LIST *p_src); void Typemaker2_Enum_ReadXml(TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Enum_WriteXml(const TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Enum_toXml(const TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_ENUM *Typemaker2_Enum_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/tm_enum_p.h0000644000175000017500000000126213142134464016263 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_enum.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_ENUM_P_H #define TM_ENUM_P_H #include "tm_enum.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_ENUM { GWEN_LIST_ELEMENT(TYPEMAKER2_ENUM) char *id; char *prefix; char *type; TYPEMAKER2_ITEM_LIST *items; /* volatile */ char *toStringFn; /* volatile */ char *fromStringFn; /* volatile */ }; #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/tm_enum.xml0000644000175000017500000000420713142134464016317 00000000000000 TYPEMAKER2_ENUM Typemaker2_Enum tm_enum with_list1 with_xml
tm_item.h
NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL Typemaker2_Item_List_new() public own volatile const dup none NULL NULL public own volatile const dup const NULL NULL public own volatile const dup const
gwenhywfar-5.12.0/tools/typemaker2/Makefile.am0000664000175000017500000000324714156464753016207 00000000000000SUBDIRS=c types AM_CPPFLAGS=@all_includes@ -I$(gwenhywfar_symlinkdir) \ -I$(srcdir)/c \ -I$(builddir)/c typefiles=\ tm_item.xml \ tm_enum.xml \ tm_define.xml \ tm_code.xml \ tm_signal.xml \ tm_slot.xml bin_PROGRAMS=typemaker2 noinst_HEADERS=\ tm_type_p.h tm_type.h \ tm_member_p.h tm_member.h \ tm_header_p.h tm_header.h \ tm_typemanager_p.h tm_typemanager.h \ tm_virtualfn_p.h tm_virtualfn.h \ tm_builder_p.h tm_builder.h \ tm_item_p.h tm_item.h \ tm_enum_p.h tm_enum.h \ tm_define_p.h tm_define.h \ tm_code_p.h tm_code.h \ tm_inline_p.h tm_inline.h \ tm_signal_p.h tm_signal.h \ tm_slot_p.h tm_slot.h \ tm_group_p.h tm_group.h \ tm_util.h \ typemaker2.h typemaker2_SOURCES=\ tm_type.c \ tm_member.c \ tm_header.c \ tm_util.c \ tm_typemanager.c \ tm_builder.c \ tm_item.c \ tm_enum.c \ tm_define.c \ tm_code.c \ tm_inline.c \ tm_virtualfn.c \ tm_signal.c \ tm_slot.c \ tm_group.c \ build.c \ builddefs.c \ main.c # tm_enum.c typemaker2_LDADD=c/libtm2_c.la $(top_builddir)/src/$(gwenhywfar_internal_libname) if IS_WINDOWS typemaker2_LDFLAGS=-mconsole typemaker2_LDADD+= $(PROG_LIBRARIES) endif EXTRA_DIST=$(typefiles) #BUILT_SOURCES= sources: for f in $(typemaker2_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done indent: $(BUILT_SOURCES) $(ASTYLE) \ --style=gnu \ --indent=spaces=2 \ --min-conditional-indent=0 \ --indent-labels \ --pad=oper \ --one-line=keep-blocks \ --suffix=none \ -a -y $(BUILT_SOURCES) types: $(typefiles) ./typemaker2 -I types/c -I $(srcdir) $(typefiles) gwenhywfar-5.12.0/tools/typemaker2/tm_group.h0000644000175000017500000000224113312244643016132 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_GROUP_H #define TYPEMAKER2_GROUP_H #include #include typedef struct TYPEMAKER2_GROUP TYPEMAKER2_GROUP; GWEN_TREE_FUNCTION_DEFS(TYPEMAKER2_GROUP, Typemaker2_Group) TYPEMAKER2_GROUP *Typemaker2_Group_new(); void Typemaker2_Group_free(TYPEMAKER2_GROUP *gr); void Typemaker2_Group_Attach(TYPEMAKER2_GROUP *gr); const char *Typemaker2_Group_GetTitle(TYPEMAKER2_GROUP *gr); void Typemaker2_Group_SetTitle(TYPEMAKER2_GROUP *gr, const char *s); const char *Typemaker2_Group_GetDescription(TYPEMAKER2_GROUP *gr); void Typemaker2_Group_SetDescription(TYPEMAKER2_GROUP *gr, const char *s); int Typemaker2_Group_readXml(TYPEMAKER2_GROUP *gr, GWEN_XMLNODE *node, const char *wantedLang); #endif gwenhywfar-5.12.0/tools/typemaker2/tm_group_p.h0000644000175000017500000000121013142134464016444 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_GROUP_P_H #define TYPEMAKER2_GROUP_P_H #include "tm_group.h" struct TYPEMAKER2_GROUP { GWEN_TREE_ELEMENT(TYPEMAKER2_GROUP) char *title; char *description; int refCount; }; #endif gwenhywfar-5.12.0/tools/typemaker2/tm_header.c0000644000175000017500000000640213142134476016227 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_header_p.h" #include #include #include GWEN_LIST_FUNCTIONS(TYPEMAKER2_HEADER, Typemaker2_Header) TYPEMAKER2_HEADER *Typemaker2_Header_new() { TYPEMAKER2_HEADER *th; GWEN_NEW_OBJECT(TYPEMAKER2_HEADER, th); th->refCount=1; GWEN_LIST_INIT(TYPEMAKER2_HEADER, th); return th; } void Typemaker2_Header_free(TYPEMAKER2_HEADER *th) { if (th) { assert(th->refCount); if (th->refCount==1) { GWEN_LIST_FINI(TYPEMAKER2_HEADER, th); free(th->fileName); th->refCount=0; GWEN_FREE_OBJECT(th); } else th->refCount++; } } void Typemaker2_Header_Attach(TYPEMAKER2_HEADER *th) { assert(th); assert(th->refCount); th->refCount++; } const char *Typemaker2_Header_GetFileName(const TYPEMAKER2_HEADER *th) { assert(th); assert(th->refCount); return th->fileName; } void Typemaker2_Header_SetFileName(TYPEMAKER2_HEADER *th, const char *s) { assert(th); assert(th->refCount); free(th->fileName); if (s) th->fileName=strdup(s); else th->fileName=NULL; } int Typemaker2_Header_GetType(const TYPEMAKER2_HEADER *th) { assert(th); assert(th->refCount); return th->type; } void Typemaker2_Header_SetType(TYPEMAKER2_HEADER *th, int i) { assert(th); assert(th->refCount); th->type=i; } int Typemaker2_Header_GetLocation(const TYPEMAKER2_HEADER *th) { assert(th); assert(th->refCount); return th->location; } void Typemaker2_Header_SetLocation(TYPEMAKER2_HEADER *th, int i) { assert(th); assert(th->refCount); th->location=i; } int Typemaker2_Header_readXml(TYPEMAKER2_HEADER *th, GWEN_XMLNODE *node) { const char *s; GWEN_XMLNODE *n; assert(th); assert(th->refCount); n=GWEN_XMLNode_GetFirstData(node); if (n) { s=GWEN_XMLNode_GetData(n); Typemaker2_Header_SetFileName(th, s); } /* read header type */ s=GWEN_XMLNode_GetProperty(node, "type", "sys"); if (strcasecmp(s, "sys")==0 || strcasecmp(s, "system")==0) Typemaker2_Header_SetType(th, Typemaker2_HeaderType_System); else if (strcasecmp(s, "local")==0) Typemaker2_Header_SetType(th, Typemaker2_HeaderType_Local); /* read header location */ s=GWEN_XMLNode_GetProperty(node, "loc", "post"); if (strcasecmp(s, "pre")==0) Typemaker2_Header_SetLocation(th, Typemaker2_HeaderLocation_Pre); else if (strcasecmp(s, "post")==0) Typemaker2_Header_SetLocation(th, Typemaker2_HeaderLocation_Post); else if (strcasecmp(s, "code")==0) Typemaker2_Header_SetLocation(th, Typemaker2_HeaderLocation_Code); else if (strcasecmp(s, "codeEnd")==0) Typemaker2_Header_SetLocation(th, Typemaker2_HeaderLocation_CodeEnd); else if (strcasecmp(s, "headerEnd")==0) Typemaker2_Header_SetLocation(th, Typemaker2_HeaderLocation_HeaderEnd); return 0; } gwenhywfar-5.12.0/tools/typemaker2/tm_signal.h0000644000175000017500000000606713142134464016265 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_signal.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_SIGNAL_H #define TM_SIGNAL_H #ifdef __cplusplus extern "C" { #endif /* define TYPEMAKER2_SIGNAL_FLAGS */ #define TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3 0x00000001 #define TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4 0x00000002 /* needed system headers */ #include #include #include #include typedef struct TYPEMAKER2_SIGNAL TYPEMAKER2_SIGNAL; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_SIGNAL, Typemaker2_Signal) GWEN_LIST2_FUNCTION_DEFS(TYPEMAKER2_SIGNAL, Typemaker2_Signal) /** Constructor. */ TYPEMAKER2_SIGNAL *Typemaker2_Signal_new(void); /** Destructor. */ void Typemaker2_Signal_free(TYPEMAKER2_SIGNAL *p_struct); TYPEMAKER2_SIGNAL *Typemaker2_Signal_dup(const TYPEMAKER2_SIGNAL *p_struct); TYPEMAKER2_SIGNAL *Typemaker2_Signal_copy(TYPEMAKER2_SIGNAL *p_struct, const TYPEMAKER2_SIGNAL *p_src); /** Getter. * Use this function to get the member "name" */ const char *Typemaker2_Signal_GetName(const TYPEMAKER2_SIGNAL *p_struct); /** Getter. * Use this function to get the member "paramType1" */ const char *Typemaker2_Signal_GetParamType1(const TYPEMAKER2_SIGNAL *p_struct); /** Getter. * Use this function to get the member "paramType2" */ const char *Typemaker2_Signal_GetParamType2(const TYPEMAKER2_SIGNAL *p_struct); /** Getter. * Use this function to get the member "flags" */ uint32_t Typemaker2_Signal_GetFlags(const TYPEMAKER2_SIGNAL *p_struct); /** Setter. * Use this function to set the member "name" */ void Typemaker2_Signal_SetName(TYPEMAKER2_SIGNAL *p_struct, const char *p_src); /** Setter. * Use this function to set the member "paramType1" */ void Typemaker2_Signal_SetParamType1(TYPEMAKER2_SIGNAL *p_struct, const char *p_src); /** Setter. * Use this function to set the member "paramType2" */ void Typemaker2_Signal_SetParamType2(TYPEMAKER2_SIGNAL *p_struct, const char *p_src); /** Setter. * Use this function to set the member "flags" */ void Typemaker2_Signal_SetFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src); /** Add flags. * Use this function to add flags to the member "flags" */ void Typemaker2_Signal_AddFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src); /** Sub flags. * Use this function to sub flags to the member "flags" */ void Typemaker2_Signal_SubFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src); TYPEMAKER2_SIGNAL_LIST *Typemaker2_Signal_List_dup(const TYPEMAKER2_SIGNAL_LIST *p_src); void Typemaker2_Signal_ReadXml(TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Signal_WriteXml(const TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Signal_toXml(const TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_SIGNAL *Typemaker2_Signal_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/c/0000775000175000017500000000000014730345121014430 500000000000000gwenhywfar-5.12.0/tools/typemaker2/c/Makefile.in0000664000175000017500000007403714730344662016441 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 = tools/typemaker2/c ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libtm2_c_la_LIBADD = am_libtm2_c_la_OBJECTS = tm_builder_c.lo tm2c_misc.lo tm2c_enums.lo \ tm2c_constructor.lo tm2c_destructor.lo tm2c_dup.lo \ tm2c_copy.lo tm2c_typedef.lo tm2c_struct.lo tm2c_macros.lo \ tm2c_getter.lo tm2c_setter.lo tm2c_readdb.lo tm2c_writedb.lo \ tm2c_readxml.lo tm2c_writexml.lo tm2c_object.lo \ tm2c_readobject.lo tm2c_writeobject.lo tm2c_list1.lo \ tm2c_tree1.lo tm2c_tree2.lo tm2c_signal.lo tm2c_slot.lo \ tm2c_virtualfn.lo libtm2_c_la_OBJECTS = $(am_libtm2_c_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/tm2c_constructor.Plo \ ./$(DEPDIR)/tm2c_copy.Plo ./$(DEPDIR)/tm2c_destructor.Plo \ ./$(DEPDIR)/tm2c_dup.Plo ./$(DEPDIR)/tm2c_enums.Plo \ ./$(DEPDIR)/tm2c_getter.Plo ./$(DEPDIR)/tm2c_list1.Plo \ ./$(DEPDIR)/tm2c_macros.Plo ./$(DEPDIR)/tm2c_misc.Plo \ ./$(DEPDIR)/tm2c_object.Plo ./$(DEPDIR)/tm2c_readdb.Plo \ ./$(DEPDIR)/tm2c_readobject.Plo ./$(DEPDIR)/tm2c_readxml.Plo \ ./$(DEPDIR)/tm2c_setter.Plo ./$(DEPDIR)/tm2c_signal.Plo \ ./$(DEPDIR)/tm2c_slot.Plo ./$(DEPDIR)/tm2c_struct.Plo \ ./$(DEPDIR)/tm2c_tree1.Plo ./$(DEPDIR)/tm2c_tree2.Plo \ ./$(DEPDIR)/tm2c_typedef.Plo ./$(DEPDIR)/tm2c_virtualfn.Plo \ ./$(DEPDIR)/tm2c_writedb.Plo ./$(DEPDIR)/tm2c_writeobject.Plo \ ./$(DEPDIR)/tm2c_writexml.Plo ./$(DEPDIR)/tm_builder_c.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(libtm2_c_la_SOURCES) DIST_SOURCES = $(libtm2_c_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ INCLUDES = @all_includes@ -I$(top_builddir) -I../ -I$(srcdir)/../ -I../../ -I$(srcdir)/../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) noinst_LTLIBRARIES = libtm2_c.la libtm2_c_la_SOURCES = \ tm_builder_c.c \ tm2c_misc.c \ tm2c_enums.c \ tm2c_constructor.c \ tm2c_destructor.c \ tm2c_dup.c \ tm2c_copy.c \ tm2c_typedef.c \ tm2c_struct.c \ tm2c_macros.c \ tm2c_getter.c \ tm2c_setter.c \ tm2c_readdb.c \ tm2c_writedb.c \ tm2c_readxml.c \ tm2c_writexml.c \ tm2c_object.c \ tm2c_readobject.c \ tm2c_writeobject.c \ tm2c_list1.c \ tm2c_tree1.c \ tm2c_tree2.c \ tm2c_signal.c \ tm2c_slot.c \ tm2c_virtualfn.c noinst_HEADERS = \ tm_builder_c.h \ tm2c_misc.h \ tm2c_enums.h \ tm2c_constructor.h \ tm2c_destructor.h \ tm2c_dup.h \ tm2c_copy.h \ tm2c_typedef.h \ tm2c_struct.h \ tm2c_macros.h \ tm2c_getter.h \ tm2c_setter.h \ tm2c_readdb.h \ tm2c_writedb.h \ tm2c_readxml.h \ tm2c_writexml.h \ tm2c_object.h \ tm2c_readobject.h \ tm2c_writeobject.h \ tm2c_list1.h \ tm2c_tree1.h \ tm2c_tree2.h \ tm2c_signal.h \ tm2c_slot.h \ tm2c_virtualfn.h all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/typemaker2/c/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/typemaker2/c/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): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libtm2_c.la: $(libtm2_c_la_OBJECTS) $(libtm2_c_la_DEPENDENCIES) $(EXTRA_libtm2_c_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libtm2_c_la_OBJECTS) $(libtm2_c_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_constructor.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_copy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_destructor.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_dup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_enums.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_getter.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_list1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_macros.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_misc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_object.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_readdb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_readobject.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_readxml.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_setter.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_signal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_slot.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_struct.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_tree1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_tree2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_typedef.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_virtualfn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_writedb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_writeobject.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm2c_writexml.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_builder_c.Plo@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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) 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 clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/tm2c_constructor.Plo -rm -f ./$(DEPDIR)/tm2c_copy.Plo -rm -f ./$(DEPDIR)/tm2c_destructor.Plo -rm -f ./$(DEPDIR)/tm2c_dup.Plo -rm -f ./$(DEPDIR)/tm2c_enums.Plo -rm -f ./$(DEPDIR)/tm2c_getter.Plo -rm -f ./$(DEPDIR)/tm2c_list1.Plo -rm -f ./$(DEPDIR)/tm2c_macros.Plo -rm -f ./$(DEPDIR)/tm2c_misc.Plo -rm -f ./$(DEPDIR)/tm2c_object.Plo -rm -f ./$(DEPDIR)/tm2c_readdb.Plo -rm -f ./$(DEPDIR)/tm2c_readobject.Plo -rm -f ./$(DEPDIR)/tm2c_readxml.Plo -rm -f ./$(DEPDIR)/tm2c_setter.Plo -rm -f ./$(DEPDIR)/tm2c_signal.Plo -rm -f ./$(DEPDIR)/tm2c_slot.Plo -rm -f ./$(DEPDIR)/tm2c_struct.Plo -rm -f ./$(DEPDIR)/tm2c_tree1.Plo -rm -f ./$(DEPDIR)/tm2c_tree2.Plo -rm -f ./$(DEPDIR)/tm2c_typedef.Plo -rm -f ./$(DEPDIR)/tm2c_virtualfn.Plo -rm -f ./$(DEPDIR)/tm2c_writedb.Plo -rm -f ./$(DEPDIR)/tm2c_writeobject.Plo -rm -f ./$(DEPDIR)/tm2c_writexml.Plo -rm -f ./$(DEPDIR)/tm_builder_c.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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 ./$(DEPDIR)/tm2c_constructor.Plo -rm -f ./$(DEPDIR)/tm2c_copy.Plo -rm -f ./$(DEPDIR)/tm2c_destructor.Plo -rm -f ./$(DEPDIR)/tm2c_dup.Plo -rm -f ./$(DEPDIR)/tm2c_enums.Plo -rm -f ./$(DEPDIR)/tm2c_getter.Plo -rm -f ./$(DEPDIR)/tm2c_list1.Plo -rm -f ./$(DEPDIR)/tm2c_macros.Plo -rm -f ./$(DEPDIR)/tm2c_misc.Plo -rm -f ./$(DEPDIR)/tm2c_object.Plo -rm -f ./$(DEPDIR)/tm2c_readdb.Plo -rm -f ./$(DEPDIR)/tm2c_readobject.Plo -rm -f ./$(DEPDIR)/tm2c_readxml.Plo -rm -f ./$(DEPDIR)/tm2c_setter.Plo -rm -f ./$(DEPDIR)/tm2c_signal.Plo -rm -f ./$(DEPDIR)/tm2c_slot.Plo -rm -f ./$(DEPDIR)/tm2c_struct.Plo -rm -f ./$(DEPDIR)/tm2c_tree1.Plo -rm -f ./$(DEPDIR)/tm2c_tree2.Plo -rm -f ./$(DEPDIR)/tm2c_typedef.Plo -rm -f ./$(DEPDIR)/tm2c_virtualfn.Plo -rm -f ./$(DEPDIR)/tm2c_writedb.Plo -rm -f ./$(DEPDIR)/tm2c_writeobject.Plo -rm -f ./$(DEPDIR)/tm2c_writexml.Plo -rm -f ./$(DEPDIR)/tm_builder_c.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool 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 maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for f in $(typemaker2_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done indent: $(BUILT_SOURCES) $(ASTYLE) \ --style=gnu \ --indent=spaces=2 \ --min-conditional-indent=0 \ --indent-labels \ --pad=oper \ --one-line=keep-blocks \ --suffix=none \ -a -y $(BUILT_SOURCES) types: $(typefiles) ./typemaker2 -I types/c -I $(srcdir) $(typefiles) # 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: gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_typedef.h0000664000175000017500000000110714144206313017103 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_TYPEDEF_H #define TM2C_TYPEDEF_H #include "tm_builder.h" int TM2C_BuildTypedef(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_getter.c0000664000175000017500000001562214144206313016737 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_getter.h" #include #include static void _addSignalObjects(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addMemberProtoTypes(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static void _addMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static void _addFunctionDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildGetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_MEMBER_LIST *tml; uint32_t flags; flags=Typemaker2_Type_GetFlags(ty); /* probably add getter for signalObject */ if ((flags & TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS) || (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS)) _addSignalObjects(tb, ty); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { if (!(Typemaker2_Member_GetGetFlags(tm) & TYPEMAKER2_FLAGS_OMIT)) { int rv; rv=_addMemberProtoTypes(tb, ty, tm); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } _addMemberImplementation(tb, ty, tm); } tm=Typemaker2_Member_List_Next(tm); } } return 0; } void _addSignalObjects(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_TYPEMANAGER *tym; const char *sTypeId; const char *sTypePrefix; const char *sApi; tym=Typemaker2_Builder_GetTypeManager(tb); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sApi=Typemaker2_TypeManager_GetApiDeclaration(tym); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ if (sApi && *sApi) GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi); GWEN_Buffer_AppendArgs(tbuf, "GWEN_SIGNALOBJECT *%s_GetSignalObject(const %s *p_struct);\n", sTypePrefix, sTypeId); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendArgs(tbuf, "GWEN_SIGNALOBJECT *%s_GetSignalObject(const %s *p_struct) {\n", sTypePrefix, sTypeId); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct->_signalObject;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addMemberProtoTypes(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_TYPE *mty; GWEN_BUFFER *tbuf; const char *sApi; tym=Typemaker2_Builder_GetTypeManager(tb); sApi=Typemaker2_TypeManager_GetApiDeclaration(tym); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* apidoc */ GWEN_Buffer_AppendArgs(tbuf, "/** Getter.\n" " * Use this function to get the member \"%s\" (see @ref %s_%s)\n*/\n", Typemaker2_Member_GetName(tm), Typemaker2_Type_GetIdentifier(ty), Typemaker2_Member_GetName(tm)); /* prototype */ if (sApi && Typemaker2_Member_GetAccess(tm)<=TypeMaker2_Access_Protected) GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi); _addFunctionDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, ";\n"); switch (Typemaker2_Member_GetAccess(tm)) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_free(tbuf); return 0; } void _addMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { TYPEMAKER2_TYPE *mty; GWEN_BUFFER *tbuf; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); _addFunctionDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, "{\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendArgs(tbuf, " return p_struct->%s;\n", Typemaker2_Member_GetName(tm)); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } void _addFunctionDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sTypeId; const char *sTypePrefix; const char *sMemberName; const char *s; sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sMemberName=Typemaker2_Member_GetName(tm); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); /* determine and write return type */ /* const return value? */ if ((Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) && (Typemaker2_Member_GetGetFlags(tm) & TYPEMAKER2_FLAGS_CONST)) GWEN_Buffer_AppendString(tbuf, "const "); /* enum return value? */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te; const char *s; te=Typemaker2_Member_GetEnumPtr(tm); assert(te); s=Typemaker2_Enum_GetType(te); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); } } else { s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendString(tbuf, s); } GWEN_Buffer_AppendString(tbuf, " "); /* pointer return value? */ if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) GWEN_Buffer_AppendString(tbuf, "*"); /* function name */ GWEN_Buffer_AppendArgs(tbuf, "%s_Get%c%s(", sTypePrefix, toupper(*sMemberName), sMemberName+1); if (!(Typemaker2_Member_GetGetFlags(tm) & TYPEMAKER2_FLAGS_NOCONSTOBJECT)) GWEN_Buffer_AppendString(tbuf, "const "); GWEN_Buffer_AppendArgs(tbuf, "%s *p_struct)", sTypeId); } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_virtualfn.h0000664000175000017500000000207314144206313017460 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_VIRTUALFN_H #define TM2C_VIRTUALFN_H #include "tm_builder.h" int TM2C_BuildDefineVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *loc); int TM2C_BuildProtoVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildCodeVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildProtoSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildProtoGetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildGetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_signal.c0000664000175000017500000002777714144206313016740 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_signal.h" #include "tm2c_misc.h" #include #include int TM2C_BuildSignalFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_SIGNAL_LIST *sigList; const char *sTypeId; const char *sTypePrefix; tym=Typemaker2_Builder_GetTypeManager(tb); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); sigList=Typemaker2_Type_GetSignals(ty); if (sigList) { TYPEMAKER2_SIGNAL *sig; /* prototype */ GWEN_Buffer_AppendString(tbuf, "/* signal functions */\n"); sig=Typemaker2_Signal_List_First(sigList); while (sig) { const char *sSignalName; sSignalName=Typemaker2_Signal_GetName(sig); /* SignalConnect */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "int %s_SignalConnect_%c%s(%s *p_struct, GWEN_SLOT *slot);\n", sTypePrefix, toupper(*sSignalName), sSignalName+1, sTypeId); /* SignalDisconnect */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "int %s_SignalDisconnect_%c%s(%s *p_struct, GWEN_SLOT *slot);\n", sTypePrefix, toupper(*sSignalName), sSignalName+1, sTypeId); /* GetSignal */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "GWEN_SIGNAL *%s_GetSignal_%c%s(const %s *p_struct);\n", sTypePrefix, toupper(*sSignalName), sSignalName+1, sTypeId); /* EmitSignal */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "int %s_EmitSignal_%c%s(%s *p_struct", sTypePrefix, toupper(*sSignalName), sSignalName+1, sTypeId); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ if (s && *s && strcasecmp(s, "none")!=0) GWEN_Buffer_AppendArgs(tbuf, ", %s param1", s); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ if (s && *s && strcasecmp(s, "none")!=0) GWEN_Buffer_AppendArgs(tbuf, ", %s param2", s); if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3) GWEN_Buffer_AppendString(tbuf, ", int param3"); if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4) GWEN_Buffer_AppendString(tbuf, ", int param4"); GWEN_Buffer_AppendString(tbuf, ");\n"); sig=Typemaker2_Signal_List_Next(sig); } Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "/* signal functions */\n"); sig=Typemaker2_Signal_List_First(sigList); while (sig) { /* SignalConnect */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SignalConnect_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_SLOT *slot) {\n"); GWEN_Buffer_AppendString(tbuf, " GWEN_SIGNAL *sig;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " sig=GWEN_SignalObject_FindSignal(p_struct->_signalObject, "); s=Typemaker2_Signal_GetName(sig); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); GWEN_Buffer_AppendString(tbuf, " if (sig)\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_Signal_Connect(sig, slot);\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_ERROR_NOT_FOUND;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); /* SignalDisconnect */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SignalDisconnect_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_SLOT *slot) {\n"); GWEN_Buffer_AppendString(tbuf, " GWEN_SIGNAL *sig;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " sig=GWEN_SignalObject_FindSignal(p_struct->_signalObject, "); s=Typemaker2_Signal_GetName(sig); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); GWEN_Buffer_AppendString(tbuf, " if (sig)\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_Signal_Disconnect(sig, slot);\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_ERROR_NOT_FOUND;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); /* GetSignal */ GWEN_Buffer_AppendString(tbuf, "GWEN_SIGNAL *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_GetSignal_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_SignalObject_FindSignal(p_struct->_signalObject, "); s=Typemaker2_Signal_GetName(sig); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); /* EmitSignal */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_EmitSignal_"); s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct"); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, ", "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " param1"); } s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, ", "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " param2"); } if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3) { GWEN_Buffer_AppendString(tbuf, ", int param3"); } if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4) { GWEN_Buffer_AppendString(tbuf, ", int param4"); } GWEN_Buffer_AppendString(tbuf, "){\n"); GWEN_Buffer_AppendString(tbuf, " GWEN_SIGNAL *sig;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " sig=GWEN_SignalObject_FindSignal(p_struct->_signalObject, "); s=Typemaker2_Signal_GetName(sig); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); GWEN_Buffer_AppendString(tbuf, " if (sig) \n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_Signal_Emit(sig, "); s=Typemaker2_Signal_GetParamType1(sig); /* param 1 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, "(void*) "); GWEN_Buffer_AppendString(tbuf, "param1, "); } else GWEN_Buffer_AppendString(tbuf, "NULL, "); s=Typemaker2_Signal_GetParamType2(sig); /* param 2 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, "(void*) "); GWEN_Buffer_AppendString(tbuf, " param2, "); } else GWEN_Buffer_AppendString(tbuf, "NULL, "); if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM3) GWEN_Buffer_AppendString(tbuf, "param3, "); else GWEN_Buffer_AppendString(tbuf, "0, "); if (Typemaker2_Signal_GetFlags(sig) & TYPEMAKER2_SIGNAL_FLAGS_USE_PARAM4) GWEN_Buffer_AppendString(tbuf, "param4"); else GWEN_Buffer_AppendString(tbuf, "0"); GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); sig=Typemaker2_Signal_List_Next(sig); } Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_writexml.h0000664000175000017500000000121414144206313017315 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_WRITEXML_H #define TM2C_WRITEXML_H #include "tm_builder.h" int TM2C_BuildWriteXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildToXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_enums.h0000664000175000017500000000141614144206313016575 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_ENUMS_H #define TM2C_ENUMS_H #include "tm_builder.h" int TM2C_BuildDefineEnums(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_SetEnumStringFns(TYPEMAKER2_TYPE *ty); int TM2C_BuildEnumFromString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildEnumToString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_struct.c0000664000175000017500000001501314460564441016775 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_struct.h" #include #include static void _addFlagspecificElements(TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf); static int _addMembers(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf); static int _addMember(TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); static int _addVirtualFunctions(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf); int TM2C_BuildStruct(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; uint32_t flags; const char *sTypeId; int rv; int pack; tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); sTypeId=Typemaker2_Type_GetIdentifier(ty); pack=Typemaker2_Type_GetPack(ty); if (pack) GWEN_Buffer_AppendArgs(tbuf, "#pragma pack(push, %d)\n", pack); GWEN_Buffer_AppendArgs(tbuf, "struct %s {\n", sTypeId); _addFlagspecificElements(ty, flags, tbuf); if ((flags & TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS) || (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS)) GWEN_Buffer_AppendString(tbuf, " GWEN_SIGNALOBJECT *_signalObject;\n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT) GWEN_Buffer_AppendString(tbuf, " int _refCount;\n"); rv=_addMembers(ty, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } rv=_addVirtualFunctions(ty, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "};\n"); if (pack) GWEN_Buffer_AppendArgs(tbuf, "#pragma pack(pop)\n"); /* add to declaration according to structAccess (defaults to "private") */ switch(Typemaker2_Type_GetStructAccess(ty)) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; } GWEN_Buffer_free(tbuf); return 0; } void _addFlagspecificElements(TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf) { const char *sTypeId; sTypeId=Typemaker2_Type_GetIdentifier(ty); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_INHERIT) GWEN_Buffer_AppendArgs(tbuf, " GWEN_INHERIT_ELEMENT(%s)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) GWEN_Buffer_AppendArgs(tbuf, " GWEN_LIST_ELEMENT(%s)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) GWEN_Buffer_AppendArgs(tbuf, " GWEN_TREE_ELEMENT(%s)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) GWEN_Buffer_AppendArgs(tbuf, " GWEN_TREE2_ELEMENT(%s)\n", sTypeId); } int _addMembers(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf) { TYPEMAKER2_MEMBER_LIST *tml; tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { int rv; rv=_addMember(tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } tm=Typemaker2_Member_List_Next(tm); } } return 0; } int _addMember(TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; int typeIsWritten=0; const char *s; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); GWEN_Buffer_AppendString(tbuf, " "); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te=Typemaker2_Member_GetEnumPtr(tm); const char *s; if (te==NULL) { DBG_ERROR(0, "No enum name set in definition of member \"%s\"", Typemaker2_Member_GetName(tm)); return GWEN_ERROR_BAD_DATA; } s=Typemaker2_Enum_GetType(te); if (s && *s) { GWEN_Buffer_AppendArgs(tbuf, "%s ", s); typeIsWritten=1; } } if (!typeIsWritten) { if ((Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) && (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_CONST)) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(mty); if (!(s && *s)) { const char *xx; xx=Typemaker2_Member_GetName(tm); DBG_ERROR(0, "Member [%s] has no identifier", xx?xx:"(unnamed)"); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) GWEN_Buffer_AppendString(tbuf, "*"); } s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) GWEN_Buffer_AppendArgs(tbuf, "[%d]", Typemaker2_Member_GetMaxLen(tm)); GWEN_Buffer_AppendString(tbuf, ";"); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE) GWEN_Buffer_AppendString(tbuf, " /* volatile */"); GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } int _addVirtualFunctions(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf) { TYPEMAKER2_VIRTUALFN_LIST *fns; /* add virtual functions */ fns=Typemaker2_Type_GetVirtualFns(ty); assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { const char *s; TYPEMAKER2_VIRTUALFN *vf; vf=Typemaker2_VirtualFn_List_First(fns); while (vf) { GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { DBG_ERROR(0, "Virtual function has no name"); return GWEN_ERROR_BAD_DATA; } while (*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN "); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { DBG_ERROR(0, "Virtual function has no name"); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, tolower(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "Fn;\n"); vf=Typemaker2_VirtualFn_List_Next(vf); } } return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_copy.h0000664000175000017500000000107614144206313016422 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_COPY_H #define TM2C_COPY_H #include "tm_builder.h" int TM2C_BuildCopy(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_destructor.h0000664000175000017500000000112014144206313017634 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_DESTRUCTOR_H #define TM2C_DESTRUCTOR_H #include "tm_builder.h" int TM2C_BuildDestructor(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_readobject.c0000664000175000017500000001647414144206313017555 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_readobject.h" #include "tm2c_misc.h" #include #include static void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addReadMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildReadObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _addPrototype(tb, ty); rv=_addImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "int %s_ReadObject(%s *p_struct, const AQDB_OBJECT *p_db);\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(tbuf, "int %s_ReadObject(%s *p_struct, const AQDB_OBJECT *p_db){\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); if (Typemaker2_Type_GetNonVolatileMemberCount(ty)) { GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { rv=_addReadMemberCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int _addReadMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; int rv; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sMemberName=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" */\n", sMemberName); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { rv=TM2C_AddReleaseOldValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } /* read from object */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE) { GWEN_BUFFER *dstbuf; GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" is volatile, just presetting it */\n", sMemberName); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } else { GWEN_BUFFER *dstbuf; /* not volatile */ dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_FromObjectFn(tb, ty, tm, NULL, GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n"); GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\\n\", p_rv);\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); } return 0; } int TM2C_BuildFromObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromObject(const AQDB_OBJECT *p_db, "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " **pp_struct);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromObject(const AQDB_OBJECT *p_db, "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " **pp_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " p_struct="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); if (Typemaker2_Type_GetUsePrivateConstructor(ty)) { GWEN_Buffer_AppendByte(tbuf, '_'); } GWEN_Buffer_AppendString(tbuf, "_new();\n"); GWEN_Buffer_AppendString(tbuf, " p_rv="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadObject(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n"); GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\", p_rv);\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_free(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " *pp_struct=p_struct;\n"); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_writeobject.h0000664000175000017500000000123014144206313017761 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_WRITEOBJECT_H #define TM2C_WRITEOBJECT_H #include "tm_builder.h" int TM2C_BuildWriteObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildToObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_readxml.c0000664000175000017500000001430514144206313017076 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_readxml.h" #include "tm2c_misc.h" #include #include static void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addReadMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildReadXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _addPrototype(tb, ty); rv=_addImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "void %s_ReadXml(%s *p_struct, GWEN_XMLNODE *p_db);\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(tbuf, "void %s_ReadXml(%s *p_struct, GWEN_XMLNODE *p_db){\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { rv=_addReadMemberCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int _addReadMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; int rv; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sMemberName=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" */\n", sMemberName); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { rv=TM2C_AddReleaseOldValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } /* read from object */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE) { GWEN_BUFFER *dstbuf; GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" is volatile, just presetting it */\n", sMemberName); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } else { GWEN_BUFFER *dstbuf; /* not volatile */ dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_FromXmlFn(tb, ty, tm, NULL, GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } return 0; } int TM2C_BuildFromXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromXml(GWEN_XMLNODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromXml(GWEN_XMLNODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, " p_struct="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); if (Typemaker2_Type_GetUsePrivateConstructor(ty)) { GWEN_Buffer_AppendByte(tbuf, '_'); } GWEN_Buffer_AppendString(tbuf, "_new();\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadXml(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_constructor.c0000664000175000017500000002166714144206313020040 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_constructor.h" #include #include static void _buildPrototypes(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _buildImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static void _addTypeInits(TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf); static void _addSignalInits(TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf); static void _addSlotInits(TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf); static int _addMemberInits(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf); static void _addVirtualFns(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf); int TM2C_BuildConstructor(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _buildPrototypes(tb, ty); rv=_buildImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _buildPrototypes(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ if (Typemaker2_Type_GetUsePrivateConstructor(ty)) { GWEN_Buffer_AppendString(tbuf, "/** Private constructor. */\n"); } else { GWEN_Buffer_AppendString(tbuf, "/** Constructor. */\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); if (Typemaker2_Type_GetUsePrivateConstructor(ty)) GWEN_Buffer_AppendString(tbuf, "_"); GWEN_Buffer_AppendString(tbuf, "_new(void)"); GWEN_Buffer_AppendString(tbuf, ";\n"); if (Typemaker2_Type_GetUsePrivateConstructor(ty)) Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); else Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _buildImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; uint32_t flags; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); if (Typemaker2_Type_GetUsePrivateConstructor(ty)) GWEN_Buffer_AppendString(tbuf, "_"); GWEN_Buffer_AppendString(tbuf, "_new(void)"); GWEN_Buffer_AppendString(tbuf, " {\n"); GWEN_Buffer_AppendArgs(tbuf, " %s *p_struct;\n\n", Typemaker2_Type_GetIdentifier(ty)); _addTypeInits(ty, flags, tbuf); _addSignalInits(ty, flags, tbuf); _addSlotInits(ty, flags, tbuf); rv=_addMemberInits(tb, ty, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } _addVirtualFns(ty, tbuf); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } void _addTypeInits(TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf) { const char *sTypeId; const char *sTypePrefix; sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendArgs(tbuf, " GWEN_NEW_OBJECT(%s, p_struct)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT) GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount=1;\n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_INHERIT) GWEN_Buffer_AppendArgs(tbuf, " GWEN_INHERIT_INIT(%s, p_struct)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) GWEN_Buffer_AppendArgs(tbuf, " GWEN_LIST_INIT(%s, p_struct)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) GWEN_Buffer_AppendArgs(tbuf, " GWEN_TREE_INIT(%s, p_struct)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) GWEN_Buffer_AppendArgs(tbuf, " GWEN_TREE2_INIT(%s, p_struct, %s)\n", sTypeId, sTypePrefix); } void _addSignalInits(TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf) { if ((flags & TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS) || (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS)) GWEN_Buffer_AppendString(tbuf, " p_struct->_signalObject=GWEN_SignalObject_new();\n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS) { TYPEMAKER2_SIGNAL_LIST *slist; GWEN_Buffer_AppendString(tbuf, " /* generate pre-defined signals */\n"); slist=Typemaker2_Type_GetSignals(ty); if (slist) { TYPEMAKER2_SIGNAL *sig; sig=Typemaker2_Signal_List_First(slist); while (sig) { const char *s; s=Typemaker2_Signal_GetName(sig); GWEN_Buffer_AppendArgs(tbuf, " /* signal \"%s \" */\n", s); GWEN_Buffer_AppendString(tbuf, " GWEN_Signal_new(p_struct->_signalObject, NULL, "); /* name */ GWEN_Buffer_AppendArgs(tbuf, "\"%s\", ", s); /* param type 1 */ s=Typemaker2_Signal_GetParamType1(sig); GWEN_Buffer_AppendArgs(tbuf, "\"%s\", ", s?s:"none"); /* param type 2 */ s=Typemaker2_Signal_GetParamType2(sig); GWEN_Buffer_AppendArgs(tbuf, "\"%s\");\n", s?s:"none"); sig=Typemaker2_Signal_List_Next(sig); } } } } void _addSlotInits(TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf) { if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS) { TYPEMAKER2_SLOT_LIST *slist; GWEN_Buffer_AppendString(tbuf, " /* generate pre-defined slots */\n"); slist=Typemaker2_Type_GetSlots(ty); if (slist) { TYPEMAKER2_SLOT *slot; slot=Typemaker2_Slot_List_First(slist); while (slot) { const char *s; s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendArgs(tbuf, " /* slot \"%s\" */\n", s); GWEN_Buffer_AppendString(tbuf, " GWEN_Slot_new(p_struct->_signalObject, NULL, "); /* name */ GWEN_Buffer_AppendArgs(tbuf, "\"%s\", ", s); /* param type 1 */ s=Typemaker2_Slot_GetParamType1(slot); GWEN_Buffer_AppendArgs(tbuf, "\"%s\", ", s?s:"none"); /* param type 2 */ s=Typemaker2_Slot_GetParamType2(slot); GWEN_Buffer_AppendArgs(tbuf, "\"%s\", ", s?s:"none"); /* callback function */ s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SlotCallback_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendArgs(tbuf, "%c%s", toupper(*s), (s+1)); GWEN_Buffer_AppendString(tbuf, ", (void*) p_struct);\n"); slot=Typemaker2_Slot_List_Next(slot); } } } } int _addMemberInits(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf) { TYPEMAKER2_MEMBER_LIST *tml; GWEN_Buffer_AppendString(tbuf, " /* members */\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; int rv; tm=Typemaker2_Member_List_First(tml); while (tm) { TYPEMAKER2_TYPE *mty; GWEN_BUFFER *dstbuf; const char *s; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, /* no source */ GWEN_Buffer_GetStart(dstbuf), tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); return rv; } GWEN_Buffer_free(dstbuf); GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } return 0; } void _addVirtualFns(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf) { TYPEMAKER2_VIRTUALFN_LIST *tvfl; tvfl=Typemaker2_Type_GetVirtualFns(ty); if (tvfl) { TYPEMAKER2_VIRTUALFN *tvf; GWEN_Buffer_AppendString(tbuf, " /* virtual functions */\n"); tvf=Typemaker2_VirtualFn_List_First(tvfl); while (tvf) { const char *fname; const char *fpreset; fname=Typemaker2_VirtualFn_GetName(tvf); fpreset=Typemaker2_VirtualFn_GetPreset(tvf); if (fname && *fname && fpreset && *fpreset) GWEN_Buffer_AppendArgs(tbuf, " p_struct->%c%sFn=%s;\n", tolower(*fname), fname+1, fpreset); tvf=Typemaker2_VirtualFn_List_Next(tvf); } } } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_tree1.c0000664000175000017500000001167514144206313016471 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_tree1.h" #include "tm2c_misc.h" #include #include static void _addGetByMemberProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static int _addGetByMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static void _addGetByMemberDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildTreeGetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { int rv; _addGetByMemberProtoType(tb, ty, tm); rv=_addGetByMemberImplementation(tb, ty, tm); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addGetByMemberProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_TYPE *mty; tym=Typemaker2_Builder_GetTypeManager(tb); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); _addGetByMemberDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, ";\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addGetByMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; TYPEMAKER2_TYPE *mty; const char *sTypeId; const char *sTypePrefix; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sMemberName=Typemaker2_Member_GetName(tm); tbuf=GWEN_Buffer_new(0, 256, 0, 1); _addGetByMemberDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, "{\n"); GWEN_Buffer_AppendArgs(tbuf, " %s *p_struct;\n\n", sTypeId); GWEN_Buffer_AppendString(tbuf, " assert(p_tree);\n"); GWEN_Buffer_AppendArgs(tbuf, " p_struct = %s_Tree_GetFirst(p_tree);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, " while(p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " "); if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_cmp"); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); rv=Typemaker2_Builder_Invoke_CompareFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " if (p_rv == 0)\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendArgs(tbuf, " p_struct = %s_Tree_GetBelow(p_struct);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " return NULL;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } void _addGetByMemberDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sTypeId; const char *sTypePrefix; const char *sMemberName; const char *sMemberTypeId; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sMemberName=Typemaker2_Member_GetName(tm); sMemberTypeId=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendArgs(tbuf, "%s *%s_Tree_GetBy%c%s(const %s_TREE *p_tree, ", sTypeId, sTypePrefix, toupper(*sMemberName), sMemberName+1, sTypeId); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) GWEN_Buffer_AppendArgs(tbuf, " const %s *", sMemberTypeId); else GWEN_Buffer_AppendArgs(tbuf, "%s ", sMemberTypeId); GWEN_Buffer_AppendString(tbuf, "p_cmp)"); } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_setter.h0000664000175000017500000000110414144206313016746 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_SETTER_H #define TM2C_SETTER_H #include "tm_builder.h" int TM2C_BuildSetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/Makefile.am0000664000175000017500000000303014156464753016417 00000000000000 INCLUDES=@all_includes@ -I$(top_builddir) -I../ -I$(srcdir)/../ -I../../ -I$(srcdir)/../../ -I$(top_srcdir)/tools -I$(gwenhywfar_symlinkdir) noinst_LTLIBRARIES=libtm2_c.la libtm2_c_la_SOURCES=\ tm_builder_c.c \ tm2c_misc.c \ tm2c_enums.c \ tm2c_constructor.c \ tm2c_destructor.c \ tm2c_dup.c \ tm2c_copy.c \ tm2c_typedef.c \ tm2c_struct.c \ tm2c_macros.c \ tm2c_getter.c \ tm2c_setter.c \ tm2c_readdb.c \ tm2c_writedb.c \ tm2c_readxml.c \ tm2c_writexml.c \ tm2c_object.c \ tm2c_readobject.c \ tm2c_writeobject.c \ tm2c_list1.c \ tm2c_tree1.c \ tm2c_tree2.c \ tm2c_signal.c \ tm2c_slot.c \ tm2c_virtualfn.c noinst_HEADERS=\ tm_builder_c.h \ tm2c_misc.h \ tm2c_enums.h \ tm2c_constructor.h \ tm2c_destructor.h \ tm2c_dup.h \ tm2c_copy.h \ tm2c_typedef.h \ tm2c_struct.h \ tm2c_macros.h \ tm2c_getter.h \ tm2c_setter.h \ tm2c_readdb.h \ tm2c_writedb.h \ tm2c_readxml.h \ tm2c_writexml.h \ tm2c_object.h \ tm2c_readobject.h \ tm2c_writeobject.h \ tm2c_list1.h \ tm2c_tree1.h \ tm2c_tree2.h \ tm2c_signal.h \ tm2c_slot.h \ tm2c_virtualfn.h sources: for f in $(typemaker2_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done indent: $(BUILT_SOURCES) $(ASTYLE) \ --style=gnu \ --indent=spaces=2 \ --min-conditional-indent=0 \ --indent-labels \ --pad=oper \ --one-line=keep-blocks \ --suffix=none \ -a -y $(BUILT_SOURCES) types: $(typefiles) ./typemaker2 -I types/c -I $(srcdir) $(typefiles) gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_object.h0000664000175000017500000000134114144206313016711 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_OBJECT_H #define TM2C_OBJECT_H #include "tm_builder.h" int TM2C_BuildCreateColumnList(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildCreateTable(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildCreateObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_list1.c0000664000175000017500000003350214144206313016476 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_list1.h" #include "tm2c_misc.h" #include #include static void _addGetByMemberProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static int _addGetByMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static void _addGetByMemberDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); static void _addListDupProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addListDupImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static void _addListDupDeclaration(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf); static void _addSortByMemberProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static void _addSortByMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static void _addSortByMemberDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); static void _addCompareMemberProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static int _addCompareMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static void _addCompareMemberDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildList1GetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { int rv; _addGetByMemberProtoType(tb, ty, tm); rv=_addGetByMemberImplementation(tb, ty, tm); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } int TM2C_BuildList1Dup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _addListDupProtoType(tb, ty); rv=_addListDupImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } int TM2C_BuildList1SortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { int rv; _addSortByMemberProtoType(tb, ty, tm); _addCompareMemberProtoType(tb, ty, tm); _addSortByMemberImplementation(tb, ty, tm); rv=_addCompareMemberImplementation(tb, ty, tm); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addGetByMemberProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_TYPE *mty; tym=Typemaker2_Builder_GetTypeManager(tb); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); _addGetByMemberDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, ";\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addGetByMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; TYPEMAKER2_TYPE *mty; const char *sTypeId; const char *sTypePrefix; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sMemberName=Typemaker2_Member_GetName(tm); tbuf=GWEN_Buffer_new(0, 256, 0, 1); _addGetByMemberDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, "{\n"); GWEN_Buffer_AppendArgs(tbuf, " %s *p_struct;\n\n", sTypeId); GWEN_Buffer_AppendString(tbuf, " assert(p_list);\n"); GWEN_Buffer_AppendArgs(tbuf, " p_struct = %s_List_First(p_list);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, " while(p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " "); if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_cmp"); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); rv=Typemaker2_Builder_Invoke_CompareFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " if (p_rv == 0)\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendArgs(tbuf, " p_struct = %s_List_Next(p_struct);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " return NULL;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } void _addGetByMemberDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sTypeId; const char *sTypePrefix; const char *sMemberName; const char *sMemberTypeId; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sMemberName=Typemaker2_Member_GetName(tm); sMemberTypeId=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendArgs(tbuf, "%s *%s_List_GetBy%c%s(const %s_LIST *p_list, ", sTypeId, sTypePrefix, toupper(*sMemberName), sMemberName+1, sTypeId); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) GWEN_Buffer_AppendArgs(tbuf, " const %s *", sMemberTypeId); else GWEN_Buffer_AppendArgs(tbuf, "%s ", sMemberTypeId); GWEN_Buffer_AppendString(tbuf, "p_cmp)"); } void _addListDupDeclaration(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf) { const char *sTypeId; const char *sTypePrefix; sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendArgs(tbuf, "%s_LIST *%s_List_dup(const %s_LIST *p_src)", sTypeId, sTypePrefix, sTypeId); } void _addListDupProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); _addListDupDeclaration(ty, tbuf); GWEN_Buffer_AppendString(tbuf, ";\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addListDupImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *sTypeId; const char *sTypePrefix; sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); _addListDupDeclaration(ty, tbuf); GWEN_Buffer_AppendString(tbuf, " {\n"); GWEN_Buffer_AppendArgs(tbuf, " %s_LIST *p_dest;\n", sTypeId); GWEN_Buffer_AppendArgs(tbuf, " %s *p_elem;\n", sTypeId); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_src);\n"); GWEN_Buffer_AppendArgs(tbuf, " p_dest=%s_List_new();\n", sTypePrefix); GWEN_Buffer_AppendArgs(tbuf, " p_elem=%s_List_First(p_src);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, " while(p_elem) {\n"); GWEN_Buffer_AppendArgs(tbuf, " %s *p_cpy;\n\n", sTypeId); GWEN_Buffer_AppendArgs(tbuf, " p_cpy=%s_dup(p_elem);\n", sTypePrefix); GWEN_Buffer_AppendArgs(tbuf, " %s_List_Add(p_cpy, p_dest);\n", sTypePrefix); GWEN_Buffer_AppendArgs(tbuf, " p_elem=%s_List_Next(p_elem);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " return p_dest;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } void _addSortByMemberProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_TYPE *mty; tym=Typemaker2_Builder_GetTypeManager(tb); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); _addSortByMemberDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, ";\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } void _addSortByMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; TYPEMAKER2_TYPE *mty; const char *sTypeId; const char *sTypePrefix; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sMemberName=Typemaker2_Member_GetName(tm); tbuf=GWEN_Buffer_new(0, 256, 0, 1); _addSortByMemberDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, "{\n"); GWEN_Buffer_AppendArgs(tbuf, " %s_LIST_SORT_FN oldSortFn;\n", sTypeId); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendArgs(tbuf, " oldSortFn=%s_List_SetSortFn(p_list, %s_List_Compare_%c%s);\n", sTypePrefix, sTypePrefix, toupper(*sMemberName), sMemberName+1); GWEN_Buffer_AppendArgs(tbuf, " %s_List_Sort(p_list, p_ascending);\n", sTypePrefix); GWEN_Buffer_AppendArgs(tbuf, " %s_List_SetSortFn(p_list, oldSortFn);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } void _addSortByMemberDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sTypeId; const char *sTypePrefix; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sMemberName=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendArgs(tbuf, "void %s_List_SortBy%c%s(%s_LIST *p_list, int p_ascending)", sTypePrefix, toupper(*sMemberName), sMemberName+1, sTypeId); } void _addCompareMemberProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "static "); _addCompareMemberDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, ";\n"); Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addCompareMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; TYPEMAKER2_TYPE *mty; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sMemberName=Typemaker2_Member_GetName(tm); tbuf=GWEN_Buffer_new(0, 256, 0, 1); _addCompareMemberDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, "{\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(srcbuf, "p_a->%s", sMemberName); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_b->%s", sMemberName); rv=Typemaker2_Builder_Invoke_CompareFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " if (p_ascending)\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " return -p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } void _addCompareMemberDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sTypeId; const char *sTypePrefix; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sMemberName=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendArgs(tbuf, "int GWENHYWFAR_CB %s_List_Compare_%c%s(const %s *p_a, const %s *p_b, int p_ascending)", sTypePrefix, toupper(*sMemberName), sMemberName+1, sTypeId, sTypeId); } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_macros.c0000664000175000017500000000404514144206313016726 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_macros.h" #include "tm2c_misc.h" #include #include int TM2C_BuildMacroFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; uint32_t flags; const char *sTypeId; const char *sTypePrefix; sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* macro functions */\n"); flags=Typemaker2_Type_GetFlags(ty); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) GWEN_Buffer_AppendArgs(tbuf, "GWEN_LIST_FUNCTIONS(%s, %s)\n", sTypeId, sTypePrefix); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST2) GWEN_Buffer_AppendArgs(tbuf, "GWEN_LIST2_FUNCTIONS(%s, %s)\n", sTypeId, sTypePrefix); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_CONSTLIST2) GWEN_Buffer_AppendArgs(tbuf, "GWEN_CONSTLIST2_FUNCTIONS(%s, %s)\n", sTypeId, sTypePrefix); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) GWEN_Buffer_AppendArgs(tbuf, "GWEN_TREE_FUNCTIONS(%s, %s)\n", sTypeId, sTypePrefix); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) GWEN_Buffer_AppendArgs(tbuf, "GWEN_TREE2_FUNCTIONS(%s, %s)\n", sTypeId, sTypePrefix); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_INHERIT) GWEN_Buffer_AppendArgs(tbuf, "GWEN_INHERIT_FUNCTIONS(%s)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_IDMAP) GWEN_Buffer_AppendArgs(tbuf, "GWEN_IDMAP_FUNCTIONS(%s, %s)\n", sTypeId, sTypePrefix); GWEN_Buffer_AppendString(tbuf, "\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_misc.h0000664000175000017500000000116414144206313016401 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_MISC_H #define TM2C_MISC_H #include "tm_builder.h" int TM2C_AddReleaseOldValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_dup.h0000664000175000017500000000107314144206313016235 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_DUP_H #define TM2C_DUP_H #include "tm_builder.h" int TM2C_BuildDup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm_builder_c.h0000664000175000017500000000110714144206313017146 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_BUILDER_C_H #define TYPEMAKER2_BUILDER_C_H #include "tm_builder.h" TYPEMAKER2_BUILDER *Typemaker2_Builder_C_new(); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_writedb.h0000664000175000017500000000121014144206313017076 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_WRITEDB_H #define TM2C_WRITEDB_H #include "tm_builder.h" int TM2C_BuildWriteDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildToDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_slot.c0000664000175000017500000002252414144206313016425 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_slot.h" #include "tm2c_misc.h" #include #include int TM2C_BuildSlotFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_SLOT_LIST *slotList; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); slotList=Typemaker2_Type_GetSlots(ty); if (slotList) { TYPEMAKER2_SLOT *slot; /* private prototypes */ GWEN_Buffer_AppendString(tbuf, "/* slot functions */\n"); slot=Typemaker2_Slot_List_First(slotList); while (slot) { /* callback function */ GWEN_Buffer_AppendString(tbuf, "static int GWENHYWFAR_CB "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SlotCallback_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(GWEN_SLOT *slot, void *userData, void *p1, void *p2, int p3, int p4);\n"); slot=Typemaker2_Slot_List_Next(slot); } Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* public prototypes */ GWEN_Buffer_AppendString(tbuf, "/* slot functions */\n"); slot=Typemaker2_Slot_List_First(slotList); while (slot) { /* GetSlot */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "GWEN_SLOT *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_GetSlot_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); slot=Typemaker2_Slot_List_Next(slot); } Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "/* slot functions */\n"); slot=Typemaker2_Slot_List_First(slotList); while (slot) { /* callback function */ GWEN_Buffer_AppendString(tbuf, "static int GWENHYWFAR_CB "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_SlotCallback_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(GWEN_SLOT *slot, void *userData, void *p1, void *p2, int p3, int p4) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " p_struct=("); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "*) userData;\n"); GWEN_Buffer_AppendString(tbuf, " return "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(p_struct"); s=Typemaker2_Slot_GetParamType1(slot); /* param 1 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, ", ("); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") p1"); } s=Typemaker2_Slot_GetParamType2(slot); /* param 2 */ if (s && *s && strcasecmp(s, "none")) { GWEN_Buffer_AppendString(tbuf, ", ("); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ") p2"); } if (Typemaker2_Slot_GetFlags(slot) & TYPEMAKER2_SLOT_FLAGS_USE_PARAM3) GWEN_Buffer_AppendString(tbuf, ", p3"); if (Typemaker2_Slot_GetFlags(slot) & TYPEMAKER2_SLOT_FLAGS_USE_PARAM4) GWEN_Buffer_AppendString(tbuf, ", p4"); GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, "}\n\n"); /* GetSlot */ GWEN_Buffer_AppendString(tbuf, "GWEN_SLOT *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_GetSlot_"); s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " return GWEN_SignalObject_FindSlot(p_struct->_signalObject, "); s=Typemaker2_Slot_GetName(slot); /* name */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Slot_GetParamType1(slot); /* param 1 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\", "); s=Typemaker2_Slot_GetParamType2(slot); /* param 2 */ GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, s?s:"none"); GWEN_Buffer_AppendString(tbuf, "\");\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); slot=Typemaker2_Slot_List_Next(slot); } Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } GWEN_Buffer_free(tbuf); return 0; } int TM2C_AddVirtualFnsFromSlots(TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN_LIST *fnList; TYPEMAKER2_SLOT_LIST *slotList; tbuf=GWEN_Buffer_new(0, 256, 0, 1); fnList=Typemaker2_Type_GetVirtualFns(ty); slotList=Typemaker2_Type_GetSlots(ty); if (slotList) { TYPEMAKER2_SLOT *slot; slot=Typemaker2_Slot_List_First(slotList); while (slot) { TYPEMAKER2_VIRTUALFN *fn; TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist; /* callback function */ s=Typemaker2_Slot_GetName(slot); GWEN_Buffer_AppendByte(tbuf, tolower(*s)); GWEN_Buffer_AppendString(tbuf, s+1); fn=Typemaker2_VirtualFn_new(); plist=Typemaker2_VirtualFn_GetParamTypeList(fn); /* name */ Typemaker2_VirtualFn_SetName(fn, GWEN_Buffer_GetStart(tbuf)); s=Typemaker2_Slot_GetParamType1(slot); /* param 1 */ if (s && *s && strcasecmp(s, "none")) { TYPEMAKER2_VIRTUALFN_PARAM *prm; prm=Typemaker2_VirtualFn_Param_new(); Typemaker2_VirtualFn_Param_SetType(prm, s); Typemaker2_VirtualFn_Param_List_Add(prm, plist); } s=Typemaker2_Slot_GetParamType2(slot); /* param 2 */ if (s && *s && strcasecmp(s, "none")) { TYPEMAKER2_VIRTUALFN_PARAM *prm; prm=Typemaker2_VirtualFn_Param_new(); Typemaker2_VirtualFn_Param_SetType(prm, s); Typemaker2_VirtualFn_Param_List_Add(prm, plist); } if (Typemaker2_Slot_GetFlags(slot) & TYPEMAKER2_SLOT_FLAGS_USE_PARAM3) { TYPEMAKER2_VIRTUALFN_PARAM *prm; prm=Typemaker2_VirtualFn_Param_new(); Typemaker2_VirtualFn_Param_SetType(prm, "int"); Typemaker2_VirtualFn_Param_List_Add(prm, plist); } if (Typemaker2_Slot_GetFlags(slot) & TYPEMAKER2_SLOT_FLAGS_USE_PARAM4) { TYPEMAKER2_VIRTUALFN_PARAM *prm; prm=Typemaker2_VirtualFn_Param_new(); Typemaker2_VirtualFn_Param_SetType(prm, "int"); Typemaker2_VirtualFn_Param_List_Add(prm, plist); } Typemaker2_VirtualFn_SetAccess(fn, TypeMaker2_Access_Public); Typemaker2_VirtualFn_SetLocation(fn, "post"); Typemaker2_VirtualFn_SetReturnType(fn, "int"); Typemaker2_VirtualFn_SetDefaultReturnValue(fn, "GWEN_ERROR_NOT_IMPLEMENTED"); Typemaker2_VirtualFn_AddFlags(fn, TYPEMAKER2_VIRTUALFN_FLAGS_FROMSLOT); Typemaker2_VirtualFn_List_Add(fn, fnList); slot=Typemaker2_Slot_List_Next(slot); } } GWEN_Buffer_free(tbuf); return 0; } void TM2C_DelVirtualFnsFromSlots(TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fnList; fnList=Typemaker2_Type_GetVirtualFns(ty); if (fnList) { TYPEMAKER2_VIRTUALFN *fn; fn=Typemaker2_VirtualFn_List_First(fnList); while (fn) { TYPEMAKER2_VIRTUALFN *fnNext; fnNext=Typemaker2_VirtualFn_List_Next(fn); if (Typemaker2_VirtualFn_GetFlags(fn) & TYPEMAKER2_VIRTUALFN_FLAGS_FROMSLOT) { Typemaker2_VirtualFn_List_Del(fn); Typemaker2_VirtualFn_free(fn); } fn=fnNext; } } } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_readdb.c0000664000175000017500000001427714144206313016673 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_readdb.h" #include "tm2c_misc.h" #include #include static void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addReadMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildReadDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _addPrototype(tb, ty); rv=_addImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "void %s_ReadDb(%s *p_struct, GWEN_DB_NODE *p_db);\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(tbuf, "void %s_ReadDb(%s *p_struct, GWEN_DB_NODE *p_db){\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { rv=_addReadMemberCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int _addReadMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; int rv; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sMemberName=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" */\n", sMemberName); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { rv=TM2C_AddReleaseOldValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } /* read from object */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE) { GWEN_BUFFER *dstbuf; GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" is volatile, just presetting it */\n", sMemberName); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ConstructFn(tb, ty, tm, NULL, GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } else { GWEN_BUFFER *dstbuf; /* not volatile */ dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_FromDbFn(tb, ty, tm, NULL, GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } return 0; } int TM2C_BuildFromDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromDb(GWEN_DB_NODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_fromDb(GWEN_DB_NODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct;\n"); GWEN_Buffer_AppendString(tbuf, " p_struct="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); if (Typemaker2_Type_GetUsePrivateConstructor(ty)) { GWEN_Buffer_AppendByte(tbuf, '_'); } GWEN_Buffer_AppendString(tbuf, "_new();\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_ReadDb(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_tree2.c0000664000175000017500000001170714144206313016466 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_tree2.h" #include "tm2c_misc.h" #include #include static void _addGetByMemberProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static int _addGetByMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static void _addGetByMemberDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildTree2GetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { int rv; _addGetByMemberProtoType(tb, ty, tm); rv=_addGetByMemberImplementation(tb, ty, tm); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addGetByMemberProtoType(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_TYPE *mty; tym=Typemaker2_Builder_GetTypeManager(tb); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); _addGetByMemberDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, ";\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addGetByMemberImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { GWEN_BUFFER *tbuf; TYPEMAKER2_TYPE *mty; const char *sTypeId; const char *sTypePrefix; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sMemberName=Typemaker2_Member_GetName(tm); tbuf=GWEN_Buffer_new(0, 256, 0, 1); _addGetByMemberDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, "{\n"); GWEN_Buffer_AppendArgs(tbuf, " %s *p_struct;\n\n", sTypeId); GWEN_Buffer_AppendString(tbuf, " assert(p_object);\n"); GWEN_Buffer_AppendArgs(tbuf, " p_struct = %s_Tree2_GetFirstChild(p_object);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, " while(p_struct) {\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " "); if (1) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(srcbuf, "p_cmp"); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); rv=Typemaker2_Builder_Invoke_CompareFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " if (p_rv == 0)\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendArgs(tbuf, " p_struct = %s_Tree2_GetBelow(p_struct);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " return NULL;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } void _addGetByMemberDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sTypeId; const char *sTypePrefix; const char *sMemberName; const char *sMemberTypeId; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sMemberName=Typemaker2_Member_GetName(tm); sMemberTypeId=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendArgs(tbuf, "%s *%s_Tree2_GetBy%c%s(const %s *p_object, ", sTypeId, sTypePrefix, toupper(*sMemberName), sMemberName+1, sTypeId); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) GWEN_Buffer_AppendArgs(tbuf, " const %s *", sMemberTypeId); else GWEN_Buffer_AppendArgs(tbuf, "%s ", sMemberTypeId); GWEN_Buffer_AppendString(tbuf, "p_cmp)"); } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_readxml.h0000664000175000017500000000121314144206313017075 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_READXML_H #define TM2C_READXML_H #include "tm_builder.h" int TM2C_BuildReadXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildFromXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_constructor.h0000664000175000017500000000112314144206313020026 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_CONSTRUCTOR_H #define TM2C_CONSTRUCTOR_H #include "tm_builder.h" int TM2C_BuildConstructor(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_tree1.h0000664000175000017500000000114214144206313016462 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_TREE1_H #define TM2C_TREE1_H #include "tm_builder.h" int TM2C_BuildTreeGetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_copy.c0000664000175000017500000001542614144206313016421 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_copy.h" #include "tm2c_misc.h" #include #include static void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addCopyMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); static int _addAssignValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); static int _addDupValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildCopy(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _addPrototype(tb, ty); rv=_addImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "%s *%s_copy(%s *p_struct, const %s *p_src);\n", Typemaker2_Type_GetIdentifier(ty), Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty), Typemaker2_Type_GetIdentifier(ty)); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(tbuf, "%s *%s_copy(%s *p_struct, const %s *p_src) {\n", Typemaker2_Type_GetIdentifier(ty), Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty), Typemaker2_Type_GetIdentifier(ty)); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_src);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { rv=_addCopyMemberCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int _addCopyMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sMemberName; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sMemberName=Typemaker2_Member_GetName(tm); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_NOCOPY)) { GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" */\n", sMemberName); /* TODO: only do this if there is a preset value and it is !=NULL for pointers! */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { rv=TM2C_AddReleaseOldValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { if (Typemaker2_Member_GetCopyFlags(tm) & TYPEMAKER2_FLAGS_ASSIGN) { rv=_addAssignValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } /* assign */ else { GWEN_Buffer_AppendArgs(tbuf, " if (p_src->%s) {\n", sMemberName); rv=_addDupValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, " }\n"); } } /* if pointer */ else { rv=_addDupValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } } /* if !nocopy */ else { GWEN_Buffer_AppendString(tbuf, " /* member \""); GWEN_Buffer_AppendString(tbuf, sMemberName); GWEN_Buffer_AppendString(tbuf, "\" has nocopy flag, not copying */\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } int _addAssignValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; const char *sMemberName; sMemberName=Typemaker2_Member_GetName(tm); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(srcbuf, "p_src->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_AssignFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } int _addDupValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; const char *sMemberName; sMemberName=Typemaker2_Member_GetName(tm); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(srcbuf, "p_src->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DupFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_destructor.c0000664000175000017500000001471614144206313017646 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_destructor.h" #include #include static void _addPrototypes(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static void _addFreeHookPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static void _addTypeFinis(TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf); static int _addMemberFinis(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf); int TM2C_BuildDestructor(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _addPrototypes(tb, ty); _addFreeHookPrototype(tb, ty); rv=_addImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addPrototypes(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ GWEN_Buffer_AppendString(tbuf, "/** Destructor. */\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_free("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } void _addFreeHookPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { const char *s; /* insert freeHook prototype, if needed */ s=Typemaker2_Type_GetFreeHook(ty); if (s && *s) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "static void "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; uint32_t flags; const char *sTypeId; const char *sTypePrefix; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); /* implementation */ GWEN_Buffer_AppendArgs(tbuf, "void %s_free(%s *p_struct) {\n", sTypePrefix, sTypeId); GWEN_Buffer_AppendString(tbuf, " if (p_struct) {\n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT) { GWEN_Buffer_AppendString(tbuf, " assert(p_struct->_refCount);\n"); GWEN_Buffer_AppendString(tbuf, " if (p_struct->_refCount==1) {\n"); } if ((flags & TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS) || (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS)) GWEN_Buffer_AppendString(tbuf, " GWEN_SignalObject_free(p_struct->_signalObject);\n"); /* insert freeHook, if any */ s=Typemaker2_Type_GetFreeHook(ty); if (s && *s) GWEN_Buffer_AppendArgs(tbuf, " %s(p_struct);\n", s); _addTypeFinis(ty, flags, tbuf); rv=_addMemberFinis(tb, ty, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT) { GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount=0;\n"); } GWEN_Buffer_AppendString(tbuf, " GWEN_FREE_OBJECT(p_struct);\n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT) { GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount--;\n"); } GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } void _addTypeFinis(TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf) { const char *sTypeId; const char *sTypePrefix; sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_INHERIT) GWEN_Buffer_AppendArgs(tbuf, " GWEN_INHERIT_FINI(%s, p_struct)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) GWEN_Buffer_AppendArgs(tbuf, " GWEN_LIST_FINI(%s, p_struct)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) GWEN_Buffer_AppendArgs(tbuf, " GWEN_TREE_FINI(%s, p_struct)\n", sTypeId); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) GWEN_Buffer_AppendArgs(tbuf, " GWEN_TREE2_FINI(%s, p_struct, %s)\n", sTypeId, sTypePrefix); } int _addMemberFinis(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf) { TYPEMAKER2_MEMBER_LIST *tml; GWEN_Buffer_AppendString(tbuf, " /* members */\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { /* destruct, but only if the member is owned */ GWEN_BUFFER *dstbuf; int rv; const char *s; dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(dstbuf, "p_struct->"); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(dstbuf, s); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(dstbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(dstbuf); return rv; } GWEN_Buffer_free(dstbuf); GWEN_Buffer_AppendString(tbuf, "\n"); } tm=Typemaker2_Member_List_Next(tm); } } return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_readobject.h0000664000175000017500000000122714144206313017550 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_READOBJECT_H #define TM2C_READOBJECT_H #include "tm_builder.h" int TM2C_BuildReadObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildFromObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_writeobject.c0000664000175000017500000001330514144206313017762 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_writeobject.h" #include "tm2c_misc.h" #include #include static void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addWriteMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildWriteObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _addPrototype(tb, ty); rv=_addImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "int %s_WriteObject(const %s *p_struct, AQDB_OBJECT *p_db);\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(tbuf, "int %s_WriteObject(const %s *p_struct, AQDB_OBJECT *p_db) {\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); if (Typemaker2_Type_GetNonVolatileMemberCount(ty)) { GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { int rv; rv=_addWriteMemberCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int _addWriteMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sMemberName=Typemaker2_Member_GetName(tm); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { GWEN_BUFFER *srcbuf; int rv; GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" */\n", sMemberName); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(srcbuf, "p_struct->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ToObjectFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, tbuf); GWEN_Buffer_free(srcbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n"); GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\\n\", p_rv);\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); } else GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" is volatile, not writing to object */\n", sMemberName); GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } int TM2C_BuildToObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toObject(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, AQDB_OBJECT *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toObject(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, AQDB_OBJECT *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " return "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteObject(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_virtualfn.c0000664000175000017500000005532114144206313017457 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_virtualfn.h" #include "tm2c_misc.h" #include #include int TM2C_BuildDefineVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *loc) { TYPEMAKER2_VIRTUALFN_LIST *fns; fns=Typemaker2_Type_GetVirtualFns(ty); assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (loc && *loc) GWEN_Buffer_AppendArgs(tbuf, "/* definitions for virtual functions (%s) */\n", loc); else GWEN_Buffer_AppendString(tbuf, "/* definitions for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while (vf) { s=Typemaker2_VirtualFn_GetLocation(vf); if (!(s && *s)) s="pre"; if (s && loc && strcasecmp(s, loc)==0) { int access=Typemaker2_VirtualFn_GetAccess(vf); TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist; int i; GWEN_Buffer_AppendString(tbuf, "typedef "); s=Typemaker2_VirtualFn_GetReturnType(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); if (Typemaker2_VirtualFn_GetFlags(vf) & TYPEMAKER2_FLAGS_GWEN_CB) { GWEN_Buffer_AppendString(tbuf, " GWENHYWFAR_CB"); } GWEN_Buffer_AppendArgs(tbuf, " (*%s_", Typemaker2_Type_GetIdentifier(ty)); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while (*s) { GWEN_Buffer_AppendByte(tbuf, toupper(*s)); s++; } GWEN_Buffer_AppendString(tbuf, "_FN)("); if (Typemaker2_VirtualFn_GetFlags(vf) & TYPEMAKER2_FLAGS_CONST) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct"); plist=Typemaker2_VirtualFn_GetParamTypeList(vf); if (plist) { TYPEMAKER2_VIRTUALFN_PARAM *prm; i=1; prm=Typemaker2_VirtualFn_Param_List_First(plist); while (prm) { const char *paramName; const char *paramType; GWEN_Buffer_AppendString(tbuf, ", "); paramName=Typemaker2_VirtualFn_Param_GetName(prm); paramType=Typemaker2_VirtualFn_Param_GetType(prm); GWEN_Buffer_AppendString(tbuf, paramType); GWEN_Buffer_AppendString(tbuf, " "); if (paramName) GWEN_Buffer_AppendString(tbuf, paramName); else GWEN_Buffer_AppendArgs(tbuf, "param%d", i); prm=Typemaker2_VirtualFn_Param_List_Next(prm); i++; } } GWEN_Buffer_AppendString(tbuf, ");\n"); Typemaker2_Builder_AddDeclaration(tb, access, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); } vf=Typemaker2_VirtualFn_List_Next(vf); } GWEN_Buffer_free(tbuf); } return 0; } int TM2C_BuildProtoVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fns; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); fns=Typemaker2_Type_GetVirtualFns(ty); assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* prototypes for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while (vf) { int access=Typemaker2_VirtualFn_GetAccess(vf); TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist; int i; /* write APIDOC */ GWEN_Buffer_AppendString(tbuf, "/**\n"); s=Typemaker2_VirtualFn_GetDescr(vf); if (s && *s) { int len; GWEN_Buffer_AppendString(tbuf, " * "); GWEN_Buffer_AppendString(tbuf, s); len=strlen(s); if (s[len-1]!='\n') GWEN_Buffer_AppendString(tbuf, "\n"); } s=Typemaker2_VirtualFn_GetReturnTypeDescr(vf); if (s && *s) { int len; GWEN_Buffer_AppendString(tbuf, " * @return "); GWEN_Buffer_AppendString(tbuf, s); len=strlen(s); if (s[len-1]!='\n') GWEN_Buffer_AppendString(tbuf, "\n"); } i=1; plist=Typemaker2_VirtualFn_GetParamTypeList(vf); if (plist) { TYPEMAKER2_VIRTUALFN_PARAM *prm; i=1; prm=Typemaker2_VirtualFn_Param_List_First(plist); while (prm) { const char *paramDescr; paramDescr=Typemaker2_VirtualFn_Param_GetDescr(prm); if (paramDescr && *paramDescr) { const char *paramName; int len; GWEN_Buffer_AppendString(tbuf, " * @param "); paramName=Typemaker2_VirtualFn_Param_GetName(prm); if (paramName) GWEN_Buffer_AppendString(tbuf, paramName); else { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "param%d", i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, paramDescr); len=strlen(paramDescr); if (paramDescr[len-1]!='\n') GWEN_Buffer_AppendString(tbuf, "\n"); } i++; prm=Typemaker2_VirtualFn_Param_List_Next(prm); } } GWEN_Buffer_AppendString(tbuf, " */\n"); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_VirtualFn_GetReturnType(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); if (Typemaker2_VirtualFn_GetFlags(vf) & TYPEMAKER2_FLAGS_CONST) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct"); i=1; plist=Typemaker2_VirtualFn_GetParamTypeList(vf); if (plist) { TYPEMAKER2_VIRTUALFN_PARAM *prm; i=1; prm=Typemaker2_VirtualFn_Param_List_First(plist); while (prm) { const char *paramName; const char *paramType; GWEN_Buffer_AppendString(tbuf, ", "); paramName=Typemaker2_VirtualFn_Param_GetName(prm); paramType=Typemaker2_VirtualFn_Param_GetType(prm); GWEN_Buffer_AppendString(tbuf, paramType); GWEN_Buffer_AppendString(tbuf, " "); if (paramName) GWEN_Buffer_AppendString(tbuf, paramName); else { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "param%d", i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } prm=Typemaker2_VirtualFn_Param_List_Next(prm); i++; } } GWEN_Buffer_AppendString(tbuf, ");\n"); Typemaker2_Builder_AddDeclaration(tb, access, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); vf=Typemaker2_VirtualFn_List_Next(vf); } GWEN_Buffer_free(tbuf); } return 0; } int TM2C_BuildCodeVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fns; fns=Typemaker2_Type_GetVirtualFns(ty); assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* code for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while (vf) { TYPEMAKER2_VIRTUALFN_PARAM_LIST *plist; int i; s=Typemaker2_VirtualFn_GetReturnType(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "("); if (Typemaker2_VirtualFn_GetFlags(vf) & TYPEMAKER2_FLAGS_CONST) GWEN_Buffer_AppendString(tbuf, "const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct"); i=1; plist=Typemaker2_VirtualFn_GetParamTypeList(vf); if (plist) { TYPEMAKER2_VIRTUALFN_PARAM *prm; i=1; prm=Typemaker2_VirtualFn_Param_List_First(plist); while (prm) { const char *paramName; const char *paramType; GWEN_Buffer_AppendString(tbuf, ", "); paramName=Typemaker2_VirtualFn_Param_GetName(prm); paramType=Typemaker2_VirtualFn_Param_GetType(prm); GWEN_Buffer_AppendString(tbuf, paramType); GWEN_Buffer_AppendString(tbuf, " "); if (paramName) GWEN_Buffer_AppendString(tbuf, paramName); else { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "param%d", i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } prm=Typemaker2_VirtualFn_Param_List_Next(prm); i++; } } GWEN_Buffer_AppendString(tbuf, ") {\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " if (p_struct->"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { DBG_ERROR(0, "Virtual functions has no name"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "Fn)\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct->"); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "Fn(p_struct"); i=1; plist=Typemaker2_VirtualFn_GetParamTypeList(vf); if (plist) { TYPEMAKER2_VIRTUALFN_PARAM *prm; i=1; prm=Typemaker2_VirtualFn_Param_List_First(plist); while (prm) { const char *paramName; GWEN_Buffer_AppendString(tbuf, ", "); paramName=Typemaker2_VirtualFn_Param_GetName(prm); if (paramName) GWEN_Buffer_AppendString(tbuf, paramName); else { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "param%d", i); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); } prm=Typemaker2_VirtualFn_Param_List_Next(prm); i++; } } GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, " else\n"); GWEN_Buffer_AppendString(tbuf, " return "); s=Typemaker2_VirtualFn_GetDefaultReturnValue(vf); if (!(s && *s)) { DBG_ERROR(0, "No default return value"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ";\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); vf=Typemaker2_VirtualFn_List_Next(vf); } GWEN_Buffer_free(tbuf); } return 0; } int TM2C_BuildProtoSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fns; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); fns=Typemaker2_Type_GetVirtualFns(ty); assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* setters for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while (vf) { int access=Typemaker2_VirtualFn_GetAccess(vf); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while (*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Set"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "Fn("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct, "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while (*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN fn);\n"); switch (access) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); vf=Typemaker2_VirtualFn_List_Next(vf); } GWEN_Buffer_free(tbuf); } return 0; } int TM2C_BuildSetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fns; fns=Typemaker2_Type_GetVirtualFns(ty); assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* setters for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while (vf) { s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while (*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Set"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "Fn("); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct, "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while (*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN fn){\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while (*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN oldFn;\n\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " oldFn=p_struct->"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "Fn;\n"); GWEN_Buffer_AppendString(tbuf, " p_struct->"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "Fn=fn;\n"); GWEN_Buffer_AppendString(tbuf, " return oldFn;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); vf=Typemaker2_VirtualFn_List_Next(vf); } GWEN_Buffer_free(tbuf); } return 0; } int TM2C_BuildProtoGetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fns; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); fns=Typemaker2_Type_GetVirtualFns(ty); assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* getters for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while (vf) { int access=Typemaker2_VirtualFn_GetAccess(vf); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while (*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Get"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "Fn(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct);\n"); Typemaker2_Builder_AddDeclaration(tb, access, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); vf=Typemaker2_VirtualFn_List_Next(vf); } GWEN_Buffer_free(tbuf); } return 0; } int TM2C_BuildGetterVirtualFns(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_VIRTUALFN_LIST *fns; fns=Typemaker2_Type_GetVirtualFns(ty); assert(fns); if (Typemaker2_VirtualFn_List_GetCount(fns)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_VIRTUALFN *vf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, "/* getters for virtual functions */\n"); vf=Typemaker2_VirtualFn_List_First(fns); while (vf) { s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } while (*s) GWEN_Buffer_AppendByte(tbuf, toupper(*(s++))); GWEN_Buffer_AppendString(tbuf, "_FN "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_Get"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); GWEN_Buffer_AppendString(tbuf, "Fn(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); /* created structs are always pointers */ GWEN_Buffer_AppendString(tbuf, " *p_struct){\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " return p_struct->"); s=Typemaker2_VirtualFn_GetName(vf); if (!(s && *s)) { GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "Fn;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); vf=Typemaker2_VirtualFn_List_Next(vf); } } return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_signal.h0000664000175000017500000000111514144206313016717 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_SIGNAL_H #define TM2C_SIGNAL_H #include "tm_builder.h" int TM2C_BuildSignalFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_writexml.c0000664000175000017500000001233314144206313017314 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_writexml.h" #include "tm2c_misc.h" #include #include static void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addWriteMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildWriteXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _addPrototype(tb, ty); rv=_addImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "void %s_WriteXml(const %s *p_struct, GWEN_XMLNODE *p_db);\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(tbuf, "void %s_WriteXml(const %s *p_struct, GWEN_XMLNODE *p_db) {\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { int rv; rv=_addWriteMemberCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int _addWriteMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sMemberName=Typemaker2_Member_GetName(tm); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { GWEN_BUFFER *srcbuf; int rv; GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" */\n", sMemberName); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(srcbuf, "p_struct->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ToXmlFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, tbuf); GWEN_Buffer_free(srcbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } else GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" is volatile, not writing to xml */\n", sMemberName); GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } int TM2C_BuildToXml(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toXml(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_XMLNODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "void "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toXml(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_XMLNODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteXml(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_enums.c0000664000175000017500000003047614144206313016600 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_enums.h" #include "tm2c_misc.h" #include #include int TM2C_BuildDefineEnums(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_ENUM_LIST *enums; enums=Typemaker2_Type_GetEnums(ty); assert(enums); if (Typemaker2_Enum_List_GetCount(enums)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_ENUM *te; tbuf=GWEN_Buffer_new(0, 256, 0, 1); te=Typemaker2_Enum_List_First(enums); while (te) { const char *prefix; const char *etype; TYPEMAKER2_ITEM *ti; int access=TypeMaker2_Access_Public; prefix=Typemaker2_Enum_GetPrefix(te); if (prefix==NULL || *prefix==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in enum definition"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } etype=Typemaker2_Enum_GetType(te); if (etype && *etype) GWEN_Buffer_AppendString(tbuf, "typedef enum {\n"); else GWEN_Buffer_AppendString(tbuf, "enum {\n"); GWEN_Buffer_AppendString(tbuf, " "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); GWEN_Buffer_AppendString(tbuf, "Unknown = -1"); ti=Typemaker2_Item_List_First(Typemaker2_Enum_GetItems(te)); if (ti) GWEN_Buffer_AppendString(tbuf, ","); GWEN_Buffer_AppendString(tbuf, "\n"); while (ti) { GWEN_Buffer_AppendString(tbuf, " "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); s=Typemaker2_Item_GetName(ti); if (s && *s) { GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); } s=Typemaker2_Item_GetValue(ti); if (s) { GWEN_Buffer_AppendString(tbuf, " = "); GWEN_Buffer_AppendString(tbuf, s); } ti=Typemaker2_Item_List_Next(ti); if (ti) GWEN_Buffer_AppendString(tbuf, ","); GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, "}"); if (etype && *etype) { GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, etype); } GWEN_Buffer_AppendString(tbuf, ";\n"); GWEN_Buffer_AppendString(tbuf, "\n"); switch (access) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); te=Typemaker2_Enum_List_Next(te); } } return 0; } int TM2C_SetEnumStringFns(TYPEMAKER2_TYPE *ty) { TYPEMAKER2_ENUM_LIST *enums; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* uint32_t flags; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ enums=Typemaker2_Type_GetEnums(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(enums); if (Typemaker2_Enum_List_GetCount(enums)) { TYPEMAKER2_ENUM *te; te=Typemaker2_Enum_List_First(enums); while (te) { const char *prefix; GWEN_BUFFER *tbuf; prefix=Typemaker2_Enum_GetPrefix(te); if (prefix==NULL || *prefix==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in enum definition"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "fromString"); Typemaker2_Enum_SetFromStringFn(te, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "toString"); Typemaker2_Enum_SetToStringFn(te, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); te=Typemaker2_Enum_List_Next(te); } } return 0; } int TM2C_BuildEnumFromString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_ENUM_LIST *enums; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); enums=Typemaker2_Type_GetEnums(ty); assert(enums); if (Typemaker2_Enum_List_GetCount(enums)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_ENUM *te; tbuf=GWEN_Buffer_new(0, 256, 0, 1); te=Typemaker2_Enum_List_First(enums); while (te) { const char *prefix; const char *etype; TYPEMAKER2_ITEM *ti; int acc=TypeMaker2_Access_Public; int i; prefix=Typemaker2_Enum_GetPrefix(te); if (prefix==NULL || *prefix==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in enum definition"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } etype=Typemaker2_Enum_GetType(te); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "%s ", (etype && *etype)?etype:"int"); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "fromString(const char *p_s);\n"); switch (acc) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); /* implementation */ if (etype && *etype) GWEN_Buffer_AppendArgs(tbuf, "%s ", etype); else GWEN_Buffer_AppendString(tbuf, "int "); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "fromString(const char *p_s) {\n"); GWEN_Buffer_AppendString(tbuf, " if (p_s && *p_s) {\n"); i=0; ti=Typemaker2_Item_List_First(Typemaker2_Enum_GetItems(te)); while (ti) { const char *sItemName; sItemName=Typemaker2_Item_GetName(ti); GWEN_Buffer_AppendString(tbuf, " "); if (i++) GWEN_Buffer_AppendString(tbuf, "else "); GWEN_Buffer_AppendArgs(tbuf, "if (strcasecmp(p_s, \"%s\")==0)\n", sItemName); GWEN_Buffer_AppendArgs(tbuf, " return %s%c%s;\n", prefix, toupper(*sItemName), sItemName+1); ti=Typemaker2_Item_List_Next(ti); } GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendArgs(tbuf, " return %sUnknown;\n", prefix); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); te=Typemaker2_Enum_List_Next(te); } GWEN_Buffer_free(tbuf); } /* if enums */ return 0; } int TM2C_BuildEnumToString(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_ENUM_LIST *enums; TYPEMAKER2_TYPEMANAGER *tym; /* uint32_t flags; */ tym=Typemaker2_Builder_GetTypeManager(tb); enums=Typemaker2_Type_GetEnums(ty); /* flags=Typemaker2_Type_GetFlags(ty); */ assert(enums); if (Typemaker2_Enum_List_GetCount(enums)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_ENUM *te; tbuf=GWEN_Buffer_new(0, 256, 0, 1); te=Typemaker2_Enum_List_First(enums); while (te) { const char *prefix; const char *etype; TYPEMAKER2_ITEM *ti; int acc=TypeMaker2_Access_Public; prefix=Typemaker2_Enum_GetPrefix(te); if (prefix==NULL || *prefix==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in enum definition"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } etype=Typemaker2_Enum_GetType(te); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "const char *"); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "toString("); if (etype && *etype) GWEN_Buffer_AppendString(tbuf, etype); else GWEN_Buffer_AppendString(tbuf, "int"); GWEN_Buffer_AppendString(tbuf, " p_i);\n"); switch (acc) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "const char *"); if (prefix && *prefix) { GWEN_Buffer_AppendString(tbuf, prefix); if (prefix[strlen(prefix)-1]!='_') GWEN_Buffer_AppendString(tbuf, "_"); } GWEN_Buffer_AppendString(tbuf, "toString("); if (etype && *etype) GWEN_Buffer_AppendString(tbuf, etype); else GWEN_Buffer_AppendString(tbuf, "int"); GWEN_Buffer_AppendString(tbuf, " p_i) {\n"); GWEN_Buffer_AppendString(tbuf, " switch(p_i) {\n"); ti=Typemaker2_Item_List_First(Typemaker2_Enum_GetItems(te)); while (ti) { GWEN_Buffer_AppendString(tbuf, " case "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); s=Typemaker2_Item_GetName(ti); if (s && *s) { GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); } GWEN_Buffer_AppendString(tbuf, ": return \""); s=Typemaker2_Item_GetName(ti); if (s && *s) { GWEN_Buffer_AppendByte(tbuf, tolower(*s)); GWEN_Buffer_AppendString(tbuf, s+1); } GWEN_Buffer_AppendString(tbuf, "\";\n"); ti=Typemaker2_Item_List_Next(ti); } /* handle "unknown" */ GWEN_Buffer_AppendString(tbuf, " case "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); GWEN_Buffer_AppendString(tbuf, "Unknown:\n"); /* handle default */ GWEN_Buffer_AppendString(tbuf, " default: return \"unknown\";\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); te=Typemaker2_Enum_List_Next(te); } GWEN_Buffer_free(tbuf); } /* if enums */ return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_struct.h0000664000175000017500000000110414144206313016764 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_STRUCT_H #define TM2C_STRUCT_H #include "tm_builder.h" int TM2C_BuildStruct(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_typedef.c0000664000175000017500000001572614144206313017112 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_typedef.h" #include #include static void _addFlagSpecificSystemHeaders(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf); static void _addPreHeaders(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf); static void _addTypeSpecificDefs(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf); /** writes typedef line into public header and also writes includes */ int TM2C_BuildTypedef(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; uint32_t flags; tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); _addFlagSpecificSystemHeaders(ty, tbuf); _addPreHeaders(ty, tbuf); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_OBJECT) GWEN_Buffer_AppendString(tbuf, "#include \n"); GWEN_Buffer_AppendString(tbuf, "typedef struct "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ";\n"); _addTypeSpecificDefs(tb, ty, flags, tbuf); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_OBJECT) { GWEN_Buffer_AppendString(tbuf, "#include \n"); } GWEN_Buffer_AppendString(tbuf, "\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } void _addFlagSpecificSystemHeaders(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf) { uint32_t flags; flags=Typemaker2_Type_GetFlags(ty); /* add some system headers */ GWEN_Buffer_AppendString(tbuf, "/* needed system headers */\n"); GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST2) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_INHERIT) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_IDMAP) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_DB) GWEN_Buffer_AppendString(tbuf, "#include \n"); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_XML) GWEN_Buffer_AppendString(tbuf, "#include \n"); if ((flags & TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS) || (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS)) GWEN_Buffer_AppendString(tbuf, "#include \n"); GWEN_Buffer_AppendString(tbuf, "\n"); } void _addPreHeaders(TYPEMAKER2_TYPE *ty, GWEN_BUFFER *tbuf) { TYPEMAKER2_HEADER_LIST *hl; /* handle pre-headers */ hl=Typemaker2_Type_GetHeaders(ty); if (hl) { TYPEMAKER2_HEADER *h; h=Typemaker2_Header_List_First(hl); if (h) { GWEN_Buffer_AppendString(tbuf, "/* pre-headers */\n"); while (h) { if (Typemaker2_Header_GetLocation(h)==Typemaker2_HeaderLocation_Pre) { GWEN_Buffer_AppendString(tbuf, "#include "); if (Typemaker2_Header_GetType(h)==Typemaker2_HeaderType_System) { GWEN_Buffer_AppendString(tbuf, "<"); GWEN_Buffer_AppendString(tbuf, Typemaker2_Header_GetFileName(h)); GWEN_Buffer_AppendString(tbuf, ">"); } else { GWEN_Buffer_AppendString(tbuf, "\""); GWEN_Buffer_AppendString(tbuf, Typemaker2_Header_GetFileName(h)); GWEN_Buffer_AppendString(tbuf, "\""); } GWEN_Buffer_AppendString(tbuf, "\n"); } h=Typemaker2_Header_List_Next(h); } GWEN_Buffer_AppendString(tbuf, "\n"); } } } void _addTypeSpecificDefs(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, uint32_t flags, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPEMANAGER *tym; const char *sTypeId; const char *sTypePrefix; const char *sApi; tym=Typemaker2_Builder_GetTypeManager(tb); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); sApi=Typemaker2_TypeManager_GetApiDeclaration(tym); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) GWEN_Buffer_AppendArgs(tbuf, "GWEN_LIST_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi); else GWEN_Buffer_AppendArgs(tbuf, "GWEN_LIST_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix); } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST2) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) GWEN_Buffer_AppendArgs(tbuf, "GWEN_LIST2_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi); else GWEN_Buffer_AppendArgs(tbuf, "GWEN_LIST2_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix); } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_CONSTLIST2) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) GWEN_Buffer_AppendArgs(tbuf, "GWEN_CONSTLIST2_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi); else GWEN_Buffer_AppendArgs(tbuf, "GWEN_CONSTLIST2_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix); } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) GWEN_Buffer_AppendArgs(tbuf, "GWEN_TREE_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi); else GWEN_Buffer_AppendArgs(tbuf, "GWEN_TREE_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix); } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) GWEN_Buffer_AppendArgs(tbuf, "GWEN_TREE2_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi); else GWEN_Buffer_AppendArgs(tbuf, "GWEN_TREE2_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix); } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_INHERIT) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) GWEN_Buffer_AppendArgs(tbuf, "GWEN_INHERIT_FUNCTION_LIB_DEFS(%s, %s)\n", sTypeId, sApi); else GWEN_Buffer_AppendArgs(tbuf, "GWEN_INHERIT_FUNCTION_DEFS(%s)\n", sTypeId); } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_IDMAP) { if (Typemaker2_TypeManager_GetApiDeclaration(tym)) GWEN_Buffer_AppendArgs(tbuf, "GWEN_IDMAP_FUNCTION_LIB_DEFS(%s, %s, %s)\n", sTypeId, sTypePrefix, sApi); else GWEN_Buffer_AppendArgs(tbuf, "GWEN_IDMAP_FUNCTION_DEFS(%s, %s)\n", sTypeId, sTypePrefix); } GWEN_Buffer_AppendString(tbuf, "\n"); } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_getter.h0000664000175000017500000000110414144206313016732 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_GETTER_H #define TM2C_GETTER_H #include "tm_builder.h" int TM2C_BuildGetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_writedb.c0000664000175000017500000001324414144206313017103 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_writedb.h" #include "tm2c_misc.h" #include #include static void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addWriteMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildWriteDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _addPrototype(tb, ty); rv=_addImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "int %s_WriteDb(const %s *p_struct, GWEN_DB_NODE *p_db);\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(tbuf, "int %s_WriteDb(const %s *p_struct, GWEN_DB_NODE *p_db) {\n", Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); if (Typemaker2_Type_GetNonVolatileMemberCount(ty)) { GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { int rv; rv=_addWriteMemberCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int _addWriteMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sMemberName; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sMemberName=Typemaker2_Member_GetName(tm); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { GWEN_BUFFER *srcbuf; int rv; GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" */\n", sMemberName); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(srcbuf, "p_struct->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ToDbFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, tbuf); GWEN_Buffer_free(srcbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n"); GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\\n\", p_rv);\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); } else GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" is volatile, not writing to db */\n", sMemberName); GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } int TM2C_BuildToDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toDb(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_DB_NODE *p_db);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_toDb(const "); s=Typemaker2_Type_GetIdentifier(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " *p_struct, GWEN_DB_NODE *p_db) {\n"); GWEN_Buffer_AppendString(tbuf, " return "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_WriteDb(p_struct, p_db);\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_slot.h0000664000175000017500000000126414144206313016430 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_SLOT_H #define TM2C_SLOT_H #include "tm_builder.h" int TM2C_BuildSlotFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_AddVirtualFnsFromSlots(TYPEMAKER2_TYPE *ty); void TM2C_DelVirtualFnsFromSlots(TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_readdb.h0000664000175000017500000000120714144206313016665 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_READDB_H #define TM2C_READDB_H #include "tm_builder.h" int TM2C_BuildReadDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildFromDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_tree2.h0000664000175000017500000000114314144206313016464 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_TREE2_H #define TM2C_TREE2_H #include "tm_builder.h" int TM2C_BuildTree2GetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_macros.h0000664000175000017500000000111414144206313016725 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_MACROS_H #define TM2C_MACROS_H #include "tm_builder.h" int TM2C_BuildMacroFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_misc.c0000664000175000017500000000320214156464753016410 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_setter.h" #include #include int TM2C_AddReleaseOldValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; GWEN_BUFFER *srcbuf; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) GWEN_Buffer_AppendArgs(tbuf, " if (p_struct->%s) {\n", Typemaker2_Member_GetName(tm)); /* invoke free */ srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(srcbuf, "p_struct->%s", Typemaker2_Member_GetName(tm)); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { GWEN_Buffer_AppendArgs(tbuf, " p_struct->%s=NULL;\n", Typemaker2_Member_GetName(tm)); GWEN_Buffer_AppendString(tbuf, " }\n"); } return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_dup.c0000664000175000017500000001561214144206313016234 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_dup.h" #include "tm2c_misc.h" #include #include static void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); static int _addDupMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); static int _addAssignValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); static int _addDupValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); int TM2C_BuildDup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; _addPrototype(tb, ty); rv=_addImplementation(tb, ty); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } return 0; } void _addPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "%s *%s_dup(const %s *p_src);\n", Typemaker2_Type_GetIdentifier(ty), Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } int _addImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(tbuf, "%s *%s_dup(const %s *p_src) {\n", Typemaker2_Type_GetIdentifier(ty), Typemaker2_Type_GetPrefix(ty), Typemaker2_Type_GetIdentifier(ty)); GWEN_Buffer_AppendArgs(tbuf, " %s *p_struct;\n\n", Typemaker2_Type_GetIdentifier(ty)); GWEN_Buffer_AppendString(tbuf, " assert(p_src);\n"); if (Typemaker2_Type_GetUsePrivateConstructor(ty)) GWEN_Buffer_AppendArgs(tbuf, " p_struct=%s__new();\n", Typemaker2_Type_GetPrefix(ty)); else GWEN_Buffer_AppendArgs(tbuf, " p_struct=%s_new();\n", Typemaker2_Type_GetPrefix(ty)); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { rv=_addDupMemberCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return p_struct;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int _addDupMemberCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *sMemberName; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sMemberName=Typemaker2_Member_GetName(tm); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_NODUP)) { GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" */\n", sMemberName); /* TODO: only do this if there is a preset value and it is !=NULL for pointers! */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { rv=TM2C_AddReleaseOldValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { if (Typemaker2_Member_GetDupFlags(tm) & TYPEMAKER2_FLAGS_ASSIGN) { rv=_addAssignValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } /* assign */ else { GWEN_Buffer_AppendArgs(tbuf, " if (p_src->%s) {\n", sMemberName); rv=_addDupValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, " }\n"); } } /* if pointer */ else { rv=_addDupValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } } /* if !nodup */ else { GWEN_Buffer_AppendString(tbuf, " /* member \""); GWEN_Buffer_AppendString(tbuf, sMemberName); GWEN_Buffer_AppendString(tbuf, "\" has nodup flag, not copying */\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } int _addAssignValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; const char *sMemberName; sMemberName=Typemaker2_Member_GetName(tm); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(srcbuf, "p_src->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_AssignFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } int _addDupValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { GWEN_BUFFER *dstbuf; GWEN_BUFFER *srcbuf; int rv; const char *sMemberName; sMemberName=Typemaker2_Member_GetName(tm); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", sMemberName); srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(srcbuf, "p_src->%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DupFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(srcbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm_builder_c.c0000664000175000017500000007353414460564441017170 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #include "tm_builder_c.h" #include "tm2c_enums.h" #include "tm2c_constructor.h" #include "tm2c_destructor.h" #include "tm2c_typedef.h" #include "tm2c_struct.h" #include "tm2c_getter.h" #include "tm2c_setter.h" #include "tm2c_readdb.h" #include "tm2c_writedb.h" #include "tm2c_readxml.h" #include "tm2c_writexml.h" #include "tm2c_readobject.h" #include "tm2c_writeobject.h" #include "tm2c_dup.h" #include "tm2c_copy.h" #include "tm2c_macros.h" #include "tm2c_list1.h" #include "tm2c_tree1.h" #include "tm2c_tree2.h" #include "tm2c_signal.h" #include "tm2c_slot.h" #include "tm2c_object.h" #include "tm2c_virtualfn.h" #include #include #include /* DEBUG */ /*DBG_ERROR(0, "Member %s has flags %x", Typemaker2_Member_GetName(tm), Typemaker2_Member_GetFlags(tm));*/ static int _buildFieldIds(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; tbuf=GWEN_Buffer_new(0, 256, 0, 1); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) GWEN_Buffer_AppendArgs(tbuf, "#define %s %d\n", Typemaker2_Member_GetFieldId(tm), Typemaker2_Member_GetMemberPosition(tm)); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendArgs(tbuf, "#define %s %d\n", Typemaker2_Type_GetFieldCountId(ty), Typemaker2_Type_GetNonVolatileMemberCount(ty)); Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildPostHeaders(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_TYPEMANAGER *tym GWEN_UNUSED; TYPEMAKER2_HEADER_LIST *hl; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* handle post-headers */ hl=Typemaker2_Type_GetHeaders(ty); if (hl) { TYPEMAKER2_HEADER *h; h=Typemaker2_Header_List_First(hl); if (h) { GWEN_Buffer_AppendString(tbuf, "/* post-headers */\n"); while (h) { if (Typemaker2_Header_GetLocation(h)==Typemaker2_HeaderLocation_Post) { GWEN_Buffer_AppendString(tbuf, "#include "); if (Typemaker2_Header_GetType(h)==Typemaker2_HeaderType_System) GWEN_Buffer_AppendArgs(tbuf, "<%s>", Typemaker2_Header_GetFileName(h)); else GWEN_Buffer_AppendArgs(tbuf, "\"%s\"", Typemaker2_Header_GetFileName(h)); GWEN_Buffer_AppendString(tbuf, "\n"); } h=Typemaker2_Header_List_Next(h); } } GWEN_Buffer_AppendString(tbuf, "\n"); } Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildEndHeaders(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_TYPEMANAGER *tym GWEN_UNUSED; TYPEMAKER2_HEADER_LIST *hl; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* handle post-headers */ hl=Typemaker2_Type_GetHeaders(ty); if (hl) { TYPEMAKER2_HEADER *h; int markAdded=0; h=Typemaker2_Header_List_First(hl); while (h) { if (Typemaker2_Header_GetLocation(h)==Typemaker2_HeaderLocation_HeaderEnd) { if (!markAdded) { GWEN_Buffer_AppendString(tbuf, "/* end-headers */\n"); markAdded=1; } GWEN_Buffer_AppendString(tbuf, "#include "); if (Typemaker2_Header_GetType(h)==Typemaker2_HeaderType_System) GWEN_Buffer_AppendArgs(tbuf, "<%s>", Typemaker2_Header_GetFileName(h)); else GWEN_Buffer_AppendArgs(tbuf, "\"%s\"", Typemaker2_Header_GetFileName(h)); GWEN_Buffer_AppendString(tbuf, "\n"); } h=Typemaker2_Header_List_Next(h); } GWEN_Buffer_AppendString(tbuf, "\n"); } Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildGetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_MEMBER_LIST *tml; uint32_t flags; /* TYPEMAKER2_TYPEMANAGER *tym; */ /* tym=Typemaker2_Builder_GetTypeManager(tb); */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { TYPEMAKER2_TYPE *mty; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_WITH_GETBYMEMBER) { if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) { rv=TM2C_BuildList1GetByMember(tb, ty, tm); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE) { rv=TM2C_BuildTreeGetByMember(tb, ty, tm); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) { rv=TM2C_BuildTree2GetByMember(tb, ty, tm); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } tm=Typemaker2_Member_List_Next(tm); } GWEN_Buffer_AppendString(tbuf, " return p_cl;\n"); } return 0; } static int _buildSortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_MEMBER_LIST *tml; uint32_t flags; flags=Typemaker2_Type_GetFlags(ty); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { TYPEMAKER2_TYPE *mty; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_SORTBYMEMBER) { if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) { rv=TM2C_BuildList1SortByMember(tb, ty, tm); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } tm=Typemaker2_Member_List_Next(tm); } } return 0; } static int _buildDefineDefines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_DEFINE_LIST *defines; defines=Typemaker2_Type_GetDefines(ty); assert(defines); if (Typemaker2_Define_List_GetCount(defines)) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_DEFINE *td; tbuf=GWEN_Buffer_new(0, 256, 0, 1); td=Typemaker2_Define_List_First(defines); while (td) { const char *prefix; TYPEMAKER2_ITEM *ti; int access=TypeMaker2_Access_Public; int j=Typemaker2_Define_GetStartValue(td); GWEN_Buffer_AppendString(tbuf, "/* define "); s=Typemaker2_Define_GetId(td); if (s && *s) GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " */\n"); prefix=Typemaker2_Define_GetPrefix(td); if (prefix==NULL || *prefix==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No prefix in define definition"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } ti=Typemaker2_Item_List_First(Typemaker2_Define_GetItems(td)); while (ti) { GWEN_Buffer_AppendString(tbuf, "#define "); if (prefix) GWEN_Buffer_AppendString(tbuf, prefix); s=Typemaker2_Item_GetName(ti); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); } s=Typemaker2_Item_GetValue(ti); if (s) { GWEN_Buffer_AppendString(tbuf, " "); GWEN_Buffer_AppendString(tbuf, s); } else { char numbuf[32]; int k=0; switch (Typemaker2_Define_GetMode(td)) { case Typemaker2_Define_Mode_BitField: k=1<%s", sMemberName); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_ToHashStringFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); GWEN_Buffer_free(srcbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); } GWEN_Buffer_AppendString(tbuf, " GWEN_Buffer_AppendByte(p_buffer, \':\');\n"); } else GWEN_Buffer_AppendArgs(tbuf, " /* member \"%s\" doesn't have with_hash flag, ignoring */\n", sMemberName); tm=Typemaker2_Member_List_Next(tm); } /* while tm */ } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildInlines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; uint32_t flags; tbuf=GWEN_Buffer_new(0, 256, 0, 1); flags=Typemaker2_Type_GetFlags(ty); while (ty) { TYPEMAKER2_INLINE *ti; ti=Typemaker2_Inline_List_First(Typemaker2_Type_GetInlines(ty)); while (ti) { if ((flags & Typemaker2_Inline_GetTypeFlagsMask(ti))==Typemaker2_Inline_GetTypeFlagsValue(ti)) { const char *content; content=Typemaker2_Inline_GetContent(ti); if (content && *content) { GWEN_DB_NODE *db; int rv; db=Typemaker2_Builder_CreateDbForCall(tb, ty, NULL, NULL, NULL); assert(db); rv=Typemaker2_Builder_ReplaceVars(content, db, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* include code */ switch (Typemaker2_Inline_GetLocation(ti)) { case Typemaker2_InlineLocation_Header: Typemaker2_Builder_AddDeclaration(tb, Typemaker2_Inline_GetAccess(ti), GWEN_Buffer_GetStart(tbuf)); break; case Typemaker2_InlineLocation_Code: Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); break; } } GWEN_Buffer_Reset(tbuf); } ti=Typemaker2_Inline_List_Next(ti); } ty=Typemaker2_Type_GetExtendsPtr(ty); } GWEN_Buffer_free(tbuf); return 0; } static int _buildMemberInlines(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_TYPE *structType; GWEN_BUFFER *tbuf; /* TYPEMAKER2_TYPEMANAGER *tym; */ structType=ty; /* tym=Typemaker2_Builder_GetTypeManager(tb); */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); while (ty) { TYPEMAKER2_MEMBER_LIST *tml; tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { TYPEMAKER2_TYPE *mty; uint32_t memberFlags; memberFlags=Typemaker2_Member_GetFlags(tm); mty=Typemaker2_Member_GetTypePtr(tm); /* TODO: Check that we don't create duplicate code here!! */ if (mty && mty!=structType && mty!=ty) { TYPEMAKER2_INLINE *ti; /* get inlines from member type */ ti=Typemaker2_Inline_List_First(Typemaker2_Type_GetInlines(mty)); while (ti) { if ((memberFlags & Typemaker2_Inline_GetTypeFlagsMask(ti))==Typemaker2_Inline_GetTypeFlagsValue(ti)) { const char *content; content=Typemaker2_Inline_GetContent(ti); if (content && *content) { GWEN_DB_NODE *db; int rv; /* replace vars in context of the struct type, not the particular member type */ db=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, NULL, NULL); assert(db); rv=Typemaker2_Builder_ReplaceVars(content, db, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } /* include code */ switch (Typemaker2_Inline_GetLocation(ti)) { case Typemaker2_InlineLocation_Header: Typemaker2_Builder_AddDeclaration(tb, Typemaker2_Inline_GetAccess(ti), GWEN_Buffer_GetStart(tbuf)); break; case Typemaker2_InlineLocation_Code: Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); break; } } GWEN_Buffer_Reset(tbuf); } ti=Typemaker2_Inline_List_Next(ti); } } /* if mty */ tm=Typemaker2_Member_List_Next(tm); } /* while tm */ } /* if tml */ ty=Typemaker2_Type_GetExtendsPtr(ty); } return 0; } static int _buildAttach(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_TYPEMANAGER *tym; const char *sTypeId; const char *sTypePrefix; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); sTypeId=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && *s) GWEN_Buffer_AppendArgs(tbuf, "%s ", s); GWEN_Buffer_AppendArgs(tbuf, "void %s_Attach(%s *p_struct);\n", sTypePrefix, sTypeId); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendArgs(tbuf, "void %s_Attach(%s *p_struct) {\n", sTypePrefix, sTypeId); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct->_refCount);\n"); GWEN_Buffer_AppendString(tbuf, " p_struct->_refCount++;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildCacheFunctions(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; TYPEMAKER2_TYPEMANAGER *tym; const char *sApi; const char *sTypePrefix; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); sApi=Typemaker2_TypeManager_GetApiDeclaration(tym); sTypePrefix=Typemaker2_Type_GetPrefix(ty); /* public prototypes */ GWEN_Buffer_AppendString(tbuf, "/* cache functions */\n"); if (sApi && *sApi) GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi); GWEN_Buffer_AppendArgs(tbuf, "int GWENHYWFAR_CB %s_CacheFn_Attach(void *ptr);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, "\n"); if (sApi && *sApi) GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi); GWEN_Buffer_AppendArgs(tbuf, "int GWENHYWFAR_CB %s_CacheFn_Free(void *ptr);\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, "\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementations */ GWEN_Buffer_AppendString(tbuf, "/* cache functions */\n"); GWEN_Buffer_AppendArgs(tbuf, "int %s_CacheFn_Attach(void *ptr) {\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendArgs(tbuf, "int %s_CacheFn_Free(void *ptr) {\n", sTypePrefix); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); GWEN_Buffer_AppendString(tbuf, "\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int _buildGroupApiDoc(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_GROUP *grp, int depth, GWEN_BUFFER *buf) { const char *s; TYPEMAKER2_GROUP *childGrp; TYPEMAKER2_MEMBER_LIST *members; const char *sTypeIdentifier; const char *sTypePrefix; sTypeIdentifier=Typemaker2_Type_GetIdentifier(ty); sTypePrefix=Typemaker2_Type_GetPrefix(ty); /* write title */ s=Typemaker2_Group_GetTitle(grp); GWEN_Buffer_AppendString(buf, "\n\n"); GWEN_Buffer_AppendArgs(buf, "%s\n", depth, (s && *s)?s:"Unnamed Group", depth); GWEN_Buffer_AppendString(buf, "\n"); s=Typemaker2_Group_GetDescription(grp); if (s && *s) { GWEN_DB_NODE *dbCall; int rv; dbCall=Typemaker2_Builder_CreateDbForCall(tb, ty, NULL, NULL, NULL); assert(dbCall); rv=Typemaker2_Builder_ReplaceVars(s, dbCall, buf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbCall); GWEN_Buffer_free(buf); return rv; } GWEN_DB_Group_free(dbCall); GWEN_Buffer_AppendString(buf, "\n"); } /* write member docs */ members=Typemaker2_Type_GetMembers(ty); if (members) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(members); while (tm) { if (Typemaker2_Member_GetGroupPtr(tm)==grp) { const char *sMemberName; sMemberName=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendArgs(buf, "\n\n@anchor %s_%s\n", sTypeIdentifier, sMemberName); GWEN_Buffer_AppendArgs(buf, "%s\n\n", depth+1, sMemberName, depth+1); /* add description, if any */ s=Typemaker2_Member_GetDescription(tm); if (s && *s) { GWEN_DB_NODE *dbCall; int rv; dbCall=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, NULL, NULL); assert(dbCall); rv=Typemaker2_Builder_ReplaceVars(s, dbCall, buf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_DB_Group_free(dbCall); GWEN_Buffer_free(buf); return rv; } GWEN_DB_Group_free(dbCall); GWEN_Buffer_AppendString(buf, "\n"); } /* add setter/getter info */ GWEN_Buffer_AppendArgs(buf, "

Set this property with @ref %s_Set%c%s(), ", sTypePrefix, toupper(*sMemberName), sMemberName+1); GWEN_Buffer_AppendArgs(buf, "get it with @ref %s_Get%c%s().

\n", sTypePrefix, toupper(*sMemberName), sMemberName+1); } tm=Typemaker2_Member_List_Next(tm); } } /* write children groups */ childGrp=Typemaker2_Group_Tree_GetFirstChild(grp); while (childGrp) { int rv; rv=_buildGroupApiDoc(tb, ty, childGrp, depth+1, buf); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); return rv; } childGrp=Typemaker2_Group_Tree_GetNext(childGrp); } return 0; } static int _buildApiDoc(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_GROUP_TREE *groupTree; TYPEMAKER2_GROUP *grp; GWEN_BUFFER *tbuf; const char *sTypeIdentifier; sTypeIdentifier=Typemaker2_Type_GetIdentifier(ty); groupTree=Typemaker2_Type_GetGroupTree(ty); tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(tbuf, "/** @page P_%s Structure %s\n", sTypeIdentifier, sTypeIdentifier); GWEN_Buffer_AppendArgs(tbuf, "

This page describes the properties of %s.

\n", sTypeIdentifier); GWEN_Buffer_AppendString(tbuf, "\n"); grp=Typemaker2_Group_Tree_GetFirst(groupTree); while (grp) { _buildGroupApiDoc(tb, ty, grp, 1, tbuf); grp=Typemaker2_Group_Tree_GetNext(grp); } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, "*/\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } static int Typemaker2_Builder_C_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; uint32_t flags; flags=Typemaker2_Type_GetFlags(ty); if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS) { TM2C_DelVirtualFnsFromSlots(ty); rv=TM2C_AddVirtualFnsFromSlots(ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=TM2C_SetEnumStringFns(ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_OBJECT) { rv=_buildFieldIds(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=_buildApiDoc(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildDefineDefines(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildTypedef(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildDefineEnums(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildDefineVirtualFns(tb, ty, "pre"); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildPostHeaders(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildDefineVirtualFns(tb, ty, "post"); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildStruct(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildMacroFunctions(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildEnumFromString(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildEnumToString(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildConstructor(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildDestructor(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT) { rv=_buildAttach(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (!(flags & TYPEMAKER2_TYPEFLAGS_NODUP)) { rv=TM2C_BuildDup(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (!(flags & TYPEMAKER2_TYPEFLAGS_NOCOPY)) { rv=TM2C_BuildCopy(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=TM2C_BuildGetter(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildSetter(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildProtoVirtualFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildCodeVirtualFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildProtoSetterVirtualFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildSetterVirtualFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildProtoGetterVirtualFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildGetterVirtualFns(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) { if (!(flags & TYPEMAKER2_TYPEFLAGS_NODUP)) { rv=TM2C_BuildList1Dup(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_DB) { rv=TM2C_BuildReadDb(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildWriteDb(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildFromDb(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildToDb(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_XML) { rv=TM2C_BuildReadXml(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildWriteXml(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildToXml(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildFromXml(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_OBJECT) { rv=TM2C_BuildReadObject(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildWriteObject(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildToObject(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildFromObject(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildCreateColumnList(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildCreateTable(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=TM2C_BuildCreateObject(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=_buildGetByMember(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_HASH) { rv=_buildToHashString(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=_buildMemberInlines(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildSortByMember(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS) { rv=TM2C_BuildSignalFunctions(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_SLOTS) { rv=TM2C_BuildSlotFunctions(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (flags & TYPEMAKER2_TYPEFLAGS_WITH_CACHEFNS) { rv=_buildCacheFunctions(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } rv=_buildInlines(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=_buildEndHeaders(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } TYPEMAKER2_BUILDER *Typemaker2_Builder_C_new() { TYPEMAKER2_BUILDER *tb; tb=Typemaker2_Builder_new(); Typemaker2_Builder_SetBuildFn(tb, Typemaker2_Builder_C_Build); return tb; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_setter.c0000664000175000017500000003131514144206313016750 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_setter.h" #include "tm2c_misc.h" #include #include static int _addSetterPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static int _addSetterImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static void _addSetterFnDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); static int _addDupNewValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); static int _addAssignNewValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf); static int _addFlagFnsPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); static void _addFlagFnsImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); int TM2C_BuildSetter(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_MEMBER_LIST *tml; tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { if (!(Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_OMIT)) { TYPEMAKER2_TYPE *mty; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); rv=_addSetterPrototype(tb, ty, tm); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_WITH_FLAGS) { /* add special functions for flags */ rv=_addFlagFnsPrototype(tb, ty, tm); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } } rv=_addSetterImplementation(tb, ty, tm); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_WITH_FLAGS) _addFlagFnsImplementation(tb, ty, tm); } /* if not OMIT */ tm=Typemaker2_Member_List_Next(tm); } } return 0; } int _addSetterPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_TYPE *mty; GWEN_BUFFER *tbuf; const char *s; tbuf=GWEN_Buffer_new(0, 256, 0, 1); tym=Typemaker2_Builder_GetTypeManager(tb); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); /* prototype */ GWEN_Buffer_AppendArgs(tbuf, "/** Setter.\n" " * Use this function to set the member \"%s\" (see @ref %s_%s)\n*/\n", Typemaker2_Member_GetName(tm), Typemaker2_Type_GetIdentifier(ty), Typemaker2_Member_GetName(tm)); s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s && Typemaker2_Member_GetAccess(tm)<=TypeMaker2_Access_Protected) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } _addSetterFnDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, ";\n"); switch (Typemaker2_Member_GetAccess(tm)) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_free(tbuf); return 0; } void _addSetterFnDeclaration(TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; const char *s; mty=Typemaker2_Member_GetTypePtr(tm); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendArgs(tbuf, "void %s_Set%c%s(%s *p_struct, ", Typemaker2_Type_GetPrefix(ty), toupper(*s), s+1, Typemaker2_Type_GetIdentifier(ty)); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te; const char *s; te=Typemaker2_Member_GetEnumPtr(tm); assert(te); s=Typemaker2_Enum_GetType(te); if (!(s && *s)) s=Typemaker2_Type_GetIdentifier(mty); GWEN_Buffer_AppendArgs(tbuf, "%s p_src", s); } else if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer || Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Array) { if (Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_CONST || Typemaker2_Member_GetSetFlags(tm) & TYPEMAKER2_FLAGS_DUP) GWEN_Buffer_AppendString(tbuf, "const "); GWEN_Buffer_AppendArgs(tbuf, "%s *p_src", Typemaker2_Type_GetIdentifier(mty)); } else { GWEN_Buffer_AppendArgs(tbuf, "%s p_src", Typemaker2_Type_GetIdentifier(mty)); } GWEN_Buffer_AppendString(tbuf, ")"); } int _addSetterImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { TYPEMAKER2_TYPE *mty; GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); /* implementation */ _addSetterFnDeclaration(ty, tm, tbuf); GWEN_Buffer_AppendString(tbuf, "{\n"); GWEN_Buffer_AppendString(tbuf, " assert(p_struct);\n"); if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_OWN) { rv=TM2C_AddReleaseOldValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } /* if own */ if (Typemaker2_Member_GetSetFlags(tm) & (TYPEMAKER2_FLAGS_DUP | TYPEMAKER2_FLAGS_CONST)) { rv=_addDupNewValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } else { rv=_addAssignNewValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); GWEN_Buffer_free(tbuf); return rv; } } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int _addReleaseOldValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; GWEN_BUFFER *srcbuf; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) GWEN_Buffer_AppendArgs(tbuf, " if (p_struct->%s) {\n", Typemaker2_Member_GetName(tm)); /* invoke free */ srcbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(srcbuf, "p_struct->%s", Typemaker2_Member_GetName(tm)); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DestructFn(tb, ty, tm, GWEN_Buffer_GetStart(srcbuf), NULL, /* no dest */ tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_Buffer_free(srcbuf); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_free(srcbuf); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { GWEN_Buffer_AppendString(tbuf, " }\n"); } return 0; } int _addDupNewValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; GWEN_BUFFER *dstbuf; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) GWEN_Buffer_AppendString(tbuf, " if (p_src) {\n"); /* dup */ dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", Typemaker2_Member_GetName(tm)); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_DupFn(tb, ty, tm, "p_src", GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); if (Typemaker2_Type_GetType(mty)==TypeMaker2_Type_Pointer) { GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " else {\n"); GWEN_Buffer_AppendArgs(tbuf, " p_struct->%s=NULL;\n", Typemaker2_Member_GetName(tm)); GWEN_Buffer_AppendString(tbuf, " }\n"); } #if 0 else { rv=_addAssignNewValueCode(tb, ty, tm, tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } #endif GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } int _addAssignNewValueCode(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_BUFFER *tbuf) { TYPEMAKER2_TYPE *mty; GWEN_BUFFER *dstbuf; int rv; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); dstbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendArgs(dstbuf, "p_struct->%s", Typemaker2_Member_GetName(tm)); GWEN_Buffer_AppendString(tbuf, " "); rv=Typemaker2_Builder_Invoke_AssignFn(tb, ty, tm, "p_src", GWEN_Buffer_GetStart(dstbuf), tbuf); GWEN_Buffer_free(dstbuf); if (rv<0) { DBG_INFO(NULL, "here (%d)", rv); return rv; } GWEN_Buffer_AppendString(tbuf, "\n"); return 0; } int _addFlagFnsPrototype(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_TYPE *mty; GWEN_BUFFER *tbuf; const char *sApi; const char *s; tbuf=GWEN_Buffer_new(0, 256, 0, 1); tym=Typemaker2_Builder_GetTypeManager(tb); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); sApi=Typemaker2_TypeManager_GetApiDeclaration(tym); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendArgs(tbuf, "/** Add flags.\n" " * Use this function to add flags to member \"%s\" (see @ref %s_%s)\n*/\n", Typemaker2_Member_GetName(tm), Typemaker2_Type_GetIdentifier(ty), Typemaker2_Member_GetName(tm)); if (sApi && Typemaker2_Member_GetAccess(tm)<=TypeMaker2_Access_Protected) GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi); GWEN_Buffer_AppendArgs(tbuf, "void %s_Add%c%s(%s *p_struct, %s p_src);\n", Typemaker2_Type_GetPrefix(ty), toupper(*s), s+1, Typemaker2_Type_GetIdentifier(ty), Typemaker2_Type_GetIdentifier(mty)); GWEN_Buffer_AppendArgs(tbuf, "/** Add flags.\n" " * Use this function to add flags to member \"%s\" (see @ref %s_%s)\n*/\n", Typemaker2_Member_GetName(tm), Typemaker2_Type_GetIdentifier(ty), Typemaker2_Member_GetName(tm)); if (sApi && Typemaker2_Member_GetAccess(tm)<=TypeMaker2_Access_Protected) GWEN_Buffer_AppendArgs(tbuf, "%s ", sApi); GWEN_Buffer_AppendArgs(tbuf, "void %s_Sub%c%s(%s *p_struct, %s p_src);\n", Typemaker2_Type_GetPrefix(ty), toupper(*s), s+1, Typemaker2_Type_GetIdentifier(ty), Typemaker2_Type_GetIdentifier(mty)); switch (Typemaker2_Member_GetAccess(tm)) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_free(tbuf); return 0; } void _addFlagFnsImplementation(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm) { TYPEMAKER2_TYPE *mty; GWEN_BUFFER *tbuf; const char *s; tbuf=GWEN_Buffer_new(0, 256, 0, 1); mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendArgs(tbuf, "void %s_Add%c%s(%s *p_struct, %s p_src) {\n" " assert(p_struct);\n" " p_struct->%s|=p_src;\n" "}\n", Typemaker2_Type_GetPrefix(ty), toupper(*s), s+1, Typemaker2_Type_GetIdentifier(ty), Typemaker2_Type_GetIdentifier(mty), s); GWEN_Buffer_AppendString(tbuf, "\n\n"); GWEN_Buffer_AppendArgs(tbuf, "void %s_Sub%c%s(%s *p_struct, %s p_src) {\n" " assert(p_struct);\n" " p_struct->%s&=~p_src;\n" "}\n", Typemaker2_Type_GetPrefix(ty), toupper(*s), s+1, Typemaker2_Type_GetIdentifier(ty), Typemaker2_Type_GetIdentifier(mty), s); GWEN_Buffer_AppendString(tbuf, "\n\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_object.c0000664000175000017500000001731214144206313016711 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm2c_object.h" #include "tm2c_misc.h" #include #include int TM2C_BuildCreateColumnList(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; TYPEMAKER2_MEMBER_LIST *tml; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "AQDB_COLUMN_LIST *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateColumnList();\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "AQDB_COLUMN_LIST *"); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateColumnList() {\n"); if (Typemaker2_Type_GetNonVolatileMemberCount(ty)==0) { GWEN_Buffer_AppendString(tbuf, " return NULL;\n"); } else { GWEN_Buffer_AppendString(tbuf, " AQDB_COLUMN_LIST *p_cl;\n"); GWEN_Buffer_AppendString(tbuf, " AQDB_COLUMN *p_c;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " p_cl=AQDB_Column_List_new();\n"); GWEN_Buffer_AppendString(tbuf, "\n"); tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tm; tm=Typemaker2_Member_List_First(tml); while (tm) { TYPEMAKER2_TYPE *mty; mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { char numbuf[32]; int l; GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" */\n"); GWEN_Buffer_AppendString(tbuf, " p_c=AQDB_Column_new("); s=Typemaker2_Type_GetAqDbType(mty); if (s && *s) { GWEN_Buffer_AppendString(tbuf, s); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no AQDB type element"); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } GWEN_Buffer_AppendString(tbuf, ", \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\", "); l=Typemaker2_Member_GetMaxLen(tm); if (l==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Member [%s] has no maxlen attribute", Typemaker2_Member_GetName(tm)); GWEN_Buffer_free(tbuf); return GWEN_ERROR_BAD_DATA; } snprintf(numbuf, sizeof(numbuf)-1, "%d", l); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString(tbuf, numbuf); GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, " AQDB_Column_List_Add(p_c, p_cl);\n"); } else { GWEN_Buffer_AppendString(tbuf, " /* member \""); s=Typemaker2_Member_GetName(tm); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "\" is volatile, not adding to column list */\n"); } GWEN_Buffer_AppendString(tbuf, "\n"); tm=Typemaker2_Member_List_Next(tm); } } GWEN_Buffer_AppendString(tbuf, " return p_cl;\n"); } GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int TM2C_BuildCreateTable(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateTable(AQDB_DB *p_db, const char *p_name, uint32_t p_flags);"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateTable(AQDB_DB *p_db, const char *p_name, uint32_t p_flags) {\n"); GWEN_Buffer_AppendString(tbuf, " AQDB_COLUMN_LIST *p_cl;\n"); GWEN_Buffer_AppendString(tbuf, " int p_rv;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " p_cl="); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateColumnList();\n"); GWEN_Buffer_AppendString(tbuf, " p_rv=AQDB_DB_CreateTable(p_db, p_name, p_flags, p_cl);\n"); GWEN_Buffer_AppendString(tbuf, " AQDB_Column_List_free(p_cl);\n"); GWEN_Buffer_AppendString(tbuf, " if (p_rv<0) {\n"); GWEN_Buffer_AppendString(tbuf, " DBG_INFO(GWEN_LOGDOMAIN, \"here (%d)\", p_rv);\n"); GWEN_Buffer_AppendString(tbuf, " return p_rv;\n"); GWEN_Buffer_AppendString(tbuf, " }\n"); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } int TM2C_BuildCreateObject(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { GWEN_BUFFER *tbuf; const char *s; /* uint32_t flags; */ TYPEMAKER2_TYPEMANAGER *tym; tym=Typemaker2_Builder_GetTypeManager(tb); tbuf=GWEN_Buffer_new(0, 256, 0, 1); /* flags=Typemaker2_Type_GetFlags(ty); */ /* prototype */ s=Typemaker2_TypeManager_GetApiDeclaration(tym); if (s) { GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, " "); } GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateObject(AQDB_DB *p_db, AQDB_ID p_tableId, AQDB_ID p_id, AQDB_OBJECT **pp_o);\n"); Typemaker2_Builder_AddPublicDeclaration(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); /* implementation */ GWEN_Buffer_AppendString(tbuf, "int "); s=Typemaker2_Type_GetPrefix(ty); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_CreateObject(AQDB_DB *p_db, AQDB_ID p_tableId, AQDB_ID p_id, AQDB_OBJECT **pp_o) {\n"); GWEN_Buffer_AppendString(tbuf, " AQDB_OBJECT *p_o;\n"); GWEN_Buffer_AppendString(tbuf, "\n"); GWEN_Buffer_AppendString(tbuf, " p_o=AQDB_Object_new(p_tableId, p_id, "); s=Typemaker2_Type_GetFieldCountId(ty); if (s && *s) { } GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, ");\n"); GWEN_Buffer_AppendString(tbuf, " *pp_o=p_o;\n"); GWEN_Buffer_AppendString(tbuf, " return 0;\n"); GWEN_Buffer_AppendString(tbuf, "}\n"); Typemaker2_Builder_AddCode(tb, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-5.12.0/tools/typemaker2/c/tm2c_list1.h0000664000175000017500000000141514144206313016501 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TM2C_LIST1_H #define TM2C_LIST1_H #include "tm_builder.h" int TM2C_BuildList1GetByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); int TM2C_BuildList1Dup(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int TM2C_BuildList1SortByMember(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm); #endif gwenhywfar-5.12.0/tools/typemaker2/tm_define_p.h0000644000175000017500000000126413142134464016553 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_define.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_DEFINE_P_H #define TM_DEFINE_P_H #include "tm_define.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_DEFINE { GWEN_LIST_ELEMENT(TYPEMAKER2_DEFINE) char *id; char *prefix; char *type; TYPEMAKER2_ITEM_LIST *items; /* volatile */ int mode; int startValue; int lastValue; /* volatile */ }; #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/tm_define.xml0000644000175000017500000000522613142134464016607 00000000000000 TYPEMAKER2_DEFINE Typemaker2_Define tm_define with_list1 with_xml
tm_item.h
NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL Typemaker2_Item_List_new() public own volatile const dup none Typemaker2_Define_Mode_Unknown Typemaker2_Define_Mode_Unknown public attribute enum none none 0 0 public attribute none none 0 0 public volatile none none
gwenhywfar-5.12.0/tools/typemaker2/tm_virtualfn.h0000644000175000017500000000670213142134464017016 00000000000000/*************************************************************************** begin : Mon Jun 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_VIRTUALFN_H #define TYPEMAKER2_VIRTUALFN_H #include #include #include typedef struct TYPEMAKER2_VIRTUALFN TYPEMAKER2_VIRTUALFN; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_VIRTUALFN, Typemaker2_VirtualFn); typedef struct TYPEMAKER2_VIRTUALFN_PARAM TYPEMAKER2_VIRTUALFN_PARAM; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_VIRTUALFN_PARAM, Typemaker2_VirtualFn_Param); #define TYPEMAKER2_VIRTUALFN_FLAGS_FROMSLOT 0x00000001 TYPEMAKER2_VIRTUALFN *Typemaker2_VirtualFn_new(); void Typemaker2_VirtualFn_free(TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_Attach(TYPEMAKER2_VIRTUALFN *vf); int Typemaker2_VirtualFn_readXml(TYPEMAKER2_VIRTUALFN *vf, GWEN_XMLNODE *node); const char *Typemaker2_VirtualFn_GetName(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetName(TYPEMAKER2_VIRTUALFN *vf, const char *s); const char *Typemaker2_VirtualFn_GetLocation(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetLocation(TYPEMAKER2_VIRTUALFN *vf, const char *s); const char *Typemaker2_VirtualFn_GetDescr(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetDescr(TYPEMAKER2_VIRTUALFN *vf, const char *s); uint32_t Typemaker2_VirtualFn_GetFlags(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl); void Typemaker2_VirtualFn_AddFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl); void Typemaker2_VirtualFn_SubFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl); int Typemaker2_VirtualFn_GetAccess(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetAccess(TYPEMAKER2_VIRTUALFN *vf, int i); const char *Typemaker2_VirtualFn_GetReturnType(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetReturnType(TYPEMAKER2_VIRTUALFN *vf, const char *s); const char *Typemaker2_VirtualFn_GetReturnTypeDescr(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetReturnTypeDescr(TYPEMAKER2_VIRTUALFN *vf, const char *s); const char *Typemaker2_VirtualFn_GetPreset(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetPreset(TYPEMAKER2_VIRTUALFN *vf, const char *s); const char *Typemaker2_VirtualFn_GetDefaultReturnValue(const TYPEMAKER2_VIRTUALFN *vf); void Typemaker2_VirtualFn_SetDefaultReturnValue(TYPEMAKER2_VIRTUALFN *vf, const char *s); TYPEMAKER2_VIRTUALFN_PARAM_LIST *Typemaker2_VirtualFn_GetParamTypeList(const TYPEMAKER2_VIRTUALFN *vf); TYPEMAKER2_VIRTUALFN_PARAM *Typemaker2_VirtualFn_Param_new(); void Typemaker2_VirtualFn_Param_free(TYPEMAKER2_VIRTUALFN_PARAM *prm); const char *Typemaker2_VirtualFn_Param_GetName(const TYPEMAKER2_VIRTUALFN_PARAM *prm); void Typemaker2_VirtualFn_Param_SetName(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s); const char *Typemaker2_VirtualFn_Param_GetType(const TYPEMAKER2_VIRTUALFN_PARAM *prm); void Typemaker2_VirtualFn_Param_SetType(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s); const char *Typemaker2_VirtualFn_Param_GetDescr(const TYPEMAKER2_VIRTUALFN_PARAM *prm); void Typemaker2_VirtualFn_Param_SetDescr(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s); #endif gwenhywfar-5.12.0/tools/typemaker2/main.c0000644000175000017500000001707513440562565015240 00000000000000 #include "typemaker2.h" #include #include #include #include #include #define I18N(msg) msg int main(int argc, char **argv) { GWEN_DB_NODE *db; int rv; int err; int defsOnly=0; GWEN_GUI *gui; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "api", /* name */ 0, /* minnum */ 1, /* maxnum */ "D", /* short option */ "api", /* long option */ "API declaration prefix (like GWENHYWFAR_API)", "API declaration prefix (like GWENHYWFAR_API)" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "publicFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "public", /* long option */ "Name of the public header file to create", "Name of the public header file to create" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "libraryFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "library", /* long option */ "Name of the library header file to create", "Name of the library header file to create" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "protectedFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "protected", /* long option */ "Name of the protected header file to create", "Name of the protected header file to create" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "privateFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "private", /* long option */ "Name of the private header file to create", "Name of the private header file to create" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "codeFile", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "code", /* long option */ "Name of the code file to create", "Name of the code file to create" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "destFolder", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "destfolder", /* long option */ "Destination folder", "Destination folder" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "language", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "lang", /* long option */ "Language for which to create the headers and code", "Language for which to create the headers and code" }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "include", /* name */ 0, /* minnum */ 99, /* maxnum */ "I", /* short option */ "include", /* long option */ "Add folder to include for type lookup", "Add folder to include for type lookup" }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "defsOnly", /* name */ 0, /* minnum */ 1, /* maxnum */ "d", /* short option */ "defs-only", /* long option */ "Only write def files (*.tm2)", "Only write def files (*.tm2)" }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "noDefs", /* name */ 0, /* minnum */ 1, /* maxnum */ NULL, /* short option */ "no-defs", /* long option */ "Dont write def files (*.tm2)", "Dont write def files (*.tm2)" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); GWEN_Logger_Open(0, "typemaker2", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" build:\n" " This command creates source and header files for the given file" "\n\n")); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } defsOnly=GWEN_DB_GetIntValue(db, "defsOnly", 0, 0); if (defsOnly) rv=buildDefs(db); else rv=build(db); err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; } gwenhywfar-5.12.0/tools/typemaker2/Makefile.in0000664000175000017500000010561014730344662016207 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@ bin_PROGRAMS = typemaker2$(EXEEXT) @IS_WINDOWS_TRUE@am__append_1 = $(PROG_LIBRARIES) subdir = tools/typemaker2 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_typemaker2_OBJECTS = tm_type.$(OBJEXT) tm_member.$(OBJEXT) \ tm_header.$(OBJEXT) tm_util.$(OBJEXT) tm_typemanager.$(OBJEXT) \ tm_builder.$(OBJEXT) tm_item.$(OBJEXT) tm_enum.$(OBJEXT) \ tm_define.$(OBJEXT) tm_code.$(OBJEXT) tm_inline.$(OBJEXT) \ tm_virtualfn.$(OBJEXT) tm_signal.$(OBJEXT) tm_slot.$(OBJEXT) \ tm_group.$(OBJEXT) build.$(OBJEXT) builddefs.$(OBJEXT) \ main.$(OBJEXT) typemaker2_OBJECTS = $(am_typemaker2_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) typemaker2_DEPENDENCIES = c/libtm2_c.la \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = typemaker2_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(typemaker2_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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/build.Po ./$(DEPDIR)/builddefs.Po \ ./$(DEPDIR)/main.Po ./$(DEPDIR)/tm_builder.Po \ ./$(DEPDIR)/tm_code.Po ./$(DEPDIR)/tm_define.Po \ ./$(DEPDIR)/tm_enum.Po ./$(DEPDIR)/tm_group.Po \ ./$(DEPDIR)/tm_header.Po ./$(DEPDIR)/tm_inline.Po \ ./$(DEPDIR)/tm_item.Po ./$(DEPDIR)/tm_member.Po \ ./$(DEPDIR)/tm_signal.Po ./$(DEPDIR)/tm_slot.Po \ ./$(DEPDIR)/tm_type.Po ./$(DEPDIR)/tm_typemanager.Po \ ./$(DEPDIR)/tm_util.Po ./$(DEPDIR)/tm_virtualfn.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(typemaker2_SOURCES) DIST_SOURCES = $(typemaker2_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 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 \ 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 $(top_srcdir)/depcomp README 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = c types AM_CPPFLAGS = @all_includes@ -I$(gwenhywfar_symlinkdir) \ -I$(srcdir)/c \ -I$(builddir)/c typefiles = \ tm_item.xml \ tm_enum.xml \ tm_define.xml \ tm_code.xml \ tm_signal.xml \ tm_slot.xml noinst_HEADERS = \ tm_type_p.h tm_type.h \ tm_member_p.h tm_member.h \ tm_header_p.h tm_header.h \ tm_typemanager_p.h tm_typemanager.h \ tm_virtualfn_p.h tm_virtualfn.h \ tm_builder_p.h tm_builder.h \ tm_item_p.h tm_item.h \ tm_enum_p.h tm_enum.h \ tm_define_p.h tm_define.h \ tm_code_p.h tm_code.h \ tm_inline_p.h tm_inline.h \ tm_signal_p.h tm_signal.h \ tm_slot_p.h tm_slot.h \ tm_group_p.h tm_group.h \ tm_util.h \ typemaker2.h typemaker2_SOURCES = \ tm_type.c \ tm_member.c \ tm_header.c \ tm_util.c \ tm_typemanager.c \ tm_builder.c \ tm_item.c \ tm_enum.c \ tm_define.c \ tm_code.c \ tm_inline.c \ tm_virtualfn.c \ tm_signal.c \ tm_slot.c \ tm_group.c \ build.c \ builddefs.c \ main.c # tm_enum.c typemaker2_LDADD = c/libtm2_c.la \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__append_1) @IS_WINDOWS_TRUE@typemaker2_LDFLAGS = -mconsole EXTRA_DIST = $(typefiles) all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/typemaker2/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/typemaker2/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-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 \ || test -f $$p1 \ ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list typemaker2$(EXEEXT): $(typemaker2_OBJECTS) $(typemaker2_DEPENDENCIES) $(EXTRA_typemaker2_DEPENDENCIES) @rm -f typemaker2$(EXEEXT) $(AM_V_CCLD)$(typemaker2_LINK) $(typemaker2_OBJECTS) $(typemaker2_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/build.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/builddefs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_builder.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_code.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_define.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_enum.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_group.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_header.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_inline.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_item.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_member.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_signal.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_slot.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_type.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_typemanager.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_util.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tm_virtualfn.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 $(PROGRAMS) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/build.Po -rm -f ./$(DEPDIR)/builddefs.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/tm_builder.Po -rm -f ./$(DEPDIR)/tm_code.Po -rm -f ./$(DEPDIR)/tm_define.Po -rm -f ./$(DEPDIR)/tm_enum.Po -rm -f ./$(DEPDIR)/tm_group.Po -rm -f ./$(DEPDIR)/tm_header.Po -rm -f ./$(DEPDIR)/tm_inline.Po -rm -f ./$(DEPDIR)/tm_item.Po -rm -f ./$(DEPDIR)/tm_member.Po -rm -f ./$(DEPDIR)/tm_signal.Po -rm -f ./$(DEPDIR)/tm_slot.Po -rm -f ./$(DEPDIR)/tm_type.Po -rm -f ./$(DEPDIR)/tm_typemanager.Po -rm -f ./$(DEPDIR)/tm_util.Po -rm -f ./$(DEPDIR)/tm_virtualfn.Po -rm -f Makefile distclean-am: clean-am distclean-compile 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-binPROGRAMS 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 ./$(DEPDIR)/build.Po -rm -f ./$(DEPDIR)/builddefs.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/tm_builder.Po -rm -f ./$(DEPDIR)/tm_code.Po -rm -f ./$(DEPDIR)/tm_define.Po -rm -f ./$(DEPDIR)/tm_enum.Po -rm -f ./$(DEPDIR)/tm_group.Po -rm -f ./$(DEPDIR)/tm_header.Po -rm -f ./$(DEPDIR)/tm_inline.Po -rm -f ./$(DEPDIR)/tm_item.Po -rm -f ./$(DEPDIR)/tm_member.Po -rm -f ./$(DEPDIR)/tm_signal.Po -rm -f ./$(DEPDIR)/tm_slot.Po -rm -f ./$(DEPDIR)/tm_type.Po -rm -f ./$(DEPDIR)/tm_typemanager.Po -rm -f ./$(DEPDIR)/tm_util.Po -rm -f ./$(DEPDIR)/tm_virtualfn.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ 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-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile #BUILT_SOURCES= sources: for f in $(typemaker2_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done indent: $(BUILT_SOURCES) $(ASTYLE) \ --style=gnu \ --indent=spaces=2 \ --min-conditional-indent=0 \ --indent-labels \ --pad=oper \ --one-line=keep-blocks \ --suffix=none \ -a -y $(BUILT_SOURCES) types: $(typefiles) ./typemaker2 -I types/c -I $(srcdir) $(typefiles) # 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: gwenhywfar-5.12.0/tools/typemaker2/tm_typemanager.c0000664000175000017500000005243713314434371017324 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_typemanager_p.h" #include #include #include #include #include #define TM_TYPEMANAGER_XMLFLAGS (\ GWEN_XML_FLAGS_DEFAULT | \ GWEN_XML_FLAGS_HANDLE_HEADERS | \ GWEN_XML_FLAGS_HANDLE_OPEN_HTMLTAGS \ ) TYPEMAKER2_TYPEMANAGER *Typemaker2_TypeManager_new() { TYPEMAKER2_TYPEMANAGER *tym; GWEN_NEW_OBJECT(TYPEMAKER2_TYPEMANAGER, tym); tym->typeList=Typemaker2_Type_List_new(); tym->folders=GWEN_StringList_new(); tym->lang=strdup("c"); return tym; } void Typemaker2_TypeManager_free(TYPEMAKER2_TYPEMANAGER *tym) { if (tym) { Typemaker2_Type_List_free(tym->typeList); GWEN_StringList_free(tym->folders); GWEN_FREE_OBJECT(tym); } } const char *Typemaker2_TypeManager_GetLanguage(const TYPEMAKER2_TYPEMANAGER *tym) { assert(tym); return tym->lang; } void Typemaker2_TypeManager_SetLanguage(TYPEMAKER2_TYPEMANAGER *tym, const char *s) { assert(tym); free(tym->lang); if (s) tym->lang=strdup(s); else tym->lang=NULL; } const char *Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym) { assert(tym); return tym->apiDeclaration; } void Typemaker2_TypeManager_SetApiDeclaration(TYPEMAKER2_TYPEMANAGER *tym, const char *s) { assert(tym); free(tym->apiDeclaration); if (s) tym->apiDeclaration=strdup(s); else tym->apiDeclaration=NULL; } void Typemaker2_TypeManager_AddFolder(TYPEMAKER2_TYPEMANAGER *tym, const char *s) { assert(tym); GWEN_StringList_AppendString(tym->folders, s, 0, 1); } void Typemaker2_TypeManager_AddType(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { assert(tym); Typemaker2_Type_List_Add(ty, tym->typeList); } TYPEMAKER2_TYPE *Typemaker2_TypeManager_FindType(TYPEMAKER2_TYPEMANAGER *tym, const char *s) { TYPEMAKER2_TYPE *ty; assert(tym); ty=Typemaker2_Type_List_First(tym->typeList); while (ty) { const char *n; n=Typemaker2_Type_GetName(ty); if (n && strcasecmp(s, n)==0) break; ty=Typemaker2_Type_List_Next(ty); } return ty; } TYPEMAKER2_TYPE *Typemaker2_TypeManager_LoadType(TYPEMAKER2_TYPEMANAGER *tym, const char *typeName) { GWEN_BUFFER *tbuf; GWEN_BUFFER *nbuf; char *p; int rv; TYPEMAKER2_TYPE *ty=NULL; GWEN_XMLNODE *root; GWEN_XMLNODE *node; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, typeName); p=GWEN_Buffer_GetStart(tbuf); while (*p) { *p=tolower(*p); p++; } GWEN_Buffer_AppendString(tbuf, ".tm2"); nbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_Directory_FindFileInPaths(tym->folders, GWEN_Buffer_GetStart(tbuf), nbuf); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Typefile [%s] not found (%d)", GWEN_Buffer_GetStart(tbuf), rv); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return NULL; } /* read XML file */ root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "xml"); rv=GWEN_XML_ReadFile(root, GWEN_Buffer_GetStart(nbuf), TM_TYPEMANAGER_XMLFLAGS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not load typefile [%s] (%d)", GWEN_Buffer_GetStart(nbuf), rv); GWEN_XMLNode_free(root); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return NULL; } /* get element */ node=GWEN_XMLNode_FindFirstTag(root, "tm2", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a tm2 element", GWEN_Buffer_GetStart(nbuf)); GWEN_XMLNode_free(root); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return NULL; } /* get element with id==typeName and wanted language */ node=GWEN_XMLNode_FindFirstTag(node, "typedef", "id", typeName); while (node) { const char *s=GWEN_XMLNode_GetProperty(node, "lang", NULL); if (s && *s && strcasecmp(s, tym->lang)==0) break; node=GWEN_XMLNode_FindNextTag(node, "typedef", "id", typeName); } if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a element for type [%s] and language [%s]", GWEN_Buffer_GetStart(nbuf), typeName, tym->lang); GWEN_XMLNode_free(root); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return NULL; } /* load typedef from XML element */ ty=Typemaker2_Type_new(); rv=Typemaker2_Type_readXml(ty, node, NULL); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading type [%s] from file [%s] (%d)", typeName, GWEN_Buffer_GetStart(nbuf), rv); Typemaker2_Type_free(ty); GWEN_XMLNode_free(root); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return NULL; } GWEN_XMLNode_free(root); GWEN_Buffer_free(nbuf); GWEN_Buffer_free(tbuf); return ty; } int Typemaker2_TypeManager_MakeTypeDerivatives(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty, const char *baseType, const char *nType, const char *nPrefix) { TYPEMAKER2_TYPE *t2; char tbuf[256]; int rv; t2=Typemaker2_Type_new(); Typemaker2_Type_SetExtends(t2, baseType); Typemaker2_Type_SetType(t2, TypeMaker2_Type_Pointer); Typemaker2_Type_SetBaseType(t2, Typemaker2_Type_GetName(ty)); snprintf(tbuf, sizeof(tbuf)-1, "%s_%s", Typemaker2_Type_GetName(ty), nType); tbuf[sizeof(tbuf)-1]=0; Typemaker2_Type_SetName(t2, tbuf); snprintf(tbuf, sizeof(tbuf)-1, "%s_%s", Typemaker2_Type_GetIdentifier(ty), nType); tbuf[sizeof(tbuf)-1]=0; Typemaker2_Type_SetIdentifier(t2, tbuf); snprintf(tbuf, sizeof(tbuf)-1, "%s_%s", Typemaker2_Type_GetPrefix(ty), nPrefix); tbuf[sizeof(tbuf)-1]=0; Typemaker2_Type_SetPrefix(t2, tbuf); Typemaker2_TypeManager_AddType(tym, t2); /* set type pointers in this type structure */ rv=Typemaker2_TypeManager_SetTypePtrs(tym, t2); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } rv=Typemaker2_TypeManager_SetMemberTypePtrs(tym, t2); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } return 0; } int Typemaker2_TypeManager_MakeTypeList1(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { return Typemaker2_TypeManager_MakeTypeDerivatives(tym, ty, "list1_base", "LIST", "List"); } int Typemaker2_TypeManager_MakeTypeList2(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { return Typemaker2_TypeManager_MakeTypeDerivatives(tym, ty, "list2_base", "LIST2", "List2"); } int Typemaker2_TypeManager_MakeTypeTree(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { return Typemaker2_TypeManager_MakeTypeDerivatives(tym, ty, "tree_base", "TREE", "Tree"); } TYPEMAKER2_TYPE *Typemaker2_TypeManager_LoadTypeFile(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName) { int rv; TYPEMAKER2_TYPE *ty=NULL; GWEN_XMLNODE *root; GWEN_XMLNODE *node; /* read XML file */ root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "xml"); rv=GWEN_XML_ReadFile(root, fileName, TM_TYPEMANAGER_XMLFLAGS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not load typefile [%s] (%d)", fileName, rv); GWEN_XMLNode_free(root); return NULL; } /* get element */ node=GWEN_XMLNode_FindFirstTag(root, "tm2", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a tm2 element", fileName); GWEN_XMLNode_free(root); return NULL; } /* get element with id==typeName and wanted language */ node=GWEN_XMLNode_FindFirstTag(node, "type", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a type element", fileName); GWEN_XMLNode_free(root); return NULL; } /* load type from XML element */ ty=Typemaker2_Type_new(); rv=Typemaker2_Type_readXml(ty, node, tym->lang); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading type from file [%s] (%d)", fileName, rv); Typemaker2_Type_free(ty); GWEN_XMLNode_free(root); return NULL; } GWEN_XMLNode_free(root); /* preset some stuff */ if (1) { const char *x; x=Typemaker2_Type_GetExtends(ty); if (!x || !(*x)) Typemaker2_Type_SetExtends(ty, "struct_base"); } /* add first, because other types might want to refer to this one */ Typemaker2_Type_List_Add(ty, tym->typeList); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) Typemaker2_TypeManager_MakeTypeList1(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_LIST2) Typemaker2_TypeManager_MakeTypeList2(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_TREE) Typemaker2_TypeManager_MakeTypeTree(tym, ty); //Typemaker2_TypeManager_Dump(tym, stderr, 2); /* set type pointers in this type structure */ rv=Typemaker2_TypeManager_SetTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Type_free(ty); return NULL; } /* set type pointers in the member structures */ rv=Typemaker2_TypeManager_SetMemberTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Type_free(ty); return NULL; } return ty; } int Typemaker2_TypeManager_LoadTypeFile2(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName, TYPEMAKER2_TYPE_LIST2 *tlist2) { int rv; TYPEMAKER2_TYPE *ty=NULL; GWEN_XMLNODE *root; GWEN_XMLNODE *node; TYPEMAKER2_TYPE_LIST2 *tl; TYPEMAKER2_TYPE_LIST2_ITERATOR *it; /* read XML file */ root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "xml"); rv=GWEN_XML_ReadFile(root, fileName, TM_TYPEMANAGER_XMLFLAGS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not load typefile [%s] (%d)", fileName, rv); GWEN_XMLNode_free(root); return rv; } /* get element */ node=GWEN_XMLNode_FindFirstTag(root, "tm2", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a tm2 element", fileName); GWEN_XMLNode_free(root); return GWEN_ERROR_NO_DATA; } /* get element with id==typeName and wanted language */ node=GWEN_XMLNode_FindFirstTag(node, "type", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a type element", fileName); GWEN_XMLNode_free(root); return GWEN_ERROR_NO_DATA; } /* read all types from the file */ tl=Typemaker2_Type_List2_new(); while (node) { /* load type from XML element */ ty=Typemaker2_Type_new(); rv=Typemaker2_Type_readXml(ty, node, tym->lang); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading type from file [%s] (%d)", fileName, rv); Typemaker2_Type_free(ty); GWEN_XMLNode_free(root); Typemaker2_Type_List2_free(tl); return rv; } /* preset some stuff */ if (1) { const char *x; x=Typemaker2_Type_GetExtends(ty); if (!x || !(*x)) Typemaker2_Type_SetExtends(ty, "struct_base"); } /* add first, because other types might want to refer to this one */ Typemaker2_Type_List_Add(ty, tym->typeList); Typemaker2_Type_List2_PushBack(tl, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) Typemaker2_TypeManager_MakeTypeList1(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_LIST2) Typemaker2_TypeManager_MakeTypeList2(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_TREE) Typemaker2_TypeManager_MakeTypeTree(tym, ty); node=GWEN_XMLNode_FindNextTag(node, "type", NULL, NULL); } GWEN_XMLNode_free(root); //Typemaker2_TypeManager_Dump(tym, stderr, 2); /* set type pointers first */ it=Typemaker2_Type_List2_First(tl); if (it) { ty=Typemaker2_Type_List2Iterator_Data(it); while (ty) { /* set type pointers in this type structure */ rv=Typemaker2_TypeManager_SetTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Type_List2Iterator_free(it); Typemaker2_Type_List2_free(tl); return rv; } /* handle next type */ ty=Typemaker2_Type_List2Iterator_Next(it); } Typemaker2_Type_List2Iterator_free(it); } /* now set member pointers */ it=Typemaker2_Type_List2_First(tl); if (it) { ty=Typemaker2_Type_List2Iterator_Data(it); while (ty) { /* set type pointers in the member structures */ rv=Typemaker2_TypeManager_SetMemberTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); Typemaker2_Type_List2Iterator_free(it); Typemaker2_Type_List2_free(tl); return rv; } /* add to provided list2 */ Typemaker2_Type_List2_PushBack(tlist2, ty); /* handle next type */ ty=Typemaker2_Type_List2Iterator_Next(it); } Typemaker2_Type_List2Iterator_free(it); } /* done, free list */ Typemaker2_Type_List2_free(tl); return 0; } int Typemaker2_TypeManager_LoadTypeFileNoLookup(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName, TYPEMAKER2_TYPE_LIST2 *tlist2) { int rv; TYPEMAKER2_TYPE *ty=NULL; GWEN_XMLNODE *root; GWEN_XMLNODE *node; /* read XML file */ root=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "xml"); rv=GWEN_XML_ReadFile(root, fileName, TM_TYPEMANAGER_XMLFLAGS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Could not load typefile [%s] (%d)", fileName, rv); GWEN_XMLNode_free(root); return rv; } /* get element */ node=GWEN_XMLNode_FindFirstTag(root, "tm2", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a tm2 element", fileName); GWEN_XMLNode_free(root); return GWEN_ERROR_NO_DATA; } /* get element with id==typeName and wanted language */ node=GWEN_XMLNode_FindFirstTag(node, "type", NULL, NULL); if (node==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "File [%s] does not contain a type element", fileName); GWEN_XMLNode_free(root); return GWEN_ERROR_NO_DATA; } /* read all types from the file */ while (node) { /* load type from XML element */ ty=Typemaker2_Type_new(); rv=Typemaker2_Type_readXml(ty, node, tym->lang); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "Error reading type from file [%s] (%d)", fileName, rv); Typemaker2_Type_free(ty); GWEN_XMLNode_free(root); return rv; } /* preset some stuff */ if (1) { const char *x; x=Typemaker2_Type_GetExtends(ty); if (!x || !(*x)) Typemaker2_Type_SetExtends(ty, "struct_base"); } /* add first, because other types might want to refer to this one */ Typemaker2_Type_List_Add(ty, tym->typeList); Typemaker2_Type_List2_PushBack(tlist2, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) Typemaker2_TypeManager_MakeTypeList1(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_LIST2) Typemaker2_TypeManager_MakeTypeList2(tym, ty); if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_TREE) Typemaker2_TypeManager_MakeTypeTree(tym, ty); node=GWEN_XMLNode_FindNextTag(node, "type", NULL, NULL); } GWEN_XMLNode_free(root); //Typemaker2_TypeManager_Dump(tym, stderr, 2); return 0; } int Typemaker2_TypeManager_SetTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { if (Typemaker2_Type_GetExtendsPtr(ty)==NULL) { const char *s; s=Typemaker2_Type_GetExtends(ty); if (s && *s) { TYPEMAKER2_TYPE *tt; tt=Typemaker2_TypeManager_GetType(tym, s); if (tt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Type for \"extends\" not found [%s]", s); return GWEN_ERROR_NOT_FOUND; } Typemaker2_Type_SetExtendsPtr(ty, tt); } } if (Typemaker2_Type_GetBaseTypePtr(ty)==NULL) { const char *s; s=Typemaker2_Type_GetBaseType(ty); if (s && *s) { TYPEMAKER2_TYPE *tt; tt=Typemaker2_TypeManager_GetType(tym, s); if (tt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Type for \"basetype\" not found [%s]", s); return GWEN_ERROR_NOT_FOUND; } Typemaker2_Type_SetBaseTypePtr(ty, tt); } } if (Typemaker2_Type_GetInheritsPtr(ty)==NULL) { const char *s; s=Typemaker2_Type_GetInherits(ty); if (s && *s) { TYPEMAKER2_TYPE *tt; tt=Typemaker2_TypeManager_GetType(tym, s); if (tt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Type for \"inherits\" not found [%s]", s); return GWEN_ERROR_NOT_FOUND; } Typemaker2_Type_SetInheritsPtr(ty, tt); } } return 0; } int Typemaker2_TypeManager_SetMemberTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty) { TYPEMAKER2_MEMBER_LIST *ml; ml=Typemaker2_Type_GetMembers(ty); if (ml) { TYPEMAKER2_MEMBER *m; int pos=0; /* set pointers */ m=Typemaker2_Member_List_First(ml); while (m) { if (Typemaker2_Member_GetTypePtr(m)==NULL) { const char *s; /* set type pointer */ s=Typemaker2_Member_GetTypeName(m); if (s && *s) { TYPEMAKER2_TYPE *tt; tt=Typemaker2_TypeManager_GetType(tym, s); if (tt==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Type for \"type\" not found [%s]", s); return GWEN_ERROR_NOT_FOUND; } Typemaker2_Member_SetTypePtr(m, tt); } /* set enum pointer (if any) */ if ((Typemaker2_Member_GetFlags(m) & TYPEMAKER2_FLAGS_ENUM) && Typemaker2_Member_GetEnumPtr(m)==NULL) { s=Typemaker2_Member_GetEnumId(m); if (s && *s) { TYPEMAKER2_ENUM *te=Typemaker2_Type_FindEnum(ty, s); if (te) Typemaker2_Member_SetEnumPtr(m, te); else { DBG_ERROR(GWEN_LOGDOMAIN, "Enum [%s] not found", s); return GWEN_ERROR_NOT_FOUND; } } } } m=Typemaker2_Member_List_Next(m); } /* update member positions (needed for toObject/fromObject functions) */ m=Typemaker2_Member_List_First(ml); while (m) { if (!(Typemaker2_Member_GetFlags(m) & TYPEMAKER2_FLAGS_VOLATILE)) { const char *s; Typemaker2_Member_SetMemberPosition(m, pos++); /* create field id */ s=Typemaker2_Type_GetName(ty); if (s && *s) { GWEN_BUFFER *tbuf; char *p; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_FIELD_"); s=Typemaker2_Member_GetName(m); GWEN_Buffer_AppendString(tbuf, s); /* all in capitals */ p=GWEN_Buffer_GetStart(tbuf); while (*p) { *p=toupper(*p); p++; } Typemaker2_Member_SetFieldId(m, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } m=Typemaker2_Member_List_Next(m); } Typemaker2_Type_SetNonVolatileMemberCount(ty, pos); if (pos) { const char *s; /* create field id */ s=Typemaker2_Type_GetName(ty); if (s && *s) { GWEN_BUFFER *tbuf; char *p; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, s); GWEN_Buffer_AppendString(tbuf, "_FIELD_COUNT"); /* all in capitals */ p=GWEN_Buffer_GetStart(tbuf); while (*p) { *p=toupper(*p); p++; } Typemaker2_Type_SetFieldCountId(ty, GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } } return 0; } TYPEMAKER2_TYPE *Typemaker2_TypeManager_GetType(TYPEMAKER2_TYPEMANAGER *tym, const char *s) { TYPEMAKER2_TYPE *ty; ty=Typemaker2_TypeManager_FindType(tym, s); if (ty==NULL) { ty=Typemaker2_TypeManager_LoadType(tym, s); if (ty) { int rv; /* add first, because other types might want to refer to this one */ Typemaker2_Type_List_Add(ty, tym->typeList); /* set type pointers in this type structure */ rv=Typemaker2_TypeManager_SetTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return NULL; } /* set type pointers in the member structures */ rv=Typemaker2_TypeManager_SetMemberTypePtrs(tym, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return NULL; } } else { DBG_INFO(GWEN_LOGDOMAIN, "here"); } } if (ty==NULL) { DBG_INFO(GWEN_LOGDOMAIN, "Type [%s] not found", s); } return ty; } void Typemaker2_TypeManager_Dump(TYPEMAKER2_TYPEMANAGER *tym, FILE *f, int indent) { TYPEMAKER2_TYPE *ty; int i; for (i=0; itypeList); while (ty) { Typemaker2_Type_Dump(ty, f, indent+2); ty=Typemaker2_Type_List_Next(ty); } } gwenhywfar-5.12.0/tools/typemaker2/tm_util.c0000644000175000017500000001275613605722707015771 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_util.h" #include "tm_type.h" #include #include uint32_t Typemaker2_FlagsFromString(const char *t) { GWEN_STRINGLIST *sl; uint32_t flags=0; assert(t && *t); sl=GWEN_StringList_fromString(t, " ,:/", 1); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); assert(s); if (strcasecmp(s, "own")==0) flags|=TYPEMAKER2_FLAGS_OWN; else if (strcasecmp(s, "volatile")==0) flags|=TYPEMAKER2_FLAGS_VOLATILE; else if (strcasecmp(s, "const")==0) flags|=TYPEMAKER2_FLAGS_CONST; else if (strcasecmp(s, "static")==0) flags|=TYPEMAKER2_FLAGS_STATIC; else if (strcasecmp(s, "dup")==0) flags|=TYPEMAKER2_FLAGS_DUP; else if (strcasecmp(s, "nodup")==0) flags|=TYPEMAKER2_FLAGS_NODUP; else if (strcasecmp(s, "copy")==0) flags|=TYPEMAKER2_FLAGS_COPY; else if (strcasecmp(s, "nocopy")==0) flags|=TYPEMAKER2_FLAGS_NOCOPY; else if (strcasecmp(s, "attribute")==0) flags|=TYPEMAKER2_FLAGS_ATTRIBUTE; else if (strcasecmp(s, "enum")==0) flags|=TYPEMAKER2_FLAGS_ENUM; else if (strcasecmp(s, "define")==0) flags|=TYPEMAKER2_FLAGS_DEFINE; else if (strcasecmp(s, "with_getbymember")==0) flags|=TYPEMAKER2_FLAGS_WITH_GETBYMEMBER; else if (strcasecmp(s, "with_hash")==0) flags|=TYPEMAKER2_FLAGS_WITH_HASH; else if (strcasecmp(s, "with_hashnum")==0) flags|=TYPEMAKER2_FLAGS_WITH_HASHNUM; else if (strcasecmp(s, "with_flags")==0) flags|=TYPEMAKER2_FLAGS_WITH_FLAGS; else if (strcasecmp(s, "assign")==0) flags|=TYPEMAKER2_FLAGS_ASSIGN; else if (strcasecmp(s, "omit")==0) flags|=TYPEMAKER2_FLAGS_OMIT; else if (strcasecmp(s, "sortByMember")==0) flags|=TYPEMAKER2_FLAGS_SORTBYMEMBER; else if (strcasecmp(s, "noConstObject")==0) flags|=TYPEMAKER2_FLAGS_NOCONSTOBJECT; else if (strcasecmp(s, "none")==0) flags|=TYPEMAKER2_FLAGS_NONE; else if (strcasecmp(s, "gwen_cb")==0) flags|=TYPEMAKER2_FLAGS_GWEN_CB; se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } return flags; } uint32_t Typemaker2_TypeFlagsFromString(const char *t) { GWEN_STRINGLIST *sl; uint32_t flags=0; assert(t && *t); sl=GWEN_StringList_fromString(t, " ,:/", 1); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); assert(s); if (strcasecmp(s, "with_db")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_DB; else if (strcasecmp(s, "with_xml")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_XML; else if (strcasecmp(s, "with_object")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_OBJECT; else if (strcasecmp(s, "with_list1")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_LIST1; else if (strcasecmp(s, "with_list2")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_LIST2; else if (strcasecmp(s, "with_inherit")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_INHERIT; else if (strcasecmp(s, "with_idmap")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_IDMAP; else if (strcasecmp(s, "with_tree")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_TREE; else if (strcasecmp(s, "with_hash")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_HASH; else if (strcasecmp(s, "with_refcount")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT; else if (strcasecmp(s, "with_signals")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS; else if (strcasecmp(s, "with_slots")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_SLOTS; else if (strcasecmp(s, "with_cachefns")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_CACHEFNS; else if (strcasecmp(s, "dup")==0) flags|=TYPEMAKER2_TYPEFLAGS_DUP; else if (strcasecmp(s, "nodup")==0) flags|=TYPEMAKER2_TYPEFLAGS_NODUP; else if (strcasecmp(s, "copy")==0) flags|=TYPEMAKER2_TYPEFLAGS_COPY; else if (strcasecmp(s, "nocopy")==0) flags|=TYPEMAKER2_TYPEFLAGS_NOCOPY; else if (strcasecmp(s, "with_constlist2")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_CONSTLIST2; else if (strcasecmp(s, "with_tree2")==0) flags|=TYPEMAKER2_TYPEFLAGS_WITH_TREE2; se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } return flags; } int Typemaker2_AccessFromString(const char *s) { assert(s); if (strcasecmp(s, "pub")==0 || strcasecmp(s, "public")==0) return TypeMaker2_Access_Public; else if (strcasecmp(s, "library")==0 || strcasecmp(s, "lib")==0) return TypeMaker2_Access_Library; else if (strcasecmp(s, "protected")==0 || strcasecmp(s, "prot")==0) return TypeMaker2_Access_Protected; else if (strcasecmp(s, "private")==0 || strcasecmp(s, "priv")==0) return TypeMaker2_Access_Private; return TypeMaker2_Access_Unknown; } gwenhywfar-5.12.0/tools/typemaker2/tm_inline.c0000644000175000017500000000643413315472533016263 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_inline_p.h" #include "tm_util.h" #include #include #include GWEN_LIST_FUNCTIONS(TYPEMAKER2_INLINE, Typemaker2_Inline) TYPEMAKER2_INLINE *Typemaker2_Inline_new() { TYPEMAKER2_INLINE *th; GWEN_NEW_OBJECT(TYPEMAKER2_INLINE, th); th->refCount=1; GWEN_LIST_INIT(TYPEMAKER2_INLINE, th); return th; } void Typemaker2_Inline_free(TYPEMAKER2_INLINE *th) { if (th) { assert(th->refCount); if (th->refCount==1) { GWEN_LIST_FINI(TYPEMAKER2_INLINE, th); free(th->content); th->refCount=0; GWEN_FREE_OBJECT(th); } else th->refCount++; } } void Typemaker2_Inline_Attach(TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); th->refCount++; } const char *Typemaker2_Inline_GetContent(const TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); return th->content; } void Typemaker2_Inline_SetContent(TYPEMAKER2_INLINE *th, const char *s) { assert(th); assert(th->refCount); free(th->content); if (s) th->content=strdup(s); else th->content=NULL; } int Typemaker2_Inline_GetLocation(const TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); return th->location; } void Typemaker2_Inline_SetLocation(TYPEMAKER2_INLINE *th, int i) { assert(th); assert(th->refCount); th->location=i; } int Typemaker2_Inline_GetAccess(const TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); return th->acc; } void Typemaker2_Inline_SetAccess(TYPEMAKER2_INLINE *th, int i) { assert(th); assert(th->refCount); th->acc=i; } int Typemaker2_Inline_GetTypeFlagsMask(const TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); return th->typeFlagsMask; } int Typemaker2_Inline_GetTypeFlagsValue(const TYPEMAKER2_INLINE *th) { assert(th); assert(th->refCount); return th->typeFlagsValue; } TYPEMAKER2_INLINE *Typemaker2_Inline_fromXml(GWEN_XMLNODE *node) { TYPEMAKER2_INLINE *th; const char *s; th=Typemaker2_Inline_new(); s=GWEN_XMLNode_GetCharValue(node, "content", NULL); Typemaker2_Inline_SetContent(th, s); s=GWEN_XMLNode_GetCharValue(node, "typeFlagsMask", NULL); if (s && *s) th->typeFlagsMask=Typemaker2_TypeFlagsFromString(s); s=GWEN_XMLNode_GetCharValue(node, "typeFlagsValue", NULL); if (s && *s) th->typeFlagsValue=Typemaker2_TypeFlagsFromString(s); /* read header location */ s=GWEN_XMLNode_GetProperty(node, "loc", "post"); if (strcasecmp(s, "header")==0) Typemaker2_Inline_SetLocation(th, Typemaker2_InlineLocation_Header); else if (strcasecmp(s, "code")==0) Typemaker2_Inline_SetLocation(th, Typemaker2_InlineLocation_Code); /* read access */ s=GWEN_XMLNode_GetProperty(node, "access", "public"); Typemaker2_Inline_SetAccess(th, Typemaker2_AccessFromString(s)); return th; } gwenhywfar-5.12.0/tools/typemaker2/tm_define.c0000644000175000017500000002247713142134476016243 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_define.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_define_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_DEFINE, Typemaker2_Define) int Typemaker2_Define_Mode_fromString(const char *p_s) { if (p_s && *p_s) { if (strcasecmp(p_s, "sequence")==0) return Typemaker2_Define_Mode_Sequence; else if (strcasecmp(p_s, "bitField")==0) return Typemaker2_Define_Mode_BitField; } return Typemaker2_Define_Mode_Unknown; } const char *Typemaker2_Define_Mode_toString(int p_i) { switch (p_i) { case Typemaker2_Define_Mode_Sequence: return "sequence"; case Typemaker2_Define_Mode_BitField: return "bitField"; default: return "unknown"; } } TYPEMAKER2_DEFINE *Typemaker2_Define_new(void) { TYPEMAKER2_DEFINE *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_DEFINE, p_struct) GWEN_LIST_INIT(TYPEMAKER2_DEFINE, p_struct) /* members */ p_struct->id=NULL; p_struct->prefix=NULL; p_struct->type=NULL; p_struct->items=Typemaker2_Item_List_new(); p_struct->mode=Typemaker2_Define_Mode_Unknown; p_struct->startValue=0; p_struct->lastValue=0; /* virtual functions */ return p_struct; } void Typemaker2_Define_free(TYPEMAKER2_DEFINE *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_DEFINE, p_struct) /* members */ free(p_struct->id); free(p_struct->prefix); free(p_struct->type); Typemaker2_Item_List_free(p_struct->items); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_DEFINE *Typemaker2_Define_dup(const TYPEMAKER2_DEFINE *p_src) { TYPEMAKER2_DEFINE *p_struct; assert(p_src); p_struct=Typemaker2_Define_new(); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); p_struct->prefix=NULL; } if (p_src->prefix) { p_struct->prefix=strdup(p_src->prefix); } /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); p_struct->items=NULL; } if (p_src->items) { p_struct->items=Typemaker2_Item_List_dup(p_src->items); } /* member "mode" */ p_struct->mode=p_src->mode; /* member "startValue" */ p_struct->startValue=p_src->startValue; /* member "lastValue" */ p_struct->lastValue=p_src->lastValue; return p_struct; } TYPEMAKER2_DEFINE *Typemaker2_Define_copy(TYPEMAKER2_DEFINE *p_struct, const TYPEMAKER2_DEFINE *p_src) { assert(p_struct); assert(p_src); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); p_struct->prefix=NULL; } if (p_src->prefix) { p_struct->prefix=strdup(p_src->prefix); } /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); p_struct->items=NULL; } if (p_src->items) { p_struct->items=Typemaker2_Item_List_dup(p_src->items); } /* member "mode" */ p_struct->mode=p_src->mode; /* member "startValue" */ p_struct->startValue=p_src->startValue; /* member "lastValue" */ p_struct->lastValue=p_src->lastValue; return p_struct; } const char *Typemaker2_Define_GetId(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->id; } const char *Typemaker2_Define_GetPrefix(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->prefix; } const char *Typemaker2_Define_GetType(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->type; } TYPEMAKER2_ITEM_LIST *Typemaker2_Define_GetItems(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->items; } int Typemaker2_Define_GetMode(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->mode; } int Typemaker2_Define_GetStartValue(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->startValue; } int Typemaker2_Define_GetLastValue(const TYPEMAKER2_DEFINE *p_struct) { assert(p_struct); return p_struct->lastValue; } void Typemaker2_Define_SetId(TYPEMAKER2_DEFINE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->id) { free(p_struct->id); } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void Typemaker2_Define_SetPrefix(TYPEMAKER2_DEFINE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->prefix) { free(p_struct->prefix); } if (p_src) { p_struct->prefix=strdup(p_src); } else { p_struct->prefix=NULL; } } void Typemaker2_Define_SetType(TYPEMAKER2_DEFINE *p_struct, const char *p_src) { assert(p_struct); if (p_struct->type) { free(p_struct->type); } if (p_src) { p_struct->type=strdup(p_src); } else { p_struct->type=NULL; } } void Typemaker2_Define_SetItems(TYPEMAKER2_DEFINE *p_struct, const TYPEMAKER2_ITEM_LIST *p_src) { assert(p_struct); if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); } if (p_src) { p_struct->items=Typemaker2_Item_List_dup(p_src); } else { p_struct->items=Typemaker2_Item_List_new(); } } void Typemaker2_Define_SetMode(TYPEMAKER2_DEFINE *p_struct, int p_src) { assert(p_struct); p_struct->mode=p_src; } void Typemaker2_Define_SetStartValue(TYPEMAKER2_DEFINE *p_struct, int p_src) { assert(p_struct); p_struct->startValue=p_src; } void Typemaker2_Define_SetLastValue(TYPEMAKER2_DEFINE *p_struct, int p_src) { assert(p_struct); p_struct->lastValue=p_src; } TYPEMAKER2_DEFINE_LIST *Typemaker2_Define_List_dup(const TYPEMAKER2_DEFINE_LIST *p_src) { TYPEMAKER2_DEFINE_LIST *p_dest; TYPEMAKER2_DEFINE *p_elem; assert(p_src); p_dest=Typemaker2_Define_List_new(); p_elem=Typemaker2_Define_List_First(p_src); while (p_elem) { TYPEMAKER2_DEFINE *p_cpy; p_cpy=Typemaker2_Define_dup(p_elem); Typemaker2_Define_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Define_List_Next(p_elem); } return p_dest; } void Typemaker2_Define_ReadXml(TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ if (p_struct->id) { free(p_struct->id); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "id", NULL); if (s) p_struct->id=strdup(s); } if (p_struct->id==NULL) { /* member "id" is volatile, just presetting */ p_struct->id=NULL; } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "prefix", NULL); if (s) p_struct->prefix=strdup(s); } if (p_struct->prefix==NULL) { /* member "prefix" is volatile, just presetting */ p_struct->prefix=NULL; } /* member "type" */ if (p_struct->type) { free(p_struct->type); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "type", NULL); if (s) p_struct->type=strdup(s); } if (p_struct->type==NULL) { /* member "type" is volatile, just presetting */ p_struct->type=NULL; } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); } /* member "items" is volatile, just presetting */ p_struct->items=Typemaker2_Item_List_new(); /* member "mode" */ { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "mode", NULL); if (s) p_struct->mode=Typemaker2_Define_Mode_fromString(s); else p_struct->mode=Typemaker2_Define_Mode_Unknown; } /* member "startValue" */ p_struct->startValue=GWEN_XMLNode_GetIntValue(p_db, "startValue", 0); /* member "lastValue" */ /* member "lastValue" is volatile, just presetting */ p_struct->lastValue=0; } void Typemaker2_Define_WriteXml(const TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ GWEN_XMLNode_SetProperty(p_db, "id", p_struct->id); /* member "prefix" */ GWEN_XMLNode_SetProperty(p_db, "prefix", p_struct->prefix); /* member "type" */ GWEN_XMLNode_SetProperty(p_db, "type", p_struct->type); /* member "items" is volatile, not writing to xml */ /* member "mode" */ GWEN_XMLNode_SetProperty(p_db, "mode", Typemaker2_Define_Mode_toString(p_struct->mode)); /* member "startValue" */ GWEN_XMLNode_SetIntValue(p_db, "startValue", p_struct->startValue); /* member "lastValue" is volatile, not writing to xml */ } void Typemaker2_Define_toXml(const TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Define_WriteXml(p_struct, p_db); } TYPEMAKER2_DEFINE *Typemaker2_Define_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_DEFINE *p_struct; p_struct=Typemaker2_Define_new(); Typemaker2_Define_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-5.12.0/tools/typemaker2/tm_builder.h0000664000175000017500000002145614144206313016433 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2021 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_BUILDER_H #define TYPEMAKER2_BUILDER_H #include #include #include #include #define TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_DEFS 0x0001 #define TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_TYPE 0x0002 typedef struct TYPEMAKER2_BUILDER TYPEMAKER2_BUILDER; GWEN_INHERIT_FUNCTION_DEFS(TYPEMAKER2_BUILDER) #include "tm_typemanager.h" #include "tm_type.h" #include "tm_member.h" typedef int (*TYPEMAKER2_BUILDER_BUILD_FN)(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); TYPEMAKER2_BUILDER *Typemaker2_Builder_new(); void Typemaker2_Builder_free(TYPEMAKER2_BUILDER *tb); int Typemaker2_Builder_PrintFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); GWEN_STRINGLIST *Typemaker2_Builder_GetPublicDeclarations(const TYPEMAKER2_BUILDER *tb); GWEN_STRINGLIST *Typemaker2_Builder_GetLibraryDeclarations(const TYPEMAKER2_BUILDER *tb); GWEN_STRINGLIST *Typemaker2_Builder_GetProtectedDeclarations(const TYPEMAKER2_BUILDER *tb); GWEN_STRINGLIST *Typemaker2_Builder_GetPrivateDeclarations(const TYPEMAKER2_BUILDER *tb); GWEN_STRINGLIST *Typemaker2_Builder_GetCode(const TYPEMAKER2_BUILDER *tb); TYPEMAKER2_TYPEMANAGER *Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetTypeManager(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPEMANAGER *tm); void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_AddDeclaration(TYPEMAKER2_BUILDER *tb, int access, const char *s); void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetFileNamePublic(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetFileNamePublic(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetFileNameLibrary(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetFileNameLibrary(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetFileNameProtected(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetFileNameProtected(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetFileNamePrivate(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetFileNamePrivate(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetFileNameCode(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetFileNameCode(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetSourceFileName(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetSourceFileName(TYPEMAKER2_BUILDER *tb, const char *s); const char *Typemaker2_Builder_GetTypedefFileName(const TYPEMAKER2_BUILDER *tb); void Typemaker2_Builder_SetTypedefFileName(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_SetDestFolderName(TYPEMAKER2_BUILDER *tb, const char *s); void Typemaker2_Builder_SetBuildFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_BUILDER_BUILD_FN fn); int Typemaker2_Builder_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int Typemaker2_Builder_WriteFiles(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, uint32_t writeFlags); int Typemaker2_Builder_MakeTypeList1(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int Typemaker2_Builder_MakeTypeList2(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); int Typemaker2_Builder_MakeTypeTree(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); GWEN_DB_NODE *Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst); int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf); /* see INVOKE_FN macro in tm_builder.c */ int Typemaker2_Builder_Invoke_ConstructFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_DestructFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_AssignFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_DupFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_CompareFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_ToDbFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_FromDbFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_ToXmlFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_FromXmlFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_ToObjectFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_FromObjectFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_ToHashStringFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst, GWEN_BUFFER *dbuf); #endif gwenhywfar-5.12.0/tools/typemaker2/tm_signal.xml0000644000175000017500000000331013142134464016622 00000000000000 TYPEMAKER2_SIGNAL Typemaker2_Signal tm_signal with_list1 with_list2 with_xml NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const 0 0 public with_flags gwenhywfar-5.12.0/tools/typemaker2/tm_member_p.h0000644000175000017500000000213313312251265016562 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_MEMBER_P_H #define TYPEMAKER2_MEMBER_P_H #include "tm_member.h" struct TYPEMAKER2_MEMBER { GWEN_LIST_ELEMENT(TYPEMAKER2_MEMBER) char *name; char *typeName; char *elementName; char *descr; int access; uint32_t flags; uint32_t setFlags; uint32_t getFlags; uint32_t dupFlags; uint32_t copyFlags; int maxLen; char *defaultValue; char *presetValue; char *aedb_type; char *enumId; char *defineId; TYPEMAKER2_TYPE *typePtr; TYPEMAKER2_ENUM *enumPtr; TYPEMAKER2_DEFINE *definePtr; TYPEMAKER2_GROUP *groupPtr; TYPEMAKER2_CODE_LIST *codeDefs; int refCount; int memberPosition; char *fieldId; }; #endif gwenhywfar-5.12.0/tools/typemaker2/tm_signal_p.h0000644000175000017500000000114613142134464016575 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_signal.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_SIGNAL_P_H #define TM_SIGNAL_P_H #include "tm_signal.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_SIGNAL { GWEN_LIST_ELEMENT(TYPEMAKER2_SIGNAL) char *name; char *paramType1; char *paramType2; uint32_t flags; }; #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/tm_code.h0000644000175000017500000000624013142134464015713 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_code.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_CODE_H #define TM_CODE_H #ifdef __cplusplus extern "C" { #endif /* needed system headers */ #include #include #include /* pre-headers */ #include "tm_item.h" typedef struct TYPEMAKER2_CODE TYPEMAKER2_CODE; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_CODE, Typemaker2_Code) /* post-headers */ /** Constructor. */ TYPEMAKER2_CODE *Typemaker2_Code_new(void); /** Destructor. */ void Typemaker2_Code_free(TYPEMAKER2_CODE *p_struct); TYPEMAKER2_CODE *Typemaker2_Code_dup(const TYPEMAKER2_CODE *p_struct); TYPEMAKER2_CODE *Typemaker2_Code_copy(TYPEMAKER2_CODE *p_struct, const TYPEMAKER2_CODE *p_src); /** Getter. * Use this function to get the member "id" */ const char *Typemaker2_Code_GetId(const TYPEMAKER2_CODE *p_struct); /** Getter. * Use this function to get the member "memberFlagsMask" */ const char *Typemaker2_Code_GetMemberFlagsMask(const TYPEMAKER2_CODE *p_struct); /** Getter. * Use this function to get the member "memberFlagsValue" */ const char *Typemaker2_Code_GetMemberFlagsValue(const TYPEMAKER2_CODE *p_struct); /** Getter. * Use this function to get the member "code" */ const char *Typemaker2_Code_GetCode(const TYPEMAKER2_CODE *p_struct); /** Getter. * Use this function to get the member "memberFlagsMaskInt" */ uint32_t Typemaker2_Code_GetMemberFlagsMaskInt(const TYPEMAKER2_CODE *p_struct); /** Getter. * Use this function to get the member "memberFlagsValueInt" */ uint32_t Typemaker2_Code_GetMemberFlagsValueInt(const TYPEMAKER2_CODE *p_struct); /** Setter. * Use this function to set the member "id" */ void Typemaker2_Code_SetId(TYPEMAKER2_CODE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "memberFlagsMask" */ void Typemaker2_Code_SetMemberFlagsMask(TYPEMAKER2_CODE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "memberFlagsValue" */ void Typemaker2_Code_SetMemberFlagsValue(TYPEMAKER2_CODE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "code" */ void Typemaker2_Code_SetCode(TYPEMAKER2_CODE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "memberFlagsMaskInt" */ void Typemaker2_Code_SetMemberFlagsMaskInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src); /** Setter. * Use this function to set the member "memberFlagsValueInt" */ void Typemaker2_Code_SetMemberFlagsValueInt(TYPEMAKER2_CODE *p_struct, uint32_t p_src); TYPEMAKER2_CODE_LIST *Typemaker2_Code_List_dup(const TYPEMAKER2_CODE_LIST *p_src); void Typemaker2_Code_ReadXml(TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Code_WriteXml(const TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Code_toXml(const TYPEMAKER2_CODE *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_CODE *Typemaker2_Code_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/tm_enum.c0000644000175000017500000002202413142134476015741 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_enum.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_enum_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_ENUM, Typemaker2_Enum) TYPEMAKER2_ENUM *Typemaker2_Enum_new(void) { TYPEMAKER2_ENUM *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_ENUM, p_struct) GWEN_LIST_INIT(TYPEMAKER2_ENUM, p_struct) /* members */ p_struct->id=NULL; p_struct->prefix=NULL; p_struct->type=NULL; p_struct->items=Typemaker2_Item_List_new(); p_struct->toStringFn=NULL; p_struct->fromStringFn=NULL; /* virtual functions */ return p_struct; } void Typemaker2_Enum_free(TYPEMAKER2_ENUM *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_ENUM, p_struct) /* members */ free(p_struct->id); free(p_struct->prefix); free(p_struct->type); Typemaker2_Item_List_free(p_struct->items); free(p_struct->toStringFn); free(p_struct->fromStringFn); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_ENUM *Typemaker2_Enum_dup(const TYPEMAKER2_ENUM *p_src) { TYPEMAKER2_ENUM *p_struct; assert(p_src); p_struct=Typemaker2_Enum_new(); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); p_struct->prefix=NULL; } if (p_src->prefix) { p_struct->prefix=strdup(p_src->prefix); } /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); p_struct->items=NULL; } if (p_src->items) { p_struct->items=Typemaker2_Item_List_dup(p_src->items); } /* member "toStringFn" */ if (p_struct->toStringFn) { free(p_struct->toStringFn); p_struct->toStringFn=NULL; } if (p_src->toStringFn) { p_struct->toStringFn=strdup(p_src->toStringFn); } /* member "fromStringFn" */ if (p_struct->fromStringFn) { free(p_struct->fromStringFn); p_struct->fromStringFn=NULL; } if (p_src->fromStringFn) { p_struct->fromStringFn=strdup(p_src->fromStringFn); } return p_struct; } TYPEMAKER2_ENUM *Typemaker2_Enum_copy(TYPEMAKER2_ENUM *p_struct, const TYPEMAKER2_ENUM *p_src) { assert(p_struct); assert(p_src); /* member "id" */ if (p_struct->id) { free(p_struct->id); p_struct->id=NULL; } if (p_src->id) { p_struct->id=strdup(p_src->id); } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); p_struct->prefix=NULL; } if (p_src->prefix) { p_struct->prefix=strdup(p_src->prefix); } /* member "type" */ if (p_struct->type) { free(p_struct->type); p_struct->type=NULL; } if (p_src->type) { p_struct->type=strdup(p_src->type); } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); p_struct->items=NULL; } if (p_src->items) { p_struct->items=Typemaker2_Item_List_dup(p_src->items); } /* member "toStringFn" */ if (p_struct->toStringFn) { free(p_struct->toStringFn); p_struct->toStringFn=NULL; } if (p_src->toStringFn) { p_struct->toStringFn=strdup(p_src->toStringFn); } /* member "fromStringFn" */ if (p_struct->fromStringFn) { free(p_struct->fromStringFn); p_struct->fromStringFn=NULL; } if (p_src->fromStringFn) { p_struct->fromStringFn=strdup(p_src->fromStringFn); } return p_struct; } const char *Typemaker2_Enum_GetId(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->id; } const char *Typemaker2_Enum_GetPrefix(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->prefix; } const char *Typemaker2_Enum_GetType(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->type; } TYPEMAKER2_ITEM_LIST *Typemaker2_Enum_GetItems(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->items; } const char *Typemaker2_Enum_GetToStringFn(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->toStringFn; } const char *Typemaker2_Enum_GetFromStringFn(const TYPEMAKER2_ENUM *p_struct) { assert(p_struct); return p_struct->fromStringFn; } void Typemaker2_Enum_SetId(TYPEMAKER2_ENUM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->id) { free(p_struct->id); } if (p_src) { p_struct->id=strdup(p_src); } else { p_struct->id=NULL; } } void Typemaker2_Enum_SetPrefix(TYPEMAKER2_ENUM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->prefix) { free(p_struct->prefix); } if (p_src) { p_struct->prefix=strdup(p_src); } else { p_struct->prefix=NULL; } } void Typemaker2_Enum_SetType(TYPEMAKER2_ENUM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->type) { free(p_struct->type); } if (p_src) { p_struct->type=strdup(p_src); } else { p_struct->type=NULL; } } void Typemaker2_Enum_SetItems(TYPEMAKER2_ENUM *p_struct, const TYPEMAKER2_ITEM_LIST *p_src) { assert(p_struct); if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); } if (p_src) { p_struct->items=Typemaker2_Item_List_dup(p_src); } else { p_struct->items=Typemaker2_Item_List_new(); } } void Typemaker2_Enum_SetToStringFn(TYPEMAKER2_ENUM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->toStringFn) { free(p_struct->toStringFn); } if (p_src) { p_struct->toStringFn=strdup(p_src); } else { p_struct->toStringFn=NULL; } } void Typemaker2_Enum_SetFromStringFn(TYPEMAKER2_ENUM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->fromStringFn) { free(p_struct->fromStringFn); } if (p_src) { p_struct->fromStringFn=strdup(p_src); } else { p_struct->fromStringFn=NULL; } } TYPEMAKER2_ENUM_LIST *Typemaker2_Enum_List_dup(const TYPEMAKER2_ENUM_LIST *p_src) { TYPEMAKER2_ENUM_LIST *p_dest; TYPEMAKER2_ENUM *p_elem; assert(p_src); p_dest=Typemaker2_Enum_List_new(); p_elem=Typemaker2_Enum_List_First(p_src); while (p_elem) { TYPEMAKER2_ENUM *p_cpy; p_cpy=Typemaker2_Enum_dup(p_elem); Typemaker2_Enum_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Enum_List_Next(p_elem); } return p_dest; } void Typemaker2_Enum_ReadXml(TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ if (p_struct->id) { free(p_struct->id); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "id", NULL); if (s) p_struct->id=strdup(s); } if (p_struct->id==NULL) { /* member "id" is volatile, just presetting */ p_struct->id=NULL; } /* member "prefix" */ if (p_struct->prefix) { free(p_struct->prefix); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "prefix", NULL); if (s) p_struct->prefix=strdup(s); } if (p_struct->prefix==NULL) { /* member "prefix" is volatile, just presetting */ p_struct->prefix=NULL; } /* member "type" */ if (p_struct->type) { free(p_struct->type); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "type", NULL); if (s) p_struct->type=strdup(s); } if (p_struct->type==NULL) { /* member "type" is volatile, just presetting */ p_struct->type=NULL; } /* member "items" */ if (p_struct->items) { Typemaker2_Item_List_free(p_struct->items); } /* member "items" is volatile, just presetting */ p_struct->items=Typemaker2_Item_List_new(); /* member "toStringFn" */ if (p_struct->toStringFn) { free(p_struct->toStringFn); } /* member "toStringFn" is volatile, just presetting */ p_struct->toStringFn=NULL; /* member "fromStringFn" */ if (p_struct->fromStringFn) { free(p_struct->fromStringFn); } /* member "fromStringFn" is volatile, just presetting */ p_struct->fromStringFn=NULL; } void Typemaker2_Enum_WriteXml(const TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "id" */ GWEN_XMLNode_SetProperty(p_db, "id", p_struct->id); /* member "prefix" */ GWEN_XMLNode_SetProperty(p_db, "prefix", p_struct->prefix); /* member "type" */ GWEN_XMLNode_SetProperty(p_db, "type", p_struct->type); /* member "items" is volatile, not writing to xml */ /* member "toStringFn" is volatile, not writing to xml */ /* member "fromStringFn" is volatile, not writing to xml */ } void Typemaker2_Enum_toXml(const TYPEMAKER2_ENUM *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Enum_WriteXml(p_struct, p_db); } TYPEMAKER2_ENUM *Typemaker2_Enum_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_ENUM *p_struct; p_struct=Typemaker2_Enum_new(); Typemaker2_Enum_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-5.12.0/tools/typemaker2/tm_virtualfn_p.h0000644000175000017500000000173213142134464017333 00000000000000/*************************************************************************** begin : Mon Jun 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_VIRTUALFN_P_H #define TYPEMAKER2_VIRTUALFN_P_H #include "tm_virtualfn.h" struct TYPEMAKER2_VIRTUALFN_PARAM { GWEN_LIST_ELEMENT(TYPEMAKER2_VIRTUALFN_PARAM) char *name; char *type; char *descr; }; struct TYPEMAKER2_VIRTUALFN { GWEN_LIST_ELEMENT(TYPEMAKER2_VIRTUALFN) char *name; char *location; char *descr; int access; uint32_t flags; char *returnType; char *returnTypeDescr; char *defaultReturnValue; char *preset; TYPEMAKER2_VIRTUALFN_PARAM_LIST *paramList; int refCount; }; #endif gwenhywfar-5.12.0/tools/typemaker2/types/0000775000175000017500000000000014730345121015352 500000000000000gwenhywfar-5.12.0/tools/typemaker2/types/c/0000775000175000017500000000000014730345121015574 500000000000000gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_db_node.tm20000664000175000017500000000605213377356304020570 00000000000000 GWEN_DB_NODE AQDB_DataType_String $(dst)=$(preset); GWEN_DB_Group_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=GWEN_DB_Group_dup($(src)); attribute attribute attribute attribute attribute attribute if ($(src)){ GWEN_DB_NODE *dbCopy; dbCopy=GWEN_DB_GetGroup($(db), GWEN_DB_FLAGS_DEFAULT, "$(name)"); assert(dbCopy); $(retval)=GWEN_DB_AddGroupChildren(dbCopy, $(src)); } else { GWEN_DB_DeleteGroup($(db), "$(name)"); $(retval)=0; } { GWEN_DB_NODE *dbSrc; dbSrc=GWEN_DB_GetGroup($(db), GWEN_PATH_FLAGS_NAMEMUSTEXIST, "$(name)"); if (dbSrc) { $(dst)=GWEN_DB_Group_dup(dbSrc); } else $(dst)=NULL; } if ($(src)) { GWEN_Buffer_AppendString($(buffer), GWEN_Date_GetString($(src))); GWEN_DB_WriteToBuffer($(src), $(buffer), GWEN_DB_FLAGS_DEFAULT); } NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_date.tm20000644000175000017500000001053513377356276020122 00000000000000 GWEN_DATE AQDB_DataType_Date $(dst)=$(preset); GWEN_Date_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=GWEN_Date_dup($(src)); if ($(dst) && $(src)) $(retval)=GWEN_Date_Compare($(src), $(dst)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; attribute if ($(src)){ const char *s=GWEN_Date_GetString($(src)); GWEN_XMLNode_SetCharValue($(db), "$(name)", s); } attribute attribute if ($(src)){ const char *s=GWEN_Date_GetString($(src)); GWEN_XMLNode_SetProperty($(db), "$(name)", s); } attribute { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", NULL); if (s && *s) $(dst)=GWEN_Date_fromString(s); } attribute attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", NULL); if (s && *s) $(dst)=GWEN_Date_fromString(s); } if ($(src)){ const char *s=GWEN_Date_GetString($(src)); $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", s); } else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, NULL); if (s && *s) $(dst)=GWEN_Date_fromString(s); } if ($(src)){ const char *s=GWEN_Date_GetString($(src)); $(retval)=AQDB_Object_SetFieldString($(db), $(fieldid), s); } else { $(retval)=AQDB_Object_SetFieldString($(db), $(fieldid), NULL); } { const char *s; $(retval)=AQDB_Object_GetFieldString($(db), $(fieldid), &s); if ($(retval)>=0 && s && *s) { $(dst)=GWEN_Date_fromString(s); if ($(dst)==NULL) $(retval)=GWEN_ERROR_BAD_DATA; } else $(retval)=0; } if ($(src)) GWEN_Buffer_AppendString($(buffer), GWEN_Date_GetString($(src))); NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/Makefile.in0000664000175000017500000005155314730344662017603 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 = tools/typemaker2/types/c ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_typedata_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h 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)$(typedatadir)" DATA = $(dist_typedata_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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ typedatadir = $(datadir)/gwenhywfar/typemaker2/c dist_typedata_DATA = \ char.tm2 \ char_array.tm2 \ char_ptr.tm2 \ double.tm2 \ int.tm2 \ int_base.tm2 \ int_array.tm2 \ gwen_buffer.tm2 \ gwen_date.tm2 \ gwen_timestamp.tm2 \ gwen_idlist64.tm2 \ gwen_time.tm2 \ list1_base.tm2 \ list2_base.tm2 \ struct_base.tm2 \ uint16_t.tm2 \ uint16_t_array.tm2 \ uint32_t.tm2 \ uint32_t_array.tm2 \ uint64_t.tm2 \ tree_base.tm2 \ tree2_base.tm2 \ idmap_base.tm2 \ gwen_multicache.tm2 \ gwen_multicache_type.tm2 \ uint8_t.tm2 \ uint8_t_array.tm2 \ gwen_bindata.tm2 \ double_array.tm2 \ gwen_stringlist2.tm2 \ gwen_db_node.tm2 \ gwen_xmlnode.tm2 \ gwen_xmlnode_list.tm2 \ gwen_xmlnode_list2.tm2 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) --gnu tools/typemaker2/types/c/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/typemaker2/types/c/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_typedataDATA: $(dist_typedata_DATA) @$(NORMAL_INSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(typedatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(typedatadir)" || 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)$(typedatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(typedatadir)" || exit $$?; \ done uninstall-dist_typedataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_typedata_DATA)'; test -n "$(typedatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(typedatadir)'; $(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)$(typedatadir)"; 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 clean-libtool 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-dist_typedataDATA 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 mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_typedataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_typedataDATA 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 \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_typedataDATA .PRECIOUS: Makefile sources: # 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: gwenhywfar-5.12.0/tools/typemaker2/types/c/idmap_base.tm20000644000175000017500000000144613377356353020246 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(src)=NULL; $(dst)=$(src); NULL NULL const gwenhywfar-5.12.0/tools/typemaker2/types/c/uint64_t.tm20000644000175000017500000000017713142134464017621 00000000000000 uint64_t gwenhywfar-5.12.0/tools/typemaker2/types/c/uint8_t.tm20000644000175000017500000000017513142134464017535 00000000000000 uint8_t gwenhywfar-5.12.0/tools/typemaker2/types/c/int.tm20000644000175000017500000000016513142134464016734 00000000000000 int gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_timestamp.tm20000664000175000017500000001070514460564441021176 00000000000000 GWEN_TIMESTAMP AQDB_DataType_Int $(dst)=$(preset); GWEN_Timestamp_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=GWEN_Timestamp_dup($(src)); if ($(dst) && $(src)) $(retval)=GWEN_Timestamp_Compare($(src), $(dst)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; attribute if ($(src)){ const char *s=GWEN_Timestamp_GetString($(src)); GWEN_XMLNode_SetCharValue($(db), "$(name)", s); } attribute attribute if ($(src)){ const char *s=GWEN_Timestamp_GetString($(src)); GWEN_XMLNode_SetProperty($(db), "$(name)", s); } attribute { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", NULL); if (s && *s) $(dst)=GWEN_Timestamp_fromString(s); } attribute attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", NULL); if (s && *s) $(dst)=GWEN_Timestamp_fromString(s); } if ($(src)){ const char *s=GWEN_Timestamp_GetString($(src)); $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", s); } else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, NULL); if (s && *s) $(dst)=GWEN_Timestamp_fromString(s); } if ($(src)){ int64_t v; v=GWEN_Timestamp_toInt64($(src)); $(retval)=AQDB_Object_SetFieldInt64($(db), $(fieldid), v); } else { $(retval)=AQDB_Object_SetFieldInt64($(db), $(fieldid), 0); } { int64_t v=0; $(retval)=AQDB_Object_GetFieldInt64($(db), $(fieldid), &v); if ($(retval)>=0 && v>0) { $(dst)=GWEN_Timestamp_fromInt64(v); if ($(dst)==NULL) $(retval)=GWEN_ERROR_BAD_DATA; } else $(retval)=0; } if ($(src)) GWEN_Buffer_AppendString($(buffer), GWEN_Timestamp_GetString($(src))); NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/char.tm20000644000175000017500000000016713142134464017061 00000000000000 char gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_time.tm20000644000175000017500000001170513377356346020141 00000000000000 GWEN_TIME AQDB_DataType_Date $(dst)=$(preset); GWEN_Time_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=GWEN_Time_dup($(src)); if ($(dst) && $(src)) $(retval)=GWEN_Time_Compare($(src), $(dst)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; attribute if ($(src)){ GWEN_BUFFER *xbuf; int rv; xbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Time_toString($(src), "YYYY/MM/DD-hh:mm", xbuf); if (rv>=0) GWEN_XMLNode_SetCharValue($(db), "$(name)", GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } attribute attribute if ($(src)){ GWEN_BUFFER *xbuf; int rv; xbuf=GWEN_Buffer_new(0, 32, 0, 1); rv=GWEN_Time_toString($(src), "YYYY/MM/DD-hh:mm", xbuf); if (rv>=0) GWEN_XMLNode_SetProperty($(db), "$(name)", GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } attribute { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", NULL); if (s && *s) $(dst)=GWEN_Time_fromString(s, "YYYY/MM/DD-hh:mm"); } attribute attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", NULL); if (s && *s) $(dst)=GWEN_Time_fromString(s, "YYYY/MM/DD-hh:mm"); } if ($(src)){ GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup($(db), GWEN_DB_FLAGS_OVERWRITE_GROUPS, "$(name)"); assert(dbDest); $(retval)=GWEN_Time_toDb($(src), dbDest); } else $(retval)=0; { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup($(db), GWEN_PATH_FLAGS_NAMEMUSTEXIST, "$(name)"); if (dbDest) $(dst)=GWEN_Time_fromDb(dbDest); } if ($(src)){ GWEN_BUFFER *xbuf=GWEN_Buffer_new(0, 64, 0, 1); $(retval)=GWEN_Time_toUtcString($(src), "YYYYMMDD-hhmmss", xbuf); if ($(retval)>=0) $(retval)=AQDB_Object_SetFieldString($(db), $(fieldid), GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } else $(retval)=0; { const char *s; $(retval)=AQDB_Object_GetFieldString($(db), $(fieldid), &s); if ($(retval)>=0 && s && *s) { $(dst)=GWEN_Time_fromUtcString(s, "YYYYMMDD-hhmmss"); if ($(dst)==NULL) $(retval)=GWEN_ERROR_BAD_DATA; } else $(retval)=0; } if ($(src)) GWEN_Time_toUtcString($(src), "YYYY/MM/DD-hh:mm", $(buffer)); NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/char_ptr.tm20000644000175000017500000001107013377356201017746 00000000000000 char AQDB_DataType_String $(dst)=$(preset); free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=strdup($(src)); if ($(dst) && $(src)) $(retval)=strcasecmp($(src), $(dst)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; attribute GWEN_XMLNode_SetCharValue($(db), "$(name)", $(src)); attribute attribute GWEN_XMLNode_SetProperty($(db), "$(name)", $(src)); attribute { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", $(default)); if (s) $(dst)=strdup(s); } attribute attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", $(default)); if (s) $(dst)=strdup(s); } if ($(src)) $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(src)); else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, $(default)); if (s) $(dst)=strdup(s); } if ($(src)) $(retval)=AQDB_Object_SetFieldString($(db), $(fieldId), $(src)); else $(retval)=AQDB_Object_SetFieldString($(db), $(fieldId), NULL); { const char *s; $(retval)=AQDB_Object_GetFieldString($(db), $(fieldId), &s); if ($(retval)>=0 && s) $(dst)=strdup(s); } with_hashnum if ($(src)) GWEN_Buffer_AppendString($(buffer), $(src)); with_hashnum with_hashnum if (($(src))) { const char *tmp_s; tmp_s=$(src); while (*tmp_s=='0') tmp_s++; if (*tmp_s) GWEN_Buffer_AppendString($(buffer), tmp_s); } NULL NULL own const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/double_array.tm20000664000175000017500000000766313265727202020632 00000000000000 double memset($(dst), 0, $(maxlen)*sizeof(double)); $(dst)=$(src); memmove($(dst), $(src), $(maxlen)*sizeof(double)); if (*($(dst)) && *($(src))) $(retval)=memcmp($(src), $(dst), $(maxlen)*sizeof(double)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; $(api) $(member_basetype_type) $(struct_prefix)_Get$(nameWithCapital)At(const $(struct_type) *p_struct, int idx); $(member_basetype_type) $(struct_prefix)_Get$(nameWithCapital)At(const $(struct_type) *p_struct, int idx) { if (p_struct && (idx < $(maxlen))) return p_struct->$(name)[idx]; return 0; } $(api) int $(struct_prefix)_Set$(nameWithCapital)At($(struct_type) *p_struct, int idx, $(member_basetype_type) v); int $(struct_prefix)_Set$(nameWithCapital)At($(struct_type) *p_struct, int idx, $(member_basetype_type) v) { if (p_struct && (idx < $(maxlen))) { p_struct->$(name)[idx]=v; return 0; } return GWEN_ERROR_INVALID; } $(api) void $(struct_prefix)_Preset$(nameWithCapital)($(struct_type) *p_struct, $(member_basetype_type) v); void $(struct_prefix)_Preset$(nameWithCapital)($(struct_type) *p_struct, $(member_basetype_type) v) { int i; for(i=0; i < $(maxlen); i++) p_struct->$(name)[i]=v; } NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_idlist64.tm20000644000175000017500000000150113377356314020631 00000000000000 GWEN_IDLIST64 $(dst)=$(preset); GWEN_IdList64_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=GWEN_IdList64_dup($(src)); NULL NULL const gwenhywfar-5.12.0/tools/typemaker2/types/c/uint32_t.tm20000644000175000017500000000017713142134464017614 00000000000000 uint32_t gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_xmlnode.tm20000666000175000017500000000404313443310601020624 00000000000000 GWEN_XMLNODE AQDB_DataType_String $(dst)=$(preset); GWEN_XMLNode_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=GWEN_XMLNode_dup($(src)); if ($(src)){ GWEN_XMLNODE *cpy; GWEN_XMLNODE *newNode; cpy=GWEN_XMLNode_dup($(src)); newNode=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, $(name)); GWEN_XMLNode_AddChild(newNode, cpy); GWEN_XMLNode_AddChild($(db), newNode); } { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetFirstTag($(src)); if (n) $(dst)=GWEN_XMLNode_dup(n); } NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/tree_base.tm20000644000175000017500000000404613377356412020106 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(src)=NULL; $(dst)=$(src); attribute attribute attribute attribute attribute attribute NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/Makefile.am0000664000175000017500000000136314460564441017563 00000000000000 typedatadir=$(datadir)/gwenhywfar/typemaker2/c dist_typedata_DATA=\ char.tm2 \ char_array.tm2 \ char_ptr.tm2 \ double.tm2 \ int.tm2 \ int_base.tm2 \ int_array.tm2 \ gwen_buffer.tm2 \ gwen_date.tm2 \ gwen_timestamp.tm2 \ gwen_idlist64.tm2 \ gwen_time.tm2 \ list1_base.tm2 \ list2_base.tm2 \ struct_base.tm2 \ uint16_t.tm2 \ uint16_t_array.tm2 \ uint32_t.tm2 \ uint32_t_array.tm2 \ uint64_t.tm2 \ tree_base.tm2 \ tree2_base.tm2 \ idmap_base.tm2 \ gwen_multicache.tm2 \ gwen_multicache_type.tm2 \ uint8_t.tm2 \ uint8_t_array.tm2 \ gwen_bindata.tm2 \ double_array.tm2 \ gwen_stringlist2.tm2 \ gwen_db_node.tm2 \ gwen_xmlnode.tm2 \ gwen_xmlnode_list.tm2 \ gwen_xmlnode_list2.tm2 sources: gwenhywfar-5.12.0/tools/typemaker2/types/c/list2_base.tm20000664000175000017500000001206313404775343020203 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=$(member_prefix)_dup($(src)); { if ($(src)) { GWEN_XMLNODE *dbDest; $(member_basetype_type)_LIST2_ITERATOR *it; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "$(name)"); it=$(member_prefix)_List2__First($(src)); if (it) { $(member_basetype_type) *elem; elem=$(member_prefix)Iterator_Data(it); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "$(element_name)"); assert(dbElem); $(member_basetype_prefix)_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=$(member_prefix)Iterator_Next(it); } $(member_prefix)Iterator_free(it); } GWEN_XMLNode_AddChild($(db), dbDest); } } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag($(db), "$(name)", NULL, NULL); if (dbSource) { $(member_type) *t; GWEN_XMLNODE *dbT; t=$(member_prefix)_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "$(element_name)", NULL, NULL); while(dbT) { $(member_basetype_type) *elem; elem=$(member_basetype_prefix)_fromXml(dbT); if (elem) $(member_prefix)_PushBack(t, elem); dbT=GWEN_XMLNode_FindNextTag(dbT, "$(element_name)", NULL, NULL); } $(dst)=t; } else $(dst)=$(preset); } { if ($(src)) { GWEN_DB_NODE *dbDest; $(member_basetype_type)_LIST2_ITERATOR *it; dbDest=GWEN_DB_GetGroup($(db), GWEN_DB_FLAGS_OVERWRITE_GROUPS, "$(name)"); assert(dbDest); it=$(member_prefix)_First($(src)); if (it) { $(member_basetype_type) *elem; $(retval)=0; elem=$(member_prefix)Iterator_Data(it); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "$(element_name)"); assert(dbElem); $(retval)=$(member_basetype_prefix)_toDb(elem, dbElem); if ($(retval)<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", $(retval)); break; } elem=$(member_prefix)Iterator_Next(it); } $(member_prefix)Iterator_free(it); } } else $(retval)=0; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup($(db), GWEN_PATH_FLAGS_NAMEMUSTEXIST, "$(name)"); if (dbSource) { $(member_type) *t; GWEN_DB_NODE *dbT; t=$(member_prefix)_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "$(element_name)"); while(dbT) { $(member_basetype_type) *elem; elem=$(member_basetype_prefix)_fromDb(dbT); if (elem) $(member_prefix)_PushBack(t, elem); dbT=GWEN_DB_FindNextGroup(dbT, "$(element_name)"); } $(dst)=t; } else $(dst)=$(preset); } NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_buffer.tm20000644000175000017500000000773313377356266020463 00000000000000 GWEN_BUFFER AQDB_DataType_Bin $(dst)=$(preset); GWEN_Buffer_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=GWEN_Buffer_dup($(src)); if ($(dst) && $(src)) $(retval)=0; else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; if ($(src)) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, GWEN_Buffer_GetUsedBytes($(src))*2, 0, 1); GWEN_Text_ToHexBuffer(GWEN_Buffer_GetStart($(src)), GWEN_Buffer_GetUsedBytes($(src)), tbuf, 0, 0, 0); GWEN_XMLNode_SetCharValue($(db), "$(name)", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", $(default)); if (s) { $(dst)=GWEN_Buffer_new(0, strlen(s)/2, 0, 1); GWEN_Text_FromHexBuffer(s, $(dst)); } } if ($(src)) $(retval)=GWEN_DB_SetBinValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", GWEN_Buffer_GetStart($(src)), GWEN_Buffer_GetUsedBytes($(src))); else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { const uint8_t *ptr; uint32_t len; ptr=GWEN_DB_GetBinValue($(db), "$(name)", 0, NULL, 0, &len); if (ptr && len) { $(dst)=GWEN_Buffer_new(0, len, 0, 1); GWEN_Buffer_AppendBytes($(dst), (const char*)ptr, len); } } if ($(src)) { $(retval)=AQDB_Object_SetField($(db), $(fieldId), (const uint8_t*) GWEN_Buffer_GetStart($(src)), GWEN_Buffer_GetUsedBytes($(src))); } else $(retval)=AQDB_Object_SetField($(db), $(fieldId), NULL, 0); { uint8_t *p; uint32_t len; $(retval)=AQDB_Object_GetField($(db), $(fieldId), &p, &len); if ($(retval)>=0 && p && len) { $(dst)=GWEN_Buffer_new(0, len, 0, 1); GWEN_Buffer_AppendBytes($(dst), (const char*) p, len); } } NULL NULL own const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_xmlnode_list.tm20000666000175000017500000000034113443310601021654 00000000000000 GWEN_XMLNODE_LIST GWEN_XMLNode_List gwenhywfar-5.12.0/tools/typemaker2/types/c/struct_base.tm20000644000175000017500000000532713404774215020472 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=$(member_prefix)_dup($(src)); { if ($(src)) { GWEN_XMLNODE *dbDest; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "$(name)"); $(member_prefix)_toXml($(src), dbDest); GWEN_XMLNode_AddChild($(db), dbDest); } } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag($(db), "$(name)", NULL, NULL); if (dbSource) $(dst)=$(member_prefix)_fromXml(dbSource); else $(dst)=$(preset); } { if ($(src)) { GWEN_DB_NODE *dbDest; dbDest=GWEN_DB_GetGroup($(db), GWEN_DB_FLAGS_OVERWRITE_GROUPS, "$(name)"); assert(dbDest); $(retval)=$(member_prefix)_toDb($(src), dbDest); } else $(retval)=0; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup($(db), GWEN_PATH_FLAGS_NAMEMUSTEXIST, "$(name)"); if (dbSource) $(dst)=$(member_prefix)_fromDb(dbSource); else $(dst)=$(preset); } $(member_prefix)_toHashString($(src), $(buffer)); NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/char_array.tm20000664000175000017500000001152714460564441020271 00000000000000 char AQDB_DataType_String memset($(dst), 0, $(maxlen)); if ($(src)) { strncpy($(dst), $(src), $(maxlen)-1); ($(dst))[$(maxlen)-1]=0; } else { ($(dst))[0]=0; } if ($(src)) { strncpy($(dst), $(src), $(maxlen)-1); ($(dst))[$(maxlen)-1]=0; } else { ($(dst))[0]=0; } if (*($(dst)) && *($(src))) $(retval)=strncasecmp($(src), $(dst), $(maxlen)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; attribute if (*($(src))) GWEN_XMLNode_SetCharValue($(db), "$(name)", $(src)); attribute attribute if (*($(src))) GWEN_XMLNode_SetProperty($(db), "$(name)", $(src)); attribute { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", $(default)); if (s) strncpy($(dst), s, $(maxlen)); } attribute attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", $(default)); if (s) strncpy($(dst), s, $(maxlen)); } if (*($(src))) $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(src)); else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, $(default)); if (s) strncpy($(dst), s, $(maxlen)); } if ($(src)) $(retval)=AQDB_Object_SetFieldString($(db), $(fieldId), $(src)); else $(retval)=AQDB_Object_SetFieldString($(db), $(fieldId), NULL); { const char *s; $(retval)=AQDB_Object_GetFieldString($(db), $(fieldId), &s); if ($(retval)>=0 && s) strncpy($(dst), s, $(maxlen)); } with_hashnum if (*($(src))) GWEN_Buffer_AppendString($(buffer), $(src)); with_hashnum with_hashnum if (*($(src))) { const char *tmp_s; tmp_s=$(src); while (*tmp_s=='0') tmp_s++; if (*tmp_s) GWEN_Buffer_AppendString($(buffer), tmp_s); } NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/int_array.tm20000666000175000017500000001160613702435660020144 00000000000000 int memset($(dst), 0, ($(maxlen))*sizeof(int)); $(dst)=$(src); memmove($(dst), $(src), ($(maxlen))*sizeof(int)); if (*($(dst)) && *($(src))) { int i=0; int result=0; while(i < $(maxlen)) { if ( $(src)[i] < $(dst)[i]) { result=-1; break; } else if ( $(src)[i] > $(dst)[i]) { result=1; break; } i++; } $(retval)=result; } else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; { int i=0; int result=0; GWEN_DB_DeleteVar($(db), "$(name)"); for (i=0; i < $(maxlen); i++) { result=GWEN_DB_SetIntValue($(db), 0, "$(name)", $(src)[i]); } $(retval)=result; } { int i; memset($(dst), 0, ($(maxlen))*sizeof(int)); for (i=0; i < $(maxlen); i++) { int v; v=GWEN_DB_GetIntValue($(db), "$(name)", i, 0); if (v==0) break; $(dst)[i]=v; } } $(api) $(member_basetype_type) $(struct_prefix)_Get$(nameWithCapital)At(const $(struct_type) *p_struct, int idx); $(member_basetype_type) $(struct_prefix)_Get$(nameWithCapital)At(const $(struct_type) *p_struct, int idx) { if (p_struct && (idx < $(maxlen))) return p_struct->$(name)[idx]; return 0; } $(api) int $(struct_prefix)_Set$(nameWithCapital)At($(struct_type) *p_struct, int idx, $(member_basetype_type) v); int $(struct_prefix)_Set$(nameWithCapital)At($(struct_type) *p_struct, int idx, $(member_basetype_type) v) { if (p_struct && (idx < $(maxlen))) { p_struct->$(name)[idx]=v; return 0; } return GWEN_ERROR_INVALID; } $(api) void $(struct_prefix)_Preset$(nameWithCapital)($(struct_type) *p_struct, $(member_basetype_type) v); void $(struct_prefix)_Preset$(nameWithCapital)($(struct_type) *p_struct, $(member_basetype_type) v) { int i; for(i=0; i < $(maxlen); i++) p_struct->$(name)[i]=v; } NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/uint16_t_array.tm20000664000175000017500000000763214125675317021032 00000000000000 uint16_t memset($(dst), 0, ($(maxlen))*4); $(dst)=$(src); memmove($(dst), $(src), ($(maxlen))*4); if (*($(dst)) && *($(src))) $(retval)=memcmp($(src), $(dst), ($(maxlen))*4); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; $(api) $(member_basetype_type) $(struct_prefix)_Get$(nameWithCapital)At(const $(struct_type) *p_struct, int idx); $(member_basetype_type) $(struct_prefix)_Get$(nameWithCapital)At(const $(struct_type) *p_struct, int idx) { if (p_struct && (idx < $(maxlen))) return p_struct->$(name)[idx]; return 0; } $(api) int $(struct_prefix)_Set$(nameWithCapital)At($(struct_type) *p_struct, int idx, $(member_basetype_type) v); int $(struct_prefix)_Set$(nameWithCapital)At($(struct_type) *p_struct, int idx, $(member_basetype_type) v) { if (p_struct && (idx < $(maxlen))) { p_struct->$(name)[idx]=v; return 0; } return GWEN_ERROR_INVALID; } $(api) void $(struct_prefix)_Preset$(nameWithCapital)($(struct_type) *p_struct, $(member_basetype_type) v); void $(struct_prefix)_Preset$(nameWithCapital)($(struct_type) *p_struct, $(member_basetype_type) v) { int i; for(i=0; i < $(maxlen); i++) p_struct->$(name)[i]=v; } NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/list1_base.tm20000644000175000017500000001117013404775311020171 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=$(member_prefix)_dup($(src)); { if ($(src)) { GWEN_XMLNODE *dbDest; $(member_basetype_type) *elem; dbDest=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "$(name)"); elem=$(member_prefix)_First($(src)); while(elem) { GWEN_XMLNODE *dbElem; dbElem=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "$(element_name)"); assert(dbElem); $(member_basetype_prefix)_toXml(elem, dbElem); GWEN_XMLNode_AddChild(dbDest, dbElem); elem=$(member_prefix)_Next(elem); } GWEN_XMLNode_AddChild($(db), dbDest); } } { GWEN_XMLNODE *dbSource; dbSource=GWEN_XMLNode_FindFirstTag($(db), "$(name)", NULL, NULL); if (dbSource) { $(member_type) *t; GWEN_XMLNODE *dbT; t=$(member_prefix)_new(); dbT=GWEN_XMLNode_FindFirstTag(dbSource, "$(element_name)", NULL, NULL); while(dbT) { $(member_basetype_type) *elem; elem=$(member_basetype_prefix)_fromXml(dbT); if (elem) $(member_prefix)_Add(elem, t); dbT=GWEN_XMLNode_FindNextTag(dbT, "$(element_name)", NULL, NULL); } $(dst)=t; } else $(dst)=$(preset); } { if ($(src)) { GWEN_DB_NODE *dbDest; $(member_basetype_type) *elem; dbDest=GWEN_DB_GetGroup($(db), GWEN_DB_FLAGS_OVERWRITE_GROUPS, "$(name)"); assert(dbDest); $(retval)=0; elem=$(member_prefix)_First($(src)); while(elem) { GWEN_DB_NODE *dbElem; dbElem=GWEN_DB_GetGroup(dbDest, GWEN_PATH_FLAGS_CREATE_GROUP, "$(element_name)"); assert(dbElem); $(retval)=$(member_basetype_prefix)_toDb(elem, dbElem); if ($(retval)<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", $(retval)); break; } elem=$(member_prefix)_Next(elem); } } else $(retval)=0; } { GWEN_DB_NODE *dbSource; dbSource=GWEN_DB_GetGroup($(db), GWEN_PATH_FLAGS_NAMEMUSTEXIST, "$(name)"); if (dbSource) { $(member_type) *t; GWEN_DB_NODE *dbT; t=$(member_prefix)_new(); dbT=GWEN_DB_FindFirstGroup(dbSource, "$(element_name)"); while(dbT) { $(member_basetype_type) *elem; elem=$(member_basetype_prefix)_fromDb(dbT); if (elem) $(member_prefix)_Add(elem, t); dbT=GWEN_DB_FindNextGroup(dbT, "$(element_name)"); } $(dst)=t; } else $(dst)=$(preset); } NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_stringlist2.tm20000644000175000017500000000554213377356341021464 00000000000000 GWEN_STRINGLIST2 AQDB_DataType_String $(dst)=$(preset); GWEN_StringList2_free($(src)); $(src)=NULL; $(dst)=$(src); $(dst)=GWEN_StringList2_dup($(src)); $(retval)=0; attribute if ($(src)){ GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "$(name)"); GWEN_StringList2_toXml($(src), n); GWEN_XMLNode_AddChild($(db), n); } attribute { GWEN_XMLNODE *n; n=GWEN_XMLNode_FindFirstTag($(db), "$(name)", 0, 0); if(n) { $(dst)=GWEN_StringList2_fromXml(n, GWEN_StringList2_IntertMode_AlwaysAdd); } else $(dst)=NULL; } if ($(src)){ $(retval)=GWEN_StringList2_toDb($(src), $(db), "$(name)"); } else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } { $(dst)=GWEN_StringList2_fromDb($(db), "$(name)", GWEN_StringList2_IntertMode_AlwaysAdd); } #error "Not implemented" #error "Not implemented" #error "Not implemented" NULL NULL own assign none const gwenhywfar-5.12.0/tools/typemaker2/types/c/tree2_base.tm20000666000175000017500000000404713507362654020175 00000000000000 $(dst)=$(preset); $(member_prefix)_free($(src)); $(src)=NULL; $(dst)=$(src); attribute attribute attribute attribute attribute attribute NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/double.tm20000644000175000017500000000656414465452032017430 00000000000000 AQDB_DataType_String double $(dst)=$(preset); $(dst)=$(src); $(dst)=$(src); if ($(dst)==$(src)) $(retval)=0; else if ($(src)<$(dst)) $(retval)=-1; else $(retval)=1; { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "%f", $(src)); numbuf[sizeof(numbuf)-1]=0; GWEN_XMLNode_SetCharValue($(db), "$(name)", numbuf); } { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", NULL); if (s) { double v; if (sscanf(s, "%lf", &v)==1) $(dst)=v; else $(dst)=$(default); } else $(dst)=$(default); } { char numbuf[64]; snprintf(numbuf, sizeof(numbuf)-1, "%f", $(src)); numbuf[sizeof(numbuf)-1]=0; $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", numbuf); } { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, NULL); if (s) { double v; if (sscanf(s, "%lf", &v)==1) $(dst)=v; else $(dst)=$(default); } else $(dst)=$(default); } { $(retval)=AQDB_Object_SetFieldDouble($(db), $(fieldId), $(src)); } { double v; $(retval)=AQDB_Object_GetFieldDouble($(db), $(fieldId), &v); if ($(retval)>=0) $(dst)=v; } { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%f", $(src)); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString($(buffer), numbuf); } 0.0 0.0 gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_xmlnode_list2.tm20000666000175000017500000000034413443310601021741 00000000000000 GWEN_XMLNODE_LIST2 GWEN_XMLNode_List2 gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_bindata.tm20000644000175000017500000001321313377356255020600 00000000000000 GWEN_BINDATA AQDB_DataType_Bin $(dst).pointer=NULL; $(dst).length=0; if ($(src).length && $(src).pointer) { free($(src).pointer); } $(src).pointer=NULL; $(src).length=0; $(dst).pointer=$(src).pointer; $(dst).length=$(src).length; if ($(src).length && $(src).pointer) { $(dst).pointer=(uint8_t*) malloc($(src).length); if ($(dst).pointer) { $(dst).length=$(src).length; memmove($(dst).pointer, $(src).pointer, $(src).length); } else { $(dst).pointer=NULL; $(dst).length=0; } } else { $(dst).pointer=NULL; $(dst).length=0; } if (($(src).length == $(dst).length) && $(src).pointer && $(dst).pointer ) $(retval)=memcmp($(src).pointer, $(dst).pointer, $(maxlen)); else if ($(src).length>$(dst).length) $(retval)=1; else if ($(dst).length>$(src).length) $(retval)=-1; else $(retval)=0; { if ($(src).length && $(src).pointer) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Base64_Encode((const unsigned char*) $(src).pointer, $(src).length, tbuf, 80); if (rv < 0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } else { GWEN_XMLNode_SetCharValue($(db), "$(name)", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } } } { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", $(default)); if (s) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 1024, 0, 1); rv=GWEN_Base64_Decode((const unsigned char*)s, strlen(s), tbuf); if (rv < 0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); } else { char *t; uint32_t len; len=GWEN_Buffer_GetUsedBytes(tbuf); t=GWEN_Buffer_GetStart(tbuf); if (GWEN_Buffer_Relinquish(tbuf) < 0) { uint8_t *dest; dest=(uint8_t*) malloc(len); memmove(dest, t, len); $(dst).pointer=dest; $(dst).length=len; } else { $(dst).pointer=(uint8_t*) t; $(dst).length=len; } } GWEN_Buffer_free(tbuf); } } { if ($(src).length && $(src).pointer) { GWEN_DB_SetBinValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(src).pointer, $(src).length); } else { GWEN_DB_DeleteVar($(db), "$(name)"); $(retval)=0; } } { const void *v; unsigned int vlen; v=GWEN_DB_GetBinValue($(db), "$(name)", 0, NULL, 0, &vlen); if (v && vlen) { uint8_t *dest; dest=(uint8_t*) malloc(vlen); memmove(dest, v, vlen); $(dst).pointer=dest; $(dst).length=vlen; } } { if ($(src).length && $(src).pointer) $(retval)=AQDB_Object_SetField($(db), $(fieldId), $(src).pointer, $(src).length); else $(retval)=AQDB_Object_SetField($(db), $(fieldId), NULL, 0); } { uint8_t *data=NULL; uint32_t len=0; int rv; rv=AQDB_Object_GetField($(db), $(fieldId), &data, &len); if (rv < 0) { $(retval)=rv; } else { uint8_t *dest; dest=(uint8_t*) malloc(len); memmove(dest, data, len); $(dst).pointer=dest; $(dst).length=len; } } NULL assign none const gwenhywfar-5.12.0/tools/typemaker2/types/c/uint32_t_array.tm20000664000175000017500000000763213265727202021023 00000000000000 uint32_t memset($(dst), 0, ($(maxlen))*4); $(dst)=$(src); memmove($(dst), $(src), ($(maxlen))*4); if (*($(dst)) && *($(src))) $(retval)=memcmp($(src), $(dst), ($(maxlen))*4); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; $(api) $(member_basetype_type) $(struct_prefix)_Get$(nameWithCapital)At(const $(struct_type) *p_struct, int idx); $(member_basetype_type) $(struct_prefix)_Get$(nameWithCapital)At(const $(struct_type) *p_struct, int idx) { if (p_struct && (idx < $(maxlen))) return p_struct->$(name)[idx]; return 0; } $(api) int $(struct_prefix)_Set$(nameWithCapital)At($(struct_type) *p_struct, int idx, $(member_basetype_type) v); int $(struct_prefix)_Set$(nameWithCapital)At($(struct_type) *p_struct, int idx, $(member_basetype_type) v) { if (p_struct && (idx < $(maxlen))) { p_struct->$(name)[idx]=v; return 0; } return GWEN_ERROR_INVALID; } $(api) void $(struct_prefix)_Preset$(nameWithCapital)($(struct_type) *p_struct, $(member_basetype_type) v); void $(struct_prefix)_Preset$(nameWithCapital)($(struct_type) *p_struct, $(member_basetype_type) v) { int i; for(i=0; i < $(maxlen); i++) p_struct->$(name)[i]=v; } NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/uint16_t.tm20000664000175000017500000000017714125675317017631 00000000000000 uint16_t gwenhywfar-5.12.0/tools/typemaker2/types/c/uint8_t_array.tm20000664000175000017500000001174113517070611020735 00000000000000 uint8_t memset($(dst), 0, $(maxlen)); $(dst)=$(src); memmove($(dst), $(src), $(maxlen)); if (*($(dst)) && *($(src))) $(retval)=memcmp($(src), $(dst), $(maxlen)); else if ($(src)) $(retval)=1; else if ($(dst)) $(retval)=-1; else $(retval)=0; { int i=0; int result=0; for (i=0; i < $(maxlen); i++) { result=GWEN_DB_SetIntValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(src)[i]); } $(retval)=result; } { int i; memset($(dst), 0, ($(maxlen))*sizeof(uint8_t)); for (i=0; i < $(maxlen); i++) { int v; v=GWEN_DB_GetIntValue($(db), "$(name)", i, 0); if (v==0) break; $(dst)[i]=v; } } $(api) $(member_basetype_type) $(struct_prefix)_Get$(nameWithCapital)At(const $(struct_type) *p_struct, int idx); $(member_basetype_type) $(struct_prefix)_Get$(nameWithCapital)At(const $(struct_type) *p_struct, int idx) { if (p_struct && (idx < $(maxlen))) return p_struct->$(name)[idx]; return 0; } $(api) int $(struct_prefix)_Set$(nameWithCapital)At($(struct_type) *p_struct, int idx, $(member_basetype_type) v); int $(struct_prefix)_Set$(nameWithCapital)At($(struct_type) *p_struct, int idx, $(member_basetype_type) v) { if (p_struct && (idx < $(maxlen))) { p_struct->$(name)[idx]=v; return 0; } return GWEN_ERROR_INVALID; } $(api) void $(struct_prefix)_Preset$(nameWithCapital)($(struct_type) *p_struct, $(member_basetype_type) v); void $(struct_prefix)_Preset$(nameWithCapital)($(struct_type) *p_struct, $(member_basetype_type) v) { memset(p_struct->$(name), v, $(maxlen)); } $(api) int $(struct_prefix)_Get$(nameWithCapital)ArraySize(void); int $(struct_prefix)_Get$(nameWithCapital)ArraySize(void) { return $(maxlen); } NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/int_base.tm20000644000175000017500000001237713142134464017736 00000000000000 AQDB_DataType_Int $(dst)=$(preset); $(dst)=$(src); $(dst)=$(src); if ($(dst)==$(src)) $(retval)=0; else if ($(src)<$(dst)) $(retval)=-1; else $(retval)=1; enum attribute enum GWEN_XMLNode_SetCharValue($(db), "$(name)", $(enum_tostring_fn)($(src))); enum attribute enum attribute GWEN_XMLNode_SetProperty($(db), "$(name)", $(enum_tostring_fn)($(src))); enum GWEN_XMLNode_SetIntValue($(db), "$(name)", $(src)); enum attribute enum { const char *s; s=GWEN_XMLNode_GetCharValue($(db), "$(name)", NULL); if (s) $(dst)=$(enum_fromstring_fn)(s); else $(dst)=$(default); } enum attribute enum attribute { const char *s; s=GWEN_XMLNode_GetProperty($(db), "$(name)", NULL); if (s) $(dst)=$(enum_fromstring_fn)(s); else $(dst)=$(default); } enum $(dst)=GWEN_XMLNode_GetIntValue($(db), "$(name)", $(default)); enum enum $(retval)=GWEN_DB_SetCharValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(enum_tostring_fn)($(src))); enum $(retval)=GWEN_DB_SetIntValue($(db), GWEN_DB_FLAGS_OVERWRITE_VARS, "$(name)", $(src)); enum enum { const char *s; s=GWEN_DB_GetCharValue($(db), "$(name)", 0, NULL); if (s) $(dst)=$(enum_fromstring_fn)(s); else $(dst)=$(default); } enum $(dst)=GWEN_DB_GetIntValue($(db), "$(name)", 0, $(default)); { int64_t v64=(int64_t) ($(src)); $(retval)=AQDB_Object_SetFieldInt64($(db), $(fieldId), v64); } { int64_t v64; $(retval)=AQDB_Object_GetFieldInt64($(db), $(fieldId), &v64); if ($(retval)>=0) $(dst)=(int) v64; } { char numbuf[32]; snprintf(numbuf, sizeof(numbuf)-1, "%d", $(src)); numbuf[sizeof(numbuf)-1]=0; GWEN_Buffer_AppendString($(buffer), numbuf); } 0 0 gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_multicache_type.tm20000644000175000017500000000303113377356333022347 00000000000000 GWEN_MULTICACHE_TYPE GWEN_MultiCache_Type $(dst)=$(preset); $(member_prefix)_free($(src)); $(src)=NULL; $(dst)=$(src); NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/c/gwen_multicache.tm20000644000175000017500000000301213377356324021305 00000000000000 GWEN_MULTICACHE GWEN_MultiCache $(dst)=$(preset); $(member_prefix)_free($(src)); $(src)=NULL; $(dst)=$(src); NULL NULL const dup const const gwenhywfar-5.12.0/tools/typemaker2/types/Makefile.in0000664000175000017500000006013614730344662017356 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 = tools/typemaker2/types ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ SUBDIRS = c 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) --gnu tools/typemaker2/types/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/typemaker2/types/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 clean-libtool 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 mostlyclean-libtool 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 clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ 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 mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: # 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: gwenhywfar-5.12.0/tools/typemaker2/types/Makefile.am0000644000175000017500000000002413142134464017322 00000000000000SUBDIRS=c sources: gwenhywfar-5.12.0/tools/typemaker2/tm_slot.xml0000644000175000017500000000327413142134464016337 00000000000000 TYPEMAKER2_SLOT Typemaker2_Slot tm_slot with_list1 with_list2 with_xml NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const 0 0 public with_flags gwenhywfar-5.12.0/tools/typemaker2/tm_member.c0000644000175000017500000003633713312252201016242 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_member_p.h" #include "tm_util.h" #include #include #include GWEN_LIST_FUNCTIONS(TYPEMAKER2_MEMBER, Typemaker2_Member) TYPEMAKER2_MEMBER *Typemaker2_Member_new() { TYPEMAKER2_MEMBER *tm; GWEN_NEW_OBJECT(TYPEMAKER2_MEMBER, tm); tm->refCount=1; GWEN_LIST_INIT(TYPEMAKER2_MEMBER, tm); tm->codeDefs=Typemaker2_Code_List_new(); return tm; } void Typemaker2_Member_free(TYPEMAKER2_MEMBER *tm) { if (tm) { assert(tm->refCount); if (tm->refCount==1) { GWEN_LIST_FINI(TYPEMAKER2_MEMBER, tm); Typemaker2_Code_List_free(tm->codeDefs); free(tm->name); free(tm->typeName); free(tm->elementName); free(tm->descr); free(tm->fieldId); free(tm->defaultValue); free(tm->presetValue); free(tm->aedb_type); free(tm->enumId); free(tm->defineId); tm->refCount=0; GWEN_FREE_OBJECT(tm); } else { tm->refCount--; } } } void Typemaker2_Member_Attach(TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); tm->refCount++; } const char *Typemaker2_Member_GetName(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->name; } void Typemaker2_Member_SetName(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->name); if (s && *s) tm->name=strdup(s); else tm->name=NULL; } const char *Typemaker2_Member_GetTypeName(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->typeName; } void Typemaker2_Member_SetTypeName(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->typeName); if (s && *s) tm->typeName=strdup(s); else tm->typeName=NULL; } const char *Typemaker2_Member_GetElementName(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->elementName; } void Typemaker2_Member_SetElementName(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->elementName); if (s && *s) tm->elementName=strdup(s); else tm->elementName=NULL; } const char *Typemaker2_Member_GetDescription(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->descr; } void Typemaker2_Member_SetDescription(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->descr); if (s && *s) tm->descr=strdup(s); else tm->descr=NULL; } const char *Typemaker2_Member_GetFieldId(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->fieldId; } void Typemaker2_Member_SetFieldId(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->fieldId); if (s && *s) tm->fieldId=strdup(s); else tm->fieldId=NULL; } const char *Typemaker2_Member_GetEnumId(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->enumId; } void Typemaker2_Member_SetEnumId(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->enumId); if (s && *s) tm->enumId=strdup(s); else tm->enumId=NULL; } const char *Typemaker2_Member_GetDefineId(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->defineId; } void Typemaker2_Member_SetDefineId(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->defineId); if (s && *s) tm->defineId=strdup(s); else tm->defineId=NULL; } uint32_t Typemaker2_Member_GetFlags(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->flags==0 && tm->typePtr) return Typemaker2_Type_GetFlags(tm->typePtr); return tm->flags; } void Typemaker2_Member_SetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i) { assert(tm); assert(tm->refCount); tm->flags=i; } uint32_t Typemaker2_Member_GetSetFlags(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->setFlags==0 && tm->typePtr) return Typemaker2_Type_GetSetFlags(tm->typePtr); return tm->setFlags; } void Typemaker2_Member_SetSetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i) { assert(tm); assert(tm->refCount); tm->setFlags=i; } uint32_t Typemaker2_Member_GetGetFlags(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->getFlags==0 && tm->typePtr) return Typemaker2_Type_GetGetFlags(tm->typePtr); return tm->getFlags; } void Typemaker2_Member_SetGetFlags(TYPEMAKER2_MEMBER *tm, uint32_t i) { assert(tm); assert(tm->refCount); tm->getFlags=i; } uint32_t Typemaker2_Member_GetDupFlags(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->dupFlags==0 && tm->typePtr) return Typemaker2_Type_GetDupFlags(tm->typePtr); return tm->dupFlags; } void Typemaker2_Member_SetDupFlags(TYPEMAKER2_MEMBER *tm, uint32_t i) { assert(tm); assert(tm->refCount); tm->dupFlags=i; } uint32_t Typemaker2_Member_GetCopyFlags(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->copyFlags==0 && tm->typePtr) return Typemaker2_Type_GetCopyFlags(tm->typePtr); return tm->copyFlags; } void Typemaker2_Member_SetCopyFlags(TYPEMAKER2_MEMBER *tm, uint32_t i) { assert(tm); assert(tm->refCount); tm->copyFlags=i; } int Typemaker2_Member_GetAccess(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->access==TypeMaker2_Access_Unknown && tm->typePtr) return Typemaker2_Type_GetAccess(tm->typePtr); return tm->access; } void Typemaker2_Member_SetAccess(TYPEMAKER2_MEMBER *tm, int i) { assert(tm); assert(tm->refCount); tm->access=i; } int Typemaker2_Member_GetMaxLen(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->maxLen; } void Typemaker2_Member_SetMaxLen(TYPEMAKER2_MEMBER *tm, int i) { assert(tm); assert(tm->refCount); tm->maxLen=i; } const char *Typemaker2_Member_GetDefaultValue(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->defaultValue==NULL && tm->typePtr) return Typemaker2_Type_GetDefaultValue(tm->typePtr); return tm->defaultValue; } void Typemaker2_Member_SetDefaultValue(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->defaultValue); if (s) tm->defaultValue=strdup(s); else tm->defaultValue=NULL; } const char *Typemaker2_Member_GetPresetValue(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->presetValue==NULL && tm->typePtr) return Typemaker2_Type_GetPresetValue(tm->typePtr); return tm->presetValue; } void Typemaker2_Member_SetPresetValue(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->presetValue); if (s) tm->presetValue=strdup(s); else tm->presetValue=NULL; } const char *Typemaker2_Member_GetAqDbType(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); if (tm->aedb_type==NULL && tm->typePtr) return Typemaker2_Type_GetAqDbType(tm->typePtr); return tm->aedb_type; } void Typemaker2_Member_SetAqDbType(TYPEMAKER2_MEMBER *tm, const char *s) { assert(tm); assert(tm->refCount); free(tm->aedb_type); if (s) tm->aedb_type=strdup(s); else tm->aedb_type=NULL; } TYPEMAKER2_TYPE *Typemaker2_Member_GetTypePtr(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->typePtr; } void Typemaker2_Member_SetTypePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_TYPE *ty) { assert(tm); assert(tm->refCount); tm->typePtr=ty; } TYPEMAKER2_ENUM *Typemaker2_Member_GetEnumPtr(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->enumPtr; } void Typemaker2_Member_SetEnumPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_ENUM *te) { assert(tm); assert(tm->refCount); tm->enumPtr=te; } TYPEMAKER2_DEFINE *Typemaker2_Member_GetDefinePtr(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->definePtr; } void Typemaker2_Member_SetDefinePtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_DEFINE *td) { assert(tm); assert(tm->refCount); tm->definePtr=td; } TYPEMAKER2_GROUP *Typemaker2_Member_GetGroupPtr(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->groupPtr; } void Typemaker2_Member_SetGroupPtr(TYPEMAKER2_MEMBER *tm, TYPEMAKER2_GROUP *gr) { assert(tm); assert(tm->refCount); tm->groupPtr=gr; } int Typemaker2_Member_GetMemberPosition(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->memberPosition; } void Typemaker2_Member_SetMemberPosition(TYPEMAKER2_MEMBER *tm, int i) { assert(tm); assert(tm->refCount); tm->memberPosition=i; } TYPEMAKER2_CODE_LIST *Typemaker2_Member_GetCodeDefs(const TYPEMAKER2_MEMBER *tm) { assert(tm); assert(tm->refCount); return tm->codeDefs; } int Typemaker2_Member_readXml(TYPEMAKER2_MEMBER *tm, GWEN_XMLNODE *node, const char *wantedLang) { const char *s; GWEN_XMLNODE *langNode=NULL; GWEN_XMLNODE *nn; assert(tm); assert(tm->refCount); if (wantedLang) langNode=GWEN_XMLNode_FindFirstTag(node, "lang", "id", wantedLang); if (langNode==NULL) langNode=node; s=GWEN_XMLNode_GetProperty(node, "name", NULL); if (s==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Member has no id"); return GWEN_ERROR_BAD_DATA; } Typemaker2_Member_SetName(tm, s); s=GWEN_XMLNode_GetProperty(node, "type", NULL); if (s==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Member has no type"); return GWEN_ERROR_BAD_DATA; } Typemaker2_Member_SetTypeName(tm, s); s=GWEN_XMLNode_GetProperty(node, "elementName", NULL); Typemaker2_Member_SetElementName(tm, s); s=GWEN_XMLNode_GetProperty(node, "enum", NULL); Typemaker2_Member_SetEnumId(tm, s); s=GWEN_XMLNode_GetProperty(node, "define", NULL); Typemaker2_Member_SetDefineId(tm, s); s=GWEN_XMLNode_GetProperty(node, "maxlen", NULL); if (s && *s) { int i; if (1==sscanf(s, "%i", &i)) tm->maxLen=i; else { DBG_ERROR(GWEN_LOGDOMAIN, "Bad value for maxlen [%s]", s); return GWEN_ERROR_BAD_DATA; } } /* read flags */ s=GWEN_XMLNode_GetCharValue(node, "flags", NULL); if (s && *s) Typemaker2_Member_SetFlags(tm, Typemaker2_FlagsFromString(s)); /* read setflags */ s=GWEN_XMLNode_GetCharValue(node, "setflags", NULL); if (s && *s) Typemaker2_Member_SetSetFlags(tm, Typemaker2_FlagsFromString(s)); /* read getflags */ s=GWEN_XMLNode_GetCharValue(node, "getflags", NULL); if (s && *s) Typemaker2_Member_SetGetFlags(tm, Typemaker2_FlagsFromString(s)); /* read dupflags */ s=GWEN_XMLNode_GetCharValue(node, "dupflags", NULL); if (s && *s) Typemaker2_Member_SetDupFlags(tm, Typemaker2_FlagsFromString(s)); /* read copyflags */ s=GWEN_XMLNode_GetCharValue(node, "copyflags", NULL); if (s && *s) Typemaker2_Member_SetCopyFlags(tm, Typemaker2_FlagsFromString(s)); /* read access */ s=GWEN_XMLNode_GetCharValue(node, "access", NULL); if (s && *s) { int i=Typemaker2_AccessFromString(s); if (i==TypeMaker2_Access_Unknown) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s); return GWEN_ERROR_BAD_DATA; } Typemaker2_Member_SetAccess(tm, i); } /* read default value */ s=GWEN_XMLNode_GetCharValue(node, "default", NULL); if (s && *s) Typemaker2_Member_SetDefaultValue(tm, s); /* read preset value */ s=GWEN_XMLNode_GetCharValue(node, "preset", NULL); if (s && *s) Typemaker2_Member_SetPresetValue(tm, s); /* read AEDB type */ s=GWEN_XMLNode_GetCharValue(node, "aedb_type", NULL); if (s && *s) Typemaker2_Member_SetAqDbType(tm, s); /* read description */ nn=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL); if (nn) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(nn, tbuf, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_COMMENTS); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); } else { Typemaker2_Member_SetDescription(tm, GWEN_Buffer_GetStart(tbuf)); } GWEN_Buffer_free(tbuf); } /* read codedefs */ nn=GWEN_XMLNode_FindFirstTag(langNode, "codedefs", NULL, NULL); if (nn) { GWEN_XMLNODE *nnn; nnn=GWEN_XMLNode_FindFirstTag(nn, "codedef", NULL, NULL); while (nnn) { TYPEMAKER2_CODE *tc; tc=Typemaker2_Code_fromXml(nnn); if (tc) { const char *s; s=Typemaker2_Code_GetMemberFlagsMask(tc); if (s && *s) Typemaker2_Code_SetMemberFlagsMaskInt(tc, Typemaker2_FlagsFromString(s)); s=Typemaker2_Code_GetMemberFlagsValue(tc); if (s && *s) Typemaker2_Code_SetMemberFlagsValueInt(tc, Typemaker2_FlagsFromString(s)); } Typemaker2_Code_List_Add(tc, tm->codeDefs); nnn=GWEN_XMLNode_FindNextTag(nnn, "codedef", NULL, NULL); } } return 0; } void Typemaker2_Member_Dump(TYPEMAKER2_MEMBER *tm, FILE *f, int indent) { if (tm) { int i; const char *s1, *s2; for (i=0; iname)?(tm->name):""); for (i=0; itypeName)?(tm->typeName):""); for (i=0; ielementName)?(tm->elementName):""); for (i=0; ifieldId)?(tm->fieldId):""); for (i=0; iaccess, Typemaker2_Member_GetAccess(tm)); for (i=0; iflags, Typemaker2_Member_GetFlags(tm)); for (i=0; isetFlags, Typemaker2_Member_GetSetFlags(tm)); for (i=0; igetFlags, Typemaker2_Member_GetGetFlags(tm)); for (i=0; idupFlags, Typemaker2_Member_GetDupFlags(tm)); for (i=0; idefaultValue; s2=Typemaker2_Member_GetDefaultValue(tm); fprintf(f, "Default : %s [%s]\n", s1?s1:"", s2?s2:""); for (i=0; ipresetValue; s2=Typemaker2_Member_GetPresetValue(tm); fprintf(f, "Preset : %s [%s]\n", s1?s1:"", s2?s2:""); for (i=0; imemberPosition); for (i=0; idescr)?(tm->descr):""); } } gwenhywfar-5.12.0/tools/typemaker2/tm_slot.c0000644000175000017500000001544313142134476015765 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_slot.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_slot_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_SLOT, Typemaker2_Slot) GWEN_LIST2_FUNCTIONS(TYPEMAKER2_SLOT, Typemaker2_Slot) TYPEMAKER2_SLOT *Typemaker2_Slot_new(void) { TYPEMAKER2_SLOT *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_SLOT, p_struct) GWEN_LIST_INIT(TYPEMAKER2_SLOT, p_struct) /* members */ p_struct->name=NULL; p_struct->paramType1=NULL; p_struct->paramType2=NULL; p_struct->flags=0; /* virtual functions */ return p_struct; } void Typemaker2_Slot_free(TYPEMAKER2_SLOT *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_SLOT, p_struct) /* members */ free(p_struct->name); free(p_struct->paramType1); free(p_struct->paramType2); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_SLOT *Typemaker2_Slot_dup(const TYPEMAKER2_SLOT *p_src) { TYPEMAKER2_SLOT *p_struct; assert(p_src); p_struct=Typemaker2_Slot_new(); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); p_struct->paramType1=NULL; } if (p_src->paramType1) { p_struct->paramType1=strdup(p_src->paramType1); } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); p_struct->paramType2=NULL; } if (p_src->paramType2) { p_struct->paramType2=strdup(p_src->paramType2); } /* member "flags" */ p_struct->flags=p_src->flags; return p_struct; } TYPEMAKER2_SLOT *Typemaker2_Slot_copy(TYPEMAKER2_SLOT *p_struct, const TYPEMAKER2_SLOT *p_src) { assert(p_struct); assert(p_src); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); p_struct->paramType1=NULL; } if (p_src->paramType1) { p_struct->paramType1=strdup(p_src->paramType1); } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); p_struct->paramType2=NULL; } if (p_src->paramType2) { p_struct->paramType2=strdup(p_src->paramType2); } /* member "flags" */ p_struct->flags=p_src->flags; return p_struct; } const char *Typemaker2_Slot_GetName(const TYPEMAKER2_SLOT *p_struct) { assert(p_struct); return p_struct->name; } const char *Typemaker2_Slot_GetParamType1(const TYPEMAKER2_SLOT *p_struct) { assert(p_struct); return p_struct->paramType1; } const char *Typemaker2_Slot_GetParamType2(const TYPEMAKER2_SLOT *p_struct) { assert(p_struct); return p_struct->paramType2; } uint32_t Typemaker2_Slot_GetFlags(const TYPEMAKER2_SLOT *p_struct) { assert(p_struct); return p_struct->flags; } void Typemaker2_Slot_SetName(TYPEMAKER2_SLOT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->name) { free(p_struct->name); } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void Typemaker2_Slot_SetParamType1(TYPEMAKER2_SLOT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->paramType1) { free(p_struct->paramType1); } if (p_src) { p_struct->paramType1=strdup(p_src); } else { p_struct->paramType1=NULL; } } void Typemaker2_Slot_SetParamType2(TYPEMAKER2_SLOT *p_struct, const char *p_src) { assert(p_struct); if (p_struct->paramType2) { free(p_struct->paramType2); } if (p_src) { p_struct->paramType2=strdup(p_src); } else { p_struct->paramType2=NULL; } } void Typemaker2_Slot_SetFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags=p_src; } void Typemaker2_Slot_AddFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void Typemaker2_Slot_SubFlags(TYPEMAKER2_SLOT *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } TYPEMAKER2_SLOT_LIST *Typemaker2_Slot_List_dup(const TYPEMAKER2_SLOT_LIST *p_src) { TYPEMAKER2_SLOT_LIST *p_dest; TYPEMAKER2_SLOT *p_elem; assert(p_src); p_dest=Typemaker2_Slot_List_new(); p_elem=Typemaker2_Slot_List_First(p_src); while (p_elem) { TYPEMAKER2_SLOT *p_cpy; p_cpy=Typemaker2_Slot_dup(p_elem); Typemaker2_Slot_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Slot_List_Next(p_elem); } return p_dest; } void Typemaker2_Slot_ReadXml(TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ if (p_struct->name) { free(p_struct->name); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "name", NULL); if (s) p_struct->name=strdup(s); } if (p_struct->name==NULL) { /* member "name" is volatile, just presetting */ p_struct->name=NULL; } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "paramType1", NULL); if (s) p_struct->paramType1=strdup(s); } if (p_struct->paramType1==NULL) { /* member "paramType1" is volatile, just presetting */ p_struct->paramType1=NULL; } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "paramType2", NULL); if (s) p_struct->paramType2=strdup(s); } if (p_struct->paramType2==NULL) { /* member "paramType2" is volatile, just presetting */ p_struct->paramType2=NULL; } /* member "flags" */ p_struct->flags=GWEN_XMLNode_GetIntValue(p_db, "flags", 0); } void Typemaker2_Slot_WriteXml(const TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ GWEN_XMLNode_SetProperty(p_db, "name", p_struct->name); /* member "paramType1" */ GWEN_XMLNode_SetProperty(p_db, "paramType1", p_struct->paramType1); /* member "paramType2" */ GWEN_XMLNode_SetProperty(p_db, "paramType2", p_struct->paramType2); /* member "flags" */ GWEN_XMLNode_SetIntValue(p_db, "flags", p_struct->flags); } void Typemaker2_Slot_toXml(const TYPEMAKER2_SLOT *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Slot_WriteXml(p_struct, p_db); } TYPEMAKER2_SLOT *Typemaker2_Slot_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_SLOT *p_struct; p_struct=Typemaker2_Slot_new(); Typemaker2_Slot_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-5.12.0/tools/typemaker2/tm_slot_p.h0000644000175000017500000000113213142134464016274 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_slot.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_SLOT_P_H #define TM_SLOT_P_H #include "tm_slot.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_SLOT { GWEN_LIST_ELEMENT(TYPEMAKER2_SLOT) char *name; char *paramType1; char *paramType2; uint32_t flags; }; #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/tm_type.h0000664000175000017500000002170414460564441015774 00000000000000/*************************************************************************** begin : Wed Jul 01 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_TYPE_H #define TYPEMAKER2_TYPE_H #include #include #include #include typedef struct TYPEMAKER2_TYPE TYPEMAKER2_TYPE; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_TYPE, Typemaker2_Type) GWEN_LIST2_FUNCTION_DEFS(TYPEMAKER2_TYPE, Typemaker2_Type) /* don't forget to add new flags to tm_util.c ! */ /** special value which is used to overwrite flags from extended types */ #define TYPEMAKER2_FLAGS_NONE 0x00000001 #define TYPEMAKER2_FLAGS_OWN 0x00000002 #define TYPEMAKER2_FLAGS_VOLATILE 0x00000004 #define TYPEMAKER2_FLAGS_CONST 0x00000008 #define TYPEMAKER2_FLAGS_STATIC 0x00000010 #define TYPEMAKER2_FLAGS_DUP 0x00000020 #define TYPEMAKER2_FLAGS_NODUP 0x00000040 #define TYPEMAKER2_FLAGS_ATTRIBUTE 0x00000080 #define TYPEMAKER2_FLAGS_ENUM 0x00000100 #define TYPEMAKER2_FLAGS_DEFINE 0x00000200 #define TYPEMAKER2_FLAGS_ASSIGN 0x00000400 #define TYPEMAKER2_FLAGS_OMIT 0x00000800 #define TYPEMAKER2_FLAGS_COPY 0x00001000 #define TYPEMAKER2_FLAGS_NOCOPY 0x00002000 #define TYPEMAKER2_FLAGS_SORTBYMEMBER 0x00004000 #define TYPEMAKER2_FLAGS_NOCONSTOBJECT 0x00008000 #define TYPEMAKER2_FLAGS_WITH_GETBYMEMBER 0x00010000 #define TYPEMAKER2_FLAGS_WITH_HASH 0x00020000 #define TYPEMAKER2_FLAGS_WITH_HASHNUM 0x00040000 #define TYPEMAKER2_FLAGS_WITH_FLAGS 0x00080000 #define TYPEMAKER2_FLAGS_GWEN_CB 0x00100000 #define TYPEMAKER2_TYPEFLAGS_WITH_DB 0x00000001 #define TYPEMAKER2_TYPEFLAGS_WITH_XML 0x00000002 #define TYPEMAKER2_TYPEFLAGS_WITH_OBJECT 0x00000004 #define TYPEMAKER2_TYPEFLAGS_WITH_LIST1 0x00000008 #define TYPEMAKER2_TYPEFLAGS_WITH_LIST2 0x00000010 #define TYPEMAKER2_TYPEFLAGS_WITH_INHERIT 0x00000020 #define TYPEMAKER2_TYPEFLAGS_WITH_IDMAP 0x00000040 #define TYPEMAKER2_TYPEFLAGS_WITH_TREE 0x00000080 #define TYPEMAKER2_TYPEFLAGS_WITH_REFCOUNT 0x00000100 #define TYPEMAKER2_TYPEFLAGS_WITH_SIGNALS 0x00000800 #define TYPEMAKER2_TYPEFLAGS_WITH_SLOTS 0x00001000 #define TYPEMAKER2_TYPEFLAGS_WITH_CACHEFNS 0x00002000 #define TYPEMAKER2_TYPEFLAGS_DUP 0x00004000 #define TYPEMAKER2_TYPEFLAGS_NODUP 0x00008000 #define TYPEMAKER2_TYPEFLAGS_COPY 0x00010000 #define TYPEMAKER2_TYPEFLAGS_NOCOPY 0x00020000 #define TYPEMAKER2_TYPEFLAGS_WITH_HASH 0x00040000 #define TYPEMAKER2_TYPEFLAGS_WITH_CONSTLIST2 0x00080000 #define TYPEMAKER2_TYPEFLAGS_WITH_TREE2 0x00100000 enum { TypeMaker2_Type_Unknown=0, TypeMaker2_Type_Opaque, TypeMaker2_Type_Pointer, TypeMaker2_Type_Array }; enum { TypeMaker2_Access_Unknown=0, TypeMaker2_Access_Public, TypeMaker2_Access_Protected, TypeMaker2_Access_Library, TypeMaker2_Access_Private }; #include "tm_member.h" #include "tm_header.h" #include "tm_enum.h" #include "tm_define.h" #include "tm_code.h" #include "tm_inline.h" #include "tm_virtualfn.h" #include "tm_signal.h" #include "tm_slot.h" #include "tm_group.h" TYPEMAKER2_TYPE *Typemaker2_Type_new(); void Typemaker2_Type_free(TYPEMAKER2_TYPE *ty); void Typemaker2_Type_Attach(TYPEMAKER2_TYPE *ty); const char *Typemaker2_Type_GetName(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetName(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s); int Typemaker2_Type_GetType(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetType(TYPEMAKER2_TYPE *ty, int i); const char *Typemaker2_Type_GetAqDbType(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetAqDbType(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetBaseFileName(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetBaseFileName(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetFreeHook(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetFreeHook(TYPEMAKER2_TYPE *ty, const char *s); uint32_t Typemaker2_Type_GetFlags(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetFlags(TYPEMAKER2_TYPE *ty, uint32_t i); uint32_t Typemaker2_Type_GetSetFlags(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetSetFlags(TYPEMAKER2_TYPE *ty, uint32_t i); uint32_t Typemaker2_Type_GetGetFlags(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetGetFlags(TYPEMAKER2_TYPE *ty, uint32_t i); uint32_t Typemaker2_Type_GetDupFlags(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetDupFlags(TYPEMAKER2_TYPE *ty, uint32_t i); uint32_t Typemaker2_Type_GetCopyFlags(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetCopyFlags(TYPEMAKER2_TYPE *ty, uint32_t i); int Typemaker2_Type_GetAccess(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetAccess(TYPEMAKER2_TYPE *ty, int i); int Typemaker2_Type_GetStructAccess(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetStructAccess(TYPEMAKER2_TYPE *ty, int i); int Typemaker2_Type_GetUsePrivateConstructor(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetUsePrivateConstructor(TYPEMAKER2_TYPE *ty, int i); const char *Typemaker2_Type_GetDescription(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetDescription(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetDefaultValue(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetDefaultValue(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetPresetValue(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetPresetValue(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetIdentifier(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetIdentifier(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetPrefix(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetPrefix(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetInherits(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetInherits(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetBaseType(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetBaseType(TYPEMAKER2_TYPE *ty, const char *s); const char *Typemaker2_Type_GetExtends(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetExtends(TYPEMAKER2_TYPE *ty, const char *s); int Typemaker2_Type_GetPack(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetPack(TYPEMAKER2_TYPE *ty, int i); TYPEMAKER2_MEMBER_LIST *Typemaker2_Type_GetMembers(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_HEADER_LIST *Typemaker2_Type_GetHeaders(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_ENUM_LIST *Typemaker2_Type_GetEnums(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_DEFINE_LIST *Typemaker2_Type_GetDefines(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_CODE_LIST *Typemaker2_Type_GetCodeDefs(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_INLINE_LIST *Typemaker2_Type_GetInlines(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_VIRTUALFN_LIST *Typemaker2_Type_GetVirtualFns(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_SIGNAL_LIST *Typemaker2_Type_GetSignals(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_SLOT_LIST *Typemaker2_Type_GetSlots(const TYPEMAKER2_TYPE *ty); TYPEMAKER2_GROUP_TREE *Typemaker2_Type_GetGroupTree(const TYPEMAKER2_TYPE *ty); int Typemaker2_Type_GetNonVolatileMemberCount(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetNonVolatileMemberCount(TYPEMAKER2_TYPE *ty, int i); TYPEMAKER2_TYPE *Typemaker2_Type_GetExtendsPtr(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetExtendsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p); TYPEMAKER2_TYPE *Typemaker2_Type_GetBaseTypePtr(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetBaseTypePtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p); TYPEMAKER2_TYPE *Typemaker2_Type_GetInheritsPtr(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetInheritsPtr(TYPEMAKER2_TYPE *ty, TYPEMAKER2_TYPE *p); const char *Typemaker2_Type_GetFieldCountId(const TYPEMAKER2_TYPE *ty); void Typemaker2_Type_SetFieldCountId(TYPEMAKER2_TYPE *ty, const char *s); TYPEMAKER2_ENUM *Typemaker2_Type_FindEnum(TYPEMAKER2_TYPE *ty, const char *s); TYPEMAKER2_CODE *Typemaker2_Type_FindCodeForMember(const TYPEMAKER2_TYPE *ty, const TYPEMAKER2_MEMBER *tm, const char *id); int Typemaker2_Type_readXml(TYPEMAKER2_TYPE *ty, GWEN_XMLNODE *node, const char *wantedLang); void Typemaker2_Type_Dump(TYPEMAKER2_TYPE *ty, FILE *f, int indent); #endif gwenhywfar-5.12.0/tools/typemaker2/tm_item.c0000644000175000017500000001104413142134476015733 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_item.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_item_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_ITEM, Typemaker2_Item) GWEN_LIST2_FUNCTIONS(TYPEMAKER2_ITEM, Typemaker2_Item) TYPEMAKER2_ITEM *Typemaker2_Item_new(void) { TYPEMAKER2_ITEM *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_ITEM, p_struct) GWEN_LIST_INIT(TYPEMAKER2_ITEM, p_struct) /* members */ p_struct->name=NULL; p_struct->value=NULL; /* virtual functions */ return p_struct; } void Typemaker2_Item_free(TYPEMAKER2_ITEM *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_ITEM, p_struct) /* members */ free(p_struct->name); free(p_struct->value); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_ITEM *Typemaker2_Item_dup(const TYPEMAKER2_ITEM *p_src) { TYPEMAKER2_ITEM *p_struct; assert(p_src); p_struct=Typemaker2_Item_new(); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "value" */ if (p_struct->value) { free(p_struct->value); p_struct->value=NULL; } if (p_src->value) { p_struct->value=strdup(p_src->value); } return p_struct; } TYPEMAKER2_ITEM *Typemaker2_Item_copy(TYPEMAKER2_ITEM *p_struct, const TYPEMAKER2_ITEM *p_src) { assert(p_struct); assert(p_src); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "value" */ if (p_struct->value) { free(p_struct->value); p_struct->value=NULL; } if (p_src->value) { p_struct->value=strdup(p_src->value); } return p_struct; } const char *Typemaker2_Item_GetName(const TYPEMAKER2_ITEM *p_struct) { assert(p_struct); return p_struct->name; } const char *Typemaker2_Item_GetValue(const TYPEMAKER2_ITEM *p_struct) { assert(p_struct); return p_struct->value; } void Typemaker2_Item_SetName(TYPEMAKER2_ITEM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->name) { free(p_struct->name); } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void Typemaker2_Item_SetValue(TYPEMAKER2_ITEM *p_struct, const char *p_src) { assert(p_struct); if (p_struct->value) { free(p_struct->value); } if (p_src) { p_struct->value=strdup(p_src); } else { p_struct->value=NULL; } } TYPEMAKER2_ITEM_LIST *Typemaker2_Item_List_dup(const TYPEMAKER2_ITEM_LIST *p_src) { TYPEMAKER2_ITEM_LIST *p_dest; TYPEMAKER2_ITEM *p_elem; assert(p_src); p_dest=Typemaker2_Item_List_new(); p_elem=Typemaker2_Item_List_First(p_src); while (p_elem) { TYPEMAKER2_ITEM *p_cpy; p_cpy=Typemaker2_Item_dup(p_elem); Typemaker2_Item_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Item_List_Next(p_elem); } return p_dest; } void Typemaker2_Item_ReadXml(TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ if (p_struct->name) { free(p_struct->name); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "name", NULL); if (s) p_struct->name=strdup(s); } if (p_struct->name==NULL) { /* member "name" is volatile, just presetting */ p_struct->name=NULL; } /* member "value" */ if (p_struct->value) { free(p_struct->value); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "value", NULL); if (s) p_struct->value=strdup(s); } if (p_struct->value==NULL) { /* member "value" is volatile, just presetting */ p_struct->value=NULL; } } void Typemaker2_Item_WriteXml(const TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ GWEN_XMLNode_SetProperty(p_db, "name", p_struct->name); /* member "value" */ GWEN_XMLNode_SetProperty(p_db, "value", p_struct->value); } void Typemaker2_Item_toXml(const TYPEMAKER2_ITEM *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Item_WriteXml(p_struct, p_db); } TYPEMAKER2_ITEM *Typemaker2_Item_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_ITEM *p_struct; p_struct=Typemaker2_Item_new(); Typemaker2_Item_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-5.12.0/tools/typemaker2/tm_builder_p.h0000644000175000017500000000634413142134476016756 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_BUILDER_P_H #define TYPEMAKER2_BUILDER_P_H #include "tm_builder.h" struct TYPEMAKER2_BUILDER { GWEN_INHERIT_ELEMENT(TYPEMAKER2_BUILDER) GWEN_STRINGLIST *declarationsPublic; GWEN_STRINGLIST *declarationsLibrary; GWEN_STRINGLIST *declarationsProtected; GWEN_STRINGLIST *declarationsPrivate; GWEN_STRINGLIST *code; char *fileNamePublic; char *fileNameLibrary; char *fileNameProtected; char *fileNamePrivate; char *fileNameCode; char *sourceFileName; char *destFolder; TYPEMAKER2_TYPEMANAGER *typeManager; TYPEMAKER2_BUILDER_BUILD_FN buildFn; }; GWEN_DB_NODE *Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst); int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf); int Typemaker2_Builder_Invoke_Fn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *code, const char *src, const char *dst, GWEN_BUFFER *dbuf); int Typemaker2_Builder_WriteFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName, GWEN_STRINGLIST *sl, int acc); int Typemaker2_Builder_WriteTypedefFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName); int Typemaker2_Builder_WriteTypedefFile_List1(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName); int Typemaker2_Builder_WriteTypedefFile_List2(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName); int Typemaker2_Builder_WriteTypedefFile_Tree(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName); int Typemaker2_Builder_WriteTypedefFile_IdMap(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName); int Typemaker2_Builder_DetermineOutFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/build.c0000644000175000017500000002004713440562630015375 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "typemaker2.h" #include "tm_typemanager.h" #include "tm_builder_c.h" #include #include #include int buildFile2(GWEN_DB_NODE *dbArgs, const char *fname) { TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_BUILDER *tb=NULL; TYPEMAKER2_TYPE *ty; GWEN_STRINGLIST *sl; TYPEMAKER2_TYPE_LIST2 *tlist; TYPEMAKER2_TYPE_LIST2_ITERATOR *it; int noDefs=0; const char *s; int i; int rv; tym=Typemaker2_TypeManager_new(); s=GWEN_DB_GetCharValue(dbArgs, "api", 0, NULL); if (s && *s) Typemaker2_TypeManager_SetApiDeclaration(tym, s); s=GWEN_DB_GetCharValue(dbArgs, "language", 0, "c"); if (s && *s) { Typemaker2_TypeManager_SetLanguage(tym, s); if (strcasecmp(s, "c")==0) { tb=Typemaker2_Builder_C_new(); Typemaker2_Builder_SetTypeManager(tb, tym); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported language [%s]", s); return 1; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Missing language specification"); return 1; } s = GWEN_DB_GetCharValue(dbArgs, "destFolder", 0, NULL); if (s) Typemaker2_Builder_SetDestFolderName(tb, s); Typemaker2_Builder_SetSourceFileName(tb, fname); noDefs=GWEN_DB_GetIntValue(dbArgs, "noDefs", 0, 0); for (i=0; i<99; i++) { s=GWEN_DB_GetCharValue(dbArgs, "include", i, NULL); if (s && *s) Typemaker2_TypeManager_AddFolder(tym, s); else break; } sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_DATADIR); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while (se) { s=GWEN_StringListEntry_Data(se); if (s) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, "/typemaker2/"); s=Typemaker2_TypeManager_GetLanguage(tym); if (s && *s) GWEN_Buffer_AppendString(xbuf, s); Typemaker2_TypeManager_AddFolder(tym, GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } s=GWEN_DB_GetCharValue(dbArgs, "destFolder", 0, NULL); if (s) Typemaker2_Builder_SetDestFolderName(tb, s); tlist=Typemaker2_Type_List2_new(); rv=Typemaker2_TypeManager_LoadTypeFile2(tym, fname, tlist); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to load file [%s] (%d)", fname, rv); return 2; } it=Typemaker2_Type_List2_First(tlist); if (it) { ty=Typemaker2_Type_List2Iterator_Data(it); while (ty) { /* DEBUG */ #if 0 Typemaker2_TypeManager_Dump(tym, stderr, 2); #endif /* build */ rv=Typemaker2_Builder_Build(tb, ty); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } /* only write typedef files */ if (!noDefs) { rv=Typemaker2_Builder_WriteFiles(tb, ty, TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_DEFS); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } } /* handle next type */ ty=Typemaker2_Type_List2Iterator_Next(it); } Typemaker2_Type_List2Iterator_free(it); s=GWEN_DB_GetCharValue(dbArgs, "publicFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNamePublic(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "libraryFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameLibrary(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "protectedFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameProtected(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "privateFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNamePrivate(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "codeFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameCode(tb, s); ty=Typemaker2_Type_List2_GetFront(tlist); rv=Typemaker2_Builder_WriteFiles(tb, ty, TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_TYPE); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } } Typemaker2_Type_List2_free(tlist); return 0; } #if 0 int buildFile(GWEN_DB_NODE *dbArgs, const char *fname) { TYPEMAKER2_TYPEMANAGER *tym; TYPEMAKER2_BUILDER *tb=NULL; TYPEMAKER2_TYPE *ty; GWEN_STRINGLIST *sl; const char *s; int i; int rv; tym=Typemaker2_TypeManager_new(); s=GWEN_DB_GetCharValue(dbArgs, "api", 0, NULL); if (s && *s) Typemaker2_TypeManager_SetApiDeclaration(tym, s); s=GWEN_DB_GetCharValue(dbArgs, "language", 0, "c"); if (s && *s) { Typemaker2_TypeManager_SetLanguage(tym, s); if (strcasecmp(s, "c")==0) { tb=Typemaker2_Builder_C_new(); Typemaker2_Builder_SetTypeManager(tb, tym); } else { DBG_ERROR(GWEN_LOGDOMAIN, "Unsupported language [%s]", s); return 1; } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Missing language specification"); return 1; } Typemaker2_Builder_SetSourceFileName(tb, fname); for (i=0; i<99; i++) { s=GWEN_DB_GetCharValue(dbArgs, "include", i, NULL); if (s && *s) Typemaker2_TypeManager_AddFolder(tym, s); else break; } sl=GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_DATADIR); if (sl) { GWEN_STRINGLISTENTRY *se; se=GWEN_StringList_FirstEntry(sl); while (se) { s=GWEN_StringListEntry_Data(se); if (s) { GWEN_BUFFER *xbuf; xbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, "/typemaker2/"); s=Typemaker2_TypeManager_GetLanguage(tym); if (s && *s) GWEN_Buffer_AppendString(xbuf, s); Typemaker2_TypeManager_AddFolder(tym, GWEN_Buffer_GetStart(xbuf)); GWEN_Buffer_free(xbuf); } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); } s=GWEN_DB_GetCharValue(dbArgs, "publicFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNamePublic(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "libraryFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameLibrary(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "protectedFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameProtected(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "privateFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNamePrivate(tb, s); s=GWEN_DB_GetCharValue(dbArgs, "codeFile", 0, NULL); if (s) Typemaker2_Builder_SetFileNameCode(tb, s); s = GWEN_DB_GetCharValue(dbArgs, "destFolder", 0, NULL); if (s) Typemaker2_Builder_SetDestFolderName(tb, s); ty=Typemaker2_TypeManager_LoadTypeFile(tym, fname); if (ty==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to load file [%s]", fname); return 2; } /* DEBUG */ #if 0 Typemaker2_TypeManager_Dump(tym, stderr, 2); #endif /* build */ rv=Typemaker2_Builder_Build(tb, ty); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } rv=Typemaker2_Builder_WriteFiles(tb, ty, TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_DEFS | TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_TYPE); if (rv<0) { DBG_ERROR(GWEN_LOGDOMAIN, "here (%d)", rv); return 2; } return 0; } #endif int build(GWEN_DB_NODE *dbArgs) { int i; for (i=0; i<99; i++) { const char *fileName; fileName=GWEN_DB_GetCharValue(dbArgs, "params", i, NULL); if (fileName) { int rv=buildFile2(dbArgs, fileName); if (rv != 0) { DBG_ERROR(GWEN_LOGDOMAIN, "Error building type from [%s]", fileName); return 2; } } else { if (i==0) { DBG_ERROR(GWEN_LOGDOMAIN, "No input"); return 1; } } } return 0; } gwenhywfar-5.12.0/tools/typemaker2/tm_util.h0000644000175000017500000000125013314432532015750 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2018 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_UTIL_H #define TYPEMAKER2_UTIL_H #include uint32_t Typemaker2_FlagsFromString(const char *s); uint32_t Typemaker2_TypeFlagsFromString(const char *t); int Typemaker2_AccessFromString(const char *s); #endif gwenhywfar-5.12.0/tools/typemaker2/tm_inline.h0000644000175000017500000000303113142134464016252 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_INLINE_H #define TYPEMAKER2_INLINE_H #include #include typedef struct TYPEMAKER2_INLINE TYPEMAKER2_INLINE; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_INLINE, Typemaker2_Inline) enum { Typemaker2_InlineLocation_Unknown=-1, Typemaker2_InlineLocation_Header=0, Typemaker2_InlineLocation_Code }; TYPEMAKER2_INLINE *Typemaker2_Inline_new(); void Typemaker2_Inline_free(TYPEMAKER2_INLINE *th); void Typemaker2_Inline_Attach(TYPEMAKER2_INLINE *th); const char *Typemaker2_Inline_GetContent(const TYPEMAKER2_INLINE *th); void Typemaker2_Inline_SetContent(TYPEMAKER2_INLINE *th, const char *s); int Typemaker2_Inline_GetAccess(const TYPEMAKER2_INLINE *th); void Typemaker2_Inline_SetAccess(TYPEMAKER2_INLINE *th, int i); int Typemaker2_Inline_GetLocation(const TYPEMAKER2_INLINE *th); void Typemaker2_Inline_SetLocation(TYPEMAKER2_INLINE *th, int i); int Typemaker2_Inline_GetTypeFlagsMask(const TYPEMAKER2_INLINE *th); int Typemaker2_Inline_GetTypeFlagsValue(const TYPEMAKER2_INLINE *th); TYPEMAKER2_INLINE *Typemaker2_Inline_fromXml(GWEN_XMLNODE *node); #endif gwenhywfar-5.12.0/tools/typemaker2/tm_define.h0000644000175000017500000000715213142134464016236 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_define.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_DEFINE_H #define TM_DEFINE_H #ifdef __cplusplus extern "C" { #endif /* needed system headers */ #include #include #include /* pre-headers */ #include "tm_item.h" typedef struct TYPEMAKER2_DEFINE TYPEMAKER2_DEFINE; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_DEFINE, Typemaker2_Define) enum { Typemaker2_Define_Mode_Unknown = -1, Typemaker2_Define_Mode_Sequence = 1, Typemaker2_Define_Mode_BitField }; /* post-headers */ int Typemaker2_Define_Mode_fromString(const char *p_s); const char *Typemaker2_Define_Mode_toString(int p_i); /** Constructor. */ TYPEMAKER2_DEFINE *Typemaker2_Define_new(void); /** Destructor. */ void Typemaker2_Define_free(TYPEMAKER2_DEFINE *p_struct); TYPEMAKER2_DEFINE *Typemaker2_Define_dup(const TYPEMAKER2_DEFINE *p_struct); TYPEMAKER2_DEFINE *Typemaker2_Define_copy(TYPEMAKER2_DEFINE *p_struct, const TYPEMAKER2_DEFINE *p_src); /** Getter. * Use this function to get the member "id" */ const char *Typemaker2_Define_GetId(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "prefix" */ const char *Typemaker2_Define_GetPrefix(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "type" */ const char *Typemaker2_Define_GetType(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "items" */ TYPEMAKER2_ITEM_LIST *Typemaker2_Define_GetItems(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "mode" */ int Typemaker2_Define_GetMode(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "startValue" */ int Typemaker2_Define_GetStartValue(const TYPEMAKER2_DEFINE *p_struct); /** Getter. * Use this function to get the member "lastValue" */ int Typemaker2_Define_GetLastValue(const TYPEMAKER2_DEFINE *p_struct); /** Setter. * Use this function to set the member "id" */ void Typemaker2_Define_SetId(TYPEMAKER2_DEFINE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "prefix" */ void Typemaker2_Define_SetPrefix(TYPEMAKER2_DEFINE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "type" */ void Typemaker2_Define_SetType(TYPEMAKER2_DEFINE *p_struct, const char *p_src); /** Setter. * Use this function to set the member "items" */ void Typemaker2_Define_SetItems(TYPEMAKER2_DEFINE *p_struct, const TYPEMAKER2_ITEM_LIST *p_src); /** Setter. * Use this function to set the member "mode" */ void Typemaker2_Define_SetMode(TYPEMAKER2_DEFINE *p_struct, int p_src); /** Setter. * Use this function to set the member "startValue" */ void Typemaker2_Define_SetStartValue(TYPEMAKER2_DEFINE *p_struct, int p_src); /** Setter. * Use this function to set the member "lastValue" */ void Typemaker2_Define_SetLastValue(TYPEMAKER2_DEFINE *p_struct, int p_src); TYPEMAKER2_DEFINE_LIST *Typemaker2_Define_List_dup(const TYPEMAKER2_DEFINE_LIST *p_src); void Typemaker2_Define_ReadXml(TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Define_WriteXml(const TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db); void Typemaker2_Define_toXml(const TYPEMAKER2_DEFINE *p_struct, GWEN_XMLNODE *p_db); TYPEMAKER2_DEFINE *Typemaker2_Define_fromXml(GWEN_XMLNODE *p_db); #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/tm_builder.c0000664000175000017500000013015314300147217016422 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_builder_p.h" #include "tm_member.h" #include #include #include #include #include #include /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static void setCharValueWithTypePrefix(GWEN_DB_NODE *db, const char *prefix, const char *varName, const char *value); static void addMemberInfoToCallDb(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_DB_NODE *db, int withTypePrefix); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ GWEN_INHERIT_FUNCTIONS(TYPEMAKER2_BUILDER) TYPEMAKER2_BUILDER *Typemaker2_Builder_new() { TYPEMAKER2_BUILDER *tb; GWEN_NEW_OBJECT(TYPEMAKER2_BUILDER, tb); GWEN_INHERIT_INIT(TYPEMAKER2_BUILDER, tb); tb->declarationsPublic=GWEN_StringList_new(); tb->declarationsLibrary=GWEN_StringList_new(); tb->declarationsProtected=GWEN_StringList_new(); tb->declarationsPrivate=GWEN_StringList_new(); tb->code=GWEN_StringList_new(); return tb; } void Typemaker2_Builder_free(TYPEMAKER2_BUILDER *tb) { if (tb) { GWEN_INHERIT_FINI(TYPEMAKER2_BUILDER, tb); GWEN_StringList_free(tb->declarationsPublic); GWEN_StringList_free(tb->declarationsLibrary); GWEN_StringList_free(tb->declarationsProtected); GWEN_StringList_free(tb->declarationsPrivate); GWEN_StringList_free(tb->code); free(tb->fileNamePublic); free(tb->fileNameLibrary); free(tb->fileNameProtected); free(tb->fileNamePrivate); free(tb->fileNameCode); free(tb->destFolder); GWEN_FREE_OBJECT(tb); } } GWEN_STRINGLIST *Typemaker2_Builder_GetPublicDeclarations(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->declarationsPublic; } GWEN_STRINGLIST *Typemaker2_Builder_GetLibraryDeclarations(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->declarationsLibrary; } GWEN_STRINGLIST *Typemaker2_Builder_GetProtectedDeclarations(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->declarationsProtected; } GWEN_STRINGLIST *Typemaker2_Builder_GetPrivateDeclarations(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->declarationsPrivate; } GWEN_STRINGLIST *Typemaker2_Builder_GetCode(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->code; } TYPEMAKER2_TYPEMANAGER *Typemaker2_Builder_GetTypeManager(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->typeManager; } void Typemaker2_Builder_SetTypeManager(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPEMANAGER *tm) { assert(tb); tb->typeManager=tm; } void Typemaker2_Builder_AddDeclaration(TYPEMAKER2_BUILDER *tb, int access, const char *s) { switch (access) { case TypeMaker2_Access_Public: Typemaker2_Builder_AddPublicDeclaration(tb, s); break; case TypeMaker2_Access_Library: Typemaker2_Builder_AddLibraryDeclaration(tb, s); break; case TypeMaker2_Access_Protected: Typemaker2_Builder_AddProtectedDeclaration(tb, s); break; case TypeMaker2_Access_Private: Typemaker2_Builder_AddPrivateDeclaration(tb, s); break; default: DBG_ERROR(GWEN_LOGDOMAIN, "Invalid access type"); break; } } void Typemaker2_Builder_AddPublicDeclaration(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); GWEN_StringList_AppendString(tb->declarationsPublic, s, 0, 0); } void Typemaker2_Builder_AddLibraryDeclaration(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); GWEN_StringList_AppendString(tb->declarationsLibrary, s, 0, 0); } void Typemaker2_Builder_AddProtectedDeclaration(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); GWEN_StringList_AppendString(tb->declarationsProtected, s, 0, 0); } void Typemaker2_Builder_AddPrivateDeclaration(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); GWEN_StringList_AppendString(tb->declarationsPrivate, s, 0, 0); } void Typemaker2_Builder_AddCode(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); GWEN_StringList_AppendString(tb->code, s, 0, 0); } const char *Typemaker2_Builder_GetFileNamePublic(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->fileNamePublic; } void Typemaker2_Builder_SetFileNamePublic(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->fileNamePublic); if (s) tb->fileNamePublic=strdup(s); else tb->fileNamePublic=NULL; } const char *Typemaker2_Builder_GetFileNameLibrary(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->fileNameLibrary; } void Typemaker2_Builder_SetFileNameLibrary(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->fileNameLibrary); if (s) tb->fileNameLibrary=strdup(s); else tb->fileNameLibrary=NULL; } const char *Typemaker2_Builder_GetFileNameProtected(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->fileNameProtected; } void Typemaker2_Builder_SetFileNameProtected(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->fileNameProtected); if (s) tb->fileNameProtected=strdup(s); else tb->fileNameProtected=NULL; } const char *Typemaker2_Builder_GetFileNamePrivate(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->fileNamePrivate; } void Typemaker2_Builder_SetFileNamePrivate(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->fileNamePrivate); if (s) tb->fileNamePrivate=strdup(s); else tb->fileNamePrivate=NULL; } const char *Typemaker2_Builder_GetFileNameCode(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->fileNameCode; } void Typemaker2_Builder_SetFileNameCode(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->fileNameCode); if (s) tb->fileNameCode=strdup(s); else tb->fileNameCode=NULL; } const char *Typemaker2_Builder_GetSourceFileName(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->sourceFileName; } void Typemaker2_Builder_SetSourceFileName(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->sourceFileName); if (s) tb->sourceFileName=strdup(s); else tb->sourceFileName=NULL; } const char *Typemaker2_Builder_GetDestFolderName(const TYPEMAKER2_BUILDER *tb) { assert(tb); return tb->destFolder; } void Typemaker2_Builder_SetDestFolderName(TYPEMAKER2_BUILDER *tb, const char *s) { assert(tb); free(tb->destFolder); if (s) tb->destFolder=strdup(s); else tb->destFolder=NULL; } void Typemaker2_Builder_SetBuildFn(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_BUILDER_BUILD_FN fn) { assert(tb); tb->buildFn=fn; } int Typemaker2_Builder_Build(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { assert(tb); if (tb->buildFn) return tb->buildFn(tb, ty); else return GWEN_ERROR_NOT_SUPPORTED; } GWEN_DB_NODE *Typemaker2_Builder_CreateDbForCall(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, const char *src, const char *dst) { GWEN_DB_NODE *db; const char *s; db=GWEN_DB_Group_new("vars"); if (tb->typeManager) { s=Typemaker2_TypeManager_GetApiDeclaration(tb->typeManager); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "api", s); else GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "", s); } /* set some type vars */ if (ty) { TYPEMAKER2_TYPE *bty; TYPEMAKER2_MEMBER_LIST *tml; s=Typemaker2_Type_GetIdentifier(ty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "struct_type", s); s=Typemaker2_Type_GetPrefix(ty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "struct_prefix", s); bty=Typemaker2_Type_GetBaseTypePtr(ty); if (bty) { s=Typemaker2_Type_GetIdentifier(bty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "basetype_type", s); s=Typemaker2_Type_GetPrefix(bty); if (s && *s) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "basetype_prefix", s); } tml=Typemaker2_Type_GetMembers(ty); if (tml) { TYPEMAKER2_MEMBER *tmm; tmm=Typemaker2_Member_List_First(tml); while (tmm) { /* write members with prefix */ addMemberInfoToCallDb(tb, ty, tmm, db, 1); tmm=Typemaker2_Member_List_Next(tmm); } } } /* set some member vars */ if (tm) /* write specific member without prefix */ addMemberInfoToCallDb(tb, ty, tm, db, 0); /* set src and dst */ if (src && *src) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "src", src); if (dst && *dst) GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "dst", dst); /* set some fixed vars */ GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "retval", "p_rv"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "db", "p_db"); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, "buffer", "p_buffer"); return db; } void addMemberInfoToCallDb(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, GWEN_UNUSED TYPEMAKER2_TYPE *ty, TYPEMAKER2_MEMBER *tm, GWEN_DB_NODE *db, int withTypePrefix) { const char *s; const char *prefix=NULL; char numbuf[32]; TYPEMAKER2_TYPE *mty; s=Typemaker2_Member_GetName(tm); if (withTypePrefix) prefix=s; if (s && *s) { GWEN_BUFFER *tbuf; setCharValueWithTypePrefix(db, prefix, "name", s); tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendByte(tbuf, toupper(*s)); GWEN_Buffer_AppendString(tbuf, s+1); setCharValueWithTypePrefix(db, prefix, "nameWithCapital", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_free(tbuf); } s=Typemaker2_Member_GetElementName(tm); if (s && *s) setCharValueWithTypePrefix(db, prefix, "element_name", s); else /* default behaviour is to use the name "element" for list members in GWEN_DBs */ setCharValueWithTypePrefix(db, prefix, "element_name", "element"); setCharValueWithTypePrefix(db, prefix, "default", Typemaker2_Member_GetDefaultValue(tm)); setCharValueWithTypePrefix(db, prefix, "preset", Typemaker2_Member_GetPresetValue(tm)); if (!(Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_VOLATILE)) { /* set field number for toObject/fromObject */ s=Typemaker2_Member_GetFieldId(tm); if (s && *s) setCharValueWithTypePrefix(db, prefix, "fieldid", s); } /* maxlen */ snprintf(numbuf, sizeof(numbuf)-1, "%d", Typemaker2_Member_GetMaxLen(tm)); setCharValueWithTypePrefix(db, prefix, "maxlen", numbuf); /* set basetype stuff */ mty=Typemaker2_Member_GetTypePtr(tm); assert(mty); if (mty) { TYPEMAKER2_TYPE *bty; setCharValueWithTypePrefix(db, prefix, "member_type", Typemaker2_Type_GetIdentifier(mty)); setCharValueWithTypePrefix(db, prefix, "member_prefix", Typemaker2_Type_GetPrefix(mty)); bty=Typemaker2_Type_GetBaseTypePtr(mty); if (bty) { setCharValueWithTypePrefix(db, prefix, "member_basetype_type", Typemaker2_Type_GetIdentifier(bty)); setCharValueWithTypePrefix(db, prefix, "member_basetype_prefix", Typemaker2_Type_GetPrefix(bty)); } } /* set enum-specific stuff */ if (Typemaker2_Member_GetFlags(tm) & TYPEMAKER2_FLAGS_ENUM) { TYPEMAKER2_ENUM *te; te=Typemaker2_Member_GetEnumPtr(tm); if (te) { setCharValueWithTypePrefix(db, prefix, "enum_fromstring_fn", Typemaker2_Enum_GetFromStringFn(te)); setCharValueWithTypePrefix(db, prefix, "enum_tostring_fn", Typemaker2_Enum_GetToStringFn(te)); } } } void setCharValueWithTypePrefix(GWEN_DB_NODE *db, const char *prefix, const char *varName, const char *value) { if (value) { if (prefix && *prefix) { GWEN_BUFFER *tbuf; tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, prefix); GWEN_Buffer_AppendString(tbuf, "."); GWEN_Buffer_AppendString(tbuf, varName); GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, GWEN_Buffer_GetStart(tbuf), value); GWEN_Buffer_free(tbuf); } else { GWEN_DB_SetCharValue(db, GWEN_DB_FLAGS_OVERWRITE_VARS, varName, value); } } } int Typemaker2_Builder_ReplaceVars(const char *s, GWEN_DB_NODE *db, GWEN_BUFFER *dbuf) { const char *p; p=s; while (*p) { if (*p=='$') { p++; if (*p=='$') GWEN_Buffer_AppendByte(dbuf, '$'); else if (*p=='(') { const char *pStart; p++; pStart=p; while (*p && *p!=')') p++; if (*p!=')') { DBG_ERROR(GWEN_LOGDOMAIN, "Unterminated variable name in code"); return GWEN_ERROR_BAD_DATA; } else { int len; char *name; const char *v; len=p-pStart; if (len<1) { DBG_ERROR(GWEN_LOGDOMAIN, "Empty variable name in code"); return GWEN_ERROR_BAD_DATA; } name=(char *) malloc(len+1); assert(name); memmove(name, pStart, len); name[len]=0; v=GWEN_DB_GetCharValue(db, name, 0, NULL); if (v) { free(name); GWEN_Buffer_AppendString(dbuf, v); } #if 0 /* just replace with empty value */ else { GWEN_Buffer_AppendString(dbuf, " [__VALUE OF "); GWEN_Buffer_AppendString(dbuf, name); GWEN_Buffer_AppendString(dbuf, " WAS NOT SET__] "); free(name); } #endif } } else { DBG_ERROR(GWEN_LOGDOMAIN, "Bad variable string in code"); return GWEN_ERROR_BAD_DATA; } p++; } else { if (*p=='#') { /* let # lines begin on a new line */ GWEN_Buffer_AppendByte(dbuf, '\n'); GWEN_Buffer_AppendByte(dbuf, *p); /* skip introducing cross and copy all stuff until the next cross * upon which wa inject a newline (to make the preprocessor happy) */ p++; while (*p && *p!='#') { GWEN_Buffer_AppendByte(dbuf, *p); p++; } if (*p=='#') { GWEN_Buffer_AppendByte(dbuf, '\n'); p++; } } else if (*p=='\\') { /* check for recognized control escapes */ if (tolower(p[1])=='n') { GWEN_Buffer_AppendByte(dbuf, '\n'); p+=2; /* skip introducing backslash and control character */ } else if (tolower(p[1])=='t') { GWEN_Buffer_AppendByte(dbuf, '\t'); p+=2; /* skip introducing backslash and control character */ } else if (tolower(p[1])=='\\') { GWEN_Buffer_AppendByte(dbuf, '\\'); p+=2; /* skip introducing backslash and control character */ } else { /* no known escape character, just add literally */ GWEN_Buffer_AppendByte(dbuf, *p); p++; } } else { GWEN_Buffer_AppendByte(dbuf, *p); p++; } } } return 0; } #define INVOKE_FN(macro_var1) \ int Typemaker2_Builder_Invoke_##macro_var1##Fn(TYPEMAKER2_BUILDER *tb, \ TYPEMAKER2_TYPE *ty, \ TYPEMAKER2_MEMBER *tm, \ const char *src, \ const char *dst, \ GWEN_BUFFER *dbuf) { \ if (tm) { \ TYPEMAKER2_TYPE *mty; \ TYPEMAKER2_CODE *tc; \ const char *s=NULL; \ \ mty=Typemaker2_Member_GetTypePtr(tm); \ if (mty==NULL) { \ DBG_ERROR(GWEN_LOGDOMAIN, "No type pointer for member"); \ return GWEN_ERROR_NO_DATA; \ } \ tc=Typemaker2_Type_FindCodeForMember(mty, tm, __STRING(macro_var1));\ if (tc) \ s=Typemaker2_Code_GetCode(tc); \ if (s && *s) { \ GWEN_DB_NODE *db; \ int rv; \ \ db=Typemaker2_Builder_CreateDbForCall(tb, ty, tm, src, dst); \ if (db==NULL) { \ DBG_INFO(GWEN_LOGDOMAIN, "here"); \ return GWEN_ERROR_BAD_DATA; \ } \ \ if (0) { \ GWEN_Buffer_AppendString(dbuf, "/* function \""); \ GWEN_Buffer_AppendString(dbuf, __STRING(macro_var1)); \ GWEN_Buffer_AppendString(dbuf, "\" of type \""); \ GWEN_Buffer_AppendString(dbuf, Typemaker2_Type_GetName(mty)); \ GWEN_Buffer_AppendString(dbuf, "\" */\n"); \ } \ rv=Typemaker2_Builder_ReplaceVars(s, db, dbuf); \ GWEN_DB_Group_free(db); \ if (rv<0) { \ DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); \ return rv; \ } \ return 0; \ } \ else { \ DBG_INFO(GWEN_LOGDOMAIN, "No code for type [%s]", \ Typemaker2_Type_GetName(mty)); \ return 0; \ } \ } \ else { \ DBG_ERROR(GWEN_LOGDOMAIN, "No member information"); \ return GWEN_ERROR_NO_DATA; \ } \ } INVOKE_FN(Construct); INVOKE_FN(Destruct); INVOKE_FN(Assign); INVOKE_FN(Dup); INVOKE_FN(Compare); INVOKE_FN(ToDb); INVOKE_FN(FromDb); INVOKE_FN(ToXml); INVOKE_FN(FromXml); INVOKE_FN(ToObject); INVOKE_FN(FromObject); INVOKE_FN(ToHashString); int Typemaker2_Builder_WriteFile(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName, GWEN_STRINGLIST *sl, int acc) { GWEN_STRINGLISTENTRY *se; FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "/**********************************************************\n" " * This file has been automatically created by \"typemaker2\"\n" " * from the file \"%s\".\n" " * Please do not edit this file, all changes will be lost.\n" " * Better edit the mentioned source file instead.\n" " **********************************************************/\n" "\n", Typemaker2_Builder_GetSourceFileName(tb)); if (acc==TypeMaker2_Access_Unknown) { const char *s; TYPEMAKER2_HEADER_LIST *hl; fprintf(f, "#ifdef HAVE_CONFIG_H\n# include \n#endif\n\n"); s=tb->fileNamePrivate; if (s==NULL) s=tb->fileNameLibrary; if (s==NULL) s=tb->fileNameProtected; if (s==NULL) s=tb->fileNamePublic; if (s) { fprintf(f, "#include \"%s\"\n\n", s); } /* add some needed headers */ fprintf(f, "#include \n"); fprintf(f, "#include \n"); /* write code headers */ fprintf(f, "\n"); fprintf(f, "/* code headers */\n"); hl=Typemaker2_Type_GetHeaders(ty); if (hl) { TYPEMAKER2_HEADER *h; h=Typemaker2_Header_List_First(hl); while (h) { if (Typemaker2_Header_GetLocation(h)==Typemaker2_HeaderLocation_Code) { if (Typemaker2_Header_GetType(h)==Typemaker2_HeaderType_System) fprintf(f, "#include <%s>\n", Typemaker2_Header_GetFileName(h)); else fprintf(f, "#include \"%s\"\n", Typemaker2_Header_GetFileName(h)); } h=Typemaker2_Header_List_Next(h); } } fprintf(f, "\n"); } else { GWEN_BUFFER *xbuf; char *p; const char *s; xbuf=GWEN_Buffer_new(0, 256, 0, 1); s=Typemaker2_Type_GetName(ty); GWEN_Buffer_AppendString(xbuf, s); GWEN_Buffer_AppendString(xbuf, "_"); s=strrchr(fileName, GWEN_DIR_SEPARATOR); if (s && *s) GWEN_Buffer_AppendString(xbuf, s+1); else GWEN_Buffer_AppendString(xbuf, fileName); p=GWEN_Buffer_GetStart(xbuf); while (*p) { if (!isalnum(*p)) *p='_'; else *p=toupper(*p); p++; } fprintf(f, "#ifndef %s\n", GWEN_Buffer_GetStart(xbuf)); fprintf(f, "#define %s\n\n", GWEN_Buffer_GetStart(xbuf)); s=NULL; switch (acc) { case TypeMaker2_Access_Unknown: s=tb->fileNamePrivate; if (s) break; case TypeMaker2_Access_Private: s=tb->fileNameLibrary; if (s) break; case TypeMaker2_Access_Library: s=tb->fileNameProtected; if (s) break; case TypeMaker2_Access_Protected: s=tb->fileNamePublic; if (s) break; default: break; } if (s) { fprintf(f, "#include \"%s\"\n\n", s); } fprintf(f, "\n"); fprintf(f, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n"); GWEN_Buffer_free(xbuf); } se=GWEN_StringList_FirstEntry(sl); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s) fprintf(f, "%s\n", s); se=GWEN_StringListEntry_Next(se); } if (acc==TypeMaker2_Access_Unknown) { TYPEMAKER2_HEADER_LIST *hl; /* write codeEnd headers */ fprintf(f, "\n"); fprintf(f, "/* code headers */\n"); hl=Typemaker2_Type_GetHeaders(ty); if (hl) { TYPEMAKER2_HEADER *h; h=Typemaker2_Header_List_First(hl); while (h) { if (Typemaker2_Header_GetLocation(h)==Typemaker2_HeaderLocation_CodeEnd) { if (Typemaker2_Header_GetType(h)==Typemaker2_HeaderType_System) fprintf(f, "#include <%s>\n", Typemaker2_Header_GetFileName(h)); else fprintf(f, "#include \"%s\"\n", Typemaker2_Header_GetFileName(h)); } h=Typemaker2_Header_List_Next(h); } } fprintf(f, "\n"); } if (acc!=TypeMaker2_Access_Unknown) { fprintf(f, "#ifdef __cplusplus\n}\n#endif\n\n"); fprintf(f, "#endif\n\n"); } if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile_List1(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty), Typemaker2_Type_GetName(ty)); fprintf(f, " %s_LIST\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s_List\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile_List2(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty), Typemaker2_Type_GetName(ty)); fprintf(f, " %s_LIST2\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s_List2\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile_Tree(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty), Typemaker2_Type_GetName(ty)); fprintf(f, " %s_TREE\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s_Tree\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile_Tree2(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty), Typemaker2_Type_GetName(ty)); fprintf(f, " %s_TREE2\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s_Tree2\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_WriteTypedefFile_IdMap(GWEN_UNUSED TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, const char *fileName) { FILE *f; f=fopen(fileName, "w"); if (f==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "fopen(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, " \n", Typemaker2_Type_GetName(ty), Typemaker2_Type_GetName(ty)); fprintf(f, " %s_IDMAP\n", Typemaker2_Type_GetName(ty)); fprintf(f, " %s_IdMap\n", Typemaker2_Type_GetPrefix(ty)); fprintf(f, " \n"); fprintf(f, "\n"); if (fclose(f)) { DBG_ERROR(GWEN_LOGDOMAIN, "fclose(%s): %s (%d)", fileName, strerror(errno), errno); return GWEN_ERROR_IO; } return 0; } int Typemaker2_Builder_DetermineOutFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { const char *fname; if (GWEN_StringList_Count(tb->declarationsPublic)) { fname=tb->fileNamePublic; if (fname==NULL || *fname==0) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetBaseFileName(ty); if (s==NULL || *s==0) { s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, ".h"); fname=GWEN_Buffer_GetStart(tbuf); Typemaker2_Builder_SetFileNamePublic(tb, fname); GWEN_Buffer_free(tbuf); } } if (GWEN_StringList_Count(tb->declarationsLibrary)) { fname=tb->fileNameLibrary; if (fname==NULL || *fname==0) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetBaseFileName(ty); if (s==NULL || *s==0) { s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_l.h"); fname=GWEN_Buffer_GetStart(tbuf); Typemaker2_Builder_SetFileNameLibrary(tb, fname); GWEN_Buffer_free(tbuf); } } if (GWEN_StringList_Count(tb->declarationsProtected)) { fname=tb->fileNameProtected; if (fname==NULL || *fname==0) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetBaseFileName(ty); if (s==NULL || *s==0) { s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_be.h"); fname=GWEN_Buffer_GetStart(tbuf); Typemaker2_Builder_SetFileNameProtected(tb, fname); GWEN_Buffer_free(tbuf); } } if (GWEN_StringList_Count(tb->declarationsPrivate)) { fname=tb->fileNamePrivate; if (fname==NULL || *fname==0) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetBaseFileName(ty); if (s==NULL || *s==0) { s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_p.h"); fname=GWEN_Buffer_GetStart(tbuf); Typemaker2_Builder_SetFileNamePrivate(tb, fname); GWEN_Buffer_free(tbuf); } } if (GWEN_StringList_Count(tb->code)) { fname=tb->fileNameCode; if (fname==NULL || *fname==0) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetBaseFileName(ty); if (s==NULL || *s==0) { s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, ".c"); fname=GWEN_Buffer_GetStart(tbuf); Typemaker2_Builder_SetFileNameCode(tb, fname); GWEN_Buffer_free(tbuf); } } return 0; } int Typemaker2_Builder_WriteFiles(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty, uint32_t writeFlags) { const char *fname; int rv; rv=Typemaker2_Builder_DetermineOutFileNames(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (writeFlags & TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_TYPE) { if (GWEN_StringList_Count(tb->declarationsPublic)) { fname=tb->fileNamePublic; assert(fname); rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsPublic, TypeMaker2_Access_Public); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (GWEN_StringList_Count(tb->declarationsLibrary)) { fname=tb->fileNameLibrary; assert(fname); rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsLibrary, TypeMaker2_Access_Library); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (GWEN_StringList_Count(tb->declarationsProtected)) { fname=tb->fileNameProtected; assert(fname); rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsProtected, TypeMaker2_Access_Protected); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (GWEN_StringList_Count(tb->declarationsPrivate)) { fname=tb->fileNamePrivate; assert(fname); rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->declarationsPrivate, TypeMaker2_Access_Private); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } if (GWEN_StringList_Count(tb->code)) { fname=tb->fileNameCode; assert(fname); rv=Typemaker2_Builder_WriteFile(tb, ty, fname, tb->code, TypeMaker2_Access_Unknown); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } /* write typedef file */ if (writeFlags & TYPEMAKER2_BUILDER_WRITEFILE_FLAGS_WRITE_DEFS) { if (1) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, ".tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* write typedef file for list1 */ if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_LIST1) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_list.tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile_List1(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* write typedef file for list2 */ if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_LIST2) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_list2.tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile_List2(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* write typedef file for tree */ if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_TREE) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_tree.tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile_Tree(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* write typedef file for tree2 */ if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_TREE2) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_tree2.tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile_Tree2(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } /* write typedef file for idmap */ if (Typemaker2_Type_GetFlags(ty) & TYPEMAKER2_TYPEFLAGS_WITH_IDMAP) { const char *s; char *t; GWEN_BUFFER *tbuf; s=Typemaker2_Type_GetName(ty); if (s==NULL || *s==0) { DBG_ERROR(GWEN_LOGDOMAIN, "Type has no name"); return GWEN_ERROR_BAD_DATA; } tbuf=GWEN_Buffer_new(0, 256, 0, 1); if (tb->destFolder) { GWEN_Buffer_AppendString(tbuf, tb->destFolder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S); } GWEN_Buffer_AppendString(tbuf, s); t=GWEN_Buffer_GetStart(tbuf); while (*t) { *t=tolower(*t); t++; } GWEN_Buffer_AppendString(tbuf, "_idmap.tm2"); fname=GWEN_Buffer_GetStart(tbuf); rv=Typemaker2_Builder_WriteTypedefFile_IdMap(tb, ty, fname); GWEN_Buffer_free(tbuf); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } } } return 0; } int Typemaker2_Builder_PrintFileNames(TYPEMAKER2_BUILDER *tb, TYPEMAKER2_TYPE *ty) { int rv; rv=Typemaker2_Builder_DetermineOutFileNames(tb, ty); if (rv<0) { DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); return rv; } if (GWEN_StringList_Count(tb->declarationsPublic)) fprintf(stdout, "%s\n", tb->fileNamePublic); if (GWEN_StringList_Count(tb->declarationsLibrary)) fprintf(stdout, "%s\n", tb->fileNameLibrary); if (GWEN_StringList_Count(tb->declarationsProtected)) fprintf(stdout, "%s\n", tb->fileNameProtected); if (GWEN_StringList_Count(tb->declarationsPrivate)) fprintf(stdout, "%s\n", tb->fileNamePrivate); if (GWEN_StringList_Count(tb->code)) fprintf(stdout, "%s\n", tb->fileNameCode); return 0; } gwenhywfar-5.12.0/tools/typemaker2/tm_typemanager.h0000644000175000017500000000416713142134476017326 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_TYPEMANAGER_H #define TYPEMAKER2_TYPEMANAGER_H #include "tm_type.h" #include typedef struct TYPEMAKER2_TYPEMANAGER TYPEMAKER2_TYPEMANAGER; TYPEMAKER2_TYPEMANAGER *Typemaker2_TypeManager_new(); void Typemaker2_TypeManager_free(TYPEMAKER2_TYPEMANAGER *tym); const char *Typemaker2_TypeManager_GetLanguage(const TYPEMAKER2_TYPEMANAGER *tym); void Typemaker2_TypeManager_SetLanguage(TYPEMAKER2_TYPEMANAGER *tym, const char *s); const char *Typemaker2_TypeManager_GetApiDeclaration(const TYPEMAKER2_TYPEMANAGER *tym); void Typemaker2_TypeManager_SetApiDeclaration(TYPEMAKER2_TYPEMANAGER *tym, const char *s); void Typemaker2_TypeManager_AddFolder(TYPEMAKER2_TYPEMANAGER *tym, const char *s); void Typemaker2_TypeManager_AddType(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty); int Typemaker2_TypeManager_SetTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty); int Typemaker2_TypeManager_SetMemberTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty); TYPEMAKER2_TYPE *Typemaker2_TypeManager_FindType(TYPEMAKER2_TYPEMANAGER *tym, const char *s); TYPEMAKER2_TYPE *Typemaker2_TypeManager_GetType(TYPEMAKER2_TYPEMANAGER *tym, const char *s); TYPEMAKER2_TYPE *Typemaker2_TypeManager_LoadTypeFile(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName); int Typemaker2_TypeManager_LoadTypeFile2(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName, TYPEMAKER2_TYPE_LIST2 *tlist2); int Typemaker2_TypeManager_LoadTypeFileNoLookup(TYPEMAKER2_TYPEMANAGER *tym, const char *fileName, TYPEMAKER2_TYPE_LIST2 *tlist2); void Typemaker2_TypeManager_Dump(TYPEMAKER2_TYPEMANAGER *tym, FILE *f, int indent); #endif gwenhywfar-5.12.0/tools/typemaker2/tm_header.h0000644000175000017500000000315513142134464016233 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_HEADER_H #define TYPEMAKER2_HEADER_H #include #include typedef struct TYPEMAKER2_HEADER TYPEMAKER2_HEADER; GWEN_LIST_FUNCTION_DEFS(TYPEMAKER2_HEADER, Typemaker2_Header) enum { Typemaker2_HeaderType_Unknown=-1, Typemaker2_HeaderType_System=0, Typemaker2_HeaderType_Local }; enum { Typemaker2_HeaderLocation_Unknown=-1, Typemaker2_HeaderLocation_Pre=0, Typemaker2_HeaderLocation_Post, Typemaker2_HeaderLocation_Code, Typemaker2_HeaderLocation_CodeEnd, Typemaker2_HeaderLocation_HeaderEnd }; TYPEMAKER2_HEADER *Typemaker2_Header_new(); void Typemaker2_Header_free(TYPEMAKER2_HEADER *th); void Typemaker2_Header_Attach(TYPEMAKER2_HEADER *th); const char *Typemaker2_Header_GetFileName(const TYPEMAKER2_HEADER *th); void Typemaker2_Header_SetFileName(TYPEMAKER2_HEADER *th, const char *s); int Typemaker2_Header_GetType(const TYPEMAKER2_HEADER *th); void Typemaker2_Header_SetType(TYPEMAKER2_HEADER *th, int i); int Typemaker2_Header_GetLocation(const TYPEMAKER2_HEADER *th); void Typemaker2_Header_SetLocation(TYPEMAKER2_HEADER *th, int i); int Typemaker2_Header_readXml(TYPEMAKER2_HEADER *th, GWEN_XMLNODE *node); #endif gwenhywfar-5.12.0/tools/typemaker2/tm_signal.c0000644000175000017500000001564713142134476016267 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_signal.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_signal_p.h" #include #include /* code headers */ /* macro functions */ GWEN_LIST_FUNCTIONS(TYPEMAKER2_SIGNAL, Typemaker2_Signal) GWEN_LIST2_FUNCTIONS(TYPEMAKER2_SIGNAL, Typemaker2_Signal) TYPEMAKER2_SIGNAL *Typemaker2_Signal_new(void) { TYPEMAKER2_SIGNAL *p_struct; GWEN_NEW_OBJECT(TYPEMAKER2_SIGNAL, p_struct) GWEN_LIST_INIT(TYPEMAKER2_SIGNAL, p_struct) /* members */ p_struct->name=NULL; p_struct->paramType1=NULL; p_struct->paramType2=NULL; p_struct->flags=0; /* virtual functions */ return p_struct; } void Typemaker2_Signal_free(TYPEMAKER2_SIGNAL *p_struct) { if (p_struct) { GWEN_LIST_FINI(TYPEMAKER2_SIGNAL, p_struct) /* members */ free(p_struct->name); free(p_struct->paramType1); free(p_struct->paramType2); GWEN_FREE_OBJECT(p_struct); } } TYPEMAKER2_SIGNAL *Typemaker2_Signal_dup(const TYPEMAKER2_SIGNAL *p_src) { TYPEMAKER2_SIGNAL *p_struct; assert(p_src); p_struct=Typemaker2_Signal_new(); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); p_struct->paramType1=NULL; } if (p_src->paramType1) { p_struct->paramType1=strdup(p_src->paramType1); } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); p_struct->paramType2=NULL; } if (p_src->paramType2) { p_struct->paramType2=strdup(p_src->paramType2); } /* member "flags" */ p_struct->flags=p_src->flags; return p_struct; } TYPEMAKER2_SIGNAL *Typemaker2_Signal_copy(TYPEMAKER2_SIGNAL *p_struct, const TYPEMAKER2_SIGNAL *p_src) { assert(p_struct); assert(p_src); /* member "name" */ if (p_struct->name) { free(p_struct->name); p_struct->name=NULL; } if (p_src->name) { p_struct->name=strdup(p_src->name); } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); p_struct->paramType1=NULL; } if (p_src->paramType1) { p_struct->paramType1=strdup(p_src->paramType1); } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); p_struct->paramType2=NULL; } if (p_src->paramType2) { p_struct->paramType2=strdup(p_src->paramType2); } /* member "flags" */ p_struct->flags=p_src->flags; return p_struct; } const char *Typemaker2_Signal_GetName(const TYPEMAKER2_SIGNAL *p_struct) { assert(p_struct); return p_struct->name; } const char *Typemaker2_Signal_GetParamType1(const TYPEMAKER2_SIGNAL *p_struct) { assert(p_struct); return p_struct->paramType1; } const char *Typemaker2_Signal_GetParamType2(const TYPEMAKER2_SIGNAL *p_struct) { assert(p_struct); return p_struct->paramType2; } uint32_t Typemaker2_Signal_GetFlags(const TYPEMAKER2_SIGNAL *p_struct) { assert(p_struct); return p_struct->flags; } void Typemaker2_Signal_SetName(TYPEMAKER2_SIGNAL *p_struct, const char *p_src) { assert(p_struct); if (p_struct->name) { free(p_struct->name); } if (p_src) { p_struct->name=strdup(p_src); } else { p_struct->name=NULL; } } void Typemaker2_Signal_SetParamType1(TYPEMAKER2_SIGNAL *p_struct, const char *p_src) { assert(p_struct); if (p_struct->paramType1) { free(p_struct->paramType1); } if (p_src) { p_struct->paramType1=strdup(p_src); } else { p_struct->paramType1=NULL; } } void Typemaker2_Signal_SetParamType2(TYPEMAKER2_SIGNAL *p_struct, const char *p_src) { assert(p_struct); if (p_struct->paramType2) { free(p_struct->paramType2); } if (p_src) { p_struct->paramType2=strdup(p_src); } else { p_struct->paramType2=NULL; } } void Typemaker2_Signal_SetFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags=p_src; } void Typemaker2_Signal_AddFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags|=p_src; } void Typemaker2_Signal_SubFlags(TYPEMAKER2_SIGNAL *p_struct, uint32_t p_src) { assert(p_struct); p_struct->flags&=~p_src; } TYPEMAKER2_SIGNAL_LIST *Typemaker2_Signal_List_dup(const TYPEMAKER2_SIGNAL_LIST *p_src) { TYPEMAKER2_SIGNAL_LIST *p_dest; TYPEMAKER2_SIGNAL *p_elem; assert(p_src); p_dest=Typemaker2_Signal_List_new(); p_elem=Typemaker2_Signal_List_First(p_src); while (p_elem) { TYPEMAKER2_SIGNAL *p_cpy; p_cpy=Typemaker2_Signal_dup(p_elem); Typemaker2_Signal_List_Add(p_cpy, p_dest); p_elem=Typemaker2_Signal_List_Next(p_elem); } return p_dest; } void Typemaker2_Signal_ReadXml(TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ if (p_struct->name) { free(p_struct->name); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "name", NULL); if (s) p_struct->name=strdup(s); } if (p_struct->name==NULL) { /* member "name" is volatile, just presetting */ p_struct->name=NULL; } /* member "paramType1" */ if (p_struct->paramType1) { free(p_struct->paramType1); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "paramType1", NULL); if (s) p_struct->paramType1=strdup(s); } if (p_struct->paramType1==NULL) { /* member "paramType1" is volatile, just presetting */ p_struct->paramType1=NULL; } /* member "paramType2" */ if (p_struct->paramType2) { free(p_struct->paramType2); } { const char *s; s=GWEN_XMLNode_GetProperty(p_db, "paramType2", NULL); if (s) p_struct->paramType2=strdup(s); } if (p_struct->paramType2==NULL) { /* member "paramType2" is volatile, just presetting */ p_struct->paramType2=NULL; } /* member "flags" */ p_struct->flags=GWEN_XMLNode_GetIntValue(p_db, "flags", 0); } void Typemaker2_Signal_WriteXml(const TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db) { assert(p_struct); /* member "name" */ GWEN_XMLNode_SetProperty(p_db, "name", p_struct->name); /* member "paramType1" */ GWEN_XMLNode_SetProperty(p_db, "paramType1", p_struct->paramType1); /* member "paramType2" */ GWEN_XMLNode_SetProperty(p_db, "paramType2", p_struct->paramType2); /* member "flags" */ GWEN_XMLNode_SetIntValue(p_db, "flags", p_struct->flags); } void Typemaker2_Signal_toXml(const TYPEMAKER2_SIGNAL *p_struct, GWEN_XMLNODE *p_db) { Typemaker2_Signal_WriteXml(p_struct, p_db); } TYPEMAKER2_SIGNAL *Typemaker2_Signal_fromXml(GWEN_XMLNODE *p_db) { TYPEMAKER2_SIGNAL *p_struct; p_struct=Typemaker2_Signal_new(); Typemaker2_Signal_ReadXml(p_struct, p_db); return p_struct; } /* code headers */ gwenhywfar-5.12.0/tools/typemaker2/tm_item_p.h0000644000175000017500000000105713142134464016257 00000000000000/********************************************************** * This file has been automatically created by "typemaker2" * from the file "tm_item.xml". * Please do not edit this file, all changes will be lost. * Better edit the mentioned source file instead. **********************************************************/ #ifndef TM_ITEM_P_H #define TM_ITEM_P_H #include "tm_item.h" #ifdef __cplusplus extern "C" { #endif struct TYPEMAKER2_ITEM { GWEN_LIST_ELEMENT(TYPEMAKER2_ITEM) char *name; char *value; }; #ifdef __cplusplus } #endif #endif gwenhywfar-5.12.0/tools/typemaker2/tm_item.xml0000644000175000017500000000175213142134464016313 00000000000000 TYPEMAKER2_ITEM Typemaker2_Item tm_item with_list1 with_list2 with_xml NULL NULL public own attribute const dup const NULL NULL public own attribute const dup const gwenhywfar-5.12.0/tools/typemaker2/tm_typemanager_p.h0000644000175000017500000000171613142134464017637 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_TYPEMANAGER_P_H #define TYPEMAKER2_TYPEMANAGER_P_H #include "tm_typemanager.h" struct TYPEMAKER2_TYPEMANAGER { TYPEMAKER2_TYPE_LIST *typeList; GWEN_STRINGLIST *folders; char *lang; char *apiDeclaration; }; TYPEMAKER2_TYPE *Typemaker2_TypeManager_LoadType(TYPEMAKER2_TYPEMANAGER *tym, const char *typeName); int Typemaker2_TypeManager_SetTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty); int Typemaker2_TypeManager_SetMemberTypePtrs(TYPEMAKER2_TYPEMANAGER *tym, TYPEMAKER2_TYPE *ty); #endif gwenhywfar-5.12.0/tools/typemaker2/tm_inline_p.h0000644000175000017500000000131313142134464016572 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_INLINE_P_H #define TYPEMAKER2_INLINE_P_H #include "tm_inline.h" struct TYPEMAKER2_INLINE { GWEN_LIST_ELEMENT(TYPEMAKER2_INLINE) char *content; int acc; int location; uint32_t typeFlagsMask; uint32_t typeFlagsValue; int refCount; }; #endif gwenhywfar-5.12.0/tools/typemaker2/tm_virtualfn.c0000644000175000017500000002177013142134476017016 00000000000000/*************************************************************************** begin : Mon Jun 28 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_virtualfn_p.h" #include "tm_util.h" #include "tm_type.h" #include #include #include GWEN_LIST_FUNCTIONS(TYPEMAKER2_VIRTUALFN, Typemaker2_VirtualFn); GWEN_LIST_FUNCTIONS(TYPEMAKER2_VIRTUALFN_PARAM, Typemaker2_VirtualFn_Param); TYPEMAKER2_VIRTUALFN *Typemaker2_VirtualFn_new() { TYPEMAKER2_VIRTUALFN *vf; GWEN_NEW_OBJECT(TYPEMAKER2_VIRTUALFN, vf); vf->refCount=1; GWEN_LIST_INIT(TYPEMAKER2_VIRTUALFN, vf); vf->access=TypeMaker2_Access_Public; vf->paramList=Typemaker2_VirtualFn_Param_List_new(); return vf; } void Typemaker2_VirtualFn_free(TYPEMAKER2_VIRTUALFN *vf) { if (vf) { if (vf->refCount==1) { GWEN_LIST_FINI(TYPEMAKER2_VIRTUALFN, vf); free(vf->preset); free(vf->name); free(vf->descr); free(vf->returnType); free(vf->defaultReturnValue); free(vf->location); Typemaker2_VirtualFn_Param_List_free(vf->paramList); vf->refCount=0; GWEN_FREE_OBJECT(vf); } else vf->refCount--; } } void Typemaker2_VirtualFn_Attach(TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); vf->refCount++; } int Typemaker2_VirtualFn_readXml(TYPEMAKER2_VIRTUALFN *vf, GWEN_XMLNODE *node) { const char *s; GWEN_XMLNODE *n; assert(vf); assert(vf->refCount); s=GWEN_XMLNode_GetProperty(node, "name", NULL); if (s==NULL) { DBG_ERROR(GWEN_LOGDOMAIN, "Member has no id"); return GWEN_ERROR_BAD_DATA; } Typemaker2_VirtualFn_SetName(vf, s); s=GWEN_XMLNode_GetProperty(node, "location", "pre"); Typemaker2_VirtualFn_SetLocation(vf, s); /* read flags */ s=GWEN_XMLNode_GetCharValue(node, "flags", NULL); if (s && *s) Typemaker2_VirtualFn_SetFlags(vf, Typemaker2_FlagsFromString(s)); /* read access */ s=GWEN_XMLNode_GetCharValue(node, "access", NULL); if (s && *s) { int i=Typemaker2_AccessFromString(s); if (i==TypeMaker2_Access_Unknown) { DBG_ERROR(GWEN_LOGDOMAIN, "Unknown access type [%s]", s); return GWEN_ERROR_BAD_DATA; } Typemaker2_VirtualFn_SetAccess(vf, i); } /* read default value */ s=GWEN_XMLNode_GetCharValue(node, "defaultReturnValue", NULL); if (s && *s) Typemaker2_VirtualFn_SetDefaultReturnValue(vf, s); s=GWEN_XMLNode_GetCharValue(node, "preset", NULL); if (s && *s) Typemaker2_VirtualFn_SetPreset(vf, s); /* read return type */ s=GWEN_XMLNode_GetCharValue(node, "returnType", NULL); if (s && *s) Typemaker2_VirtualFn_SetReturnType(vf, s); /* read returnType description */ n=GWEN_XMLNode_FindFirstTag(node, "returnType", NULL, NULL); if (n) { s=GWEN_XMLNode_GetCharValue(n, "descr", NULL); Typemaker2_VirtualFn_SetReturnTypeDescr(vf, s); } n=GWEN_XMLNode_FindFirstTag(node, "params", NULL, NULL); if (n) { n=GWEN_XMLNode_FindFirstTag(n, "param", NULL, NULL); while (n) { const char *paramName; const char *paramType; const char *paramDescr; TYPEMAKER2_VIRTUALFN_PARAM *prm; paramType=GWEN_XMLNode_GetProperty(n, "type", NULL); paramName=GWEN_XMLNode_GetProperty(n, "name", NULL); paramDescr=GWEN_XMLNode_GetCharValue(n, "descr", NULL); if (!(paramType && *paramType)) { DBG_ERROR(GWEN_LOGDOMAIN, "Parameter has no type"); return GWEN_ERROR_BAD_DATA; } prm=Typemaker2_VirtualFn_Param_new(); Typemaker2_VirtualFn_Param_SetName(prm, paramName); Typemaker2_VirtualFn_Param_SetType(prm, paramType); Typemaker2_VirtualFn_Param_SetDescr(prm, paramDescr); Typemaker2_VirtualFn_Param_List_Add(prm, vf->paramList); n=GWEN_XMLNode_FindNextTag(n, "param", NULL, NULL); } } /* read descr */ s=GWEN_XMLNode_GetCharValue(node, "descr", NULL); Typemaker2_VirtualFn_SetDescr(vf, s); return 0; } const char *Typemaker2_VirtualFn_GetName(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->name; } void Typemaker2_VirtualFn_SetName(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->name); if (s) vf->name=strdup(s); else vf->name=NULL; } const char *Typemaker2_VirtualFn_GetLocation(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->location; } void Typemaker2_VirtualFn_SetLocation(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->location); if (s) vf->location=strdup(s); else vf->location=NULL; } const char *Typemaker2_VirtualFn_GetDescr(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->descr; } void Typemaker2_VirtualFn_SetDescr(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->descr); if (s) vf->descr=strdup(s); else vf->descr=NULL; } uint32_t Typemaker2_VirtualFn_GetFlags(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->flags; } void Typemaker2_VirtualFn_SetFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl) { assert(vf); assert(vf->refCount); vf->flags=fl; } void Typemaker2_VirtualFn_AddFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl) { assert(vf); assert(vf->refCount); vf->flags|=fl; } void Typemaker2_VirtualFn_SubFlags(TYPEMAKER2_VIRTUALFN *vf, uint32_t fl) { assert(vf); assert(vf->refCount); vf->flags&=~fl; } int Typemaker2_VirtualFn_GetAccess(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->access; } void Typemaker2_VirtualFn_SetAccess(TYPEMAKER2_VIRTUALFN *vf, int i) { assert(vf); assert(vf->refCount); vf->access=i; } const char *Typemaker2_VirtualFn_GetReturnType(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->returnType; } void Typemaker2_VirtualFn_SetReturnType(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->returnType); if (s) vf->returnType=strdup(s); else vf->returnType=NULL; } const char *Typemaker2_VirtualFn_GetReturnTypeDescr(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); return vf->returnTypeDescr; } void Typemaker2_VirtualFn_SetReturnTypeDescr(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); free(vf->returnTypeDescr); if (s) vf->returnTypeDescr=strdup(s); else vf->returnTypeDescr=NULL; } const char *Typemaker2_VirtualFn_GetDefaultReturnValue(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->defaultReturnValue; } void Typemaker2_VirtualFn_SetDefaultReturnValue(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->defaultReturnValue); if (s) vf->defaultReturnValue=strdup(s); else vf->defaultReturnValue=NULL; } TYPEMAKER2_VIRTUALFN_PARAM_LIST *Typemaker2_VirtualFn_GetParamTypeList(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->paramList; } const char *Typemaker2_VirtualFn_GetPreset(const TYPEMAKER2_VIRTUALFN *vf) { assert(vf); assert(vf->refCount); return vf->preset; } void Typemaker2_VirtualFn_SetPreset(TYPEMAKER2_VIRTUALFN *vf, const char *s) { assert(vf); assert(vf->refCount); free(vf->preset); if (s) vf->preset=strdup(s); else vf->preset=NULL; } TYPEMAKER2_VIRTUALFN_PARAM *Typemaker2_VirtualFn_Param_new() { TYPEMAKER2_VIRTUALFN_PARAM *prm; GWEN_NEW_OBJECT(TYPEMAKER2_VIRTUALFN_PARAM, prm); GWEN_LIST_INIT(TYPEMAKER2_VIRTUALFN_PARAM, prm); return prm; } void Typemaker2_VirtualFn_Param_free(TYPEMAKER2_VIRTUALFN_PARAM *prm) { if (prm) { free(prm->name); free(prm->type); free(prm->descr); GWEN_FREE_OBJECT(prm); } } const char *Typemaker2_VirtualFn_Param_GetName(const TYPEMAKER2_VIRTUALFN_PARAM *prm) { assert(prm); return prm->name; } void Typemaker2_VirtualFn_Param_SetName(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s) { assert(prm); free(prm->name); if (s) prm->name=strdup(s); else prm->name=NULL; } const char *Typemaker2_VirtualFn_Param_GetType(const TYPEMAKER2_VIRTUALFN_PARAM *prm) { assert(prm); return prm->type; } void Typemaker2_VirtualFn_Param_SetType(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s) { assert(prm); free(prm->type); if (s) prm->type=strdup(s); else prm->type=NULL; } const char *Typemaker2_VirtualFn_Param_GetDescr(const TYPEMAKER2_VIRTUALFN_PARAM *prm) { assert(prm); return prm->descr; } void Typemaker2_VirtualFn_Param_SetDescr(TYPEMAKER2_VIRTUALFN_PARAM *prm, const char *s) { assert(prm); free(prm->descr); if (s) prm->descr=strdup(s); else prm->descr=NULL; } gwenhywfar-5.12.0/tools/typemaker2/tm_group.c0000644000175000017500000000523113606364450016134 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "tm_group_p.h" #include #include #include GWEN_TREE_FUNCTIONS(TYPEMAKER2_GROUP, Typemaker2_Group) TYPEMAKER2_GROUP *Typemaker2_Group_new() { TYPEMAKER2_GROUP *gr; GWEN_NEW_OBJECT(TYPEMAKER2_GROUP, gr); gr->refCount=1; GWEN_TREE_INIT(TYPEMAKER2_GROUP, gr); return gr; } void Typemaker2_Group_free(TYPEMAKER2_GROUP *gr) { if (gr) { assert(gr->refCount); if (gr->refCount==1) { GWEN_TREE_FINI(TYPEMAKER2_GROUP, gr); free(gr->title); free(gr->description); gr->refCount=0; GWEN_FREE_OBJECT(gr); } else gr->refCount++; } } void Typemaker2_Group_Attach(TYPEMAKER2_GROUP *gr) { assert(gr); assert(gr->refCount); gr->refCount++; } const char *Typemaker2_Group_GetTitle(TYPEMAKER2_GROUP *gr) { assert(gr); assert(gr->refCount); return gr->title; } void Typemaker2_Group_SetTitle(TYPEMAKER2_GROUP *gr, const char *s) { assert(gr); assert(gr->refCount); free(gr->title); if (s && *s) gr->title=strdup(s); else gr->title=NULL; } const char *Typemaker2_Group_GetDescription(TYPEMAKER2_GROUP *gr) { assert(gr); assert(gr->refCount); return gr->description; } void Typemaker2_Group_SetDescription(TYPEMAKER2_GROUP *gr, const char *s) { assert(gr); assert(gr->refCount); free(gr->description); if (s && *s) gr->description=strdup(s); else gr->description=NULL; } int Typemaker2_Group_readXml(TYPEMAKER2_GROUP *gr, GWEN_XMLNODE *node, GWEN_UNUSED const char *wantedLang) { const char *s; GWEN_XMLNODE *n; assert(gr); assert(gr->refCount); /* read title */ s=GWEN_XMLNode_GetProperty(node, "title", NULL); if (s && *s) Typemaker2_Group_SetTitle(gr, s); /* read descr */ n=GWEN_XMLNode_FindFirstTag(node, "descr", NULL, NULL); if (n) { GWEN_BUFFER *tbuf; int rv; tbuf=GWEN_Buffer_new(0, 256, 0, 1); rv=GWEN_XMLNode_toBuffer(n, tbuf, GWEN_XML_FLAGS_SIMPLE | GWEN_XML_FLAGS_HANDLE_COMMENTS); if (rv<0) { DBG_ERROR(0, "here (%d)", rv); } else { Typemaker2_Group_SetDescription(gr, GWEN_Buffer_GetStart(tbuf)); } GWEN_Buffer_free(tbuf); } return 0; } gwenhywfar-5.12.0/tools/typemaker2/typemaker2.h0000644000175000017500000000113613142134464016363 00000000000000/*************************************************************************** begin : Thu Jul 02 2009 copyright : (C) 2009 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef TYPEMAKER2_TYPEMAKER2_H #define TYPEMAKER2_TYPEMAKER2_H #include int build(GWEN_DB_NODE *dbArgs); int buildDefs(GWEN_DB_NODE *dbArgs); #endif gwenhywfar-5.12.0/tools/Makefile.am0000664000175000017500000000031114453561202014074 00000000000000DIST_SUBDIRS=xmlmerge typemaker typemaker2 gcttool gsa gwenbuild SUBDIRS=xmlmerge typemaker typemaker2 gcttool gsa @gwenbuild_tool@ sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-5.12.0/tools/xmlmerge/0000775000175000017500000000000014730345121013743 500000000000000gwenhywfar-5.12.0/tools/xmlmerge/args.c0000644000175000017500000001065013606364303014767 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* Internationalization */ #ifdef ENABLE_NLS # include # include # define I18N(m) dgettext("gwenhywfar", m) # define I18S(m) m #else # define I18N(m) m # define I18S(m) m #endif #include "args.h" #include #include #include #include ARGUMENTS *Arguments_new() { ARGUMENTS *ar; ar=(ARGUMENTS *)malloc(sizeof(ARGUMENTS)); assert(ar); memset(ar, 0, sizeof(ARGUMENTS)); ar->verbous=0; ar->logLevel=GWEN_LoggerLevel_Notice; ar->logType=GWEN_LoggerType_Console; ar->compact=0; ar->header=0; return ar; } FREEPARAM *FreeParam_new(const char *s) { FREEPARAM *fr; fr=(FREEPARAM *)malloc(sizeof(FREEPARAM)); assert(fr); memset(fr, 0, sizeof(FREEPARAM)); fr->param=s; return fr; } void FreeParam_free(FREEPARAM *fr) { if (fr) free(fr); } void Arguments_AddParam(ARGUMENTS *ar, const char *pr) { FREEPARAM *curr; FREEPARAM *nfp; DBG_ENTER; assert(ar); assert(pr); nfp=FreeParam_new(pr); curr=ar->params; if (!curr) { ar->params=nfp; } else { /* find last */ while (curr->next) { curr=curr->next; } /* while */ curr->next=nfp; } DBG_LEAVE; } void Arguments_free(ARGUMENTS *ar) { if (ar) { FREEPARAM *fr; FREEPARAM *next; fr=ar->params; while (fr) { next=fr->next; FreeParam_free(fr); fr=next; } /* while */ free(ar); } } void usage(GWEN_UNUSED const char *prgname) { fprintf(stdout, "%s%s", k_PRG_VERSION_INFO "\n", I18N( "-v verbous\n" "--logfile ARG name of the logfile\n" "--logtype ARG log type\n" "--loglevel ARG log level\n" "-o ARG name of output file (stdout if omitted)\n" "--compact write a more compact file\n" ) ); } int checkArgs(ARGUMENTS *args, int argc, char **argv) { int i; i=1; while (i=argc) return RETURNVALUE_PARAM; args->logFile=argv[i]; } else if (strcmp(argv[i], "--logtype")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->logType=GWEN_Logger_Name2Logtype(argv[i]); if (args->logType==GWEN_LoggerType_Unknown) { fprintf(stderr, I18N("Unknown log type \"%s\"\n"), argv[i]); return RETURNVALUE_PARAM; } } else if (strcmp(argv[i], "--loglevel")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->logLevel=GWEN_Logger_Name2Level(argv[i]); if (args->logLevel==GWEN_LoggerLevel_Unknown) { fprintf(stderr, I18N("Unknown log level \"%s\"\n"), argv[i]); return RETURNVALUE_PARAM; } } else if (strcmp(argv[i], "-o")==0) { i++; if (i>=argc) return RETURNVALUE_PARAM; args->outputFile=argv[i]; } else if (strcmp(argv[i], "--compact")==0) { args->compact=1; } else if (strcmp(argv[i], "--header")==0) { args->header=1; } else if (strcmp(argv[i], "-h")==0 || strcmp(argv[i], "--help")==0) { usage(argv[0]); return -2; } else if (strcmp(argv[i], "-V")==0 || strcmp(argv[i], "--version")==0) { fprintf(stdout, k_PRG_VERSION_INFO); return -2; } else if (strcmp(argv[i], "-v")==0) { args->verbous=1; } else { /* otherwise add param */ if (argv[i][0]=='-') { fprintf(stderr, I18N("Unknown option \"%s\"\n"), argv[i]); return RETURNVALUE_PARAM; } else Arguments_AddParam(args, argv[i]); } i++; } /* while */ if (args->outputFile==NULL) { fprintf(stderr, "%s\n", I18N("Please specify the name of the output file.")); return RETURNVALUE_PARAM; } /* that's it */ return 0; } gwenhywfar-5.12.0/tools/xmlmerge/Makefile.am0000664000175000017500000000073514170115332015721 00000000000000AM_CPPFLAGS=@all_includes@ -I$(gwenhywfar_symlinkdir) bin_PROGRAMS=xmlmerge noinst_HEADERS=args.h xmlmerge_SOURCES=args.c main.c xmlmerge_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) xmlmerge_LDFLAGS=@i18n_libs@ if IS_WINDOWS xmlmerge_LDFLAGS+=-mconsole xmlmerge_LDADD+=$(PROG_LIBRARIES) endif sources: for f in $(xmlmerge_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-5.12.0/tools/xmlmerge/args.h0000644000175000017500000000314013142134465014767 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef XMLMERGE_ARGS_H #define XMLMERGE_ARGS_H #include #define k_PRG "xmlmerge" #define k_PRG_VERSION_INFO \ "xmlmerge v0.1\n"\ "(c) 2004 Martin Preuss\n"\ "This program is free software licensed under GPL.\n"\ "See COPYING for details.\n" #define RETURNVALUE_PARAM 1 #define RETURNVALUE_SETUP 2 #define RETURNVALUE_NOSTART 3 #define RETURNVALUE_DEINIT 4 #define RETURNVALUE_HANGUP 9 typedef struct _S_PARAM FREEPARAM; typedef struct _S_ARGS ARGUMENTS; struct _S_PARAM { FREEPARAM *next; const char *param; }; struct _S_ARGS { FREEPARAM *params; int verbous; /* -v */ char *logFile; /* --logfile ARG */ GWEN_LOGGER_LOGTYPE logType; /* --logtype ARG */ GWEN_LOGGER_LEVEL logLevel; /* --loglevel ARG */ const char *outputFile; /* -o ARG */ int compact; /* --compact */ int header; /* --header */ }; ARGUMENTS *Arguments_new(); void Arguments_free(ARGUMENTS *ar); int checkArgs(ARGUMENTS *args, int argc, char **argv); #endif /* XMLMERGE_ARGS_H */ gwenhywfar-5.12.0/tools/xmlmerge/Makefile.in0000664000175000017500000006426214730344662015753 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@ bin_PROGRAMS = xmlmerge$(EXEEXT) @IS_WINDOWS_TRUE@am__append_1 = -mconsole @IS_WINDOWS_TRUE@am__append_2 = $(PROG_LIBRARIES) subdir = tools/xmlmerge ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_xmlmerge_OBJECTS = args.$(OBJEXT) main.$(OBJEXT) xmlmerge_OBJECTS = $(am_xmlmerge_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) xmlmerge_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_2) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = xmlmerge_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(xmlmerge_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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/args.Po ./$(DEPDIR)/main.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(xmlmerge_SOURCES) DIST_SOURCES = $(xmlmerge_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ AM_CPPFLAGS = @all_includes@ -I$(gwenhywfar_symlinkdir) noinst_HEADERS = args.h xmlmerge_SOURCES = args.c main.c xmlmerge_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__append_2) xmlmerge_LDFLAGS = @i18n_libs@ $(am__append_1) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/xmlmerge/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/xmlmerge/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-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 \ || test -f $$p1 \ ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list xmlmerge$(EXEEXT): $(xmlmerge_OBJECTS) $(xmlmerge_DEPENDENCIES) $(EXTRA_xmlmerge_DEPENDENCIES) @rm -f xmlmerge$(EXEEXT) $(AM_V_CCLD)$(xmlmerge_LINK) $(xmlmerge_OBJECTS) $(xmlmerge_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/args.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; 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-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/args.Po -rm -f ./$(DEPDIR)/main.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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-binPROGRAMS 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 ./$(DEPDIR)/args.Po -rm -f ./$(DEPDIR)/main.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile sources: for f in $(xmlmerge_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # 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: gwenhywfar-5.12.0/tools/xmlmerge/main.c0000644000175000017500000001324213142134477014761 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id$ begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /* Internationalization */ #ifdef ENABLE_NLS # include # include # define I18N(m) dgettext("gwenhywfar", m) # define I18S(m) m #else # define I18N(m) m # define I18S(m) m #endif #include "args.h" #include #include #include #include #include #include #include #include #include #include #include #include int addDefinitions(GWEN_XMLNODE *top, GWEN_XMLNODE *node) { GWEN_XMLNODE *nsrc, *ndst; assert(top); assert(node); nsrc=GWEN_XMLNode_GetChild(node); while (nsrc) { if (GWEN_XMLNode_GetType(nsrc)==GWEN_XMLNodeTypeTag) { ndst=GWEN_XMLNode_FindNode(top, GWEN_XMLNodeTypeTag, GWEN_XMLNode_GetData(nsrc)); if (ndst) { GWEN_XMLNODE *n; n=GWEN_XMLNode_GetChild(nsrc); while (n) { GWEN_XMLNODE *newNode; DBG_DEBUG(0, "Adding node \"%s\"", GWEN_XMLNode_GetData(n)); newNode=GWEN_XMLNode_dup(n); GWEN_XMLNode_AddChild(ndst, newNode); n=GWEN_XMLNode_Next(n); } /* while n */ } else { GWEN_XMLNODE *newNode; DBG_DEBUG(0, "Adding branch \"%s\"", GWEN_XMLNode_GetData(nsrc)); newNode=GWEN_XMLNode_dup(nsrc); GWEN_XMLNode_AddChild(top, newNode); } } /* if TAG */ nsrc=GWEN_XMLNode_Next(nsrc); } /* while */ return 0; } int main(int argc, char **argv) { ARGUMENTS *args; int rv; FREEPARAM *inFile; GWEN_XMLNODE *top; GWEN_XMLNODE *comment; GWEN_SYNCIO *sio; GWEN_XML_CONTEXT *ctx; uint32_t flags; rv=GWEN_Init(); if (rv) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } args=Arguments_new(); rv=checkArgs(args, argc, argv); if (rv==-1) { fprintf(stderr, "Parameter error\n"); return rv; } else if (rv==-2) { return 0; } GWEN_Logger_Open(0, "xmlmerge", args->logFile, args->logType, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(0, args->logLevel); inFile=args->params; if (!inFile) { fprintf(stderr, "No input file given.\n"); Arguments_free(args); return 1; } top=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "root"); /* add comment */ comment=GWEN_XMLNode_new(GWEN_XMLNodeTypeComment, "This is an automatically generated file, " "do not edit"); GWEN_XMLNode_AddChild(top, comment); /* add header */ if (args->header) { GWEN_XMLNODE *header; header=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "?xml"); GWEN_XMLNode_SetProperty(header, "version", "1.0"); GWEN_XMLNode_SetProperty(header, "encoding", "utf8"); GWEN_XMLNode_AddHeader(top, header); } /* read all files */ while (inFile) { GWEN_XMLNODE *n; n=GWEN_XMLNode_new(GWEN_XMLNodeTypeTag, "inFile"); if (GWEN_XML_ReadFile(n, inFile->param, GWEN_XML_FLAGS_DEFAULT | GWEN_XML_FLAGS_HANDLE_HEADERS)) { fprintf(stderr, "ERROR: Error reading file \"%s\"\n", inFile->param); GWEN_XMLNode_free(n); GWEN_XMLNode_free(top); return 2; } if (addDefinitions(top, n)) { fprintf(stderr, "ERROR: Error merging file \"%s\"\n", inFile->param); GWEN_XMLNode_free(n); GWEN_XMLNode_free(top); return 3; } GWEN_XMLNode_free(n); inFile=inFile->next; } /* while */ /* write file */ if (args->compact) { flags=GWEN_XML_FLAGS_SIMPLE; } else { flags=GWEN_XML_FLAGS_INDENT; } flags|=GWEN_XML_FLAGS_HANDLE_HEADERS; ctx=GWEN_XmlCtxStore_new(NULL, flags); sio=GWEN_SyncIo_File_new(args->outputFile, GWEN_SyncIo_File_CreationMode_CreateAlways); GWEN_SyncIo_AddFlags(sio, GWEN_SYNCIO_FILE_FLAGS_READ | GWEN_SYNCIO_FILE_FLAGS_WRITE | GWEN_SYNCIO_FILE_FLAGS_UREAD | GWEN_SYNCIO_FILE_FLAGS_UWRITE | GWEN_SYNCIO_FILE_FLAGS_GREAD | GWEN_SYNCIO_FILE_FLAGS_GWRITE); rv=GWEN_SyncIo_Connect(sio); if (rv<0) { fprintf(stderr, "Error opening file \"%s\": %s\n", args->outputFile, strerror(errno)); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return 5; } rv=GWEN_XMLNode_WriteToStream(top, ctx, sio); if (rv<0) { fprintf(stderr, "Error writing to file \"%s\": %s\n", args->outputFile, strerror(errno)); GWEN_SyncIo_Disconnect(sio); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return 5; } /* close file */ rv=GWEN_SyncIo_Disconnect(sio); if (rv<0) { fprintf(stderr, "Error closing output stream (%d)\n", rv); DBG_INFO(GWEN_LOGDOMAIN, "here (%d)", rv); GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); return 5; } GWEN_SyncIo_free(sio); GWEN_XmlCtx_free(ctx); GWEN_XMLNode_free(top); Arguments_free(args); return 0; } gwenhywfar-5.12.0/tools/gcttool/0000775000175000017500000000000014730345121013576 500000000000000gwenhywfar-5.12.0/tools/gcttool/showuser.c0000644000175000017500000001541413142134476015551 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include int showUser(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int cid; int shown=0; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "contextId", /* name */ 0, /* minnum */ 1, /* maxnum */ "i", /* short option */ "id", /* long option */ "Context id (0 for any)", /* short description */ "Context id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } cid=GWEN_DB_GetIntValue(db, "contextId", 0, 0); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { uint32_t ctxIds[32]; uint32_t ctxCount; uint32_t i; ctxCount=32; rv=GWEN_Crypt_Token_GetContextIdList(ct, ctxIds, &ctxCount, 0); if (rv<0) { DBG_ERROR(0, "Error filling context list"); GWEN_Crypt_Token_Close(ct, 0, 0); return 3; } for (i=0; i #endif #include "globals.h" #include #include #include #include int changePin(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; int rv; int admin; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, "admin", 0, 1, "a", "admin", "Change the admin pin instead of the access pin", "Change the admin pin instead of the access pin" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); admin=GWEN_DB_GetIntValue(db, "admin", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } /* change pin */ rv=GWEN_Crypt_Token_ChangePin(ct, admin, 0); if (rv) { DBG_ERROR(0, "Could not change pin"); return 3; } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } fprintf(stderr, "Crypt Token updated.\n"); return 0; } gwenhywfar-5.12.0/tools/gcttool/cttest.c0000666000175000017500000004153713553076353015216 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: main.c 1107 2007-01-07 21:17:05Z martin $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "src/base/i18n_l.h" #ifdef OS_WIN32 # define DIRSEP "\\" #else # define DIRSEP "/" #endif #ifdef HAVE_I18N # include # include #endif #define GCT_LOGDOMAIN "GCT" //#define DEBUG_GCT_TOOL int signWithNew(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; /* unsigned int cid; */ int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "contextId", /* name */ 0, /* minnum */ 1, /* maxnum */ "i", /* short option */ "id", /* long option */ "Context id (0 for any)", /* short description */ "Context id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* cid=GWEN_DB_GetIntValue(db, "contextId", 0, 0); */ ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, ttype); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tname); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { uint8_t clearText[20]= { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14 }; uint8_t signature[256]; uint32_t signLen; GWEN_CRYPT_PADDALGO *algo; algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_Iso9796_1A4); signLen=sizeof(signature); rv=GWEN_Crypt_Token_Sign(ct, 0x81, /* local sign key */ algo, clearText, 20, signature, &signLen, NULL, 0); if (rv) { DBG_ERROR(0, "Could not sign data (%d)", rv); return 3; } fprintf(stderr, "Signature is:\n"); GWEN_Text_DumpString((const char *) signature, signLen, 2); rv=GWEN_Crypt_Token_Verify(ct, 0x81, algo, clearText, 20, signature, signLen, 0, 0); if (rv) { DBG_ERROR(0, "Could not verify data (%d)", rv); return 3; } fprintf(stderr, "Signature is ok.\n"); } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; } int cryptWithNew(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; /* unsigned int cid; */ int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "contextId", /* name */ 0, /* minnum */ 1, /* maxnum */ "i", /* short option */ "id", /* long option */ "Context id (0 for any)", /* short description */ "Context id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } /* cid=GWEN_DB_GetIntValue(db, "contextId", 0, 0); */ ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, ttype); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tname); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { uint8_t clearText[16]= { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 }; uint8_t encrypted[128]; uint32_t elen; uint8_t decrypted[128]; uint32_t dlen; GWEN_CRYPT_PADDALGO *algo; algo=GWEN_Crypt_PaddAlgo_new(GWEN_Crypt_PaddAlgoId_LeftZero); elen=sizeof(encrypted); rv=GWEN_Crypt_Token_Encipher(ct, 0x86, algo, clearText, 16, encrypted, &elen, 0); if (rv) { DBG_ERROR(0, "Could not encipher data (%d)", rv); return 3; } fprintf(stderr, "Encrypted data is:\n"); GWEN_Text_DumpString((const char *) encrypted, elen, 2); dlen=sizeof(decrypted); rv=GWEN_Crypt_Token_Decipher(ct, 0x86, algo, encrypted, elen, decrypted, &dlen, 0); if (rv) { DBG_ERROR(0, "Could not decipher data (%d)", rv); return 3; } if (memcmp(clearText, decrypted, dlen)) { DBG_ERROR(0, "Deciphered data does not equal clear text(%d)", rv); return 3; } fprintf(stderr, "Deciphered data is ok.\n"); } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; } int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; int err; GWEN_GUI *gui; GWEN_STRINGLIST *slist; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "C", /* short option */ "cfgfile", /* long option */ "Specify the configuration file", /* short description */ "Specify the configuration file" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "forcePin", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "forcepin", /* long option */ "force pin entry", /* short description */ "force pin entry even if the error counter is not zero" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); slist = GWEN_PathManager_GetPaths(GWEN_PM_LIBNAME, GWEN_PM_LOCALEDIR); assert(GWEN_StringList_Count(slist) > 0); #ifdef HAVE_I18N { const char *localedir = GWEN_StringList_FirstString(slist); setlocale(LC_ALL, ""); if (bindtextdomain(PACKAGE, localedir)==0) fprintf(stderr, "Error binding locale\n"); } #endif GWEN_StringList_free(slist); GWEN_Logger_Open(GCT_LOGDOMAIN, "gct-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); #ifdef DEBUG_GCT_TOOL GWEN_Logger_SetLevel(GCT_LOGDOMAIN, GWEN_LoggerLevel_Info); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Debug); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Info); #else GWEN_Logger_SetLevel(GCT_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(GWEN_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); #endif #ifdef GCT_IS_EXPERIMENTAL fprintf(stderr, "\n"); fprintf(stderr, "\n"); fprintf(stderr, "=================== WARNING ===================\n"); fprintf(stderr, "This tool is still EXPERIMENTAL !!!\n"); fprintf(stderr, "Please DON'T USE it with your daily key files !\n"); fprintf(stderr, "===============================================\n"); fprintf(stderr, "\n"); fprintf(stderr, "\n"); #endif db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } GWEN_Buffer_AppendString(ubuf, I18N("\nCommands:\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" create:\n" " This command creates a crypt token" "\n\n")); GWEN_Buffer_AppendString(ubuf, I18N(" showuser:\n" " Display user data stored on the " "token\n\n")); fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); return 1; } if (strcasecmp(cmd, "sign")==0) { rv=signWithNew(db, argc, argv); } else if (strcasecmp(cmd, "crypt")==0) { rv=cryptWithNew(db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; } gwenhywfar-5.12.0/tools/gcttool/globals.h0000644000175000017500000000323713142134464015317 00000000000000/*************************************************************************** begin : Mon Mar 01 2004 copyright : (C) 2004 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifndef GCTTOOL_GLOBALS_H #define GCTTOOL_GLOBALS_H #include #include #include #include #include #include #include #include #include #include #include #define GCT_LOGDOMAIN "gcttool" #include "src/base/i18n_l.h" GWEN_CRYPT_TOKEN *getCryptToken(const char *ttype, const char *tname); int createToken(GWEN_DB_NODE *dbArgs, int argc, char **argv); int showUser(GWEN_DB_NODE *dbArgs, int argc, char **argv); int showKey(GWEN_DB_NODE *dbArgs, int argc, char **argv); int genKey(GWEN_DB_NODE *dbArgs, int argc, char **argv); int activateKey(GWEN_DB_NODE *dbArgs, int argc, char **argv); int updateToken(GWEN_DB_NODE *dbArgs, int argc, char **argv); int setSignSeq(GWEN_DB_NODE *dbArgs, int argc, char **argv); int setKey(GWEN_DB_NODE *dbArgs, int argc, char **argv); int changePin(GWEN_DB_NODE *dbArgs, int argc, char **argv); int hashTree(GWEN_DB_NODE *dbArgs, int argc, char **argv); int checkTree(GWEN_DB_NODE *dbArgs, int argc, char **argv); int showPasswords(GWEN_DB_NODE *dbArgs, int argc, char **argv); #endif /* GCTTOOL_GLOBALS_H */ gwenhywfar-5.12.0/tools/gcttool/Makefile.am0000664000175000017500000000164714203137070015557 00000000000000AM_CPPFLAGS= -I$(top_builddir) -I$(top_srcdir) -I$(gwenhywfar_symlinkdir) -I$(top_srcdir)/src/base if IF_HAVE_OPENSSL AM_CPPFLAGS+= $(OPENSSL_CFLAGS) endif #EXTRA_DIST= bin_PROGRAMS=gct-tool noinst_HEADERS=\ globals.h gct_tool_SOURCES=\ activatekey.c \ changepin.c \ create.c \ genkey.c \ showkey.c \ showuser.c \ update.c \ setsignseq.c \ setkey.c \ hashtree.c \ checktree.c \ showpasswords.c \ main.c gct_tool_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) if IS_WINDOWS gct_tool_LDFLAGS=-mconsole gct_tool_LDADD+=$(PROG_LIBRARIES) endif noinst_PROGRAMS=cttest cttest_SOURCES=cttest.c cttest_LDADD=$(top_builddir)/src/$(gwenhywfar_internal_libname) @i18n_libs@ if IF_HAVE_OPENSSL gct_tool_LDADD+=$(OPENSSL_LIBS) endif sources: for f in $(gct_tool_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done gwenhywfar-5.12.0/tools/gcttool/main.c0000664000175000017500000001712614274772135014631 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif /*#define GCT_IS_EXPERIMENTAL #define DEBUG_GCT_TOOL */ #include #include #include #include "funcs.h" #include "globals.h" #ifdef OS_WIN32 # define DIRSEP "\\" #else # define DIRSEP "/" #endif #ifdef HAVE_I18N # include # include #endif #ifdef HAVE_OPENSSL # include # include # include # include #endif #ifdef HAVE_OPENSSL int getKeyDataFromTextOpenSSL(GWEN_UNUSED GWEN_GUI *gui, const char *password, unsigned char *buffer, unsigned int bsize) { DES_cblock left, right; int i; if (bsize!=16) { DBG_ERROR(GWEN_LOGDOMAIN, "Buffer must be exact 16 bytes in length"); return -1; } DES_string_to_2keys(password, &left, &right); for (i=0; i<8; i++) *(buffer++)=left[i]; for (i=0; i<8; i++) *(buffer++)=right[i]; return 0; } #endif GWEN_CRYPT_TOKEN *getCryptToken(const char *ttype, const char *tname) { GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager("ct"); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return NULL; } pl=GWEN_PluginManager_GetPlugin(pm, ttype); if (pl==0) { DBG_ERROR(0, "Plugin not found"); fprintf(stderr, "%s", I18N("The plugin could not be found.\n" "Please make sure that you have the following " "packages installed (at least on Debian/Ubuntu):\n" "- libchipcard-plugins-libgwenhywfar (for chipcards)\n" "- libaqbanking-plugins-libgwenhywfar\n")); return NULL; } DBG_INFO(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tname); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return NULL; } return ct; } int main(int argc, char **argv) { GWEN_DB_NODE *db; const char *cmd; int rv; int err; GWEN_GUI *gui; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "cfgfile", /* name */ 0, /* minnum */ 1, /* maxnum */ "C", /* short option */ "cfgfile", /* long option */ "Specify the configuration file", /* short description */ "Specify the configuration file" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "forcePin", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "forcepin", /* long option */ "force pin entry", /* short description */ "force pin entry even if the error counter is not zero" }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; const GWEN_FUNCS funcs[]= { GWEN_FE_DAH("create", createToken, I18N("This command creates a crypt token")), GWEN_FE_DAH("showuser", showUser, I18N("Display user data stored on the token")), GWEN_FE_DAH("showkey", showKey, I18N("Display key info stored on the token")), GWEN_FE_DAH("genkey", genKey, I18N("Generate keys on crypt token")), GWEN_FE_DAH("activateKey", activateKey, I18N("Activate keys on crypt token")), GWEN_FE_DAH("update", updateToken, I18N("Update Crypt Token to newer version (e.g. OpenHBCI key files")), GWEN_FE_DAH("setsignseq", setSignSeq, I18N("Set signature counter")), GWEN_FE_DAH("changepin", changePin, I18N("Change pin of the crypt token")), GWEN_FE_DA("setkey", setKey), GWEN_FE_DA("hashTree", hashTree), GWEN_FE_DA("checkTree", checkTree), GWEN_FE_DAH("showpasswords", showPasswords, I18N("Display passwords store in a GWEN_PASSWD_STORE file")), GWEN_FE_END(), }; const GWEN_FUNCS *func; err=GWEN_Init(); if (err) { fprintf(stderr, "Could not initialize Gwenhywfar.\n"); return 2; } gui=GWEN_Gui_CGui_new(); GWEN_Gui_SetGui(gui); #ifdef HAVE_OPENSSL /* for conversion purposes */ SSL_load_error_strings(); SSL_library_init(); GWEN_Gui_SetKeyDataFromTextOpenSslFn(gui, getKeyDataFromTextOpenSSL); #endif GWEN_Logger_Open(GCT_LOGDOMAIN, "gct-tool", 0, GWEN_LoggerType_Console, GWEN_LoggerFacility_User); GWEN_Logger_SetLevel(GCT_LOGDOMAIN, GWEN_LoggerLevel_Warning); GWEN_Logger_SetLevel(0, GWEN_LoggerLevel_Warning); #ifdef GCT_IS_EXPERIMENTAL fprintf(stderr, "\n"); fprintf(stderr, "\n"); fprintf(stderr, "=================== WARNING ===================\n"); fprintf(stderr, "This tool is still EXPERIMENTAL !!!\n"); fprintf(stderr, "Please DON'T USE it with your daily key files !\n"); fprintf(stderr, "===============================================\n"); fprintf(stderr, "\n"); fprintf(stderr, "\n"); #endif db=GWEN_DB_Group_new("arguments"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM | GWEN_ARGS_MODE_STOP_AT_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments main\n"); return -1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); GWEN_Buffer_AppendString(ubuf, I18N("Usage: ")); GWEN_Buffer_AppendString(ubuf, argv[0]); GWEN_Buffer_AppendString(ubuf, I18N(" [GLOBAL OPTIONS] COMMAND " "[LOCAL OPTIONS]\n")); GWEN_Buffer_AppendString(ubuf, I18N("\nGlobal Options:\n")); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); fprintf(stderr, "%s\n", I18N("\nCommands:\n\n")); GWEN_Funcs_Usage_With_Help(funcs); return 0; } if (rv) { argc-=rv-1; argv+=rv-1; } cmd=GWEN_DB_GetCharValue(db, "params", 0, 0); if (!cmd) { fprintf(stderr, "ERROR: Command needed.\n"); return 1; } func=GWEN_Funcs_Find(funcs, cmd); if (func!=NULL) { rv=GWEN_Funcs_Call_DB_NODE_Args(func, db, argc, argv); } else { fprintf(stderr, "ERROR: Unknown command \"%s\".\n", cmd); rv=1; } err=GWEN_Fini(); if (err) { fprintf(stderr, "WARNING: Could not deinitialize Gwenhywfar.\n"); } return rv; } gwenhywfar-5.12.0/tools/gcttool/checktree.c0000644000175000017500000000564213142134476015631 00000000000000/*************************************************************************** begin : Tue Jun 01 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include #include #include #include #include int checkTree(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *folder; GWEN_MDIGEST *md; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "folder", /* name */ 1, /* minnum */ 1, /* maxnum */ "d", /* short option */ "dir", /* long option */ "Specify folder to check", /* short description */ "Specify folder to check" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } folder=GWEN_DB_GetCharValue(db, "folder", 0, NULL); assert(folder); /* check hash list */ md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_CheckFileTree(md, folder, "checksums.rmd", 0, 0); if (rv<0) { fprintf(stderr, "ERROR: Integrity check failed"); GWEN_MDigest_free(md); return 2; } GWEN_MDigest_free(md); fprintf(stdout, "All files found (passed)\n"); return 0; } gwenhywfar-5.12.0/tools/gcttool/activatekey.c0000644000175000017500000001103413142134476016175 00000000000000/*************************************************************************** begin : Thu Jun 24 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int activateKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; int rv; const char *s; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id", /* short description */ "Key id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); if (keyId==0) { DBG_ERROR(0, "Key Id must not be zero"); return 1; } s=GWEN_DB_GetCharValue(db, "algo", 0, "rsa"); if (!s) { DBG_ERROR(0, "Algo id missing"); return 1; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { /* activate key */ rv=GWEN_Crypt_Token_ActivateKey(ct, keyId, 0); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Error activating key (%d)", rv); return 3; } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } fprintf(stderr, "Key %d successfully activated.\n", keyId); return 0; } gwenhywfar-5.12.0/tools/gcttool/hashtree.c0000644000175000017500000000704213142134476015473 00000000000000/*************************************************************************** begin : Tue Jun 01 2010 copyright : (C) 2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include #include int hashTree(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *folder; GWEN_MDIGEST *md; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; GWEN_BUFFER *tbuf; FILE *f; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "folder", /* name */ 1, /* minnum */ 1, /* maxnum */ "d", /* short option */ "dir", /* long option */ "Specify folder to hash", /* short description */ "Specify folder to hash" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } folder=GWEN_DB_GetCharValue(db, "folder", 0, NULL); assert(folder); /* hash */ sl=GWEN_StringList_new(); md=GWEN_MDigest_Rmd160_new(); rv=GWEN_MDigest_HashFileTree(md, folder, "checksums.rmd", sl); if (rv<0) { fprintf(stderr, "ERROR: Could not hash folder tree (%d)\n", rv); return 2; } /* write checksum file */ tbuf=GWEN_Buffer_new(0, 256, 0, 1); GWEN_Buffer_AppendString(tbuf, folder); GWEN_Buffer_AppendString(tbuf, GWEN_DIR_SEPARATOR_S "checksums.rmd"); f=fopen(GWEN_Buffer_GetStart(tbuf), "w+"); if (f==NULL) { fprintf(stderr, "ERROR: Could not open output file: %s\n", strerror(errno)); return 2; } se=GWEN_StringList_FirstEntry(sl); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) fprintf(f, "%s\n", s); se=GWEN_StringListEntry_Next(se); } GWEN_MDigest_free(md); GWEN_StringList_free(sl); if (fclose(f)) { fprintf(stderr, "ERROR: Could not close output file: %s\n", strerror(errno)); return 2; } GWEN_Buffer_free(tbuf); return 0; } gwenhywfar-5.12.0/tools/gcttool/update.c0000644000175000017500000000741313142134476015154 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int updateToken(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* allow update of key file */ GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_ALLOW_UPDATE); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } fprintf(stderr, "Crypt Token updated.\n"); return 0; } gwenhywfar-5.12.0/tools/gcttool/Makefile.in0000664000175000017500000007346114730344662015607 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@ @IF_HAVE_OPENSSL_TRUE@am__append_1 = $(OPENSSL_CFLAGS) bin_PROGRAMS = gct-tool$(EXEEXT) @IS_WINDOWS_TRUE@am__append_2 = $(PROG_LIBRARIES) noinst_PROGRAMS = cttest$(EXEEXT) @IF_HAVE_OPENSSL_TRUE@am__append_3 = $(OPENSSL_LIBS) subdir = tools/gcttool ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_cttest_OBJECTS = cttest.$(OBJEXT) cttest_OBJECTS = $(am_cttest_OBJECTS) cttest_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_gct_tool_OBJECTS = activatekey.$(OBJEXT) changepin.$(OBJEXT) \ create.$(OBJEXT) genkey.$(OBJEXT) showkey.$(OBJEXT) \ showuser.$(OBJEXT) update.$(OBJEXT) setsignseq.$(OBJEXT) \ setkey.$(OBJEXT) hashtree.$(OBJEXT) checktree.$(OBJEXT) \ showpasswords.$(OBJEXT) main.$(OBJEXT) gct_tool_OBJECTS = $(am_gct_tool_OBJECTS) am__DEPENDENCIES_1 = @IS_WINDOWS_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) @IF_HAVE_OPENSSL_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) gct_tool_DEPENDENCIES = \ $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) gct_tool_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(gct_tool_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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/activatekey.Po \ ./$(DEPDIR)/changepin.Po ./$(DEPDIR)/checktree.Po \ ./$(DEPDIR)/create.Po ./$(DEPDIR)/cttest.Po \ ./$(DEPDIR)/genkey.Po ./$(DEPDIR)/hashtree.Po \ ./$(DEPDIR)/main.Po ./$(DEPDIR)/setkey.Po \ ./$(DEPDIR)/setsignseq.Po ./$(DEPDIR)/showkey.Po \ ./$(DEPDIR)/showpasswords.Po ./$(DEPDIR)/showuser.Po \ ./$(DEPDIR)/update.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(cttest_SOURCES) $(gct_tool_SOURCES) DIST_SOURCES = $(cttest_SOURCES) $(gct_tool_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ AM_CPPFLAGS = -I$(top_builddir) -I$(top_srcdir) \ -I$(gwenhywfar_symlinkdir) -I$(top_srcdir)/src/base \ $(am__append_1) noinst_HEADERS = \ globals.h gct_tool_SOURCES = \ activatekey.c \ changepin.c \ create.c \ genkey.c \ showkey.c \ showuser.c \ update.c \ setsignseq.c \ setkey.c \ hashtree.c \ checktree.c \ showpasswords.c \ main.c gct_tool_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) \ $(am__append_2) $(am__append_3) @IS_WINDOWS_TRUE@gct_tool_LDFLAGS = -mconsole cttest_SOURCES = cttest.c cttest_LDADD = $(top_builddir)/src/$(gwenhywfar_internal_libname) @i18n_libs@ all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu tools/gcttool/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/gcttool/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-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 \ || test -f $$p1 \ ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list cttest$(EXEEXT): $(cttest_OBJECTS) $(cttest_DEPENDENCIES) $(EXTRA_cttest_DEPENDENCIES) @rm -f cttest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cttest_OBJECTS) $(cttest_LDADD) $(LIBS) gct-tool$(EXEEXT): $(gct_tool_OBJECTS) $(gct_tool_DEPENDENCIES) $(EXTRA_gct_tool_DEPENDENCIES) @rm -f gct-tool$(EXEEXT) $(AM_V_CCLD)$(gct_tool_LINK) $(gct_tool_OBJECTS) $(gct_tool_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/activatekey.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/changepin.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checktree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/create.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cttest.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genkey.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hashtree.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setkey.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setsignseq.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showkey.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showpasswords.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showuser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(bindir)"; 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-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/activatekey.Po -rm -f ./$(DEPDIR)/changepin.Po -rm -f ./$(DEPDIR)/checktree.Po -rm -f ./$(DEPDIR)/create.Po -rm -f ./$(DEPDIR)/cttest.Po -rm -f ./$(DEPDIR)/genkey.Po -rm -f ./$(DEPDIR)/hashtree.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/setkey.Po -rm -f ./$(DEPDIR)/setsignseq.Po -rm -f ./$(DEPDIR)/showkey.Po -rm -f ./$(DEPDIR)/showpasswords.Po -rm -f ./$(DEPDIR)/showuser.Po -rm -f ./$(DEPDIR)/update.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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-binPROGRAMS 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 ./$(DEPDIR)/activatekey.Po -rm -f ./$(DEPDIR)/changepin.Po -rm -f ./$(DEPDIR)/checktree.Po -rm -f ./$(DEPDIR)/create.Po -rm -f ./$(DEPDIR)/cttest.Po -rm -f ./$(DEPDIR)/genkey.Po -rm -f ./$(DEPDIR)/hashtree.Po -rm -f ./$(DEPDIR)/main.Po -rm -f ./$(DEPDIR)/setkey.Po -rm -f ./$(DEPDIR)/setsignseq.Po -rm -f ./$(DEPDIR)/showkey.Po -rm -f ./$(DEPDIR)/showpasswords.Po -rm -f ./$(DEPDIR)/showuser.Po -rm -f ./$(DEPDIR)/update.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile sources: for f in $(gct_tool_SOURCES); do \ echo $(subdir)/$$f >>$(top_srcdir)/i18nsources; \ done for d in $(SUBDIRS); do \ make -C $$d sources; \ done # 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: gwenhywfar-5.12.0/tools/gcttool/setsignseq.c0000644000175000017500000001243713142134476016061 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int setSignSeq(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; unsigned int seq; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id (0 for any)", /* short description */ "Key id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "seq", /* name */ 1, /* minnum */ 1, /* maxnum */ "s", /* short option */ "seq", /* long option */ "New sequence counter value", /* short description */ "New sequence counter value" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); seq=GWEN_DB_GetIntValue(db, "seq", 0, 0); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { const GWEN_CRYPT_TOKEN_KEYINFO *ki; ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER, 0); if (ki) { GWEN_CRYPT_TOKEN_KEYINFO *nki; nki=GWEN_Crypt_Token_KeyInfo_dup(ki); GWEN_Crypt_Token_KeyInfo_SetSignCounter(nki, seq); rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, nki, 0); GWEN_Crypt_Token_KeyInfo_free(nki); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to set sign counter (%d)", rv); return 4; } } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; } gwenhywfar-5.12.0/tools/gcttool/setkey.c0000644000175000017500000001576713142134476015211 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int setKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; int seq; int keyNum; int keyVer; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id (0 for any)", /* short description */ "Key id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyNum", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "keynum", /* long option */ "Key number", /* short description */ "Key number" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyVer", /* name */ 0, /* minnum */ 1, /* maxnum */ 0, /* short option */ "keyver", /* long option */ "Key version", /* short description */ "Key version" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "seq", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "seq", /* long option */ "New sequence counter value", /* short description */ "New sequence counter value" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); seq=GWEN_DB_GetIntValue(db, "seq", 0, -1); keyNum=GWEN_DB_GetIntValue(db, "keyNum", 0, -1); keyVer=GWEN_DB_GetIntValue(db, "keyVer", 0, -1); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { const GWEN_CRYPT_TOKEN_KEYINFO *ki; ki=GWEN_Crypt_Token_GetKeyInfo(ct, keyId, GWEN_CRYPT_TOKEN_KEYFLAGS_HASSIGNCOUNTER, 0); if (ki) { GWEN_CRYPT_TOKEN_KEYINFO *nki; nki=GWEN_Crypt_Token_KeyInfo_dup(ki); if (seq!=-1) { GWEN_Crypt_Token_KeyInfo_SetSignCounter(nki, seq); fprintf(stderr, "Setting signature counter\n"); } if (keyNum!=-1) { fprintf(stderr, "Setting key number\n"); GWEN_Crypt_Token_KeyInfo_AddFlags(nki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYNUMBER); GWEN_Crypt_Token_KeyInfo_SetKeyNumber(nki, keyNum); } if (keyVer!=-1) { fprintf(stderr, "Setting key version\n"); GWEN_Crypt_Token_KeyInfo_AddFlags(nki, GWEN_CRYPT_TOKEN_KEYFLAGS_HASKEYVERSION); GWEN_Crypt_Token_KeyInfo_SetKeyVersion(nki, keyVer); } /* store key info */ rv=GWEN_Crypt_Token_SetKeyInfo(ct, keyId, nki, 0); GWEN_Crypt_Token_KeyInfo_free(nki); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Unable to set modify key information (%d)", rv); return 4; } } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; } gwenhywfar-5.12.0/tools/gcttool/create.c0000644000175000017500000000760213142134476015135 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include int createToken(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_PLUGIN_MANAGER *pm; GWEN_PLUGIN *pl; GWEN_CRYPT_TOKEN *ct; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ pm=GWEN_PluginManager_FindPluginManager(GWEN_CRYPT_TOKEN_PLUGIN_TYPENAME); if (pm==0) { DBG_ERROR(0, "Plugin manager not found"); return 3; } pl=GWEN_PluginManager_GetPlugin(pm, ttype); if (pl==0) { DBG_ERROR(0, "Plugin not found"); return 3; } DBG_ERROR(0, "Plugin found"); ct=GWEN_Crypt_Token_Plugin_CreateToken(pl, tname); if (ct==0) { DBG_ERROR(0, "Could not create crypt token"); return 3; } /* create crypt token */ rv=GWEN_Crypt_Token_Create(ct, 0); if (rv) { DBG_ERROR(0, "Could not create token"); return 3; } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } return 0; } gwenhywfar-5.12.0/tools/gcttool/showkey.c0000644000175000017500000002203313412721014015344 00000000000000/*************************************************************************** $RCSfile$ ------------------- cvs : $Id: create.c 892 2005-11-03 00:20:45Z aquamaniac $ begin : Tue May 03 2005 copyright : (C) 2005 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int showKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; int shown=0; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 0, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id (0 for any)", /* short description */ "Key id (0 for any)" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { uint32_t keyIds[64]; uint32_t keyCount; uint32_t i; keyCount=64; rv=GWEN_Crypt_Token_GetKeyIdList(ct, keyIds, &keyCount, 0); if (rv<0) { DBG_ERROR(0, "Error filling key list"); GWEN_Crypt_Token_Close(ct, 0, 0); return 3; } for (i=0; i>=1; } } fprintf(stdout, "Modulus : (%d bits)\n", nbits); while (len) { uint32_t rl; rl=(len>16)?16:len; GWEN_Text_ToHexBuffer((const char *)p, rl, tbuf, 2, ' ', 0); fprintf(stdout, " %s\n", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); p+=rl; len-=rl; } GWEN_Buffer_free(tbuf); } if (flags & GWEN_CRYPT_TOKEN_KEYFLAGS_HASEXPONENT) { GWEN_BUFFER *tbuf; const char *p; uint32_t len; tbuf=GWEN_Buffer_new(0, 256, 0, 1); fprintf(stdout, "Exponent : \n"); p=(const char *)GWEN_Crypt_Token_KeyInfo_GetExponentData(ki); len=GWEN_Crypt_Token_KeyInfo_GetExponentLen(ki); while (len) { uint32_t rl; rl=(len>16)?16:len; GWEN_Text_ToHexBuffer(p, rl, tbuf, 2, ' ', 0); fprintf(stdout, " %s\n", GWEN_Buffer_GetStart(tbuf)); GWEN_Buffer_Reset(tbuf); p+=rl; len-=rl; } GWEN_Buffer_free(tbuf); } shown++; } } } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } if (!shown) { if (keyId==0) { DBG_ERROR(0, "No key found"); } else { DBG_ERROR(0, "Key %u not found", keyId); } return 1; } return 0; } gwenhywfar-5.12.0/tools/gcttool/showpasswords.c0000644000175000017500000000676113142134476016625 00000000000000/*************************************************************************** begin : Mon Oct 10 2016 copyright : (C) 2016 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include //#include //#include //#include #include /* * Show passwords from a GWEN_PASSWD_STORE file. */ int showPasswords(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *file; GWEN_PASSWD_STORE *sto; GWEN_STRINGLIST *sl; GWEN_STRINGLISTENTRY *se; int rv; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "file", /* name */ 1, /* minnum */ 1, /* maxnum */ "f", /* short option */ "file", /* long option */ "Specify the password file", /* short description */ "Specify the password file" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } file=GWEN_DB_GetCharValue(db, "file", 0, NULL); assert(file); sto=GWEN_PasswordStore_new(file); sl=GWEN_StringList_new(); rv=GWEN_PasswordStore_GetTokenList(sto, sl); if (rv<0) { fprintf(stderr, "ERROR: Could not get token list: %d\n", rv); GWEN_PasswordStore_free(sto); return 3; } se=GWEN_StringList_FirstEntry(sl); while (se) { const char *s; s=GWEN_StringListEntry_Data(se); if (s && *s) { char passwd[512]; rv=GWEN_PasswordStore_GetPassword(sto, s, passwd, 1, sizeof(passwd)-1); if (rv<0) { fprintf(stderr, "ERROR: Could not get password for token \"%s\": %d\n", s, rv); GWEN_PasswordStore_free(sto); return 3; } passwd[sizeof(passwd)-1]=0; fprintf(stdout, "\"%s\" -> \"%s\"\n", s, passwd); memset(passwd, 0, sizeof(passwd)); } se=GWEN_StringListEntry_Next(se); } GWEN_StringList_free(sl); GWEN_PasswordStore_free(sto); return 0; } gwenhywfar-5.12.0/tools/gcttool/genkey.c0000644000175000017500000001526313142134476015156 00000000000000/*************************************************************************** begin : Tue May 03 2005 copyright : (C) 2005-2010 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include "globals.h" #include #include #include #include int genKey(GWEN_DB_NODE *dbArgs, int argc, char **argv) { GWEN_DB_NODE *db; const char *ttype; const char *tname; GWEN_CRYPT_TOKEN *ct; unsigned int keyId; unsigned int keySize; GWEN_CRYPT_CRYPTALGOID algoId; int rv; const char *s; const GWEN_ARGS args[]= { { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keyId", /* name */ 1, /* minnum */ 1, /* maxnum */ "k", /* short option */ "key", /* long option */ "Key id", /* short description */ "Key id" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenType", /* name */ 1, /* minnum */ 1, /* maxnum */ "t", /* short option */ "ttype", /* long option */ "Specify the crypt token type", /* short description */ "Specify the crypt token type" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "tokenName", /* name */ 0, /* minnum */ 1, /* maxnum */ "n", /* short option */ "tname", /* long option */ "Specify the crypt token name", /* short description */ "Specify the crypt token name" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Char, /* type */ "algo", /* name */ 0, /* minnum */ 1, /* maxnum */ "a", /* short option */ "algo", /* long option */ "Specify the algorithm", /* short description */ "Specify the algorithm" /* long description */ }, { GWEN_ARGS_FLAGS_HAS_ARGUMENT, /* flags */ GWEN_ArgsType_Int, /* type */ "keysize", /* name */ 0, /* minnum */ 1, /* maxnum */ "s", /* short option */ "keysize", /* long option */ "Key size in bytes", /* short description */ "Key size in bytes" /* long description */ }, { 0, /* flags */ GWEN_ArgsType_Int, /* type */ "exp65537", /* name */ 0, /* minnum */ 1, /* maxnum */ "e", /* short option */ "exp65537", /* long option */ "Use default exponent of 65537", /* short description */ "Use default exponent of 65537" /* long description */ }, { GWEN_ARGS_FLAGS_HELP | GWEN_ARGS_FLAGS_LAST, /* flags */ GWEN_ArgsType_Int, /* type */ "help", /* name */ 0, /* minnum */ 0, /* maxnum */ "h", /* short option */ "help", /* long option */ "Show this help screen", /* short description */ "Show this help screen" /* long description */ } }; db=GWEN_DB_GetGroup(dbArgs, GWEN_DB_FLAGS_DEFAULT, "local"); rv=GWEN_Args_Check(argc, argv, 1, GWEN_ARGS_MODE_ALLOW_FREEPARAM, args, db); if (rv==GWEN_ARGS_RESULT_ERROR) { fprintf(stderr, "ERROR: Could not parse arguments\n"); return 1; } else if (rv==GWEN_ARGS_RESULT_HELP) { GWEN_BUFFER *ubuf; ubuf=GWEN_Buffer_new(0, 1024, 0, 1); if (GWEN_Args_Usage(args, ubuf, GWEN_ArgsOutType_Txt)) { fprintf(stderr, "ERROR: Could not create help string\n"); return 1; } fprintf(stderr, "%s\n", GWEN_Buffer_GetStart(ubuf)); GWEN_Buffer_free(ubuf); return 0; } keyId=GWEN_DB_GetIntValue(db, "keyId", 0, 0); if (keyId==0) { DBG_ERROR(0, "Key Id must not be zero"); return 1; } s=GWEN_DB_GetCharValue(db, "algo", 0, "rsa"); if (!s) { DBG_ERROR(0, "Algo id missing"); return 1; } algoId=GWEN_Crypt_CryptAlgoId_fromString(s); if (algoId==GWEN_Crypt_CryptAlgoId_Unknown) { DBG_ERROR(0, "Bad algo id [%s]", s); return 1; } keySize=GWEN_DB_GetIntValue(db, "keySize", 0, 96); if (keySize==0) { DBG_ERROR(0, "Invalid key size %d", keySize); return 1; } ttype=GWEN_DB_GetCharValue(db, "tokenType", 0, 0); assert(ttype); tname=GWEN_DB_GetCharValue(db, "tokenName", 0, 0); /* get crypt token */ ct=getCryptToken(ttype, tname); if (ct==0) return 3; if (GWEN_DB_GetIntValue(dbArgs, "forcePin", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_FORCE_PIN_ENTRY); if (GWEN_DB_GetIntValue(db, "exp65537", 0, 0)) GWEN_Crypt_Token_AddModes(ct, GWEN_CRYPT_TOKEN_MODE_EXP_65537); /* open crypt token for use */ rv=GWEN_Crypt_Token_Open(ct, 1, 0); if (rv) { DBG_ERROR(0, "Could not open token"); return 3; } else { GWEN_CRYPT_CRYPTALGO *algo; algo=GWEN_Crypt_CryptAlgo_new(algoId, GWEN_Crypt_CryptMode_None); GWEN_Crypt_CryptAlgo_SetChunkSize(algo, keySize); /* generate key */ rv=GWEN_Crypt_Token_GenerateKey(ct, keyId, algo, 0); if (rv) { DBG_ERROR(GWEN_LOGDOMAIN, "Error generating key (%d)", rv); GWEN_Crypt_CryptAlgo_free(algo); return 3; } } /* close crypt token */ rv=GWEN_Crypt_Token_Close(ct, 0, 0); if (rv) { DBG_ERROR(0, "Could not close token"); return 3; } fprintf(stderr, "Key %d (%s, %d bytes) successfully generated.\n", keyId, GWEN_Crypt_CryptAlgoId_toString(algoId), keySize); return 0; } gwenhywfar-5.12.0/tools/Makefile.in0000664000175000017500000006031014730344662014121 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 = tools ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h 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 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@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ DIST_SUBDIRS = xmlmerge typemaker typemaker2 gcttool gsa gwenbuild SUBDIRS = xmlmerge typemaker typemaker2 gcttool gsa @gwenbuild_tool@ 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) --gnu tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/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): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # 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 clean-libtool 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 mostlyclean-libtool 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 clean-libtool cscopelist-am ctags \ ctags-am distclean distclean-generic distclean-libtool \ 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 mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile sources: for d in $(SUBDIRS); do \ make -C $$d sources; \ done # 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: gwenhywfar-5.12.0/gwenhywfar.m40000666000175000017500000001173413560106416013340 00000000000000# $Id$ # (c) 2002 Martin Preuss # This function checks for libgwenhywfar AC_DEFUN([AC_GWENHYWFAR], [ dnl searches for gwenhywfar dnl Arguments: dnl $1: major version minimum dnl $2: minor version minimum dnl $3: patchlevel version minimum dnl $4: build version minimum dnl Returns: gwenhywfar_dir dnl gwenhywfar_bindir dnl gwenhywfar_libs dnl gwenhywfar_plugins dnl gwenhywfar_includes dnl gwenhywfar_headers dnl gwenhywfar_has_crypt dnl have_gwenhywfar if test -z "$1"; then vma="0"; else vma="$1"; fi if test -z "$2"; then vmi="1"; else vmi="$2"; fi if test -z "$3"; then vpl="0"; else vpl="$3"; fi if test -z "$4"; then vbld="0"; else vbld="$4"; fi AC_MSG_CHECKING(if gwenhywfar support desired) AC_ARG_ENABLE(gwenhywfar, [ --enable-gwenhywfar enable gwenhywfar support (default=yes)], enable_gwenhywfar="$enableval", enable_gwenhywfar="yes") AC_MSG_RESULT($enable_gwenhywfar) have_gwenhywfar="no" gwenhywfar_dir="" gwenhywfar_plugins="" gwenhywfar_libs="" gwenhywfar_bindir="" gwenhywfar_libspp="" gwenhywfar_includes="" gwenhywfar_has_crypt="yes" if test "$enable_gwenhywfar" != "no"; then AC_MSG_CHECKING(for gwenhywfar) AC_ARG_WITH(gwen-dir, [ --with-gwen-dir=DIR obsolete - set PKG_CONFIG_PATH environment variable instead], [AC_MSG_RESULT([obsolete configure option '--with-gwen-dir' used]) AC_MSG_ERROR([ *** Configure switch '--with-gwen-dir' is obsolete. *** If you want to use gwenhywfar from a non-system location *** then locate the file 'gwenhywfar.pc' and add its parent directory *** to environment variable PKG_CONFIG_PATH. For example *** configure PKG_CONFIG_PATH=":\${PKG_CONFIG_PATH}"])], []) $PKG_CONFIG --exists gwenhywfar result=$? if test $result -ne 0; then AC_MSG_RESULT(not found) AC_MSG_ERROR([ *** Package gwenhywfar was not found in the pkg-config search path. *** Perhaps you should add the directory containing `gwenhywfar.pc' *** to the PKG_CONFIG_PATH environment variable]) else gwenhywfar_dir="`$PKG_CONFIG --variable=prefix gwenhywfar`" AC_MSG_RESULT($gwenhywfar_dir) fi AC_MSG_CHECKING(for gwen libs) gwenhywfar_libs="`$PKG_CONFIG --libs gwenhywfar`" AC_MSG_RESULT($gwenhywfar_libs) AC_MSG_CHECKING(for gwen includes) gwenhywfar_includes="`$PKG_CONFIG --cflags gwenhywfar`" AC_MSG_RESULT($gwenhywfar_includes) AC_MSG_CHECKING(for gwen binary tools) gwenhywfar_bindir="`$PKG_CONFIG --variable=bindir gwenhywfar`" AC_MSG_RESULT($gwenhywfar_bindir) AC_MSG_CHECKING(for gwen plugins) gwenhywfar_plugins="`$PKG_CONFIG --variable=plugindir gwenhywfar`" AC_MSG_RESULT($gwenhywfar_plugins) AC_MSG_CHECKING(for gwen headers) gwenhywfar_headers="`$PKG_CONFIG --variable=headerdir gwenhywfar`" AC_MSG_RESULT($gwenhywfar_headers) AC_MSG_CHECKING(if gwenhywfar test desired) AC_ARG_ENABLE(gwenhywfar, [ --enable-gwenhywfar-test enable gwenhywfar-test (default=yes)], enable_gwenhywfar_test="$enableval", enable_gwenhywfar_test="yes") AC_MSG_RESULT($enable_gwenhywfar_test) AC_MSG_CHECKING(for Gwenhywfar version >=$vma.$vmi.$vpl.$vbld) if test "$enable_gwenhywfar_test" != "no"; then gwen_vmajor="`$PKG_CONFIG --variable=vmajor gwenhywfar`" gwen_vminor="`$PKG_CONFIG --variable=vminor gwenhywfar`" gwen_vpatchlevel="`$PKG_CONFIG --variable=vpatchlevel gwenhywfar`" gwen_vstring="`$PKG_CONFIG --variable=vstring gwenhywfar`" gwen_vbuild="`$PKG_CONFIG --variable=vbuild gwenhywfar`" gwen_versionstring="$gwen_vstring.$gwen_vbuild" AC_MSG_RESULT([found $gwen_versionstring]) if test "$vma" -gt "$gwen_vmajor"; then AC_MSG_ERROR([Your Gwenhywfar version is way too old. Please update from https://www.aquamaniac.de]) elif test "$vma" = "$gwen_vmajor"; then if test "$vmi" -gt "$gwen_vminor"; then AC_MSG_ERROR([Your Gwenhywfar version is too old. Please update from https://www.aquamaniac.de]) elif test "$vmi" = "$gwen_vminor"; then if test "$vpl" -gt "$gwen_vpatchlevel"; then AC_MSG_ERROR([Your Gwenhywfar version is a little bit too old. Please update from https://www.aquamaniac.de]) elif test "$vpl" = "$gwen_vpatchlevel"; then if test "$vbld" -gt "$gwen_vbuild"; then AC_MSG_ERROR([Your Gwenhywfar version is a little bit too old. Please update to the latest git version. Instructions for accessing git can be found on https://www.aquamaniac.de]) fi fi fi fi have_gwenhywfar="yes" #AC_MSG_RESULT(yes) else have_gwenhywfar="yes" AC_MSG_RESULT(assuming yes) fi if test -n "$save_path"; then export PGK_CONFIG_PATH="$save_path" fi dnl end of "if enable-gwenhywfar" fi AC_SUBST(gwenhywfar_dir) AC_SUBST(gwenhywfar_plugins) AC_SUBST(gwenhywfar_bindir) AC_SUBST(gwenhywfar_libs) AC_SUBST(gwenhywfar_includes) AC_SUBST(gwenhywfar_headers) AC_SUBST(gwenhywfar_has_crypt) ]) gwenhywfar-5.12.0/Doxyfile.in0000664000175000017500000017503314274761210013033 00000000000000# Doxyfile 1.6.1 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = gwenhywfar # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = YES # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = "The $name class " \ "The $name widget " \ "The $name file " \ is \ provides \ specifies \ contains \ represents \ a \ an \ the # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = YES # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = YES # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = NO # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = YES # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 4 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = YES # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = NO # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = YES # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = YES # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = YES # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = YES # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = yes # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = NO # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = doc/apidoc.h doc/widgets.h doc/widgets_be.h @DOXYGEN_INPUT@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = src/os/windows \ src/os/posix # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = *moc* \ *_p.h # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = doc # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = doc # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = NO # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 4 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = GWEN_ #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = apidoc # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP) # there is already a search function so this one should typically # be disabled. SEARCHENGINE = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = NO # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = NO # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = NO # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = NO # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = YES # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = DOXYGEN \ @DOXYGEN_DEFINE@ \ __cplusplus # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = YES #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = @DOXYGEN_TAGFILES@ # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = gwenhywfar.tag # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = NO # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = @USE_DOT@ # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = YES # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = YES # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = YES # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = png # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 1000 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 5 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES gwenhywfar-5.12.0/admin/0000775000175000017500000000000014730345116012057 500000000000000gwenhywfar-5.12.0/admin/Makefile.in0000664000175000017500000006243314730344661014060 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@ bin_PROGRAMS = mklistdoc$(EXEEXT) subdir = admin ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/acx_compile_warn.m4 \ $(top_srcdir)/m4/as-scrub-include.m4 \ $(top_srcdir)/m4/ax_have_qt.m4 $(top_srcdir)/m4/ax_pthread.m4 \ $(top_srcdir)/m4/binreloc.m4 $(top_srcdir)/m4/distri.m4 \ $(top_srcdir)/m4/fox.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/os.m4 $(top_srcdir)/m4/qt4.m4 \ $(top_srcdir)/m4/searchfiles.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)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_mklistdoc_OBJECTS = mklistdoc.$(OBJEXT) mklistdoc_OBJECTS = $(am_mklistdoc_OBJECTS) mklistdoc_LDADD = $(LDADD) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = 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) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/mklistdoc.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=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 = SOURCES = $(mklistdoc_SOURCES) DIST_SOURCES = $(mklistdoc_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) # 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 am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPKIT_FRAMEWORK = @APPKIT_FRAMEWORK@ AR = @AR@ AS = @AS@ ASTYLE = @ASTYLE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BINRELOC_CFLAGS = @BINRELOC_CFLAGS@ BINRELOC_LIBS = @BINRELOC_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ COCOA_FRAMEWORK = @COCOA_FRAMEWORK@ COREDATA_FRAMEWORK = @COREDATA_FRAMEWORK@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DOXYGEN_DEFINE = @DOXYGEN_DEFINE@ DOXYGEN_GENERATE_QHP = @DOXYGEN_GENERATE_QHP@ DOXYGEN_INPUT = @DOXYGEN_INPUT@ DOXYGEN_QHG_LOCATION = @DOXYGEN_QHG_LOCATION@ DOXYGEN_QHP_NAMESPACE = @DOXYGEN_QHP_NAMESPACE@ DOXYGEN_TAGFILES = @DOXYGEN_TAGFILES@ DPKG_ARCH = @DPKG_ARCH@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FOUNDATION_FRAMEWORK = @FOUNDATION_FRAMEWORK@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPG_ERROR_CFLAGS = @GPG_ERROR_CFLAGS@ GPG_ERROR_LIBS = @GPG_ERROR_LIBS@ GREP = @GREP@ GTK2_CFLAGS = @GTK2_CFLAGS@ GTK2_LIBS = @GTK2_LIBS@ GTK3_CFLAGS = @GTK3_CFLAGS@ GTK3_LIBS = @GTK3_LIBS@ GWENHYWFAR_SO_AGE = @GWENHYWFAR_SO_AGE@ GWENHYWFAR_SO_CURRENT = @GWENHYWFAR_SO_CURRENT@ GWENHYWFAR_SO_EFFECTIVE = @GWENHYWFAR_SO_EFFECTIVE@ GWENHYWFAR_SO_REVISION = @GWENHYWFAR_SO_REVISION@ GWENHYWFAR_VERSION_BUILD = @GWENHYWFAR_VERSION_BUILD@ GWENHYWFAR_VERSION_FULL_STRING = @GWENHYWFAR_VERSION_FULL_STRING@ GWENHYWFAR_VERSION_MAJOR = @GWENHYWFAR_VERSION_MAJOR@ GWENHYWFAR_VERSION_MINOR = @GWENHYWFAR_VERSION_MINOR@ GWENHYWFAR_VERSION_PATCHLEVEL = @GWENHYWFAR_VERSION_PATCHLEVEL@ GWENHYWFAR_VERSION_RELEASE_STRING = @GWENHYWFAR_VERSION_RELEASE_STRING@ GWENHYWFAR_VERSION_STRING = @GWENHYWFAR_VERSION_STRING@ GWENHYWFAR_VERSION_TAG = @GWENHYWFAR_VERSION_TAG@ GWENPP_SO_AGE = @GWENPP_SO_AGE@ GWENPP_SO_CURRENT = @GWENPP_SO_CURRENT@ GWENPP_SO_EFFECTIVE = @GWENPP_SO_EFFECTIVE@ GWENPP_SO_REVISION = @GWENPP_SO_REVISION@ GWENUI_SO_AGE = @GWENUI_SO_AGE@ GWENUI_SO_CURRENT = @GWENUI_SO_CURRENT@ GWENUI_SO_EFFECTIVE = @GWENUI_SO_EFFECTIVE@ GWENUI_SO_REVISION = @GWENUI_SO_REVISION@ GWEN_OS = @GWEN_OS@ HAVE_I18N = @HAVE_I18N@ ICONV_LIBS = @ICONV_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_DLL_TARGET = @INSTALL_DLL_TARGET@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBGCRYPT_CFLAGS = @LIBGCRYPT_CFLAGS@ LIBGCRYPT_CONFIG = @LIBGCRYPT_CONFIG@ LIBGCRYPT_LIBS = @LIBGCRYPT_LIBS@ LIBGNUTLS_CFLAGS = @LIBGNUTLS_CFLAGS@ LIBGNUTLS_LIBS = @LIBGNUTLS_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBXML_CFLAGS = @LIBXML_CFLAGS@ LIBXML_LIBS = @LIBXML_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MAKE_DLL_TARGET = @MAKE_DLL_TARGET@ MAKE_I18N_FILES = @MAKE_I18N_FILES@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NM = @NM@ NMEDIT = @NMEDIT@ OBJC = @OBJC@ OBJCDEPMODE = @OBJCDEPMODE@ OBJCFLAGS = @OBJCFLAGS@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OHBCI_VERSION_STRING = @OHBCI_VERSION_STRING@ OPENSSL_CFLAGS = @OPENSSL_CFLAGS@ OPENSSL_LIBS = @OPENSSL_LIBS@ OSYSTEM = @OSYSTEM@ OS_TYPE = @OS_TYPE@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ 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@ POSUB = @POSUB@ PROFILING_CFLAGS = @PROFILING_CFLAGS@ PROFILING_LDFLAGS = @PROFILING_LDFLAGS@ PROG_LIBRARIES = @PROG_LIBRARIES@ PTHREAD_CC = @PTHREAD_CC@ PTHREAD_CFLAGS = @PTHREAD_CFLAGS@ PTHREAD_LIBS = @PTHREAD_LIBS@ QT4_BINDIR = @QT4_BINDIR@ QT_CXXFLAGS = @QT_CXXFLAGS@ QT_DIR = @QT_DIR@ QT_LIBS = @QT_LIBS@ QT_LRELEASE = @QT_LRELEASE@ QT_LUPDATE = @QT_LUPDATE@ QT_MOC = @QT_MOC@ QT_RCC = @QT_RCC@ QT_UIC = @QT_UIC@ RANLIB = @RANLIB@ RC = @RC@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ STRIPALL = @STRIPALL@ SYSCONF_FRAMEWORK = @SYSCONF_FRAMEWORK@ USE_DOT = @USE_DOT@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WEBKIT_FRAMEWORK = @WEBKIT_FRAMEWORK@ WERROR = @WERROR@ WITH_ICONV = @WITH_ICONV@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ X_CFLAGS = @X_CFLAGS@ X_EXTRA_LIBS = @X_EXTRA_LIBS@ X_LIBS = @X_LIBS@ X_PRE_LIBS = @X_PRE_LIBS@ YES = @YES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ ac_ct_OBJC = @ac_ct_OBJC@ all_includes = @all_includes@ all_libraries = @all_libraries@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ aq_distrib_name = @aq_distrib_name@ aq_distrib_tag = @aq_distrib_tag@ aq_distrib_version = @aq_distrib_version@ ax_pthread_config = @ax_pthread_config@ 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@ docpath = @docpath@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ fox_includes = @fox_includes@ fox_libs = @fox_libs@ gwenbuild_tool = @gwenbuild_tool@ gwenhywfar_bindir = @gwenhywfar_bindir@ gwenhywfar_buffer_hardlimit = @gwenhywfar_buffer_hardlimit@ gwenhywfar_cfg_searchdir = @gwenhywfar_cfg_searchdir@ gwenhywfar_crypt_lib = @gwenhywfar_crypt_lib@ gwenhywfar_data_searchdir = @gwenhywfar_data_searchdir@ gwenhywfar_datadir = @gwenhywfar_datadir@ gwenhywfar_guis = @gwenhywfar_guis@ gwenhywfar_headerdir = @gwenhywfar_headerdir@ gwenhywfar_headerdir_am = @gwenhywfar_headerdir_am@ gwenhywfar_internal_libname = @gwenhywfar_internal_libname@ gwenhywfar_ldflags = @gwenhywfar_ldflags@ gwenhywfar_libs = @gwenhywfar_libs@ gwenhywfar_libspp = @gwenhywfar_libspp@ gwenhywfar_libsui = @gwenhywfar_libsui@ gwenhywfar_locale_searchdir = @gwenhywfar_locale_searchdir@ gwenhywfar_os_lib = @gwenhywfar_os_lib@ gwenhywfar_pkgincludedir = @gwenhywfar_pkgincludedir@ gwenhywfar_plugin_searchdir = @gwenhywfar_plugin_searchdir@ gwenhywfar_plugindir = @gwenhywfar_plugindir@ gwenhywfar_plugins_cfgmgr_dirs = @gwenhywfar_plugins_cfgmgr_dirs@ gwenhywfar_plugins_cfgmgr_libs = @gwenhywfar_plugins_cfgmgr_libs@ gwenhywfar_plugins_ct_dirs = @gwenhywfar_plugins_ct_dirs@ gwenhywfar_plugins_ct_libs = @gwenhywfar_plugins_ct_libs@ gwenhywfar_plugins_dbio_dirs = @gwenhywfar_plugins_dbio_dirs@ gwenhywfar_plugins_dbio_libs = @gwenhywfar_plugins_dbio_libs@ gwenhywfar_symlinkdir = @gwenhywfar_symlinkdir@ gwenhywfar_sys_is_windows = @gwenhywfar_sys_is_windows@ gwenhywfar_sysdata_searchdir = @gwenhywfar_sysdata_searchdir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ i18n_libs = @i18n_libs@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ 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@ qt4_includes = @qt4_includes@ qt4_libs = @qt4_libs@ qt4_moc = @qt4_moc@ qt4_uic = @qt4_uic@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ ssl_available = @ssl_available@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ visibility_cflags = @visibility_cflags@ with_gui_fox16 = @with_gui_fox16@ with_gui_gtk2 = @with_gui_gtk2@ with_gui_gtk3 = @with_gui_gtk3@ with_gui_qt4 = @with_gui_qt4@ AM_CPPFLAGS = @all_includes@ AM_CFLAGS = -DGWEN_HEADERS=\"$(gwenhywfar_headerdir_am)/gwenhywfar\" @WERROR@ mklistdoc_SOURCES = mklistdoc.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(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) --gnu admin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu admin/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-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 \ || test -f $$p1 \ ; 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) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(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: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list mklistdoc$(EXEEXT): $(mklistdoc_OBJECTS) $(mklistdoc_DEPENDENCIES) $(EXTRA_mklistdoc_DEPENDENCIES) @rm -f mklistdoc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mklistdoc_OBJECTS) $(mklistdoc_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mklistdoc.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(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-am 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-am 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 check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; 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-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/mklistdoc.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags 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-binPROGRAMS 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 ./$(DEPDIR)/mklistdoc.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ 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-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile sources: # 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: gwenhywfar-5.12.0/admin/Makefile.am0000666000175000017500000000025213552050376014036 00000000000000AM_CPPFLAGS=@all_includes@ AM_CFLAGS = -DGWEN_HEADERS=\"$(gwenhywfar_headerdir_am)/gwenhywfar\" @WERROR@ bin_PROGRAMS=mklistdoc mklistdoc_SOURCES=mklistdoc.c sources: gwenhywfar-5.12.0/admin/mklistdoc.c0000644000175000017500000003630313552051304014131 00000000000000/*************************************************************************** begin : Fri Jun 02 2004 copyright : (C) 2019 by Martin Preuss email : martin@libchipcard.de *************************************************************************** * Please see toplevel file COPYING for license details * ***************************************************************************/ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #define MAX_LINESIZE 8192 typedef struct MACRO_DEF MACRO_DEF; struct MACRO_DEF { const char *macroName; const char *tmplFileName; const char *fileSuffix; }; typedef struct MACRO_STRUCT MACRO_STRUCT; struct MACRO_STRUCT { MACRO_STRUCT *next; MACRO_DEF *macroDef; char *typeName; char *typePrefix; }; MACRO_DEF macroDefs[]= { { "GWEN_LIST2_FUNCTION_DEFS", "list2.tmpl", "_list2p" }, { "GWEN_LIST2_FUNCTION_LIB_DEFS", "list2.tmpl", "_list2" }, { "GWEN_CONSTLIST2_FUNCTION_DEFS", "list2.tmpl", "_constlist2p" }, { "GWEN_CONSTLIST2_FUNCTION_LIB_DEFS", "list2.tmpl", "_constlist2" }, { "GWEN_LIST_FUNCTION_DEFS", "list1.tmpl", "_listp" }, { "GWEN_LIST_FUNCTION_LIB_DEFS", "list1.tmpl", "_list" }, { "GWEN_CONSTLIST_FUNCTION_DEFS", "list1.tmpl", "_constlistp" }, { "GWEN_CONSTLIST_FUNCTION_LIB_DEFS", "list1.tmpl", "_constlist" }, { 0, 0, 0 } }; #define MODE_CHECKONLY 1 #define MODE_WRITEHEADER 2 #define MODE_WRITESTDOUT 3 const char *templatePath=GWEN_HEADERS; int mode=MODE_WRITESTDOUT; int verbosity=0; /* ------------------------------------------------------------------------------------------------ * forward declarations * ------------------------------------------------------------------------------------------------ */ static MACRO_STRUCT *MacroStruct_new(MACRO_DEF *macroDef, const char *typeName, const char *typePrefix); /*static void MacroStruct_free(MACRO_STRUCT *m);*/ static int scanLine(MACRO_DEF *macroDef, char *buffer, MACRO_STRUCT **m); static int scanLineForAllMacros(char *buffer, MACRO_STRUCT **m); static MACRO_STRUCT *scanForMacros(const char *fname); static int transformF(FILE *inFile, FILE *outFile, const char *outFileName, MACRO_STRUCT *m); static int transform(const char *inFile, const char *outFile, MACRO_STRUCT *m); static int processFile(const char *fname); int main(int argc, char **argv); /* ------------------------------------------------------------------------------------------------ * implementations * ------------------------------------------------------------------------------------------------ */ MACRO_STRUCT *MacroStruct_new(MACRO_DEF *macroDef, const char *typeName, const char *typePrefix) { MACRO_STRUCT *m; m=(MACRO_STRUCT *)malloc(sizeof(MACRO_STRUCT)); memset(m, 0, sizeof(MACRO_STRUCT)); m->macroDef=macroDef; if (typeName) m->typeName=strdup(typeName); if (typePrefix) m->typePrefix=strdup(typePrefix); return m; } #if 0 void MacroStruct_free(MACRO_STRUCT *m) { if (m) { free(m->typeName); free(m->typePrefix); free(m); } } #endif int scanLine(MACRO_DEF *macroDef, char *buffer, MACRO_STRUCT **m) { char *p; char *macroBegin; p=strstr(buffer, macroDef->macroName); if (p) { /* found something, search for opening bracket */ macroBegin=p; p+=strlen(macroDef->macroName); while (*p && isspace((int)*p)) p++; if (*p && *p!='(') return -1; while (*p) { if (*p=='(') { char *typeName; char *typeNameEnd; char *typePrefix; char *typePrefixEnd; typeName=typePrefix=0; typeNameEnd=typePrefixEnd=0; /* found it, now read the typename */ p++; while (*p && isspace((int)*p)) p++; typeName=p; /* find comma */ while (*p) { if (*p==',') { /* found it, name ends here */ if (!typeNameEnd) typeNameEnd=p; p++; while (*p && isspace((int)*p)) p++; typePrefix=p; /* find closing bracket */ while (*p) { if (*p==')' || *p==',') { MACRO_STRUCT *lm; MACRO_STRUCT *sm; char *s; char c1, c2; /* found it, now all is complete */ if (!typePrefixEnd) typePrefixEnd=p; /* check whether this is a definition */ s=buffer; while (*s && isspace((int)*s)) s++; if (*s=='#') { s++; /* preprocessor command, check for define */ while (*s && isspace((int)*s)) s++; if (strncasecmp(s, "define ", 7)==0) { s+=7; /* it is a define, now check if the next nonblank is * the beginning of this macro */ while (*s && isspace((int)*s)) s++; if (s==macroBegin) { if (verbosity>1) fprintf(stderr, "Found definition for macro \"%s\".\n", macroDef->macroName); return -1; } } } c1=*typePrefixEnd; c2=*typeNameEnd; *typePrefixEnd=0; *typeNameEnd=0; sm=*m; while (sm) { if (strcmp(sm->macroDef->macroName, macroDef->macroName)==0) if (strcmp(sm->typeName, typeName)==0) /* already exists */ break; sm=sm->next; } if (!sm) { /* macro is new, store it */ lm=MacroStruct_new(macroDef, typeName, typePrefix); *typePrefixEnd=c1; *typeNameEnd=c2; if (*m==0) *m=lm; else { lm->next=*m; *m=lm; } if (verbosity>1) fprintf(stderr, "Found macro \"%s\" (%s, %s)\n", lm->macroDef->macroName, lm->typeName, lm->typePrefix); } return 0; } else if (isspace((int)*p)) { if (!typePrefixEnd) typePrefixEnd=p; } else { if (typePrefixEnd) return -1; } p++; } /* closing bracket missing, probably need more data... */ return 1; } else if (isspace((int)*p)) { if (!typeNameEnd) typeNameEnd=p; } else { if (typeNameEnd) return -1; } p++; } /* comma missing, probably need more data... */ return 1; } p++; } /* opening bracket missing, probably need more data... */ return 1; } /* macro not found in this line */ return -1; } int scanLineForAllMacros(char *buffer, MACRO_STRUCT **m) { int i; for (i=0; ; i++) { if (macroDefs[i].macroName==0) return 0; if (scanLine(¯oDefs[i], buffer, m)==1) return 1; } return 0; } MACRO_STRUCT *scanForMacros(const char *fname) { FILE *f; MACRO_STRUCT *mst; char buffer[MAX_LINESIZE]; int line; char *p; mst=0; line=0; if (verbosity) fprintf(stderr, "Reading file \"%s\"\n", fname); f=fopen(fname, "r"); if (!f) { fprintf(stderr, "fopen(%s): %s\n", fname, strerror(errno)); return 0; } buffer[0]=0; buffer[sizeof(buffer)-1]=0; while (!feof(f)) { int sl; int rv; line++; if (verbosity>3) fprintf(stderr, "Reading line %d\n", line); /* read line */ if (buffer[0]==0) { p=fgets(buffer, sizeof(buffer)-1, f); } else { int sizeLeft; if (verbosity>3) fprintf(stderr, "Multi-line macro (%d)\n", line); sl=strlen(buffer); sizeLeft=(sizeof(buffer)-1)-sl; if (sizeLeft<2) { fprintf(stderr, "Line %d: Line full, macro too long\n", line); fclose(f); return 0; } strcat(buffer, " "); p=fgets(buffer+sl+1, sizeLeft, f); } if (!p) { if (ferror(f)) { fprintf(stderr, "fread(%s): %s\n", fname, strerror(errno)); fclose(f); return 0; } else /* simple eof */ break; } sl=strlen(buffer); if (buffer[sl-1]=='\n') buffer[--sl]=0; if (buffer[sl-1]=='\\') { buffer[--sl]=0; } else { /* now check for macros */ rv=scanLineForAllMacros(buffer, &mst); if (rv!=1) /* no more data needed */ buffer[0]=0; } } /* while */ fclose(f); return mst; } int transformF(FILE *inFile, FILE *outFile, const char *outFileName, MACRO_STRUCT *m) { char *p; char buffer[MAX_LINESIZE]; int didIt; while (!feof(inFile)) { char *vname; int sl; /* read line */ p=fgets(buffer, sizeof(buffer)-1, inFile); if (!p) { if (ferror(inFile)) { fprintf(stderr, "fread(): %s\n", strerror(errno)); return 0; } else /* simple eof */ break; } sl=strlen(buffer); if (buffer[sl-1]=='\n') buffer[--sl]=0; vname=0; p=buffer; while (*p) { while (*p && *p!='@') { if (EOF==fputc(*p, outFile)) { fprintf(stderr, "fputc(): %s (1)\n", strerror(errno)); return 2; } p++; } didIt=0; if (*p=='@') { char *psave; /* got a var... */ psave=p; p++; vname=p; while (*p && *p!='@') p++; if (*p=='@') { char c; const char *replacement; /* got it */ c=*p; *p=0; if (strcmp(vname, "TYPENAME")==0) replacement=m->typeName; else if (strcmp(vname, "FN_PREFIX")==0) replacement=m->typePrefix; else if (strcmp(vname, "FILENAME")==0) replacement=outFileName; else { /* not a var */ replacement=0; } *p=c; p++; if (replacement) { if (fprintf(outFile, "%s", replacement)<1) { fprintf(stderr, "fprintf(): %s\n", strerror(errno)); return 2; } didIt=1; } else { /* write the original data */ p=psave; } } else /* write the original data */ p=psave; } if (!didIt) { if (*p) { if (EOF==fputc(*p, outFile)) { fprintf(stderr, "fputc(): %s\n", strerror(errno)); return 2; } p++; } } } /* while line */ fprintf(outFile, "\n"); } /* while */ return 0; } int transform(const char *inFile, const char *outFile, MACRO_STRUCT *m) { FILE *f1; FILE *f2; int rv; f1=fopen(inFile, "r"); if (!f1) { fprintf(stderr, "fopen(%s, \"r\"): %s\n", inFile, strerror(errno)); return 2; } if (outFile==0) { f2=stdout; rv=transformF(f1, f2, "(stdout)", m); } else { f2=fopen(outFile, "w+"); if (!f2) { fprintf(stderr, "fopen(%s, \"w+\"): %s\n", outFile, strerror(errno)); fclose(f1); return 2; } rv=transformF(f1, f2, outFile, m); } if (outFile!=0) { if (fclose(f2)) { fprintf(stderr, "fclose(%s): %s\n", outFile, strerror(errno)); fclose(f1); return 2; } } if (fclose(f1)) { fprintf(stderr, "fclose(%s): %s\n", inFile, strerror(errno)); return 2; } return rv; } int processFile(const char *fname) { MACRO_STRUCT *m; m=scanForMacros(fname); if (m) { /* do something with the macros */ if (mode==MODE_WRITESTDOUT) { MACRO_STRUCT *cm; cm=m; while (cm) { int rv; char tmplBuffer[256]; rv=snprintf(tmplBuffer, sizeof(tmplBuffer), "%s/%s", templatePath, cm->macroDef->tmplFileName); if (rv<1 || rv>=(int)sizeof(tmplBuffer)) { fprintf(stderr, "Internal error: buffer too small [processFile]\n"); return 3; } rv=transform(tmplBuffer, 0, cm); if (rv) { fprintf(stderr, "Error transforming template file.\n"); return rv; } cm=cm->next; } } } return 0; } int main(int argc, char **argv) { int i = 1; int wantHelp; wantHelp=0; if (argc<2) { wantHelp=1; } else { i=1; while (i=argc) { fprintf(stderr, "Argument missing for -I\n"); return 1; } templatePath=argv[i]; } else if (strcmp(argv[i], "-v")==0) { verbosity++; } else if (strcmp(argv[i], "-h")==0 || strcmp(argv[i], "--help")==0) { wantHelp=1; } else if (strcmp(argv[i], "--doc")==0) { /* only generate header */ mode=MODE_WRITEHEADER; } else if (strcmp(argv[i], "--stdout")==0) { /* write all headers to stdout instead of creating one header per * input */ mode=MODE_WRITESTDOUT; } else break; i++; } } if (wantHelp) { fprintf(stderr, "MkListDoc (c) 2004 Martin Preuss\n" "Part of Gwenhywfar " GWENHYWFAR_VERSION_FULL_STRING "\n" "This tool is licensed under the LGPL (see COPYING in\n" "toplevel source folder).\n" "MkListDoc expands GWEN_LIST macros and creates a suitable\n" "header file for every encounterd list definition macro.\n" "Example:\n" "You are using GWEN_LIST2 macros to manage list of some objects:\n" " GWEN_LIST2_FUNCTION_DEFS(TYPE_SOMETHING, TypeSomething);\n" "The list is now available but not documented by Doxygen.\n" "This tool now creates output that can then be fed to doxygen\n" "to create appropriate API documentation.\n" "\n" "Usage: %s [OPTIONS] file1 file2 ... fileN\n" "Options are:\n" "-v increases the verbosity level\n" "-I path to GWEN include headers\n" "Output is sent to stdout.\n", argv[0]); return 0; } if (i>=argc) { /* no input ? */ fprintf(stderr, "No input files.\n"); return 1; } while (i #endif ]) ###------------------------------------------------------------------------- # # Checks for typedefs, structures, and compiler characteristics. # AC_C_CONST AC_HEADER_TIME AC_STRUCT_TM ###------------------------------------------------------------------------- # # Checks for library functions. # AC_FUNC_CLOSEDIR_VOID AC_FUNC_MKTIME AC_FUNC_SELECT_ARGTYPES AC_CHECK_FUNCS([gethostbyaddr gethostbyname inet_ntoa isascii getpid]) AC_CHECK_FUNCS([memmove memset]) AC_CHECK_FUNCS([select socket]) AC_CHECK_FUNCS([strcasecmp strchr strdup strerror]) AC_CHECK_FUNCS([snprintf]) AC_CHECK_FUNCS([symlink setlocale]) AC_CHECK_FUNCS([srandom random]) # Init binreloc AM_BINRELOC ###------------------------------------------------------------------------- # # check whether gwen is a subproject to another one # AC_MSG_CHECKING(if gwen is a subproject) AC_ARG_ENABLE(gwen-subproject, [ --enable-gwen-subproject make gwen only a subproject (default=no)], enable_gwen_subproject="$enableval", enable_gwen_subproject="no") AC_MSG_RESULT($enable_gwen_subproject) if test "$enable_gwen_subproject" != "no"; then AC_DEFINE(GWENHYWFAR_IS_SUBPROJECT, 1, [whether gwen is a subproject]) fi ###------------------------------------------------------------------------- # # check whether accompanying certificates should be used # AC_MSG_CHECKING(whether system-wide trusted certificates should be set) AC_ARG_ENABLE(system-certs, [ --enable-system-certs use system-wide certificates (default=yes)], enable_system_certs="$enableval", enable_system_certs="yes") AC_MSG_RESULT($enable_system_certs) if test "$enable_system_certs" != "no"; then AC_DEFINE(GWEN_TLS_USE_SYSTEM_CERTIFICATES, 1, [whether system-wide trusted certificates should be set]) fi AM_CONDITIONAL(INSTALL_CERTS, [test "$enable_system_certs" = "no"]) ###------------------------------------------------------------------------- # # check whether 'make check' should run checks that depend on network connectivity # AC_MSG_CHECKING(network connectivity can be assumed available during 'make check') AC_ARG_ENABLE(network-checks, [ --disable-network-checks disables checks that assume available network during build (default=enabled)], enable_gwen_network_checks="$enableval", enable_gwen_network_checks="yes") AC_MSG_RESULT($enable_gwen_network_checks) if test "$enable_gwen_network_checks" = "no"; then AC_DEFINE(GWENHYWFAR_SKIP_NETWORK_CHECKS, 1, [whether to run network-dependent checks during build]) fi ###------------------------------------------------------------------------- # # check whether test code should be enabled # AC_MSG_CHECKING(whether to enable test code) AC_ARG_ENABLE(testcode, [ --enable-testcode allow compiling of test code (default=no)], enable_testcode="$enableval", enable_testcode="no") AC_MSG_RESULT($enable_testcode) if test "$enable_testcode" != "no"; then AC_DEFINE(GWENHYWFAR_ENABLE_TESTCODE, 1, [whether to enable test code]) fi ###------------------------------------------------------------------------- # # check whether local installation mode is enabled # AC_MSG_CHECKING(whether local installation mode is wanted) AC_ARG_ENABLE(local-install, [ --enable-local-install allow local installation mode (default=no)], enable_local_install="$enableval", enable_local_install="no") AC_MSG_RESULT($enable_local_install) if test "$enable_local_install" != "no"; then AC_DEFINE(ENABLE_LOCAL_INSTALL, 1, [whether local install is wanted]) fi ###------------------------------------------------------------------------- # # OS dependant settings # # Common settings for all OSs gwenhywfar_bindir="\${bindir}" gwenhywfar_libs="-lgwenhywfar" gwenhywfar_ldflags="-L\${libdir}" gwenhywfar_internal_libname="libgwenhywfar.la" gwenhywfar_headerdir_am="\$(includedir)/gwenhywfar5" gwenhywfar_headerdir="\${includedir}/gwenhywfar5" gwenhywfar_plugindir="\${libdir}/gwenhywfar/plugins/${GWENHYWFAR_SO_EFFECTIVE}" gwenhywfar_symlinkdir="\$(top_builddir)/gwenhywfar5" gwenhywfar_datadir="\${datadir}/gwenhywfar" gwenhywfar_sysdatadir="\${datadir}" # Now the specific settings case "$OS_TYPE" in posix) gwenhywfar_sys_is_windows=0 gwenhywfar_os_lib="os/posix/libos.la" GWEN_OS="posix" # add special libraries for solaris if test "$OSYSTEM" = "solaris"; then all_libraries="${all_libraries} -lresolv -lsocket" PROG_LIBRARIES="${PROG_LIBRARIES} -lresolv -lsocket" fi # add special libraries for darwin if test "$OSYSTEM" = "osx"; then # hmm, this should be detected by the GETTEXT macro... #PROG_LIBRARIES="${PROG_LIBRARIES} -lintl" # for local install mode on Mac OS X link with the CoreFoundation framework if test "$enable_local_install" != "no"; then all_libraries="${all_libraries} -framework CoreFoundation" fi fi gwenbuild_tool="gwenbuild" ;; windows) gwenhywfar_sys_is_windows=1 dnl ACX_WINDOWS_PATHS gwenhywfar_os_lib="os/windows/libos.la" GWEN_OS="windows" all_libraries="${all_libraries} -lwsock32" gwenbuild_tool="" ;; *) AC_MSG_ERROR(**** Unknown operating system type) ;; esac AM_CONDITIONAL(IS_WINDOWS, [test "$OS_TYPE" = "windows"]) AC_SUBST(gwenhywfar_sys_is_windows) AC_SUBST(gwenbuild_tool) dnl # Check for x86_64 architecture; potentially set lib-directory suffix dnl if test "$target_cpu" = "x86_64"; then dnl libdirsuffix="64" dnl else dnl libdirsuffix="" dnl fi dnl AC_DEFINE_UNQUOTED(LIBDIRSUFFIX, ["$libdirsuffix"], [Defined to the suffix string of the library directory]) dnl --- no longer needed since $libdir is used directly ###------------------------------------------------------------------------- # # check plugin search path # AC_MSG_CHECKING(plugin search dir) AC_ARG_WITH(plugin-searchdir, [ --with-plugin-searchdir=DIR where to search for plugins], [gwenhywfar_plugin_searchdir="$withval"], [gwenhywfar_plugin_searchdir=""]) if test -z "${gwenhywfar_plugin_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_plugin_searchdir="lib/gwenhywfar/plugins/${GWENHYWFAR_SO_EFFECTIVE}" else if test "$enable_local_install" != "no"; then gwenhywfar_plugin_searchdir="lib/gwenhywfar/plugins/${GWENHYWFAR_SO_EFFECTIVE}" else gwenhywfar_plugin_searchdir="$gwenhywfar_plugindir" fi fi fi AC_SUBST(gwenhywfar_plugin_searchdir) AC_MSG_RESULT($gwenhywfar_plugin_searchdir) ###------------------------------------------------------------------------- # # check data search dir # AC_MSG_CHECKING(data search dir) AC_ARG_WITH(data-searchdir, [ --with-data-searchdir=DIR where to search for data files], [gwenhywfar_data_searchdir="$withval"], [gwenhywfar_data_searchdir=""]) if test -z "${gwenhywfar_data_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_data_searchdir="share/gwenhywfar" else if test "$enable_local_install" != "no"; then gwenhywfar_data_searchdir="share/gwenhywfar" else gwenhywfar_data_searchdir="$gwenhywfar_datadir" fi fi fi AC_SUBST(gwenhywfar_data_searchdir) AC_MSG_RESULT($gwenhywfar_data_searchdir) ###------------------------------------------------------------------------- # # check system data search dir # AC_MSG_CHECKING(system data search dir) AC_ARG_WITH(sysdata-searchdir, [ --with-sysdata-searchdir=DIR where to search for data files], [gwenhywfar_sysdata_searchdir="$withval"], [gwenhywfar_sysdata_searchdir=""]) if test -z "${gwenhywfar_sysdata_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_sysdata_searchdir="share" else if test "$enable_local_install" != "no"; then gwenhywfar_sysdata_searchdir="share" else gwenhywfar_sysdata_searchdir="$gwenhywfar_sysdatadir" fi fi fi AC_SUBST(gwenhywfar_sysdata_searchdir) AC_MSG_RESULT($gwenhywfar_sysdata_searchdir) ###------------------------------------------------------------------------- # # check locale search dir # AC_MSG_CHECKING(locale search dir) AC_ARG_WITH(locale-searchdir, [ --with-locale-searchdir=DIR where to search for locale files], [gwenhywfar_locale_searchdir="$withval"], [gwenhywfar_locale_searchdir=""]) if test -z "${gwenhywfar_locale_searchdir}"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_locale_searchdir="share/locale" else if test "$enable_local_install" != "no"; then gwenhywfar_locale_searchdir="share/locale" else gwenhywfar_locale_searchdir="\$(localedir)" fi fi fi AC_SUBST(gwenhywfar_locale_searchdir) AC_MSG_RESULT($gwenhywfar_locale_searchdir) ###------------------------------------------------------------------------- # # check cfg search dir # AC_MSG_CHECKING(cfg search dir) AC_ARG_WITH(cfg-searchdir, [ --with-cfg-searchdir=DIR where to search for cfg files], [gwenhywfar_cfg_searchdir="$withval"], [gwenhywfar_cfg_searchdir=""]) if test -z "$gwenhywfar_cfg_searchdir"; then if test "$OSYSTEM" = "windows"; then gwenhywfar_cfg_searchdir="etc" else if test "$enable_local_install" != "no"; then gwenhywfar_cfg_searchdir="etc" else gwenhywfar_cfg_searchdir="\$(sysconfdir)" fi fi fi AC_SUBST(gwenhywfar_cfg_searchdir) AC_MSG_RESULT($gwenhywfar_cfg_searchdir) ###------------------------------------------------------------------------- # # check whether variadic macros should be supported # AC_MSG_CHECKING(if compiling with variadic macros) AC_ARG_ENABLE(variadic-macros, [ --enable-variadic-macros enable variadic macros (default=yes)], enable_variadic_macros="$enableval", enable_variadic_macros="yes") AC_MSG_RESULT($enable_variadic_macros) if test "x$enable_variadic_macros" = "xno"; then AC_DEFINE(NO_VARIADIC_MACROS, 1, [Define if variadic macros should be disabled]) fi ###------------------------------------------------------------------------- # # check whether profiling is to be supported # AC_MSG_CHECKING(if profiling is to be supported) AC_ARG_ENABLE(profiling, [ --enable-profiling enable profiling (default=no)], enable_profiling="$enableval", enable_profiling="no") AC_MSG_RESULT($enable_profiling) if test "x$enable_profiling" = "xyes"; then PROFILING_CFLAGS="-pg" PROFILING_LDFLAGS="-pg" else PROFILING_CFLAGS="" PROFILING_LDFLAGS="" fi AC_SUBST(PROFILING_CFLAGS) AC_SUBST(PROFILING_LDFLAGS) ###------------------------------------------------------------------------- # # check for Debian multiarch paths # AC_PATH_TOOL([DPKG_ARCH], [dpkg-architecture]) AC_MSG_CHECKING([for multiarch paths]) multiarch_triplet="" DEBIAN_MULTIARCH_DIRS="" if test -n "$DPKG_ARCH"; then multiarch_triplet=$($DPKG_ARCH -qDEB_HOST_MULTIARCH 2> /dev/null) if test -z "$multiarch_triplet"; then multiarch_triplet=$($DPKG_ARCH -qDEB_HOST_GNU_TYPE) fi fi if test -n "$multiarch_triplet"; then DEBIAN_MULTIARCH_DIRS="/lib/$multiarch_triplet /usr/lib/$multiarch_triplet" AC_MSG_RESULT([$DEBIAN_MULTIARCH_DIRS]) else AC_MSG_RESULT([not found]) fi ###------------------------------------------------------------------------- # # check for libgcrypt # NEED_LIBGCRYPT_API=1 NEED_LIBGCRYPT_VERSION=1.2.0 AC_DEFINE_UNQUOTED(NEED_LIBGCRYPT_VERSION, "$NEED_LIBGCRYPT_VERSION", [Required version of Libgcrypt]) case "$OS_TYPE" in windows) LIBGCRYPT_CFLAGS="" LIBGCRYPT_LIBS="-lgcrypt" AC_SUBST(LIBGCRYPT_CFLAGS) AC_SUBST(LIBGCRYPT_LIBS) ;; *) AM_PATH_LIBGCRYPT("$NEED_LIBGCRYPT_API:$NEED_LIBGCRYPT_VERSION", [have_gcrypt="yes"], [have_gcrypt="no"]) if test "$have_gcrypt" != "yes"; then AC_MSG_ERROR([ **** Libgcrypt is required for Gwenhywfar. Please install it (including devel packages) **** (at least version $NEED_LIBGCRYPT_VERSION using API $NEED_LIBGCRYPT_API is required.)]) fi ;; esac ###------------------------------------------------------------------------- # # check for library for common error values and messages in GnuPG components # PKG_CHECK_MODULES([GPG_ERROR], [gpg-error]) ###------------------------------------------------------------------------- # # check for libgnutls # PKG_CHECK_MODULES([LIBGNUTLS], [gnutls >= 2.9.8]) ###------------------------------------------------------------------------- # # check for OpenSSL # PKG_CHECK_MODULES([OPENSSL], [openssl], [ssl_available=yes], [ssl_available=no]) if test "$ssl_available" = "yes"; then AC_DEFINE_UNQUOTED(HAVE_OPENSSL, 1, [Defined if OpenSSL is available]) fi AM_CONDITIONAL(IF_HAVE_OPENSSL, [test "$ssl_available" = "yes"]) AC_SUBST(ssl_available) ###------------------------------------------------------------------------- # check for Distribution AQ_DISTRIBUTION ###------------------------------------------------------------------------- # # check for I18N # # check whether i18n files are to be created AC_CHECK_PROG(XGETTEXT,xgettext,xgettext, missing) MAKE_I18N_FILES="yes" if test "$XGETTEXT" = "missing"; then MAKE_I18N_FILES="no" AC_MSG_WARN([xgettext is missing. Locale suport is disabled.]) fi AC_PATH_PROG([MSGFMT], [msgfmt], [missing]) if test "$MSGFMT" = "missing"; then MAKE_I18N_FILES="no" AC_MSG_WARN([msgfmt is missing. Locale suport is disabled.]) fi AC_SUBST(MAKE_I18N_FILES) AM_CONDITIONAL(IF_MAKE_I18N_FILES, [test "$MAKE_I18N_FILES" = "yes"]) ## then check whether i18n support is to be compiled in #i18n_libs="" #HAVE_I18N="yes" #AC_CHECK_HEADERS([locale.h libintl.h], [], [HAVE_I18N="no"]) #if test "$OS_TYPE" != "windows"; then # oldlibs="$LIBS" # LIBS="" # AC_SEARCH_LIBS(libintl_bindtextdomain, intl, [], [HAVE_I18N="no"]) # i18n_libs="$LIBS" # LIBS="$oldlibs" #else # if test "$HAVE_I18N" != "no"; then # i18n_libs="-lintl" # all_libraries="${all_libraries} -lintl" # fi #fi # #if test "$HAVE_I18N" != "no"; then # AC_DEFINE_UNQUOTED(HAVE_I18N, 1, [whether I18N is available]) #fi # #AC_SUBST(HAVE_I18N) #AC_SUBST(i18n_libs) AM_GNU_GETTEXT([external]) i18n_libs="$LTLIBINTL" all_libraries="${all_libraries} $LTLIBINTL" HAVE_I18N="$USE_NLS" if test "$HAVE_I18N" != "no"; then AC_DEFINE_UNQUOTED(HAVE_I18N, 1, [whether I18N is available]) fi AC_SUBST(i18n_libs) AC_SUBST(HAVE_I18N) ###------------------------------------------------------------------------- # # check for iconv # AC_ARG_WITH(iconv, [ --with-iconv=PATH take iconv from PATH], [ICONV_DIR="$withval"], [ICONV_DIR="/usr"]) if test "$ICONV_DIR" = "no" ; then echo Disabling ICONV support else if test "$with_iconv" != "yes" -a "$with_iconv" != "" ; then CPPFLAGS="${CPPFLAGS} -I$with_iconv/include" # Export this since our headers include iconv.h ICONV_INCLUDES="-I$ICONV_DIR/include" ICONV_LIBS="-L$ICONV_DIR/lib" fi AC_CHECK_HEADER(iconv.h, AC_MSG_CHECKING(for iconv) AC_TRY_LINK([#include #include ],[ iconv_t cd = iconv_open ("",""); iconv (cd, NULL, NULL, NULL, NULL);],[ AC_MSG_RESULT(yes) WITH_ICONV=1],[ AC_MSG_RESULT(no) AC_MSG_CHECKING(for iconv in -liconv) _ldflags="${LDFLAGS}" _libs="${LIBS}" LDFLAGS="${LDFLAGS} ${ICONV_LIBS}" LIBS="${LIBS} -liconv" AC_TRY_LINK([#include #include ],[ iconv_t cd = iconv_open ("",""); iconv (cd, NULL, NULL, NULL, NULL);],[ AC_MSG_RESULT(yes) WITH_ICONV=1 ICONV_LIBS="${ICONV_LIBS} -liconv" LIBS="${_libs}" LDFLAGS="${_ldflags}"],[ AC_MSG_RESULT(no) LIBS="${_libs}" LDFLAGS="${_ldflags}"])])) fi AC_DEFINE_UNQUOTED(HAVE_ICONV, $WITH_ICONV, [Defined if libiconv is available]) AC_SUBST(WITH_ICONV) AC_SUBST(ICONV_LIBS) ###------------------------------------------------------------------------- # # guis # AC_ARG_WITH(guis, [ --with-guis=list space separated list of GUI implementations (default:all)], [gwenhywfar_guis="$withval"], [gwenhywfar_guis="qt5 gtk3"] ) if test "$gwenhywfar_guis" = "none"; then gwenhywfar_guis="" fi if test "$gwenhywfar_guis" = "yes"; then gwenhywfar_guis="" fi AC_SUBST(gwenhywfar_guis) ###------------------------------------------------------------------------- # Check for fox toolkit # case "$gwenhywfar_guis" in *fox16*) AQ_CHECK_FOX if test "$have_fox" != "yes"; then AC_MSG_ERROR([ **** FOX Toolkit missing. **** If you want to use the FOX-GUI you will have to install the package **** libfox-1.6 and libfox-1.6-devel on Debian-like systems. **** On RPM systems like SuSE those packages might have different names. **** If you don't need the FOX-GUI you might want to use the option **** --with-guis]) fi AC_DEFINE(BUILD_GUI_FOX16, 1, [if gwen gui for fox16 is built]) with_gui_fox16="yes" ;; esac AC_SUBST(with_gui_fox16) AM_CONDITIONAL(WITH_GUI_FOX16, [test "$with_gui_fox16" = "yes"]) ###------------------------------------------------------------------------- # Check for GTK+ # case "$gwenhywfar_guis" in *gtk2*) # We need at least GTK 2.17.5 because we use functions like # gtk_widget_get_sensitive() and gtk_widget_has_focus() pkg_modules="gtk+-2.0 >= 2.17.5" dnl $4=true => don't die in case of failure. PKG_CHECK_MODULES(GTK2, [$pkg_modules], [], true) AC_DEFINE(BUILD_GUI_GTK2, 1, [if gwen gui for gtk2 is built]) with_gui_gtk2="yes" ;; esac AC_SUBST(with_gui_gtk2) AM_CONDITIONAL(WITH_GUI_GTK2, [test "$with_gui_gtk2" = "yes"]) ###------------------------------------------------------------------------- # Check for GTK+ # case "$gwenhywfar_guis" in *gtk3*) # Minimum required gtk3 version pkg_modules="gtk+-3.0 >= 3.10.8" PKG_CHECK_MODULES(GTK3, [$pkg_modules]) AC_DEFINE(BUILD_GUI_GTK3, 1, [if gwen gui for gtk3 is built]) with_gui_gtk3="yes" ;; esac AC_SUBST(with_gui_gtk3) AM_CONDITIONAL(WITH_GUI_GTK3, [test "$with_gui_gtk3" = "yes"]) ###------------------------------------------------------------------------- # # check whether libXML2 code is to be compiled # AC_MSG_CHECKING(libXML2-depending code) AC_ARG_WITH(libxml2-code, [ --with-libxml2-code=yes compile libXML2-depending code], [gwen_with_libxml2_code="$withval"], [gwen_with_libxml2_code="no"]) AC_MSG_RESULT($gwen_with_libxml2_code) AM_CONDITIONAL(WITH_LIBXML2_CODE, [test "$gwen_with_libxml2_code" = "yes"]) ###------------------------------------------------------------------------- # # Check for libxml # if test "$gwen_with_libxml2_code" = "yes"; then AC_DEFINE(GWEN_COMPILE_LIBXML2_CODE, 1, [if libxml2-code is wanted]) PKG_CHECK_MODULES(LIBXML, [libxml-2.0]) fi ###------------------------------------------------------------------------- # # QT4 # UIC4="NO" QT4_BINDIR="" case "$gwenhywfar_guis" in *qt4*) AQ_CHECK_QT4 if test "$have_qt4" = "yes"; then # Define this macro to disable the cast from QString to const char # which implicitly uses latin1()! AC_DEFINE(QT_NO_ASCII_CAST,[1],[Disable the cast from QString to const char.]) fi dnl windows/mingw doesnt have the yes program, so add this emulation AC_CHECK_PROG(YES, yes, yes, [[echo -e 'y\ny\ny\ny\n']]) dnl Store the bin dir for the windows dlls QT4_BINDIR="` echo ${qt4_moc} | ${SED} 's-/moc--' | ${SED} 's-/c/-c:\\\\-' | ${SED} 's-/-\\\\-g' `" UIC4="${qt4_uic}" AC_DEFINE(BUILD_GUI_QT4, 1, [if gwen gui for qt4 is built]) with_gui_qt4="yes" ;; *) ;; esac dnl Store the bin dir for the windows dlls AC_SUBST(QT4_BINDIR) AC_SUBST(with_gui_qt4) AM_CONDITIONAL(WITH_GUI_QT4, [test "$with_gui_qt4" = "yes"]) ###------------------------------------------------------------------------- # # QT5 # case "$gwenhywfar_guis" in *qt5*) AX_HAVE_QT esac ###------------------------------------------------------------------------- # # check docpath # AC_MSG_CHECKING(docpath) AC_ARG_WITH(docpath, [ --with-docpath=DIR where to store the apidoc], [docpath="$withval"], [docpath="${HOME}/apidoc"]) AC_SUBST(docpath) AC_MSG_RESULT($docpath) ###------------------------------------------------------------------------- # # search for tag files # AC_MSG_CHECKING(doxygen tag files) DOXYGEN_TAGFILES="" DOXYGEN_TAGFILEPATHS="" if test -d "${docpath}"; then tagfiles="`cd ${docpath} && ls *.tag`" if test -n "${tagfiles}"; then # remove own package from list tagfiles="`echo ${tagfiles} | ${SED} -e s/${PACKAGE}.tag//`" # add every remaining tag file for ff in ${tagfiles}; do DOXYGEN_TAGFILES="${DOXYGEN_TAGFILES} ${docpath}/${ff}=${docpath}/`basename -s .tag ${ff}`" done fi fi if test -z "${DOXYGEN_TAGFILES}"; then AC_MSG_RESULT(none) else AC_MSG_RESULT(found) fi AC_SUBST(DOXYGEN_TAGFILES) ###------------------------------------------------------------------------- # # Search for dlopen # LIBS="" AC_SEARCH_LIBS(dlopen, c dl) if test "$LIBS" = "-lc"; then LIBS="" fi ld_library="$LIBS" LIBS="" all_libraries="$all_libraries $ld_library" ###------------------------------------------------------------------------- # # check for release # AC_MSG_CHECKING(whether this is an official release) AC_ARG_ENABLE(release, [ --enable-release make this an official release (default=no)], [ case "${enableval}" in yes) enable_release="yes";; no) enable_release="no";; *) AC_MSG_ERROR(bad value ${enableval} for --enable-release);; esac ], enable_release="no") if test "$enable_release" = "yes"; then STRIPALL="-s" else STRIPALL="" fi AC_SUBST(STRIPALL) AC_MSG_RESULT($enable_release) ###------------------------------------------------------------------------- # # Compiler check for symbol visibility # AC_CACHE_CHECK([whether compiler supports symbol visibility], ac_cv_hidden_visibility_attribute, [ echo 'int __attribute__ ((visibility ("hidden"))) foo (void) { return 1; }' > conftest.c ac_cv_hidden_visibility_attribute=no if AC_TRY_COMMAND(${CC-cc} -Werror -S conftest.c -o conftest.s 1>&AS_MESSAGE_LOG_FD); then if grep '\.hidden.*foo' conftest.s >/dev/null; then ac_cv_hidden_visibility_attribute=yes fi fi rm -f conftest.* ]) if test $ac_cv_hidden_visibility_attribute = yes; then AC_DEFINE(GCC_WITH_VISIBILITY_ATTRIBUTE, 1, [visibility]) visibility_cflags="-fvisibility=hidden" visibility_supported="yes" fi AC_SUBST(visibility_cflags) ###------------------------------------------------------------------------- # # check for werror # AC_MSG_CHECKING(if CFLAG -Werror is to be used) AC_ARG_ENABLE(error-on-warning, [ --enable-error-on-warning treat compiler warnings as errors (default=no)], enable_werror="$enableval", enable_werror="no") AC_MSG_RESULT($enable_werror) WERROR="" if test "$enable_werror" != "no"; then WERROR="-Werror" fi AC_SUBST(WERROR) # Debug arguments for compilation ACX_COMPILE_WARN() ###------------------------------------------------------------------------- # # check for MEMTRACE # AC_MSG_CHECKING(if MEMTRACE is wanted) AC_ARG_ENABLE(memtrace, [ --enable-memtrace enable memory trace (default=no)], enable_memtrace="$enableval", enable_memtrace="no") AC_MSG_RESULT($enable_memtrace) if test "$enable_memtrace" != "no"; then #AC_DEFINE(GWEN_MEMTRACE, 1, [if memory trace is wanted]) AC_DEFINE(GWEN_MEMORY_DEBUG, 1, [if memory debugging is wanted]) fi # Debug arguments for compilation ACX_COMPILE_WARN() ###------------------------------------------------------------------------- # # check buffer hard limit # AC_MSG_CHECKING(default buffer hard limit) AC_ARG_WITH(buffer-hardlimit, [ --with-buffer-hardlimit=VALUE new default buffer hard limit], [gwenhywfar_buffer_hardlimit="$withval"], [gwenhywfar_buffer_hardlimit=""]) if test -z "${gwenhywfar_buffer_hardlimit}"; then gwenhywfar_buffer_hardlimit="(16*1024*1024)" fi AC_SUBST(gwenhywfar_buffer_hardlimit) AC_MSG_RESULT($gwenhywfar_buffer_hardlimit) ###------------------------------------------------------------------------- # # compile program flags # PROG_LIBRARIES="${PROG_LIBRARIES} ${ncurses_libs}" # Clean up include variables AS_SCRUB_INCLUDE(gwenhywfar_includes) AS_SCRUB_INCLUDE(all_includes) ###------------------------------------------------------------------------- # # check for doc type # AC_MSG_CHECKING(if full docu should be created) AC_ARG_ENABLE(full-doc, [ --enable-full-doc enable creating full apidoc (default=no)], [ case "${enableval}" in yes) enable_fulldoc="yes";; no) enable_fulldoc="no";; *) AC_MSG_ERROR(bad value ${enableval} for --enable-full-doc);; esac ], enable_fulldoc="no") if test "$enable_fulldoc" = "yes"; then DOXYGEN_INPUT="listdoc.h src gui plugins tools" DOXYGEN_DEFINE="" DOXYGEN_GENERATE_QHP="NO" DOXYGEN_QHG_LOCATION="" DOXYGEN_QHP_NAMESPACE=de.aquamaniac.gwenhywfar-$GWENHYWFAR_VERSION_STRING if which qhelpgenerator >/dev/null ; then DOXYGEN_QHG_LOCATION=$(which qhelpgenerator) DOXYGEN_GENERATE_QHP="YES" USE_DOT=NO elif which qhelpgenerator-qt5 >/dev/null ; then DOXYGEN_QHG_LOCATION=$(which qhelpgenerator-qt5) DOXYGEN_GENERATE_QHP="YES" USE_DOT=NO fi else DOXYGEN_DEFINE="DOXYGEN_HIDE" DOXYGEN_INPUT="listdoc.h gwenhywfar5" fi AC_SUBST(DOXYGEN_GENERATE_QHP) AC_SUBST(DOXYGEN_QHG_LOCATION) AC_SUBST(DOXYGEN_QHP_NAMESPACE) AC_SUBST(DOXYGEN_INPUT) AC_SUBST(DOXYGEN_DEFINE) AC_SUBST(USE_DOT) AC_MSG_RESULT($enable_fulldoc) # Debug arguments for compilation ACX_COMPILE_WARN() ###------------------------------------------------------------------------- # # substitute vars # AC_SUBST(GWEN_OS) AC_SUBST(PROG_LIBRARIES) AC_SUBST(all_includes) AC_SUBST(all_libraries) AC_SUBST(gwenhywfar_crypt_lib) AC_SUBST(gwenhywfar_ldflags) AC_SUBST(gwenhywfar_bindir) AC_SUBST(gwenhywfar_libs) AC_SUBST(gwenhywfar_internal_libname) AC_SUBST(gwenhywfar_libspp) AC_SUBST(gwenhywfar_libsui) AC_SUBST(gwenhywfar_os_lib) AC_SUBST(gwenhywfar_pkgincludedir) AC_SUBST(gwenhywfar_plugindir) AC_SUBST(gwenhywfar_headerdir_am) AC_SUBST(gwenhywfar_headerdir) AC_SUBST(gwenhywfar_symlinkdir) AC_SUBST(gwenhywfar_datadir) ###------------------------------------------------------------------------- # AC_MSG_CHECKING(crypt token plugins) AC_ARG_WITH(plugins-ct, [ --with-plugins-ct=LIST list of CT plugins to build], [plugins="$withval"], [plugins="all"]) if test "$plugins" = "all"; then plugins="ohbci"; fi gwenhywfar_plugins_ct_dirs="" gwenhywfar_plugins_ct_libs="" for plugin in $plugins; do case "$plugin" in ohbci) gwenhywfar_plugins_ct_dirs="$gwenhywfar_plugins_ct_dirs ohbci" gwenhywfar_plugins_ct_libs="$gwenhywfar_plugins_ct_libs ohbci/libct_ohbci.la" AC_DEFINE(GWENHYWFAR_WITH_PLUGIN_CT_OHBCI, 1, [plugin availability]) ;; *) AC_MSG_ERROR("ERROR: Unknown plugin \"$plugin\"") ;; esac done AC_SUBST(gwenhywfar_plugins_ct_dirs) AC_SUBST(gwenhywfar_plugins_ct_libs) AC_MSG_RESULT($plugins) ###------------------------------------------------------------------------- # AC_MSG_CHECKING(DBIO plugins) AC_ARG_WITH(plugins-dbio, [ --with-plugins-dbio=LIST list of DBIO plugins to build], [plugins="$withval"], [plugins="all"]) if test "$plugins" = "all"; then plugins="csv olddb xmldb"; fi gwenhywfar_plugins_dbio_dirs="" gwenhywfar_plugins_dbio_libs="" for plugin in $plugins; do case "$plugin" in csv) gwenhywfar_plugins_dbio_dirs="$gwenhywfar_plugins_dbio_dirs csv" gwenhywfar_plugins_dbio_libs="$gwenhywfar_plugins_dbio_libs csv/libdbio_csv.la" AC_DEFINE(GWENHYWFAR_WITH_PLUGIN_DBIO_CSV, 1, [plugin availability]) ;; olddb) gwenhywfar_plugins_dbio_dirs="$gwenhywfar_plugins_dbio_dirs olddb" gwenhywfar_plugins_dbio_libs="$gwenhywfar_plugins_dbio_libs olddb/libdbio_olddb.la" AC_DEFINE(GWENHYWFAR_WITH_PLUGIN_DBIO_OLDDB, 1, [plugin availability]) ;; xmldb) gwenhywfar_plugins_dbio_dirs="$gwenhywfar_plugins_dbio_dirs xmldb" gwenhywfar_plugins_dbio_libs="$gwenhywfar_plugins_dbio_libs xmldb/libdbio_xmldb.la" AC_DEFINE(GWENHYWFAR_WITH_PLUGIN_DBIO_XMLDB, 1, [plugin availability]) ;; *) AC_MSG_ERROR("ERROR: Unknown plugin \"$plugin\"") ;; esac done AC_SUBST(gwenhywfar_plugins_dbio_dirs) AC_SUBST(gwenhywfar_plugins_dbio_libs) AC_MSG_RESULT($plugins) ###------------------------------------------------------------------------- # AC_MSG_CHECKING(ConfigManager plugins) AC_ARG_WITH(plugins-cfgmgr, [ --with-plugins-cfgmgr=LIST list of ConfigManager plugins to build], [plugins="$withval"], [plugins="all"]) if test "$plugins" = "all"; then plugins="dir"; fi gwenhywfar_plugins_cfgmgr_dirs="" gwenhywfar_plugins_cfgmgr_libs="" for plugin in $plugins; do case "$plugin" in dir) gwenhywfar_plugins_cfgmgr_dirs="$gwenhywfar_plugins_cfgmgr_dirs dir" gwenhywfar_plugins_cfgmgr_libs="$gwenhywfar_plugins_cfgmgr_libs dir/libcfgmgr_dir.la" AC_DEFINE(GWENHYWFAR_WITH_PLUGIN_CFGMGR_DIR, 1, [plugin availability]) ;; *) AC_MSG_ERROR("ERROR: Unknown plugin \"$plugin\"") ;; esac done AC_SUBST(gwenhywfar_plugins_cfgmgr_dirs) AC_SUBST(gwenhywfar_plugins_cfgmgr_libs) AC_MSG_RESULT($plugins) ###------------------------------------------------------------------------- # # list of files to create # AC_CONFIG_FILES([Doxyfile Makefile admin/Makefile m4/Makefile po/Makefile gwenhywfar-config.in gwenhywfar.pc gwenhywfar-config.cmake gwenhywfar-config-version.cmake gwenhywfar.spec gwenhywfar.iss checks/Makefile data/Makefile doc/Makefile doc/dialog/Makefile doc/dialog/images/Makefile doc/inherit/Makefile doc/plugindescr.xsd src/Makefile src/types.h src/ressource.rc src/version.h src/base/Makefile src/crypt3/Makefile src/cryptmsg/Makefile src/crypttoken/Makefile src/gui/Makefile src/sio/Makefile src/html/Makefile src/os/Makefile src/os/posix/Makefile src/os/posix/system.h src/os/windows/Makefile src/os/windows/system.h src/parser/Makefile src/sar/Makefile src/test_framework/Makefile src/xmlcmd/Makefile src/msgio/Makefile plugins/Makefile plugins/dbio/Makefile plugins/dbio/csv/Makefile plugins/dbio/csv/csv.xml plugins/dbio/csv/ressource.rc plugins/dbio/olddb/Makefile plugins/dbio/olddb/olddb.xml plugins/dbio/olddb/ressource.rc plugins/dbio/xmldb/Makefile plugins/dbio/xmldb/xmldb.xml plugins/dbio/xmldb/ressource.rc plugins/ct/Makefile plugins/ct/ohbci/Makefile plugins/ct/ohbci/ohbci.xml plugins/ct/ohbci/ressource.rc plugins/configmgr/Makefile plugins/configmgr/dir/Makefile plugins/configmgr/dir/dir.xml tools/Makefile tools/xmlmerge/Makefile tools/typemaker/Makefile tools/typemaker2/Makefile tools/typemaker2/c/Makefile tools/typemaker2/types/Makefile tools/typemaker2/types/c/Makefile tools/gcttool/Makefile tools/gsa/Makefile tools/gwenbuild/Makefile tools/gwenbuild/parser/Makefile tools/gwenbuild/tools/Makefile tools/gwenbuild/buildctx/Makefile tools/gwenbuild/builders/Makefile tools/gwenbuild/builders/posix/Makefile tools/gwenbuild/builders/windows/Makefile tools/gwenbuild/types/Makefile tools/gwenbuild/templates/Makefile test/Makefile gui/Makefile gui/cpp/Makefile gui/cpp/gwengui-cpp-config.cmake gui/cpp/gwengui-cpp-config-version.cmake gui/qt4/Makefile gui/qt4/gwengui-qt4.pc gui/qt4/gwengui-qt4-config.cmake gui/qt4/gwengui-qt4-config-version.cmake gui/qt5/Makefile gui/qt5/gwengui-qt5.pc gui/qt5/gwengui-qt5-config.cmake gui/qt5/gwengui-qt5-config-version.cmake gui/fox16/Makefile gui/fox16/gwengui-fox16.pc gui/gtk2/Makefile gui/gtk2/gwengui-gtk2.pc gui/gtk3/Makefile gui/gtk3/gwengui-gtk3.pc gui/cocoa/Makefile gui/testdialogs/Makefile ]) AC_OUTPUT ###------------------------------------------------------------------------- # # create header directory, make symlinks # HEADER_DIRS="src src/base src/crypt3 src/cryptmsg src/crypttoken src/sio src/os src/os/${GWEN_OS} src/gui src/html" HEADER_DIRS="${HEADER_DIRS} src/parser src/sar src/xmlcmd src/msgio src/test_framework" lprefix="${srcdir}" lprefix=`( cd ${lprefix} ; pwd )` rm -Rf gwenhywfar5 2>/dev/null mkdir -p gwenhywfar5/gwenhywfar for d in ${HEADER_DIRS}; do hfiles=`( cd "${srcdir}/${d}" && ls *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.h | *_p.h) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar5/gwenhywfar/${f}" ;; esac done done #ln -s "${lprefix}/src/os/$OS_TYPE/system.h" "gwenhywfar5/gwenhywfar/system.h" 2>/dev/null # cpp # rm -Rf gwenhywfar5/gwen-gui-cpp 2>/dev/null mkdir -p gwenhywfar5/gwen-gui-cpp for d in gui/cpp; do hfiles=`( cd "${srcdir}/${d}" && ls *.hpp *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.hpp | *_p.hpp) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar5/gwen-gui-cpp/${f}" ;; esac done done # qt4 # rm -Rf gwenhywfar5/gwen-gui-qt4 2>/dev/null mkdir -p gwenhywfar5/gwen-gui-qt4 for d in gui/qt4; do hfiles=`( cd "${srcdir}/${d}" && ls *.hpp *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.hpp | *_p.hpp | qt4_gui_*.hpp) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar5/gwen-gui-qt4/${f}" ;; esac done done # qt5 # rm -Rf gwenhywfar5/gwen-gui-qt5 2>/dev/null mkdir -p gwenhywfar5/gwen-gui-qt5 for d in gui/qt5; do hfiles=`( cd "${srcdir}/${d}" && ls *.hpp *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.hpp | *_p.hpp | qt5_gui_*.hpp) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar5/gwen-gui-qt5/${f}" ;; esac done done # fox16 # rm -Rf gwenhywfar5/gwen-gui-fox16 2>/dev/null mkdir -p gwenhywfar5/gwen-gui-fox16 for d in gui/fox16; do hfiles=`( cd "${srcdir}/${d}" && ls *.hpp *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.hpp | *_p.hpp | fox16_gui_*.hpp) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar5/gwen-gui-fox16/${f}" ;; esac done done # gtk2 # rm -Rf gwenhywfar5/gwen-gui-gtk2 2>/dev/null mkdir -p gwenhywfar5/gwen-gui-gtk2 for d in gui/gtk2; do hfiles=`( cd "${srcdir}/${d}" && ls *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.h | *_p.h | gtk2_gui_*.h) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar5/gwen-gui-gtk2/${f}" ;; esac done done # gtk3 # rm -Rf gwenhywfar5/gwen-gui-gtk3 2>/dev/null mkdir -p gwenhywfar5/gwen-gui-gtk3 for d in gui/gtk3; do hfiles=`( cd "${srcdir}/${d}" && ls *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.h | *_p.h | gtk3_gui_*.h) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar5/gwen-gui-gtk3/${f}" ;; esac done done # cocoa # rm -Rf gwenhywfar5/gwen-gui-cocoa 2>/dev/null mkdir -p gwenhywfar5/gwen-gui-cocoa for d in gui/cocoa; do hfiles=`( cd "${srcdir}/${d}" && ls *.h 2>/dev/null )` for f in ${hfiles}; do case ${f} in *_l.h | *_p.h | gtk2_gui_*.h) ;; *) ln -s "${lprefix}/${d}/${f}" "gwenhywfar5/gwen-gui-cocoa/${f}" ;; esac done done ###------------------------------------------------------------------------- # # summary # echo echo "Summary" echo "=============================================" echo "Version : $GWENHYWFAR_VERSION_FULL_STRING" echo "System : $OSYSTEM" echo "Installation Folder : $prefix" echo "Local Installation Mode : $enable_local_install" echo "Plugin Installation Folder : $gwenhywfar_plugindir" echo "Plugin Search Folder : $gwenhywfar_plugin_searchdir" echo "Data Search Folder : $gwenhywfar_data_searchdir" echo "Locale Search Folder : $gwenhywfar_locale_searchdir" echo "Config Search Folder : $gwenhywfar_cfg_searchdir" echo "Buffer Default Hard Limit : $gwenhywfar_buffer_hardlimit" echo "Symbol Visibility : $visibility_supported" echo "OpenSSL Support for gct-tool : $ssl_available" echo "GUI Support : $gwenhywfar_guis" echo "Use system-wide certificates : $enable_system_certs" echo "Compiling test code enabled : $enable_testcode" echo "Compile LibXML2 code : $gwen_with_libxml2_code" echo echo "Plugins" echo "=============================================" echo " Crypt token plugins :$gwenhywfar_plugins_ct_dirs" echo " DBIO plugins :$gwenhywfar_plugins_dbio_dirs" echo " ConfigManager plugins :$gwenhywfar_plugins_cfgmgr_dirs" echo echo "You can now use the command 'make' (or on *BSD 'gmake') to " echo "build Gwenhywfar." echo gwenhywfar-5.12.0/TODO0000664000175000017500000000560614460564441011412 00000000000000 msgio: - EndpointIpcUnix - EndpointIpcTcp gwbuild: - new entry "prefix" (internally translate to option_prefix stuff like in AqFinance) GUI dialogs: - implement "keyPressed" and "keyReleased" events in GTK3 and QT5 frontends - implement "frame*" widget flags in GTK3 and QT5 frontends typemaker2: - add a field annotoations (e.g. "personal data") logger: - finer granularity for loglevels - introduce subdomains - gwenhywfar/syncio - gwenhywfar/http - gwenhywfar/gui - etc - GWEN_Logger_CreateSubDomains(maindomain, "syncio,http,gui,db,xml,crypt", logLevel) - GWEN_Logger_SetupSubDomains(maindomain, "syncio=notice,http=debug,gui=info", defaultLogLevel) - in source files, e.g. syncio_http: #ifdef GWEN_LOGDOMAIN # undef GWEN_LOGDOMAIN # define GWEN_LOGDOMAIN "gwenhywfar/http" #endif sio: - ssl_cert_descr -> typemaker2 tm2: - inline loc="struct" -> insert fields into the struct definition - inline loc="constructor": -> insert code into constructor - inline loc="destructor": -> insert code into constructor -> or maybe: make the field definition also a part of the tm2 mechanisms already in place (i.e. defined in tm2 files?) xml: - add argument to file reader/writer code which contains the target encoding Get root CA certs: http://curl.haxx.se/docs/caextract.html # get a list of exported functions: nm libgwenhywfar.so | grep ' T ' | awk '{ print $3 }' | less # or nm libgwenhywfar.so | grep ' T ' | cut -c20- | sort # get a list of functions imported from other libraries nm libgwenhywfar.so | grep ' U ' | awk '{ print $2 }' | less # or nm libgwenhywfar.so | grep ' U ' | cut -c20- | sort | uniq Callgraphs - Generate callgraphs: make CC=/usr/gccgraph/bin/gcc C : genfull C++: genfull -g cppdepn - Show callgraph for s specific function: gengraph -f FUNCTION_NAME -o OUTFILENAME --output-type=png # read openssl certs d = opendir("/etc/ssl/certs"); gnutls_certificate_allocate_credentials(&ca_list); while ((dent = readdir(d)) != NULL) { sprintf(ca_file, "/etc/ssl/certs/%s", dent->d_name); stat(ca_file, &s); if (!S_ISREG(s.st_mode)) continue; gnutls_certificate_set_x509_trust_file(ca_list, ca_file, GNUTLS_X509_FMT_PEM); } closedir(d); Ideas for threaded gui ====================== - server-gui: gui in main thread - client-gui: gui in other thread - use an event socket when transmitting commands from client-gui to server-gui - client-gui writes request into a queue - event socket alerts server-gui that there is a request in the queue - server-gui - takes request - handles it - puts response into queue of client-gui - notifies client-gui via another event socket? - only implement primary callbacks in this manner (input, msgbox, progress etc) - don't implement dialog callbacks in client-gui (code running in secondary thread should be simple without complex dialog handling) gwenhywfar-5.12.0/depcomp0000755000175000017500000005602013616550647012276 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: gwenhywfar-5.12.0/ChangeLog0000664000175000017500000004517114730345070012470 00000000000000------------------------------------------------------------------ 2024-12-17 19:57:07 +0100 Martin Preuss Prepared release 5.12.0 ------------------------------------------------------------------ 2024-12-17 19:51:11 +0100 Martin Preuss msgio: add argument REASON to GWEN_MsgRequest_Abort() ------------------------------------------------------------------ 2024-10-01 21:36:51 +0200 Martin Preuss msgio: add class GWEN_REQUEST. ------------------------------------------------------------------ 2024-10-01 21:36:05 +0200 Martin Preuss msgio/endpoint: added reference counter. ------------------------------------------------------------------ 2024-10-01 21:35:25 +0200 Martin Preuss timestamp: added GWEN_Timestamp_AddSeconds(). ------------------------------------------------------------------ 2024-09-24 16:41:33 +0200 Martin Preuss msgio: improved error handling. ------------------------------------------------------------------ 2024-09-24 16:41:07 +0200 Martin Preuss test: adjusted to latest changes. ------------------------------------------------------------------ 2024-09-24 16:40:28 +0200 Martin Preuss parser: fixed a typo. ------------------------------------------------------------------ 2024-09-24 16:40:11 +0200 Martin Preuss msgio: added fields ID and REFID to ipc messages. Use new convenience fns of GWEN_MSG. ------------------------------------------------------------------ 2024-09-24 16:38:52 +0200 Martin Preuss msgio: added missing change. ------------------------------------------------------------------ 2024-09-24 16:38:32 +0200 Martin Preuss msgio: improved GWEN_MSG, added convenience functions. ------------------------------------------------------------------ 2024-09-24 16:37:54 +0200 Martin Preuss msgio: introduce GWEN_MsgEndpoint_GetNextMessageId() ------------------------------------------------------------------ 2024-08-03 11:57:04 +0200 Micha Lenk Use pkgconf for gpg-error build flags On some build systems the old automake macro AM_PATH_GPG_ERROR doesn't work because the binary gpg-error-config no longer exists. As a gpg-error.pc file is available, let's switch to this more contemporary approach to determine the gpg-error build flags. ------------------------------------------------------------------ 2024-07-05 23:52:17 +0200 Martin Preuss Fixed call to readlink(). readlink() doesn't append a NULL!! ------------------------------------------------------------------ 2024-06-14 21:46:54 +0200 Martin Preuss gsa: fixed handling of symbolic links. ------------------------------------------------------------------ 2024-06-14 21:08:38 +0200 Martin Preuss incremented version. ------------------------------------------------------------------ 2024-06-14 21:08:27 +0200 Martin Preuss gwenbuild: use lstat if possible (otherwise symbolic links will be resolved). ------------------------------------------------------------------ 2024-06-14 21:07:44 +0200 Martin Preuss gwenbuild: also install symbolic links for libs. ------------------------------------------------------------------ 2024-04-21 18:18:46 +0200 Martin Preuss Incremented version. ------------------------------------------------------------------ 2024-04-21 18:18:34 +0200 Martin Preuss README: remove var from documentation (no longer used). ------------------------------------------------------------------ 2024-04-21 16:10:40 +0200 Martin Preuss Added GWENHYWFAR_CB to function implementations also (seems to be required from MinGW64, see #306) ------------------------------------------------------------------ 2024-04-21 16:06:29 +0200 Martin Preuss Use GWEN_Text_strndup() instead of strndup (the latter is not available with MinGW64). ------------------------------------------------------------------ 2024-04-21 16:02:18 +0200 Martin Preuss Added license info for portable_endian.h (public domain). ------------------------------------------------------------------ 2024-04-21 15:57:35 +0200 Martin Preuss Fixed a bug in GWEN_Date (day numbering starts at 1, not zero). ------------------------------------------------------------------ 2024-04-21 15:56:42 +0200 Martin Preuss Use new "portable_endian.h" instead of endian.h ------------------------------------------------------------------ 2024-04-21 15:56:16 +0200 Martin Preuss Added "portable_endian.h" from https://gist.github.com/panzi/6856583 ------------------------------------------------------------------ 2024-04-12 12:36:09 +0200 Martin Preuss gwenbuild: improved error message handling. Frame error messages from gcc or other called tools with "entering directory ..." and "leaving directory ..." to improve error handling when calling gwbuild from an IDE (or in my case FTE). Those lines help the IDE to locate files (e.g. when there are errors in included files). ------------------------------------------------------------------ 2024-03-19 22:47:52 +0100 Martin Preuss incremented version. ------------------------------------------------------------------ 2024-03-19 22:39:30 +0100 Martin Preuss make list types typesafe. "typedef GWEN_LIST1 t##_LIST" will not allow to detect when a wrong list type is used as long as any list type is used. That will most likely lead to undefined behaviour. Maybe we will need to increment the major build version because of this. ------------------------------------------------------------------ 2024-03-19 22:13:37 +0100 Martin Preuss gwen_buffer: corrected use of va_start and va_end. ------------------------------------------------------------------ 2024-03-19 00:03:17 +0100 Martin Preuss Released 5.11.0beta. ------------------------------------------------------------------ 2024-02-24 18:40:20 +0100 Martin Preuss Decreased verbosity. ------------------------------------------------------------------ 2024-02-24 18:39:43 +0100 Martin Preuss Fixed problem with arrays and objects when searching for keys. ------------------------------------------------------------------ 2024-02-23 21:00:51 +0100 Martin Preuss Fixed a memory leak. ------------------------------------------------------------------ 2023-11-08 23:28:46 +0100 Martin Preuss Cleanup GWEN_Gui_Internal_GetPassword() Make this function easier to understand. ------------------------------------------------------------------ 2023-11-08 22:29:19 +0100 Martin Preuss Fixed a memory leak. ------------------------------------------------------------------ 2023-10-07 17:16:49 +0200 Martin Preuss Hopefully fixed delay between two messages in the output queue. ------------------------------------------------------------------ 2023-10-06 14:47:17 +0200 Martin Preuss added missing files to Makefiles. ------------------------------------------------------------------ 2023-10-01 15:25:35 +0200 Martin Preuss msgio: add INHERIT functionality to GWEN_MSG. ------------------------------------------------------------------ 2023-10-01 14:08:06 +0200 Martin Preuss gwentest: added missing NEWLINE. ------------------------------------------------------------------ 2023-10-01 14:07:51 +0200 Martin Preuss tag16: added functions with test - GWEN_Tag16_StartTagInBuffer() - GWEN_Tag16_EndTagInBuffer() ------------------------------------------------------------------ 2023-09-20 17:23:21 +0200 Martin Preuss endpoint_multilayer: added "stage" field. this field can be used by complex derived classes to store the current stage. ------------------------------------------------------------------ 2023-09-17 19:13:47 +0200 Martin Preuss msgio: added multilayer endpoint Use this endpoint to allow for autoconnect while using a handshake protocol ------------------------------------------------------------------ 2023-09-17 19:11:20 +0200 Martin Preuss msg: allow for dynamic memory allocation. ------------------------------------------------------------------ 2023-09-17 19:10:50 +0200 Martin Preuss Fixed a bug. ------------------------------------------------------------------ 2023-09-13 10:31:12 +0200 Martin Preuss tag16: added function GWEN_Tag16_WriteTagToBuffer(). will replace GWEN_Tag16_DirectlyToBuffer(). ------------------------------------------------------------------ 2023-09-12 21:31:40 +0200 Martin Preuss Revert "Add INHERIT logic to GWEN_MSG." This reverts commit 240977be4e76ed784450eddad08aa0a1c6764e52. ------------------------------------------------------------------ 2023-09-12 21:31:26 +0200 Martin Preuss Add INHERIT logic to GWEN_MSG. ------------------------------------------------------------------ 2023-09-10 16:58:20 +0200 Martin Preuss Added apidoc, allow to use header from c++. ------------------------------------------------------------------ 2023-09-10 16:51:37 +0200 Martin Preuss tag16: code cleanup, added functions, added unit tests. ------------------------------------------------------------------ 2023-09-10 14:23:31 +0200 Martin Preuss Fixed function params, added GWEN_Msg_GetUint64At(). ------------------------------------------------------------------ 2023-09-09 10:28:15 +0200 Micha Lenk Fix cross compilation libgwenhywfar failed to cross build from source, because it fails running mklistdoc with an "Exec format error". This happens when attempting to run a tool that is built for the host architecture. mklistdoc really needs to be built for the host architecture, because it is installed into gwenhywfar-tools. On the flip side that means that we can just run the mklistdoc from a system gwenhywfar-tools. Note that this change only affects cross compilation. In native builds, the built mklistdoc will continue to be used. These changes were initially reported by Helmut Grohne via the Debian bug tracker (see https://bugs.debian.org/1051173). ------------------------------------------------------------------ 2023-08-11 17:30:49 +0200 Martin Preuss fixed a typo. ------------------------------------------------------------------ 2023-08-11 17:29:49 +0200 Martin Preuss Modified toObject/fromObject functions for "double" type. Those templates are only used in projects using AqDatabase. Those projects will need the latest git version of AqDatabase. ------------------------------------------------------------------ 2023-08-10 12:26:36 +0200 Martin Preuss gwbuild: added some "static"s. ------------------------------------------------------------------ 2023-08-10 12:26:18 +0200 Martin Preuss gwbuild: no longer try to install symlinks for sharedlibs. Those symlinks are needed when running freshly built binaries from within the build folder without installing them. But after installation the command "ldconfig" is responsible for creating appropriate symlinks. ------------------------------------------------------------------ 2023-08-10 12:05:44 +0200 Martin Preuss gwbuild: added comment for element inside